diff options
Diffstat (limited to 'core/glibc/locale-gen')
-rwxr-xr-x | core/glibc/locale-gen | 60 |
1 files changed, 37 insertions, 23 deletions
diff --git a/core/glibc/locale-gen b/core/glibc/locale-gen index 5aff344c4..51191f810 100755 --- a/core/glibc/locale-gen +++ b/core/glibc/locale-gen @@ -4,39 +4,53 @@ set -e LOCALEGEN=/etc/locale.gen LOCALES=/usr/share/i18n/locales -if [ -n "$POSIXLY_CORRECT" ]; then - unset POSIXLY_CORRECT -fi +unset POSIXLY_CORRECT - -[ -f $LOCALEGEN -a -s $LOCALEGEN ] || exit 0; +[ -s "$LOCALEGEN" ] || exit 0 # Remove all old locale dir and locale-archive before generating new # locale data. -rm -rf /usr/lib/locale/* || true +rm -rf /usr/lib/locale/* umask 022 -is_entry_ok() { - if [ -n "$locale" -a -n "$charset" ] ; then - true - else - echo "error: Bad entry '$locale $charset'" - false - fi +gen() { + local locale=$1 + local charset=$2 + local input= + + if [ -z "$locale" ] || [ -z "$charset" ]; then + echo "error: Bad entry '$locale $charset'" + return + fi + + printf ' %s.%s\n' "$(echo "$locale" | sed 's/\([^.\@]*\).*/\1/')" "$charset" + + if [ -f "$LOCALES/$locale" ]; then + input=$locale + else + input=$(echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/') + fi + + localedef -i "$input" -c -f "$charset" -A /usr/share/locale/locale.alias "$locale" } +maxjobs=$(grep -c processor /proc/cpuinfo 2>/dev/null || echo 1) echo "Generating locales..." while read locale charset; do \ - case $locale in \#*) continue;; "") continue;; esac; \ - is_entry_ok || continue - echo -n " `echo $locale | sed 's/\([^.\@]*\).*/\1/'`"; \ - echo -n ".$charset"; \ - echo -n `echo $locale | sed 's/\([^\@]*\)\(\@.*\)*/\2/'`; \ - echo -n '...'; \ - if [ -f $LOCALES/$locale ]; then input=$locale; else \ - input=`echo $locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; fi; \ - localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale; \ - echo ' done'; \ + case $locale in + \#*|'') + continue + ;; + esac + gen "$locale" "$charset" & + + # keep no more than $maxjobs jobs in flight + while [ $(jobs | wc -l) -ge $maxjobs ]; do + sleep 0.25 + jobs >/dev/null + done done < $LOCALEGEN +wait + echo "Generation complete." |