New build.sh script : detect languages with translation_*.json files (#400)

* [Build script] Detect languages with translation_*.json files

* [Build script] Swap model and language in the build loop to avoid full rebuild

* [Build script] Cleaning potential bugs according ShellCheck

* [Build script] Rewrite AVAILABLE_LANGUAGES calculation with @vomindoraan help
This commit is contained in:
Rockman18
2018-11-18 04:09:25 +01:00
committed by Ben V. Brown
parent d052edaf9a
commit 23b8353614

View File

@@ -1,103 +1,156 @@
python ../../Translation\ Editor/make_translation.py ../../Translation\ Editor #!/bin/bash
make clean TRANSLATION_DIR="../../Translation Editor"
TRANSLATION_SCRIPT="make_translation.py"
# TS100 # AVAILABLE_LANGUAGES will be calculating according to json files in $TRANSLATION_DIR
make -j16 lang=EN AVAILABLE_LANGUAGES=()
rm -rf Objects/src BUILD_LANGUAGES=()
make -j16 lang=BG AVAILABLE_MODELS=("TS100" "TS80")
rm -rf Objects/src BUILD_MODELS=()
make -j16 lang=CS
rm -rf Objects/src
make -j16 lang=DA
rm -rf Objects/src
make -j16 lang=DE
rm -rf Objects/src
make -j16 lang=ES
rm -rf Objects/src
make -j16 lang=FI
rm -rf Objects/src
make -j16 lang=FR
rm -rf Objects/src
make -j16 lang=HR
rm -rf Objects/src
make -j16 lang=HU
rm -rf Objects/src
make -j16 lang=IT
rm -rf Objects/src
make -j16 lang=LT
rm -rf Objects/src
make -j16 lang=NL
rm -rf Objects/src
make -j16 lang=NL_BE
rm -rf Objects/src
make -j16 lang=NO
rm -rf Objects/src
make -j16 lang=PL
rm -rf Objects/src
make -j16 lang=PT
rm -rf Objects/src
make -j16 lang=RU
rm -rf Objects/src
make -j16 lang=SK
rm -rf Objects/src
make -j16 lang=SR_CYRL
rm -rf Objects/src
make -j16 lang=SR_LATN
rm -rf Objects/src
make -j16 lang=SV
rm -rf Objects/src
make -j16 lang=TR
rm -rf Objects/src
make -j16 lang=UK
rm -rf Objects/src
# TS80 usage ()
make -j16 lang=EN model=TS80 {
rm -rf Objects/src echo "Usage : $(basename "$0") [-l <LANG_CODE>] [-m <TS100|TS80>] [-h]
make -j16 lang=BG model=TS80
rm -rf Objects/src Parameters :
make -j16 lang=CS model=TS80 -l LANG_CODE : Force a specific language (E.g. : EN, FR, NL_BE, ...)
rm -rf Objects/src -m MODEL : Force a specific model (E.g. : TS100 or TS80)
make -j16 lang=DA model=TS80 -h : Show this help message
rm -rf Objects/src
make -j16 lang=DE model=TS80 INFO : By default, without parameters, the build is for all platforms and all languages" 1>&2
rm -rf Objects/src exit 1
make -j16 lang=ES model=TS80 }
rm -rf Objects/src
make -j16 lang=FI model=TS80 checkLastCommand ()
rm -rf Objects/src {
make -j16 lang=FR model=TS80 if [ $? -eq 0 ]
rm -rf Objects/src then
make -j16 lang=HR model=TS80 echo " [Success]"
rm -rf Objects/src echo "*********************************************"
make -j16 lang=HU model=TS80 else
rm -rf Objects/src forceExit
make -j16 lang=IT model=TS80 fi
rm -rf Objects/src }
make -j16 lang=LT model=TS80
rm -rf Objects/src forceExit ()
make -j16 lang=NL model=TS80 {
rm -rf Objects/src echo " [Error]"
make -j16 lang=NL_BE model=TS80 echo "*********************************************"
rm -rf Objects/src echo " -- Stop on error --"
make -j16 lang=NO model=TS80 exit 1
rm -rf Objects/src }
make -j16 lang=PL model=TS80
rm -rf Objects/src isInArray ()
make -j16 lang=PT model=TS80 {
rm -rf Objects/src local value="$1" # Save first argument in a variable
make -j16 lang=RU model=TS80 shift # Shift all arguments to the left (original $1 gets lost)
rm -rf Objects/src local array=("$@") # Rebuild the array with rest of arguments
make -j16 lang=SK model=TS80
rm -rf Objects/src for item in "${array[@]}"
make -j16 lang=SR_CYRL model=TS80 do
rm -rf Objects/src [[ $value == "$item" ]] && return 0
make -j16 lang=SR_LATN model=TS80 done
rm -rf Objects/src return 1
make -j16 lang=SV model=TS80 }
rm -rf Objects/src
make -j16 lang=TR model=TS80 while getopts h:l:m: option
rm -rf Objects/src do
make -j16 lang=UK model=TS80 case "${option}" in
rm -rf Objects/src h)
usage
;;
l)
LANGUAGE=${OPTARG}
;;
m)
MODEL=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
echo "*********************************************"
echo " Builder for the"
echo " Alternate Open Source Firmware"
echo " for Miniware TS100 or TS80"
echo " by Ralim"
echo "*********************************************"
# Calculate available languages
for f in "$TRANSLATION_DIR"/translation_*.json
do
lang_json=${f#*/translation_} # Remove ".../translation_"
lang=${lang_json%.json} # Remove ".json"
AVAILABLE_LANGUAGES+=("${lang^^}") # Convert to uppercase
done
# Checking requested language
echo "Available languages :"
echo " ${AVAILABLE_LANGUAGES[*]}"
echo "Requested languages :"
if [ -n "$LANGUAGE" ]
then
if isInArray "$LANGUAGE" "${AVAILABLE_LANGUAGES[@]}"
then
echo " $LANGUAGE"
BUILD_LANGUAGES+=("$LANGUAGE")
else
echo " $LANGUAGE doesn't exist"
forceExit
fi
else
echo " [ALL LANGUAGES]"
BUILD_LANGUAGES+=("${AVAILABLE_LANGUAGES[@]}")
fi
echo "*********************************************"
# Checking requested model
echo "Available models :"
echo " ${AVAILABLE_MODELS[*]}"
echo "Requested models :"
if [ -n "$MODEL" ]
then
if isInArray "$MODEL" "${AVAILABLE_MODELS[@]}"
then
echo " $MODEL"
BUILD_MODELS+=("$MODEL")
else
echo " $MODEL doesn't exist"
forceExit
fi
else
echo " [ALL MODELS]"
BUILD_MODELS+=("${AVAILABLE_MODELS[@]}")
fi
echo "*********************************************"
if [ ${#BUILD_LANGUAGES[@]} -gt 0 ] && [ ${#BUILD_MODELS[@]} -gt 0 ]
then
echo "Generating Translation.cpp"
python "$TRANSLATION_DIR/$TRANSLATION_SCRIPT" "$TRANSLATION_DIR" 1>/dev/null
checkLastCommand
echo "Cleaning previous builds"
make clean 1>/dev/null
checkLastCommand
for model in "${BUILD_MODELS[@]}"
do
for lang in "${BUILD_LANGUAGES[@]}"
do
echo "Building firmware for $model in $lang"
make -j16 lang="$lang" model="$model" 1>/dev/null
checkLastCommand
rm -rf Objects/src 1>/dev/null
done
done
else
echo "Nothing to build. (no model or language specified)"
forceExit
fi
echo " -- Firmwares successfully generated --"
echo "End..."