diff options
author | midipix <writeonce@midipix.org> | 2018-12-10 19:08:51 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2018-12-10 20:48:59 -0500 |
commit | 894d3439778fd674517ca7dee4ee804653e95151 (patch) | |
tree | 6a2f8cd2dba34160781a377dd2273ba47da86356 | |
parent | 3ab2c4a6e817c174710ed4f067d5d10bd9904df2 (diff) | |
download | dalist-894d3439778fd674517ca7dee4ee804653e95151.tar.bz2 dalist-894d3439778fd674517ca7dee4ee804653e95151.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 |