]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
* config/general.m4sh (Xsed): Set a default when not used from
authorGary V. Vaughan <gary@gnu.org>
Fri, 24 Sep 2004 16:08:33 +0000 (16:08 +0000)
committerGary V. Vaughan <gary@gnu.org>
Fri, 24 Sep 2004 16:08:33 +0000 (16:08 +0000)
ltmain.in.
(ECHO): Audit for (and correct!) uses of $ECHO with more than one
argument, which breaks when ECHO='printf %sn', and with possible
`-' as first character of the argument, which breaks `print -r'
and some implementations of `echo'.
* config/ltmain.in, tests/defs.in, libtoolize.in (ECHO): Ditto.
Reported by Albert Chin-A-Young <china@thewrittenword.com>

ChangeLog
config/general.m4sh
config/ltmain.in
libtoolize.in
tests/defs.in

index 218abcbceefdeb219d6efff3a69821ea638a3740..c30e1dbeb9ada1c284064b552ce781d1e76a182a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2004-09-24  Gary V. Vaughan  <gary@gnu.org>
+
+       * config/general.m4sh (Xsed): Set a default when not used from
+       ltmain.in.
+       (ECHO): Audit for (and correct!) uses of $ECHO with more than one
+       argument, which breaks when ECHO='printf %s\n', and with possible
+       `-' as first character of the argument, which breaks `print -r'
+       and some implementations of `echo'.
+       * config/ltmain.in, tests/defs.in, libtoolize.in (ECHO): Ditto.
+       Reported by Albert Chin-A-Young <china@thewrittenword.com>
+
 2004-09-24  Peter O'Gorman  <peter@pogma.com>
 
        * m4/libtool.m4 (_LT_CMD_STRIPLIB) [darwin]: strip archives too.
index ef1e6f0820d9822ad1860478e93f2c24528e9ca1..9aa62774670d896e1c87e635d73c403aa0785f13 100644 (file)
@@ -36,6 +36,7 @@ m4_if([# general.m4sh -- general shell script boiler plate -*- Autoconf -*-
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 : ${SED="@SED@"}
+: ${Xsed="$SED -e s/^X//"}
 
 # Global variables:
 EXIT_SUCCESS=0
@@ -60,12 +61,14 @@ basename="s,^.*/,,g"
 progpath="$0"
 
 # The name of this program:
-progname=`$ECHO "$progpath" | $SED "$basename"`
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we substitute for _ in that case.
+progname=`$ECHO "X$progpath" | $Xsed -e "$basename" -e 's,^-,_,'`
 
 # Make sure we have an absolute path for reexecution:
 case $progpath in
   [[\\/]]*|[[A-Za-z]]:\\*) ;;
-  *) progdir=`$ECHO "$progpath" | $SED "$dirname"`
+  *) progdir=`$ECHO "X$progpath" | $Xsed -e "$dirname"`
      progdir=`cd "$progdir" && pwd`
      progpath="$progdir/$progname"
      ;;
@@ -98,7 +101,7 @@ opt_verbose=false
 # name if it has been set yet.
 func_echo ()
 {
-    $ECHO $progname${mode+: }$mode: ${1+"$@"}
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"}
 }
 
 # func_verbose arg...
@@ -112,14 +115,14 @@ func_verbose ()
 # Echo program name prefixed message to standard error.
 func_error ()
 {
-    $ECHO $progname${mode+: }$mode: ${1+"$@"} 1>&2
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
 }
 
 # func_warning arg...
 # Echo program name prefixed warning message to standard error.
 func_warning ()
 {
-    $ECHO $progname${mode+: }$mode: warning: ${1+"$@"} 1>&2
+    $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
 }
 
 # func_fatal_error arg...
@@ -173,9 +176,9 @@ func_mkdir_p ()
         case $my_directory_path in */*) ;; *) break ;; esac
 
         # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "$my_directory_path" | $SED "$dirname"`
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
       done
-      my_dir_list=`$ECHO $my_dir_list | $SED 's,:*$,,'`
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
 
       save_mkdir_p_IFS="$IFS"; IFS=':'
       for my_dir in $my_dir_list; do
@@ -224,7 +227,7 @@ func_mktempdir ()
         func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
     fi
 
-    $ECHO "$my_tmpdir"
+    $ECHO "X$my_tmpdir" | $Xsed
 }
 
 
index 60a2ecd416d54d08cf0db9604346cb7008f7568b..59d368fea912179e80ab0924214459f2e1c12f8b 100644 (file)
@@ -491,22 +491,22 @@ Otherwise, only FILE itself is deleted using RM."
 
       # Separate optargs to long options:
       -dlopen=*|--mode=*|--tag=*)
-                       arg=`$ECHO "$opt" | $SED "$my_sed_long_arg"`
-                       opt=`$ECHO "$opt" | $SED "$my_sed_long_opt"`
+                       arg=`$ECHO "X$opt" | $Xsed -e "$my_sed_long_arg"`
+                       opt=`$ECHO "X$opt" | $Xsed -e "$my_sed_long_opt"`
                        set -- "$opt" "$arg" ${1+"$@"}
                        ;;
 
       # Separate optargs to short options:
 #      -x*|-y*)
-#                      arg=`$ECHO "$opt" |$SED "$my_sed_single_rest"`
-#                      opt=`$ECHO "$opt" |$SED "$my_sed_single_opt"`
+#                      arg=`$ECHO "X$opt" |$Xsed -e "$my_sed_single_rest"`
+#                      opt=`$ECHO "X$opt" |$Xsed -e "$my_sed_single_opt"`
 #                      set -- "$opt" "$arg" ${1+"$@"}
 #                      ;;
 
       # Separate non-argument short options:
 #      -z*|-z*|-y*)
-#                      rest=`$ECHO "$opt" |$SED "$my_sed_single_rest"`
-#                      opt=`$ECHO "$opt" |$SED "$my_sed_single_opt"`
+#                      rest=`$ECHO "X$opt" |$Xsed -e "$my_sed_single_rest"`
+#                      opt=`$ECHO "X$opt" |$Xsed -e "$my_sed_single_opt"`
 #                      set -- "$opt" "-$rest" ${1+"$@"}
 #                      ;;
 
@@ -762,7 +762,7 @@ extern \"C\" {
 
        for dlprefile in $dlprefiles; do
          func_echo "extracting global C symbols from \`$dlprefile'"
-         name=`$ECHO "$dlprefile" | ${SED} -e 's%^.*/%%'`
+         name=`$ECHO "X$dlprefile" | $Xsed -e 's%^.*/%%'`
          $run eval '$ECHO ": $name " >> "$nlist"'
          $run eval "$NM $dlprefile | $global_symbol_pipe >> '$nlist'"
        done
@@ -1579,7 +1579,7 @@ func_mode_finish ()
     # Exit here if they wanted silent mode.
     test "$show" = : && exit $EXIT_SUCCESS
 
-    $ECHO "----------------------------------------------------------------------"
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
     $ECHO "Libraries have been installed in:"
     for libdir in $libdirs; do
       $ECHO "   $libdir"
@@ -1612,7 +1612,7 @@ func_mode_finish ()
     $ECHO
     $ECHO "See any operating system documentation about shared libraries for"
     $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
-    $ECHO "----------------------------------------------------------------------"
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
     exit $EXIT_SUCCESS
 }
 
@@ -1783,7 +1783,7 @@ func_mode_install ()
 
        if test -n "$relink_command"; then
          # Determine the prefix the user has applied to our future dir.
-         inst_prefix_dir=`$ECHO "$destdir" | $SED "s%$libdir\$%%"`
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
 
          # Don't allow the user to place us outside of our expected
          # location b/c this prevents finding dependent libraries that
@@ -1917,7 +1917,7 @@ func_mode_install ()
        case $file in
          *.exe)
            if test ! -f "$file"; then
-             file=`$ECHO $file|${SED} 's,.exe$,,'`
+             file=`$ECHO "X$file"| $Xsed -e 's,.exe$,,'`
              stripped_ext=".exe"
            fi
            ;;
@@ -1926,7 +1926,7 @@ func_mode_install ()
        # Do a test to see if this is really a libtool program.
        case $host in
        *cygwin*|*mingw*)
-           wrapper=`$ECHO $file | ${SED} -e 's,.exe$,,'`
+           wrapper=`$ECHO "X$file" | $XSED -e 's,.exe$,,'`
            ;;
        *)
            wrapper=$file
@@ -2023,7 +2023,7 @@ func_mode_install ()
            destfile=$destfile.exe
            ;;
          *:*.exe)
-           destfile=`$ECHO $destfile | ${SED} -e 's,.exe$,,'`
+           destfile=`$ECHO "X$destfile" | $Xsed -e 's,.exe$,,'`
            ;;
          esac
          ;;
@@ -3050,7 +3050,7 @@ func_mode_link ()
          # Collect preopened libtool deplibs, except any this library
          # has declared as weak libs
          for deplib in $dependency_libs; do
-            deplib_base=`$ECHO "$deplib" |$SED "$basename"`
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
            case " $weak_libs " in
            *" $deplib_base "*) ;;
            *) deplibs="$deplibs $deplib" ;;
@@ -3222,8 +3222,7 @@ func_mode_link ()
                match_pattern*)
                  set dummy $deplibs_check_method
                  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-                 if eval $ECHO \"$deplib\" 2>/dev/null \
-                   | $SED 10q \
+                 if eval $ECHO \"X$deplib\" 2>/dev/null | $Xsed -e 10q \
                    | $EGREP "$match_pattern_regex" > /dev/null; then
                    valid_a_lib=yes
                  fi
@@ -3616,8 +3615,8 @@ func_mode_link ()
 
            # Make a new name for the extract_expsyms_cmds to use
            soroot="$soname"
-           soname=`$ECHO $soroot | ${SED} -e 's/^.*\///'`
-           newlib="libimp-`$ECHO $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+           soname=`$ECHO "X$soroot" | $Xsed -e 's/^.*\///'`
+           newlib=libimp-`$ECHO "X$soname" | $Xsed -e 's/^lib//;s/\.dll$//'`.a
 
            # If the library has no export list, then create one now
            if test -f "$output_objdir/$soname-def"; then :
@@ -4386,9 +4385,9 @@ func_mode_link ()
 
       # Eliminate all temporary directories.
       for path in $notinst_path; do
-       lib_search_path=`$ECHO "$lib_search_path " | ${SED} -e 's% $path % %g'`
+       lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e 's% $path % %g'`
        deplibs=`$ECHO "$deplibs " | ${SED} -e 's% -L$path % %g'`
-       dependency_libs=`$ECHO "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+       dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e 's% -L$path % %g'`
       done
 
       if test -n "$xrpath"; then
@@ -4613,7 +4612,7 @@ EOF
                        esac
                      done
                      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
-                        ${SED} 10q |
+                        $SED -e 10q |
                         $EGREP "$file_magic_regex" > /dev/null; then
                        newdeplibs="$newdeplibs $a_deplib"
                        a_deplib=""
@@ -4664,8 +4663,7 @@ EOF
                  potential_libs=`ls $i/$libname[[.-]]* 2>/dev/null`
                  for potent_lib in $potential_libs; do
                    potlib="$potent_lib" # see symlink-check above in file_magic test
-                   if eval $ECHO \"$potent_lib\" 2>/dev/null |
-                      ${SED} 10q |
+                   if eval $ECHO \"X$potent_lib\" 2>/dev/null | $Xsed -e 10q | \
                       $EGREP "$match_pattern_regex" > /dev/null; then
                      newdeplibs="$newdeplibs $a_deplib"
                      a_deplib=""
@@ -4702,7 +4700,7 @@ EOF
          if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
            for i in $predeps $postdeps ; do
              # can't use Xsed below, because $i might contain '/'
-             tmp_deplibs=`$ECHO "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
            done
          fi
          if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[[    ]]//g' |
@@ -4986,7 +4984,7 @@ EOF
            save_libobjs=$libobjs
          fi
          save_output=$output
-         output_la=`$ECHO "$output" | $SED $basename`
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
 
          # Clear the reloadable object creation command queue and
          # initialize k to one.
@@ -5288,7 +5286,7 @@ EOF
 
     prog)
       case $host in
-       *cygwin*) output=`$ECHO $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+       *cygwin*) output=`$ECHO "X$output" | $Xsed -e 's,.exe$,,;s,$,.exe,'` ;;
       esac
       test -n "$vinfo" && \
        func_warning "\`-version-info' is ignored for programs"
@@ -5576,21 +5574,21 @@ EOF
        # win32 will think the script is a binary if it has
        # a .exe suffix, so we strip it off here.
        case $output in
-         *.exe) output=`$ECHO $output|${SED} 's,.exe$,,'` ;;
+         *.exe) output=`$ECHO "X$output" | $Xsed -e 's,.exe$,,'` ;;
        esac
        # test for cygwin because mv fails w/o .exe extensions
        case $host in
          *cygwin*)
            exeext=.exe
-           outputname=`$ECHO $outputname|${SED} 's,.exe$,,'` ;;
+           outputname=`$ECHO "X$outputname" | $Xsed -e 's,.exe$,,'` ;;
          *) exeext= ;;
        esac
        case $host in
          *cygwin* | *mingw* )
            output_name=`basename $output`
            output_path=`dirname $output`
-           cwrappersource=`$ECHO "$output_path/$objdir/lt-$output_name.c"`
-           cwrapper=`$ECHO "$output_path/$output_name.exe"`
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
            $RM $cwrappersource $cwrapper
            trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
 
@@ -6529,8 +6527,8 @@ func_mode_uninstall ()
          noexename=$name
          case $file in
          *.exe)
-           file=`$ECHO $file|${SED} 's,.exe$,,'`
-           noexename=`$ECHO $name|${SED} 's,.exe$,,'`
+           file=`$ECHO "X$file" | $Xsed -e 's,.exe$,,'`
+           noexename=`$ECHO "X$name" | $Xsed -e 's,.exe$,,'`
            # $file with .exe has already been added to rmfiles,
            # add $file without .exe
            rmfiles="$rmfiles $file"
index f8f608a7aec98321f7cdf1cc985f0a9bf65f2e91..b02ae759562f16509060fe67d16797bae36b8d4b 100644 (file)
@@ -146,15 +146,15 @@ configure_ac=configure.in
 
       # Separate optargs to long options:
       --ltdl=*)
-                       arg=`$ECHO "$opt" | $SED "$my_sed_long_arg"`
-                       opt=`$ECHO "$opt" | $SED "$my_sed_long_opt"`
+                       arg=`$ECHO "X$opt" | $Xsed -e "$my_sed_long_arg"`
+                       opt=`$ECHO "X$opt" | $Xsed -e "$my_sed_long_opt"`
                        set -- "$opt" "$arg" ${1+"$@"}
                        ;;
 
       # Separate non-argument short options:
       -c*|-i*|-f*|-n*|-q*|-v*)
-                       rest=`$ECHO "$opt" |$SED "$my_sed_single_rest"`
-                       opt=`$ECHO "$opt" |$SED "$my_sed_single_opt"`
+                       rest=`$ECHO "X$opt" | $Xsed -e "$my_sed_single_rest"`
+                       opt=`$ECHO "X$opt" | $Xsed -e "$my_sed_single_opt"`
                        set -- "$opt" "-$rest" ${1+"$@"}
                        ;;
 
@@ -178,7 +178,7 @@ func_copy ()
     my_destfile="$2"
     my_return_status=1
 
-    func_mkdir_p `$ECHO "$my_destfile" | $SED "$dirname"`
+    func_mkdir_p `$ECHO "X$my_destfile" | $Xsed -e "$dirname"`
 
     $RM "$my_destfile"
     if $opt_link && $LN_S "$my_srcfile" "$my_destfile"; then
@@ -224,8 +224,8 @@ func_copy_all_files ()
     while test -n "$my_srcdirs"; do
 
       IFS="$my_save_IFS"
-      my_srcdir=`$ECHO "$my_srcdirs" | sed 's,:.*,,g'`
-      my_srcdirs=`$ECHO "$my_srcdirs" | sed 's,:*[[^:]][[^:]]*:*,,'`
+      my_srcdir=`$ECHO "X$my_srcdirs" | $Xsed -e 's,:.*,,g'`
+      my_srcdirs=`$ECHO "X$my_srcdirs" | $Xsed -e 's,:*[[^:]][[^:]]*:*,,'`
 
       for my_filename in `cd "$my_srcdir" && ls`; do
 
@@ -236,7 +236,8 @@ func_copy_all_files ()
 
        # Add to the appropriate list
        if test -f "$my_srcdir/$my_filename"; then
-         my_srcfile=`$ECHO "$my_srcdir/$my_filename" |sed "s,^$my_basedir/*,,"`
+         my_srcfile=`$ECHO "X$my_srcdir/$my_filename" | $Xsed \
+             -e "s,^$my_basedir/*,,"`
          my_srcfiles="$my_srcfiles${my_srcfiles:+:}$my_srcfile"
        elif $my_opt_recurse && test -d "$my_srcdir/$my_filename"; then
          my_srcdirs="$my_srcdirs${my_srcdirs:+:}$my_srcdir/$my_filename"
@@ -403,7 +404,9 @@ func_included_files ()
         /^[m4]_include(\[[.*\]])$/ { s,^[m4]_include(\[[\(.*\)\]])$,\1,; p; };
         d'
 
-    test -f "$my_searchfile" && $ECHO "$my_searchfile"
+    if test -f "$my_searchfile"; then
+      $ECHO "X$my_searchfile" | $Xsed
+    fi
 
     # Only recurse when we don't care if all the variables we use get
     # trashed, since they are in global scope.
index bfe4b561a34724ce8c633775cf20a56ce0ed776f..ed86c42649cac3b78a8223de5dc5822985000176 100644 (file)
@@ -34,6 +34,8 @@ m4_include([general.m4sh])
 : ${LIBTOOL="../libtool"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
 
 # Disable usage of config.site for autoconf, unless DJGPP is present.
 # The DJGPP port of autoconf requires config.site, to work correctly.
@@ -50,7 +52,7 @@ NO | no | 0 | "")
 esac
 
 if test -z "$srcdir"; then
-  srcdir=`$ECHO "$0" | $SED "$dirname"`
+  srcdir=`$ECHO "X$0" | $Xsed -e "$dirname"`
   test "$srcdir" = "$0" && srcdir=.
 fi