libtool-patches
[Top][All Lists]
Advanced

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

[1.4 branch] check sed patch


From: Robert Boehne
Subject: [1.4 branch] check sed patch
Date: Wed, 30 Jan 2002 19:17:45 -0600

2002-01-30  Robert Boehne  <address@hidden>

        * libtool.m4 (LT_AC_PROG_SED): New macro tests sed for truncation of
        output.  AC_REQUIRE the new macro.
        * ltmain.in: Use $SED rather than plan old sed, as set by the new
        macro LT_AC_PROG_SED.

This is a backport of the check-sed patch that was checked in
to HEAD.  Some care was taken to fix problems with using Autoconf
2.13, expanding $ac_executable_p to "test -f".  Ok to commit?

Robert

-- 
Robert Boehne             Software Engineer
Ricardo Software   Chicago Technical Center
TEL: (630)789-0003 x. 238
FAX: (630)789-0127
email:  address@hidden
? install-sh
? mkinstalldirs
? missing
? INSTALL
? COPYING
? sed-check.patch
? libltdl/config-h.in
Index: libtool.m4
===================================================================
RCS file: /cvsroot/libtool/libtool/libtool.m4,v
retrieving revision 1.166.2.33
diff -u -r1.166.2.33 libtool.m4
--- libtool.m4  14 Jan 2002 14:25:58 -0000      1.166.2.33
+++ libtool.m4  31 Jan 2002 01:11:39 -0000
@@ -49,6 +49,8 @@
 AC_REQUIRE([AC_PROG_LD])dnl
 AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
 AC_REQUIRE([AC_PROG_NM])dnl
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+
 AC_REQUIRE([AC_PROG_LN_S])dnl
 AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
 AC_REQUIRE([AC_OBJEXT])dnl
@@ -2451,7 +2453,7 @@
   # Now quote all the things that may contain metacharacters while being
   # careful not to overquote the AC_SUBSTed values.  We take copies of the
   # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS \
+  for var in echo old_CC old_CFLAGS SED \
     AR AR_FLAGS CC LD LN_S NM SHELL \
     reload_flag reload_cmds wl \
     pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
@@ -2513,8 +2515,11 @@
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+# A sed that does not truncate output.
+SED=$lt_SED
+
 # Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
+Xsed="${SED} -e s/^X//"
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
 # if CDPATH is set.
@@ -3579,3 +3584,94 @@
 
 # This is just to silence aclocal about the macro not being used
 ifelse([AC_DISABLE_FAST_INSTALL])
+
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_executable_p="test -f"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+        _sed_list="$_sed_list $as_dir/$ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+
+  # Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/sedXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=$TMPDIR/sed$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+   { (exit 1); exit 1; }
+}
+  _max=0
+  _count=0
+  # Add /usr/xpg4/bin/sed as it is typically found on Solaris
+  # along with /bin/sed that truncates output.
+  for _sed in $_sed_list /usr/xpg4/bin/sed; do
+    test ! -f ${_sed} && break
+    cat /dev/null > "$tmp/sed.in"
+    _count=0
+    echo $ECHO_N "0123456789$ECHO_C" >"$tmp/sed.in"
+    # Check for GNU sed and select it if it is found.
+    if "${_sed}" --version 2>&1 < /dev/null | egrep '(GNU)' > /dev/null; then
+      lt_cv_path_SED=${_sed}
+      break;
+    fi
+    while true; do
+      cat "$tmp/sed.in" "$tmp/sed.in" >"$tmp/sed.tmp"
+      mv "$tmp/sed.tmp" "$tmp/sed.in"
+      cp "$tmp/sed.in" "$tmp/sed.nl"
+      echo >>"$tmp/sed.nl"
+      ${_sed} -e 's/a$//' < "$tmp/sed.nl" >"$tmp/sed.out" || break
+      cmp -s "$tmp/sed.out" "$tmp/sed.nl" || break
+      # 10000 chars as input seems more than enough
+      test $_count -gt 10 && break
+      _count=`expr $_count + 1`
+      if test $_count -gt $_max; then
+        _max=$_count
+        lt_cv_path_SED=$_sed
+      fi
+    done
+  done
+  rm -rf "$tmp"
+])
+if test "X$SED" != "X"; then
+  lt_cv_path_SED=$SED
+else
+  SED=$lt_cv_path_SED
+fi
+AC_MSG_RESULT([$SED])
+])
Index: ltmain.in
===================================================================
RCS file: /cvsroot/libtool/libtool/ltmain.in,v
retrieving revision 1.259.2.17
diff -u -r1.259.2.17 ltmain.in
--- ltmain.in   28 Nov 2001 21:50:31 -0000      1.259.2.17
+++ ltmain.in   31 Jan 2002 01:11:39 -0000
@@ -49,7 +49,7 @@
 fi
 
 # The name of this program.
-progname=`$echo "$0" | sed 's%^.*/%%'`
+progname=`$echo "$0" | ${SED} 's%^.*/%%'`
 modename="$progname"
 
 # Constants.
@@ -67,7 +67,7 @@
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed="${SED}"' -e 1s/^X//'
 sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
 SP2NL='tr \040 \012'
 NL2SP='tr \015\012 \040\040'
@@ -144,7 +144,7 @@
     ;;
 
   --config)
-    sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL 
CONFIG/,$d' $0
+    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL 
CONFIG/,$d' $0
     exit 0
     ;;
 
@@ -1514,7 +1514,7 @@
        fi
 
        # Check to see that this really is a libtool archive.
-       if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 
2>&1; then :
+       if (${SED} -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then :
        else
          $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
          exit 1
@@ -1776,8 +1776,8 @@
 
            # 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 $soroot | ${SED} -e 's/^.*\///'`
+           newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
 
            # If the library has no export list, then create one now
            if test -f "$output_objdir/$soname-def"; then :
@@ -2022,7 +2022,7 @@
                if grep "^installed=no" $deplib > /dev/null; then
                  path="-L$absdir/$objdir"
                else
-                 eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
                  if test -z "$libdir"; then
                    $echo "$modename: \`$deplib' is not a valid libtool 
archive" 1>&2
                    exit 1
@@ -2406,9 +2406,9 @@
 
       # Eliminate all temporary directories.
       for path in $notinst_path; do
-       lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
-       deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
-       dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
+       lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+       deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+       dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
       done
 
       if test -n "$xrpath"; then
@@ -2596,14 +2596,14 @@
                      # but so what?
                      potlib="$potent_lib"
                      while test -h "$potlib" 2>/dev/null; do
-                       potliblink=`ls -ld $potlib | sed 's/.* -> //'`
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
                        case $potliblink in
                        [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
                        *) potlib=`$echo "X$potlib" | $Xsed -e 
's,[^/]*$,,'`"$potliblink";;
                        esac
                      done
                      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-                        | sed 10q \
+                        | ${SED} 10q \
                         | egrep "$file_magic_regex" > /dev/null; then
                        newdeplibs="$newdeplibs $a_deplib"
                        a_deplib=""
@@ -2645,7 +2645,7 @@
                for potent_lib in $potential_libs; do
                  potlib="$potent_lib" # see symlink-check below in file_magic 
test
                  if eval echo \"$potent_lib\" 2>/dev/null \
-                     | sed 10q \
+                     | ${SED} 10q \
                      | egrep "$match_pattern_regex" > /dev/null; then
                    newdeplibs="$newdeplibs $a_deplib"
                    a_deplib=""
@@ -3130,7 +3130,7 @@
 
     prog)
       case $host in
-       *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
+       *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
       esac
       if test -n "$vinfo"; then
        $echo "$modename: warning: \`-version-info' is ignored for programs" 
1>&2
@@ -3318,9 +3318,9 @@
            if test -z "$export_symbols"; then
              export_symbols="$output_objdir/$output.exp"
              $run $rm $export_symbols
-             $run eval "sed -n -e '/^: @address@hidden/d' -e 's/^.* 
\(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             $run eval "${SED} -n -e '/^: @address@hidden/d' -e 's/^.* 
\(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
            else
-             $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 
's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+             $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 
's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
              $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > 
"$nlist"T'
              $run eval 'mv "$nlist"T "$nlist"'
            fi
@@ -3328,7 +3328,7 @@
 
          for arg in $dlprefiles; do
            $show "extracting global C symbols from \`$arg'"
-           name=`echo "$arg" | sed -e 's%^.*/%%'`
+           name=`echo "$arg" | ${SED} -e 's%^.*/%%'`
            $run eval 'echo ": $name " >> "$nlist"'
            $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
          done
@@ -3585,7 +3585,7 @@
        # 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 $output|${SED} 's,.exe$,,'` ;;
        esac
        # test for cygwin because mv fails w/o .exe extensions
        case $host in
@@ -3609,7 +3609,7 @@
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed="${SED}"' -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -3647,7 +3647,7 @@
   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 
   # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
   while test -n \"\$file\"; do
     destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
 
@@ -3660,7 +3660,7 @@
     fi
 
     file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
   done
 
   # Try to get the absolute directory name.
@@ -3674,7 +3674,7 @@
   progdir=\"\$thisdir/$objdir\"
 
   if test ! -f \"\$progdir/\$program\" || \\
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 
2>/dev/null | sed 1q\`; \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 
2>/dev/null | ${SED} 1q\`; \\
        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
 
     file=\"\$\$-\$program\"
@@ -3720,7 +3720,7 @@
     $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
 
     # Some systems cannot cope with colon-terminated $shlibpath_var
-    # The second colon is a workaround for a bug in BeOS R4 sed
+    # The second colon is a workaround for a bug in BeOS R4 ${SED}
     $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
 
     export $shlibpath_var
@@ -3912,7 +3912,7 @@
              case $deplib in
              *.la)
                name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
-               eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
                if test -z "$libdir"; then
                  $echo "$modename: \`$deplib' is not a valid libtool archive" 
1>&2
                  exit 1
@@ -3926,7 +3926,7 @@
            newdlfiles=
            for lib in $dlfiles; do
              name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-             eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+             eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
              if test -z "$libdir"; then
                $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
                exit 1
@@ -3937,7 +3937,7 @@
            newdlprefiles=
            for lib in $dlprefiles; do
              name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-             eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+             eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
              if test -z "$libdir"; then
                $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
                exit 1
@@ -4161,7 +4161,7 @@
 
       *.la)
        # Check to see that this really is a libtool archive.
-       if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 
2>&1; then :
+       if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then :
        else
          $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
          $echo "$help" 1>&2
@@ -4312,13 +4312,13 @@
        # 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 $file | ${SED} -e 's,.exe$,,'`
            ;;
        *)
            wrapper=$file
            ;;
        esac
-       if (sed -e '4q' $wrapper | egrep "^# Generated by 
.*$PACKAGE")>/dev/null 2>&1; then
+       if (${SED} -e '4q' $wrapper | egrep "^# Generated by 
.*$PACKAGE")>/dev/null 2>&1; then
          notinst_deplibs=
          relink_command=
 
@@ -4404,7 +4404,7 @@
            destfile=$destfile.exe
            ;;
          *:*.exe)
-           destfile=`echo $destfile | sed -e 's,.exe$,,'`
+           destfile=`echo $destfile | ${SED} -e 's,.exe$,,'`
            ;;
          esac
          ;;
@@ -4552,7 +4552,7 @@
       case $file in
       *.la)
        # Check to see that this really is a libtool archive.
-       if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 
2>&1; then :
+       if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then :
        else
          $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
          $echo "$help" 1>&2
@@ -4623,7 +4623,7 @@
       -*) ;;
       *)
        # Do a test to see if this is really a libtool program.
-       if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 
2>&1; then
+       if (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then
          # If there is no directory component, then add one.
          case $file in
          */* | *\\*) . $file ;;
@@ -4732,7 +4732,7 @@
       case $name in
       *.la)
        # Possibly a libtool archive, so verify it.
-       if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 
2>&1; then
+       if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then
          . $dir/$name
 
          # Delete the libtool libraries and symlinks.
@@ -4787,7 +4787,7 @@
       *)
        # Do a test to see if this is a libtool program.
        if test $mode = clean &&
-          (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 
2>&1; then
+          (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then
          relink_command=
          . $dir/$file
 

reply via email to

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