diff --git a/bin/run_xgettext.sh b/bin/run_xgettext.sh index 5392e0e153..427325e027 100755 --- a/bin/run_xgettext.sh +++ b/bin/run_xgettext.sh @@ -1,9 +1,20 @@ #!/bin/bash -FULLPATH=$(dirname $(readlink -f "$0")) +set -eo pipefail -if [ "$1" == "--help" -o "$1" == "-h" ] +function resolve { + if [ "$(uname)" == "Darwin" ] + then + realpath "$1" + else + readlink -f "$1" + fi +} + +FULLPATH=$(dirname "$(resolve "$0")") + +if [ "$1" == "--help" ] || [ "$1" == "-h" ] then - echo "$(basename $(readlink -f "$0")) [options]" + echo "$(basename "$(resolve "$0")") [options]" echo echo "-a | --addon extract strings from addon 'name'" echo "-s | --single single addon mode: extract string from current folder" @@ -12,20 +23,19 @@ fi MODE='default' ADDONNAME= -if [ "$1" == "--addon" -o "$1" == "-a" ] +if [ "$1" == "--addon" ] || [ "$1" == "-a" ] then MODE='addon' - if [ -z $2 ]; then echo -e "ERROR: missing addon name\n\nrun_xgettext.sh -a "; exit 1; fi + if [ -z "$2" ]; then echo -e "ERROR: missing addon name\n\nrun_xgettext.sh -a "; exit 1; fi ADDONNAME=$2 if [ ! -d "$FULLPATH/../addon/$ADDONNAME" ]; then echo "ERROR: addon '$ADDONNAME' not found"; exit 2; fi fi -if [ "$1" == "--single" -o "$1" == "-s" ] +if [ "$1" == "--single" ] || [ "$1" == "-s" ] then MODE='single' fi - case "$MODE" in 'addon') cd "$FULLPATH/../addon/$ADDONNAME" @@ -36,7 +46,7 @@ case "$MODE" in ;; 'single') FULLPATH=$PWD - ADDONNAME=$(basename $FULLPATH) + ADDONNAME=$(basename "$FULLPATH") mkdir -p "$FULLPATH/lang/C" OUTFILE="$FULLPATH/lang/C/messages.po" FINDSTARTDIR="." @@ -61,51 +71,56 @@ KEYWORDS="-k -kt -ktt:1,2" echo "Extract strings to $OUTFILE.." rm "$OUTFILE"; touch "$OUTFILE" +# shellcheck disable=SC2086 # $FINDOPTS is meant to be split find_result=$(find "$FINDSTARTDIR" $FINDOPTS -name "*.php" -type f | LC_ALL=C sort --stable) total_files=$(wc -l <<< "${find_result}") +count=1 for file in $find_result do - ((count++)) echo -ne " \r" echo -ne "Reading file $count/$total_files..." # On Windows, find still outputs the name of pruned folders if [ ! -d "$file" ] then + # shellcheck disable=SC2086 # $KEYWORDS is meant to be split xgettext $KEYWORDS -j -o "$OUTFILE" --from-code=UTF-8 "$file" || exit 1 - sed -i "s/CHARSET/UTF-8/g" "$OUTFILE" + sed -i.bkp "s/CHARSET/UTF-8/g" "$OUTFILE" fi + (( count++ )) done echo -ne "\n" echo "Interpolate metadata.." -sed -i "s/^\"Plural-Forms.*$//g" "$OUTFILE" +sed -i.bkp "s/^\"Plural-Forms.*$//g" "$OUTFILE" case "$MODE" in 'addon'|'single') - sed -i "s/SOME DESCRIPTIVE TITLE./ADDON $ADDONNAME/g" "$OUTFILE" - sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER//g" "$OUTFILE" - sed -i "s/FIRST AUTHOR , YEAR.//g" "$OUTFILE" - sed -i "s/PACKAGE VERSION//g" "$OUTFILE" - sed -i "s/PACKAGE/Friendica $ADDONNAME addon/g" "$OUTFILE" + sed -i.bkp "s/SOME DESCRIPTIVE TITLE./ADDON $ADDONNAME/g" "$OUTFILE" + sed -i.bkp "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER//g" "$OUTFILE" + sed -i.bkp "s/FIRST AUTHOR , YEAR.//g" "$OUTFILE" + sed -i.bkp "s/PACKAGE VERSION//g" "$OUTFILE" + sed -i.bkp "s/PACKAGE/Friendica $ADDONNAME addon/g" "$OUTFILE" ;; 'default') - sed -i "s/SOME DESCRIPTIVE TITLE./FRIENDICA Distributed Social Network/g" "$OUTFILE" - sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010-$(date +%Y), the Friendica project/g" "$OUTFILE" - sed -i "s/FIRST AUTHOR , YEAR./Mike Macgirvin, 2010/g" "$OUTFILE" - sed -i "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE" - sed -i "s/PACKAGE/Friendica/g" "$OUTFILE" + sed -i.bkp "s/SOME DESCRIPTIVE TITLE./FRIENDICA Distributed Social Network/g" "$OUTFILE" + sed -i.bkp "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010-$(date +%Y), the Friendica project/g" "$OUTFILE" + sed -i.bkp "s/FIRST AUTHOR , YEAR./Mike Macgirvin, 2010/g" "$OUTFILE" + sed -i.bkp "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE" + sed -i.bkp "s/PACKAGE/Friendica/g" "$OUTFILE" ;; esac -if [ "" != "$1" -a "$MODE" == "default" ] +if [ "" != "$1" ] && [ "$MODE" == "default" ] then - UPDATEFILE="$(readlink -f ${FULLPATH}/$1)" + UPDATEFILE="$(resolve "${FULLPATH}/$1")" echo "Merging new strings to $UPDATEFILE.." - msgmerge -U $OUTFILE $UPDATEFILE + msgmerge -U "$OUTFILE" "$UPDATEFILE" fi +[ -f "$OUTFILE.bkp" ] && rm "$OUTFILE.bkp" + echo "Done."