diff options
author | Yang Tse <yangsita@gmail.com> | 2013-01-24 18:39:56 +0100 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2013-01-24 21:12:34 +0100 |
commit | b1826d81fb2d2203bed758c50391b30bfb67d368 (patch) | |
tree | 0b23e66f94b2cd700878045b3245c3ff7b1187a4 | |
parent | 6a55f25f67d7041a7eb9bb1c9bd4ec0da618df15 (diff) |
zz40-xc-ovr.m4: internals overhauling
- Update comments
- Execute commands in subshells
- Faster path separator check
- Fix missing 'test' command
- Rename private macros
- Minimize AC_REQUIRE usage
-rw-r--r-- | m4/zz40-xc-ovr.m4 | 210 |
1 files changed, 120 insertions, 90 deletions
diff --git a/m4/zz40-xc-ovr.m4 b/m4/zz40-xc-ovr.m4 index 6b4d4f004..a68278696 100644 --- a/m4/zz40-xc-ovr.m4 +++ b/m4/zz40-xc-ovr.m4 @@ -28,46 +28,66 @@ dnl subdirectory. This allows that macro (re)definitions from this dnl file may override those provided in other files. -dnl _XC_CONFIGURE_PREAMBLE_COMMENT +dnl _XC_CFG_PRE_PREAMBLE dnl ------------------------------------------------- dnl Private macro. -AC_DEFUN([_XC_CONFIGURE_PREAMBLE_COMMENT], +AC_DEFUN([_XC_CFG_PRE_PREAMBLE], [ ## ---------------------------- ## ## XC_CONFIGURE_PREAMBLE rev: 1 ## ## ---------------------------- ## -]) +xc_configure_preamble_prev_IFS=$IFS -dnl _XC_CONFIGURE_PREAMBLE_INIT +xc_msg_warn='configure: WARNING:' +xc_msg_abrt='Can not continue.' +xc_msg_err='configure: error:' +]) + +dnl _XC_CFG_PRE_BASIC_CHK_CMD_ECHO dnl ------------------------------------------------- dnl Private macro. +dnl +dnl Emits shell code that verifies that 'echo' command +dnl is available, otherwise aborts execution. -AC_DEFUN([_XC_CONFIGURE_PREAMBLE_INIT], +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_CMD_ECHO], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_COMMENT])dnl -xc_msg_warn='configure: WARNING:' -xc_msg_abrt='Can not continue.' -xc_msg_err='configure: error:' +# +# Verify that 'echo' command is available, otherwise abort. +# + +xc_tst_str='unknown' +(`echo "$xc_tst_str" >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in + xsuccess) + : + ;; + *) + # Try built-in echo, and fail. + echo "$xc_msg_err 'echo' command not found. $xc_msg_abrt" >&2 + exit 1 + ;; +esac ]) -dnl _XC_CHECK_COMMAND_TEST +dnl _XC_CFG_PRE_BASIC_CHK_CMD_TEST dnl ------------------------------------------------- dnl Private macro. dnl -dnl Check that 'test' command is available, else abort. +dnl Emits shell code that verifies that 'test' command +dnl is available, otherwise aborts execution. -AC_DEFUN([_XC_CHECK_COMMAND_TEST], +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_CMD_TEST], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_INIT])dnl # -# Require that 'test' command is available. +# Verify that 'test' command is available, otherwise abort. # xc_tst_str='unknown' -test -n "$xc_tst_str" && xc_tst_str='success' +(`test -n "$xc_tst_str" >/dev/null 2>&1`) && xc_tst_str='success' case "x$xc_tst_str" in xsuccess) : @@ -80,49 +100,48 @@ esac ]) -dnl _XC_CHECK_PATH +dnl _XC_CFG_PRE_BASIC_CHK_VAR_PATH dnl ------------------------------------------------- dnl Private macro. dnl -dnl Check that PATH is set, otherwise abort. +dnl Emits shell code that verifies that 'PATH' variable +dnl is set, otherwise aborts execution. -AC_DEFUN([_XC_CHECK_PATH], +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_VAR_PATH], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_INIT])dnl -AC_REQUIRE([_XC_CHECK_COMMAND_TEST])dnl # -# Require that PATH variable is set. +# Verify that 'PATH' variable is set, otherwise abort. # xc_tst_str='unknown' -test -n "$PATH" && xc_tst_str='success' +(`test -n "$PATH" >/dev/null 2>&1`) && xc_tst_str='success' case "x$xc_tst_str" in xsuccess) : ;; *) - echo "$xc_msg_err PATH variable not set. $xc_msg_abrt" >&2 + echo "$xc_msg_err 'PATH' variable not set. $xc_msg_abrt" >&2 exit 1 ;; esac ]) -dnl _XC_CHECK_COMMAND_EXPR +dnl _XC_CFG_PRE_BASIC_CHK_CMD_EXPR dnl ------------------------------------------------- dnl Private macro. dnl -dnl Check that 'expr' command is available, else abort. +dnl Emits shell code that verifies that 'expr' command +dnl is available, otherwise aborts execution. -AC_DEFUN([_XC_CHECK_COMMAND_EXPR], +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_CMD_EXPR], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_INIT])dnl # -# Require that 'expr' command is available. +# Verify that 'expr' command is available, otherwise abort. # xc_tst_str='unknown' -xc_tst_str=`expr "$xc_tst_str" : '.*'` +xc_tst_str=(`expr "$xc_tst_str" : '.*' 2>/dev/null`) case "x$xc_tst_str" in x7) : @@ -135,111 +154,117 @@ esac ]) -dnl _XC_CHECK_UTILITY_SED +dnl _XC_CFG_PRE_BASIC_CHK_UTIL_SED dnl ------------------------------------------------- dnl Private macro. dnl -dnl Check that 'sed' utility is found within PATH. This -dnl 'sed' is required in order to allow configure script -dnl bootstrapping itself. No fancy testing for a proper -dnl 'sed' this early please, that should be done later. +dnl Emits shell code that verifies that 'sed' utility +dnl is found within 'PATH', otherwise aborts execution. +dnl +dnl This 'sed' is required in order to allow configure +dnl script bootstrapping itself. No fancy testing for a +dnl proper 'sed' this early, that should be done later. -AC_DEFUN([_XC_CHECK_UTILITY_SED], +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_UTIL_SED], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_INIT])dnl # -# Require that 'sed' utility is found within PATH. +# Verify that 'sed' utility is found within 'PATH', otherwise abort. # xc_tst_str='unknown' -xc_tst_str=`echo "$xc_tst_str" | sed -e 's:unknown:success:'` +xc_tst_str=(`echo "$xc_tst_str" 2>/dev/null \ + | sed -e 's:unknown:success:' 2>/dev/null`) case "x$xc_tst_str" in xsuccess) : ;; *) - echo "$xc_msg_err 'sed' utility not in PATH. $xc_msg_abrt" >&2 + echo "$xc_msg_err 'sed' utility not found in 'PATH'. $xc_msg_abrt" >&2 exit 1 ;; esac ]) -dnl _XC_CHECK_UTILITY_GREP +dnl _XC_CFG_PRE_BASIC_CHK_UTIL_GREP dnl ------------------------------------------------- dnl Private macro. dnl -dnl Check that 'grep' utility is found within PATH. This -dnl 'grep' is required in order to allow configure script -dnl bootstrapping itself. No fancy testing for a proper -dnl 'grep' this early please, that should be done later. +dnl Emits shell code that verifies that 'grep' utility +dnl is found within 'PATH', otherwise aborts execution. +dnl +dnl This 'grep' is required in order to allow configure +dnl script bootstrapping itself. No fancy testing for a +dnl proper 'grep' this early, that should be done later. -AC_DEFUN([_XC_CHECK_UTILITY_GREP], +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_UTIL_GREP], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_INIT])dnl # -# Require that 'grep' utility is found within PATH. +# Verify that 'grep' utility is found within 'PATH', otherwise abort. # xc_tst_str='unknown' -echo "$xc_tst_str" | grep 'unknown' >/dev/null 2>&1 && xc_tst_str='success' +(`echo "$xc_tst_str" 2>/dev/null \ + | grep 'unknown' >/dev/null 2>&1`) && xc_tst_str='success' case "x$xc_tst_str" in xsuccess) : ;; *) - echo "$xc_msg_err 'grep' utility not in PATH. $xc_msg_abrt" >&2 + echo "$xc_msg_err 'grep' utility not found in 'PATH'. $xc_msg_abrt" >&2 exit 1 ;; esac ]) -dnl _XC_CHECK_PATH_SEPARATOR +dnl _XC_CFG_PRE_CHECK_PATH_SEPARATOR dnl ------------------------------------------------- dnl Private macro. dnl -dnl Check and compute the path separator for us. This -dnl path separator is the symbol used to diferentiate -dnl or separate paths inside the PATH environment var. +dnl Emits shell code that computes the path separator +dnl and stores the result in 'PATH_SEPARATOR', unless +dnl the user has already set it with a non-empty value. +dnl +dnl This path separator is the symbol used to separate +dnl or diferentiate paths inside the 'PATH' environment +dnl environment variable. dnl -dnl User provided PATH_SEPARATOR always overrides the -dnl auto-detected one. +dnl Non-empty user provided 'PATH_SEPARATOR' always +dnl overrides the auto-detected one. -AC_DEFUN([_XC_CHECK_PATH_SEPARATOR], +AC_DEFUN([_XC_CFG_PRE_CHECK_PATH_SEPARATOR], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_INIT])dnl -AC_REQUIRE([_XC_CHECK_COMMAND_TEST])dnl -AC_REQUIRE([_XC_CHECK_PATH])dnl -AC_REQUIRE([_XC_CHECK_COMMAND_EXPR])dnl # -# Auto-detect and set PATH_SEPARATOR, unless it is already set. +# Auto-detect and set 'PATH_SEPARATOR', unless it is already non-empty set. # -# Directory count in PATH when using a colon separator. -xc_tst_dirs_col=0 +# Directory count in 'PATH' when using a colon separator. +xc_tst_dirs_col='' xc_tst_prev_IFS=$IFS; IFS=':' for xc_tst_dir in $PATH; do IFS=$xc_tst_prev_IFS - test -d "$xc_tst_dir" && xc_tst_dirs_col=`expr $xc_tst_dirs_col + 1` + xc_tst_dirs_col="x$xc_tst_dirs_col" done IFS=$xc_tst_prev_IFS +xc_tst_dirs_col=(`expr "$xc_tst_dirs_col" : '.*'`) -# Directory count in PATH when using a semicolon separator. -xc_tst_dirs_sem=0 +# Directory count in 'PATH' when using a semicolon separator. +xc_tst_dirs_sem='' xc_tst_prev_IFS=$IFS; IFS=';' for xc_tst_dir in $PATH; do IFS=$xc_tst_prev_IFS - test -d "$xc_tst_dir" && xc_tst_dirs_sem=`expr $xc_tst_dirs_sem + 1` + xc_tst_dirs_sem="x$xc_tst_dirs_sem" done IFS=$xc_tst_prev_IFS +xc_tst_dirs_sem=(`expr "$xc_tst_dirs_sem" : '.*'`) if test $xc_tst_dirs_sem -eq $xc_tst_dirs_col; then # When both counting methods give the same result we do not want to # chose one over the other, and consider auto-detection not possible. if test -z "$PATH_SEPARATOR"; then - # Stop dead until user provides PATH_SEPARATOR definition. - echo "$xc_msg_err PATH_SEPARATOR variable not set. $xc_msg_abrt" >&2 + # Stop dead until user provides 'PATH_SEPARATOR' definition. + echo "$xc_msg_err 'PATH_SEPARATOR' variable not set. $xc_msg_abrt" >&2 exit 1 fi else @@ -252,21 +277,23 @@ else if test -z "$PATH_SEPARATOR"; then # Simply use the auto-detected one when not already set. PATH_SEPARATOR="$xc_tst_auto_separator" - elif "x$PATH_SEPARATOR" != "x$xc_tst_auto_separator"; then - echo "$xc_msg_warn PATH_SEPARATOR does not match auto-detected one." >&2 + elif test "x$PATH_SEPARATOR" != "x$xc_tst_auto_separator"; then + echo "$xc_msg_warn 'PATH_SEPARATOR' does not match auto-detected one." >&2 fi fi AC_SUBST([PATH_SEPARATOR])dnl ]) -dnl _XC_CONFIGURE_PREAMBLE_SUCCESS_MSG +dnl _XC_CFG_PRE_POSTLUDE dnl ------------------------------------------------- dnl Private macro. -AC_DEFUN([_XC_CONFIGURE_PREAMBLE_SUCCESS_MSG], +AC_DEFUN([_XC_CFG_PRE_POSTLUDE], [dnl echo "checking whether some basic commands and utilities are available... yes" + +IFS=$xc_configure_preamble_prev_IFS ]) @@ -276,15 +303,15 @@ dnl Private macro. AC_DEFUN([_XC_CONFIGURE_PREAMBLE], [dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_COMMENT])dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_INIT])dnl -AC_REQUIRE([_XC_CHECK_COMMAND_TEST])dnl -AC_REQUIRE([_XC_CHECK_PATH])dnl -AC_REQUIRE([_XC_CHECK_COMMAND_EXPR])dnl -AC_REQUIRE([_XC_CHECK_UTILITY_SED])dnl -AC_REQUIRE([_XC_CHECK_UTILITY_GREP])dnl -AC_REQUIRE([_XC_CHECK_PATH_SEPARATOR])dnl -AC_REQUIRE([_XC_CONFIGURE_PREAMBLE_SUCCESS_MSG])dnl +AC_REQUIRE([_XC_CFG_PRE_PREAMBLE])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_ECHO])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_TEST])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_EXPR])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_SED])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_GREP])dnl +AC_REQUIRE([_XC_CFG_PRE_CHECK_PATH_SEPARATOR])dnl +AC_REQUIRE([_XC_CFG_PRE_POSTLUDE])dnl ]) @@ -298,7 +325,7 @@ dnl of some commands and utilities needed to allow dnl configure script bootstrapping itself when using dnl these to figure out other settings. Also performs dnl PATH_SEPARATOR auto-detection and sets its value -dnl unless it is already set. +dnl unless it is already set with a non-empty value. dnl dnl These basic checks are intended to be placed and dnl executed as early as possible in the resulting @@ -307,7 +334,7 @@ dnl shell code. dnl dnl Although this is a public macro it should not be dnl used directly from configure.ac given that in this -dnl way its expansion is not placed early enough in +dnl way its expansion may not be placed early enough in dnl generated configure script, it simply makes little dnl sense to perform these basic checks once the script dnl is into more serious business. @@ -320,12 +347,15 @@ AC_DEFUN([XC_CONFIGURE_PREAMBLE], [dnl AC_PREREQ([2.50])dnl AC_BEFORE([$0],[_XC_CONFIGURE_PREAMBLE])dnl -AC_BEFORE([$0],[_XC_CHECK_COMMAND_TEST])dnl -AC_BEFORE([$0],[_XC_CHECK_PATH])dnl -AC_BEFORE([$0],[_XC_CHECK_COMMAND_EXPR])dnl -AC_BEFORE([$0],[_XC_CHECK_UTILITY_SED])dnl -AC_BEFORE([$0],[_XC_CHECK_UTILITY_GREP])dnl -AC_BEFORE([$0],[_XC_CHECK_PATH_SEPARATOR])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_PREAMBLE])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_CMD_ECHO])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_CMD_TEST])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_CMD_EXPR])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_UTIL_SED])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_UTIL_GREP])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_CHECK_PATH_SEPARATOR])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_POSTLUDE])dnl AC_REQUIRE([_XC_CONFIGURE_PREAMBLE])dnl m4_define([$0],[])dnl ]) |