From 4cfaa391bbaa3ca9b4ed76f5bdb6a4c35b88e430 Mon Sep 17 00:00:00 2001 From: midipix Date: Dec 11 2018 01:48:39 +0000 Subject: 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. --- diff --git a/configure b/configure index 00f97fe..4b7fe01 100755 --- a/configure +++ b/configure @@ -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