diff options
author | midipix <writeonce@midipix.org> | 2018-12-10 19:08:51 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2018-12-10 20:50:26 -0500 |
commit | ed3296d8597748a0ce0edb1cecd2c70b3c834b39 (patch) | |
tree | 3be260ed509476cbd813e8c698cd034de3948dcc | |
parent | 3ac8b2e9e923ce507cc623c359bd00e8e016d8b7 (diff) | |
download | w32lib-ed3296d8597748a0ce0edb1cecd2c70b3c834b39.tar.bz2 w32lib-ed3296d8597748a0ce0edb1cecd2c70b3c834b39.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.
-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 |