libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: [PATCH] bootstrap: adopt autoconf echo normalization code.


From: Gary V. Vaughan
Subject: FYI: [PATCH] bootstrap: adopt autoconf echo normalization code.
Date: Sun, 18 Dec 2011 14:46:03 +0700

Pushed as obvious.

Dash shipped with Ubutu-11.10 as /bin/sh, among others, still
has a crippled echo builtin that mis-handles backslashes.
* build-aux/options-parser (bs_echo): Adopt the autoconf echo
normalization code to find a suitable replacement for buggy echo
commands.
Adjust all uses of echo to $bs_echo.
* build-aux/extract-trace (func_extract_trace, func_main):
Likewise.
* bootstrap: To retain some execution speed on platforms with
buggy builtin echo, replace most occurrences of `echo' with
`$bs_echo' - except where its arguments will obviously never
contain backslashes or be overly long.
Reported by Reuben Thomas.

Signed-off-by: Gary V. Vaughan <address@hidden>
---
 bootstrap                |   20 +++++++-------
 build-aux/extract-trace  |    8 +++---
 build-aux/options-parser |   60 ++++++++++++++++++++++++++++++++++++++-------
 3 files changed, 64 insertions(+), 24 deletions(-)

diff --git a/bootstrap b/bootstrap
index 147ac08..7b26d00 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1051,7 +1051,7 @@ func_require_buildreq_automake ()
 
       # ...and AM_INIT_AUTOMAKE is declared...
       test -n "$func_extract_trace_result" && {
-        automake_version=`echo "$func_extract_trace_result" \
+        automake_version=`$bs_echo "$func_extract_trace_result" \
            |$SED 's|[^0-9]*||; s| .*$||'`
         test -n "$automake_version" || automake_version=-
 
@@ -1798,8 +1798,8 @@ func_ifcontains ()
 {
     $debug_cmd
 
-    # The embedded echo is to squase whitespace before globbing.
-    _G_wslist=`echo " "$1" "`
+    # The embedded echo is to squash whitespace before globbing.
+    _G_wslist=`$bs_echo " "$1" "`
     _G_member=$2
     _G_yes_cmd=$3
     _G_no_cmd=${4-":"}
@@ -1833,7 +1833,7 @@ func_append_u ()
 {
     $debug_cmd
 
-    eval _G_current_value='`echo $'$1'`'
+    eval _G_current_value='`$bs_echo $'$1'`'
     _G_delim=`expr "$2" : '\(.\)'`
 
     case $_G_delim$_G_current_value$_G_delim in
@@ -1851,7 +1851,7 @@ func_strpad ()
     $debug_cmd
 
     _G_width=`expr "$2" - 1`
-    func_strpad_result=`echo "$1" |$SED '
+    func_strpad_result=`$bs_echo "$1" |$SED '
         :a
         s|^.\{0,'"$_G_width"'\}$|&'"$3"'|
         ta
@@ -1868,7 +1868,7 @@ func_strrpad ()
     $debug_cmd
 
     _G_width=`expr "$2" - 1`
-    func_strrpad_result=`echo "$1" |$SED '
+    func_strrpad_result=`$bs_echo "$1" |$SED '
         :a
         s|^.\{0,'"$_G_width"'\}$|'"$3"'&|
         ta
@@ -1953,7 +1953,7 @@ func_strtable ()
 
     # Strip off the indent, and make a divider with `-' chars, then
     # reindent.
-    _G_divider=`echo "$func_strrow_result" \
+    _G_divider=`$bs_echo "$func_strrow_result" \
         |$SED 's|[^ ]|-|g
             :a
             s|- |--|g
@@ -2111,8 +2111,8 @@ func_insert_sorted_if_absent ()
       func_grep_q "$str" "$file" \
           && func_verbose "inserting \`$str' into \`$file'"
 
-      echo "$str" |sort -u - "$file" |func_cmp_s - "$file" \
-        || echo "$str" |sort -u - "$file" -o "$file" \
+      $bs_echo "$str" |sort -u - "$file" |func_cmp_s - "$file" \
+        || $bs_echo "$str" |sort -u - "$file" -o "$file" \
         || func_permissions_error "$file"
     done
 }
@@ -2177,7 +2177,7 @@ func_get_version ()
 
     # Rather than uncomment the sed script in-situ, strip the comments
     # programatically before passing the result to $SED for evaluation.
-    sed_get_version=`echo '# extract version within line
+    sed_get_version=`$bs_echo '# extract version within line
           s|.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*|\1|
           t done
 
diff --git a/build-aux/extract-trace b/build-aux/extract-trace
index b738257..ee3f284 100755
--- a/build-aux/extract-trace
+++ b/build-aux/extract-trace
@@ -254,8 +254,8 @@ func_extract_trace ()
     $require_configure_ac
     $require_gnu_m4
 
-    _G_m4_traces=`echo "--trace=$1" |$SED 's%,% --trace=%g'`
-    _G_re_macros=`echo "($1)" |$SED 's%,%|%g'`
+    _G_m4_traces=`$bs_echo "--trace=$1" |$SED 's%,% --trace=%g'`
+    _G_re_macros=`$bs_echo "($1)" |$SED 's%,%|%g'`
     _G_macros="$1"; shift
     test $# -gt 0 || {
       set dummy $configure_ac
@@ -357,7 +357,7 @@ func_extract_trace ()
 
     # Save the command pipeline results for further use by callers of
     # this function.
-    func_extract_trace_result=`echo "$_G_mini" \
+    func_extract_trace_result=`$bs_echo "$_G_mini" \
       |$M4 -daq --prefix $_G_m4_traces - "$@" 2>&1 1>/dev/null \
       |$SED -n -e "$_G_transform"`
 }
@@ -382,7 +382,7 @@ func_main ()
 
     # Display results.
     test -n "$func_extract_trace_result" \
-        && echo "$func_extract_trace_result"
+        && $bs_echo "$func_extract_trace_result"
 
     # The End.
     exit $EXIT_SUCCESS
diff --git a/build-aux/options-parser b/build-aux/options-parser
index 5d5d8ed..07a9731 100644
--- a/build-aux/options-parser
+++ b/build-aux/options-parser
@@ -173,6 +173,46 @@ basename='s|^.*/||'
 nl='
 '
 
+# There are still modern systems that have problems with `echo' mis-
+# handling backslashes, among others, so make sure $bs_echo is set to a
+# command that correctly interprets backslashes.
+# (this code from Autoconf 2.68)
+
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+bs_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+bs_echo=$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo
+bs_echo=$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $bs_echo`" = "X$bs_echo") 2>/dev/null; then
+  bs_echo='print -r --'
+  bs_echo_n='print -rn --'
+elif (test "X`printf %s $bs_echo`" = "X$bs_echo") 2>/dev/null; then
+  bs_echo='printf %s\n'
+  bs_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $bs_echo) 2>/dev/null`" = "X-n $bs_echo"; 
then
+    bs_echo_body='eval /usr/ucb/echo -n "$1$nl"'
+    bs_echo_n='/usr/ucb/echo -n'
+  else
+    bs_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    bs_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$nl"*)
+       expr "X$arg" : "X\\(.*\\)$nl";
+       arg=`expr "X$arg" : ".*$nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$nl"
+    '
+    export bs_echo_n_body
+    bs_echo_n='sh -c $bs_echo_n_body bs_echo'
+  fi
+  export bs_echo_body
+  bs_echo='sh -c $bs_echo_body bs_echo'
+fi
+
 # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
 # is ksh but when the shell is invoked as "sh" and the current value of
 # the _XPG environment variable is not equal to 1 (one), the special
@@ -181,7 +221,7 @@ nl='
 progpath=$0
 
 # The name of this program.
-progname=`echo "$progpath" |$SED "$basename"`
+progname=`$bs_echo "$progpath" |$SED "$basename"`
 
 
 ## ------------------------- ##
@@ -252,7 +292,7 @@ func_remove_hook ()
 {
     $debug_cmd
 
-    eval ${1}_hooks='`echo "\$'$1'_hooks" |$SED "s| '$2'||"`'
+    eval ${1}_hooks='`$bs_echo "\$'$1'_hooks" |$SED "s| '$2'||"`'
 }
 
 
@@ -541,7 +581,7 @@ func_echo ()
     IFS=$nl
     for _G_line in $_G_message; do
       IFS=$save_IFS
-      echo "$progname: $_G_line"
+      $bs_echo "$progname: $_G_line"
     done
     IFS=$save_IFS
 }
@@ -561,7 +601,7 @@ func_error ()
     IFS=$nl
     for _G_line in $_G_message; do
       IFS=$save_IFS
-      echo "$_G_prefix$tc_bold$_G_line$tc_reset" 1>&2
+      $bs_echo "$_G_prefix$tc_bold$_G_line$tc_reset" 1>&2
       _G_prefix="$progname:        "
     done
     IFS=$save_IFS
@@ -586,8 +626,8 @@ func_fatal_help ()
 {
     $debug_cmd
 
-    eval echo \""Usage: $usage"\"
-    eval echo \""$fatal_help"\"
+    eval $bs_echo \""Usage: $usage"\"
+    eval $bs_echo \""$fatal_help"\"
     func_error ${1+"$@"}
     exit $EXIT_FAILURE
 }
@@ -601,7 +641,7 @@ func_help ()
     $debug_cmd
 
     func_usage_message
-    echo "$long_help_message"
+    $bs_echo "$long_help_message"
     exit 0
 }
 
@@ -725,7 +765,7 @@ func_usage ()
     $debug_cmd
 
     func_usage_message
-    echo "Run \`$progname --help |${PAGER-more}' for full usage"
+    $bs_echo "Run \`$progname --help |${PAGER-more}' for full usage"
     exit 0
 }
 
@@ -737,11 +777,11 @@ func_usage_message ()
 {
     $debug_cmd
 
-    eval echo \""$usage"\"
+    eval $bs_echo \""$usage"\"
     echo
     $SED -n 's|^# ||;/^Written by/{x;p;x;};h' < "$progpath"
     echo
-    eval echo \""$usage_message"\"
+    eval $bs_echo \""$usage_message"\"
 }
 
 
-- 
1.7.8

Cheers,
-- 
Gary V. Vaughan (gary AT gnu DOT org)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]