MoonchildProductions#1251 - Part 2: Make the mozconfig loader POSIX-compliant.

https://bugzilla.mozilla.org/show_bug.cgi?id=1360571

Solaris uses ksh as the default shell, and furthermore bash doesn't seem to support the 'local' keyword feature when invoked as sh on OpenIndiana. We could just change the script to use bash (it is an option even on Solaris), but this fix is available and Mozilla has been using it since Firefox 55 with no issues on any other platforms. It was specfically done this way to avoid any need to change existing mozconfig files, so I feel confident saying the change is totally benign and if anything the way it is now is technically a POSIX compliance issue inherited from Mozilla that we'll hit if we ever try to compile this on any Unix platform where bash isn't sh.
This commit is contained in:
athenian200 2019-10-01 06:38:45 -05:00 • committed by Roy Tam
commit f7e2b86c94

View file

@ -10,49 +10,46 @@
set -e set -e
ac_add_options() { ac_add_options() {
local opt for _mozconfig_opt; do
for opt; do case "$_mozconfig_opt" in
case "$opt" in
--target=*) --target=*)
echo "------BEGIN_MK_OPTION" echo "------BEGIN_MK_OPTION"
echo $opt | sed s/--target/CONFIG_GUESS/ echo $_mozconfig_opt | sed s/--target/CONFIG_GUESS/
echo "------END_MK_OPTION" echo "------END_MK_OPTION"
;; ;;
esac esac
echo "------BEGIN_AC_OPTION" echo "------BEGIN_AC_OPTION"
echo $opt echo $_mozconfig_opt
echo "------END_AC_OPTION" echo "------END_AC_OPTION"
done done
} }
ac_add_app_options() { ac_add_app_options() {
local app _mozconfig_app=$1
app=$1
shift shift
echo "------BEGIN_AC_APP_OPTION" echo "------BEGIN_AC_APP_OPTION"
echo $app echo $_mozconfig_app
echo "$*" echo "$*"
echo "------END_AC_APP_OPTION" echo "------END_AC_APP_OPTION"
} }
mk_add_options() { mk_add_options() {
local opt name op value for _mozconfig_opt; do
for opt; do
echo "------BEGIN_MK_OPTION" echo "------BEGIN_MK_OPTION"
echo $opt echo $_mozconfig_opt
# Remove any leading "export" # Remove any leading "export"
opt=${opt#export} opt=${_mozconfig_opt#export}
case "$opt" in case "$_mozconfig_opt" in
*\?=*) op="?=" ;; *\?=*) _mozconfig_op="?=" ;;
*:=*) op=":=" ;; *:=*) _mozconfig_op=":=" ;;
*+=*) op="+=" ;; *+=*) _mozconfig_op="+=" ;;
*=*) op="=" ;; *=*) _mozconfig_op="=" ;;
esac esac
# Remove the operator and the value that follows # Remove the operator and the value that follows
name=${opt%%${op}*} _mozconfig_name=${_mozconfig_opt%%${_mozconfig_op}*}
# Note: $(echo ${name}) strips the variable from any leading and trailing # Note: $(echo ${_mozconfig_name}) strips the variable from any leading and trailing
# whitespaces. # whitespaces.
eval "$(echo ${name})_IS_SET=1" eval "$(echo ${_mozconfig_name})_IS_SET=1"
echo "------END_MK_OPTION" echo "------END_MK_OPTION"
done done
} }
@ -77,4 +74,5 @@ echo "------END_AFTER_SOURCE"
echo "------BEGIN_ENV_AFTER_SOURCE" echo "------BEGIN_ENV_AFTER_SOURCE"
$3 $4 $3 $4
echo "------END_ENV_AFTER_SOURCE" echo "------END_ENV_AFTER_SOURCE"