#!/bin/sh

IFS=$'\n '

locales="en_US"
[ -e /etc/locale.gen ] && locales=$(grep ^[^#] /etc/locale.gen)

archive_path="/usr/lib/locale/locale-archive"
mkdir -p /tmp/locale.gen/$(dirname $archive_path)
tmpdir="/tmp/locale.gen"

for pair in $locales; do
    pair=(${pair/./ })

    locale="${pair[0]}"
    locale_paths="/usr/share/i18n/locales/$locale"
    [ -e $locale_paths ] || locale_paths=$(find /usr/share/i18n/locales -name $locale'_*')

    charmap=${pair[1]}
    [ "$charmap" ] || charmap="UTF-8"

    for path in $locale_paths; do
        locale=$(basename $path)
        if [ -e $path ]; then
            echo "Generate locale for $locale"
            localedef --alias-file /usr/share/locale/locale.alias --prefix $tmpdir -i $path -f $charmap -c "$@" $locale || (
                echo "Failed to generate $locale locale, abort"
                rm -rf $tmpdir
                exit 1
            )
        else
            echo "Skip unknown $locale locale"
        fi
    done
done

if [ -e $tmpdir/$archive_path ]; then
    mv $tmpdir/$archive_path $archive_path
else
    echo "Nothing was generated"
fi
rm -rf $tmpdir
