diff options
author | midipix <writeonce@midipix.org> | 2018-12-10 19:08:51 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2018-12-10 20:50:19 -0500 |
commit | 39fa71131a6d110dd3647de89a2e9f4fee04f13c (patch) | |
tree | 546fc504d291a89b194dd3f715aed81f6eeb46c6 /configure | |
parent | b066371d23d8d4b382c9277cf5cd7b86b8ddca36 (diff) | |
download | u16ports-39fa71131a6d110dd3647de89a2e9f4fee04f13c.tar.bz2 u16ports-39fa71131a6d110dd3647de89a2e9f4fee04f13c.tar.xz |
build system: configure: robustly support special characters in custom args.
Special thanks to Jonas 'Sortie' Termansen, author of the Sortix operating
sys (https://sortix.org), for brainstorming about the best way to forward
arguments containing special symbols or characters to a sourced (aka dot)
shell script, as well as sharing single-quote tips and tricks.
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 36 |
1 files changed, 9 insertions, 27 deletions
@@ -48,24 +48,15 @@ init_vars() mb_project_dir=$(cd "$(dirname $0)" ; pwd) mb_pwd=`pwd` + mb_custom_cfgdefs_args='' + mb_custom_cfgdefs_space='' + if [ -z "$mb_config" ]; then . $mb_project_dir/config.project || exit 2 else . "$mb_config" || exit 2 fi - if [ $mb_use_custom_cfgdefs = 'yes' ]; then - mb_custom_cfgdefs_wrapper=$(mktemp) - - if [ -z $mb_custom_cfgdefs_wrapper ]; then - error_msg "failed to create a temporary file." - exit 2 - fi - - printf '. $mb_project_dir/project/config/cfgdefs.sh \\\n' \ - > $mb_custom_cfgdefs_wrapper - fi - # project mb_nickname=$NICKNAME mb_source_dir=$SOURCE_DIR @@ -602,7 +593,8 @@ config_copy() config_custom() { if [ $mb_use_custom_cfgdefs = 'yes' ]; then - . $mb_custom_cfgdefs_wrapper + eval . $mb_project_dir/project/config/cfgdefs.sh \ + "$mb_custom_cfgdefs_args" config_copy fi @@ -885,20 +877,10 @@ for arg ; do *) if [ $mb_use_custom_cfgdefs = 'yes' ]; then - printf '\t' >> $mb_custom_cfgdefs_wrapper - - mb_first='yes' - - for mb_arg in $arg; do - if [ $mb_first = 'yes' ]; then - printf '%s' $mb_arg >> $mb_custom_cfgdefs_wrapper - mb_first='no' - else - printf '\\ %s' $mb_arg >> $mb_custom_cfgdefs_wrapper - fi - done - - printf ' \\\n' >> $mb_custom_cfgdefs_wrapper + mb_escaped_arg=\'$(printf '%s\n' "$arg" | sed -e "s/'/'\\\\''/g")\' + mb_escaped_arg="$mb_custom_cfgdefs_space$mb_escaped_arg" + mb_custom_cfgdefs_args="$mb_custom_cfgdefs_args$mb_escaped_arg" + mb_custom_cfgdefs_space=' ' else error_msg ${arg#}: "unsupported config argument." exit 2 |