libtool-commit
[Top][All Lists]
Advanced

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

[SCM] GNU Libtool branch, master, updated. release-2-2-2-13-gda1e14c


From: Ralf Wildenhues
Subject: [SCM] GNU Libtool branch, master, updated. release-2-2-2-13-gda1e14c
Date: Sat, 19 Apr 2008 16:25:46 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Libtool".

The branch, master has been updated
       via  da1e14c91cb42dbb3a0e0ac4ee968d0cbcd3c977 (commit)
      from  3b98dabaa4c3ed8a07928d1ef883879a476eac94 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit da1e14c91cb42dbb3a0e0ac4ee968d0cbcd3c977
Author: Ralf Wildenhues <address@hidden>
Date:   Sat Apr 19 18:24:48 2008 +0200

    Exploit shell arithmetic expansion and ${#var}.
    
    * libltdl/m4/libtool.m4 (_LT_CHECK_SHELL_FEATURES): Also check
    for arithmetic expansion, and ${#var}.
    (_LT_PROG_XSI_SHELLFNS): Define func_arith and func_len
    accordingly, falling back on 'expr'.  Note that the argument to
    func_len may not start with a hyphen.  In the pre-Posix
    fallback, take care not to rely on the exit status of the
    variable assignment (not portable), but set the length to
    $max_cmd_len instead.
    * libltdl/config/ltmain.m4sh (func_mode_link): Use func_arith
    and func_len throughout for integer arithmetic, fixing
    quadratical amount of counting for reloadable object and
    piecewise archive linking.  Change all comparisons with
    max_cmd_len to test for smaller, non-equal length.
    * THANKS: Update.
    Suggested by Roland Mainz.
    
    Signed-off-by: Ralf Wildenhues <address@hidden>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                  |   17 ++++++++
 THANKS                     |    1 +
 libltdl/config/ltmain.m4sh |   99 +++++++++++++++++++++++++++++---------------
 libltdl/m4/libtool.m4      |   31 +++++++++++++-
 4 files changed, 114 insertions(+), 34 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 63760ce..d482b16 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2008-04-19  Ralf Wildenhues  <address@hidden>
 
+       Exploit shell arithmetic expansion and ${#var}.
+       * libltdl/m4/libtool.m4 (_LT_CHECK_SHELL_FEATURES): Also check
+       for arithmetic expansion, and ${#var}.
+       (_LT_PROG_XSI_SHELLFNS): Define func_arith and func_len
+       accordingly, falling back on 'expr'.  Note that the argument to
+       func_len may not start with a hyphen.  In the pre-Posix
+       fallback, take care not to rely on the exit status of the
+       variable assignment (not portable), but set the length to
+       $max_cmd_len instead.
+       * libltdl/config/ltmain.m4sh (func_mode_link): Use func_arith
+       and func_len throughout for integer arithmetic, fixing
+       quadratical amount of counting for reloadable object and
+       piecewise archive linking.  Change all comparisons with
+       max_cmd_len to test for smaller, non-equal length.
+       * THANKS: Update.
+       Suggested by Roland Mainz.
+
        * libltdl/config/ltmain.m4sh (func_mode_compile): Avoid
        redundant removal of old output files before compilation.
        Do not remove $obj until we have successfully grabbed the
diff --git a/THANKS b/THANKS
index 236bbab..3295b87 100644
--- a/THANKS
+++ b/THANKS
@@ -120,6 +120,7 @@
   Ralf Menzel                  address@hidden
   Robert Ögren                        address@hidden
   Roberto Bagnara              address@hidden
+  Roland Mainz                 address@hidden
   Sebastian Wilhelmi           address@hidden
   Simon Josefsson              address@hidden
   Stephan Kulow                        address@hidden
diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index 8c5c45c..30e70ec 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -2187,7 +2187,8 @@ func_extract_archives ()
       while :; do
         case " $extracted_archives " in
        *" $my_xlib_u "*)
-         extracted_serial=`expr $extracted_serial + 1`
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
          my_xlib_u=lt$extracted_serial-$my_xlib ;;
        *) break ;;
        esac
@@ -4656,7 +4657,8 @@ func_mode_link ()
              # bleh windows
              case $host in
              *cygwin* | mingw*)
-               major=`expr $current - $age`
+               func_arith $current - $age
+               major=$func_arith_result
                versuffix="-$major"
                ;;
              esac
@@ -5219,7 +5221,8 @@ func_mode_link ()
          #
          case $version_type in
          darwin|linux|osf|windows|none)
-           current=`expr $number_major + $number_minor`
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
            age="$number_minor"
            revision="$number_revision"
            ;;
@@ -5229,7 +5232,8 @@ func_mode_link ()
            age="0"
            ;;
          irix|nonstopux)
-           current=`expr $number_major + $number_minor`
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
            age="$number_minor"
            revision="$number_minor"
            lt_irix_increment=no
@@ -5283,10 +5287,12 @@ func_mode_link ()
        darwin)
          # Like Linux, but with the current version available in
          # verstring for coding it into the library header
-         major=.`expr $current - $age`
+         func_arith $current - $age
+         major=.$func_arith_result
          versuffix="$major.$age.$revision"
          # Darwin ld doesn't like 0 for these options...
-         minor_current=`expr $current + 1`
+         func_arith $current + 1
+         minor_current=$func_arith_result
          xlcverstring="${wl}-compatibility_version ${wl}$minor_current 
${wl}-current_version ${wl}$minor_current.$revision"
          verstring="-compatibility_version $minor_current -current_version 
$minor_current.$revision"
          ;;
@@ -5303,10 +5309,11 @@ func_mode_link ()
 
        irix | nonstopux)
          if test "X$lt_irix_increment" = "Xno"; then
-           major=`expr $current - $age`
+           func_arith $current - $age
          else
-           major=`expr $current - $age + 1`
+           func_arith $current - $age + 1
          fi
+         major=$func_arith_result
 
          case $version_type in
            nonstopux) verstring_prefix=nonstopux ;;
@@ -5317,8 +5324,10 @@ func_mode_link ()
          # Add in all the interfaces that we are compatible with.
          loop=$revision
          while test "$loop" -ne 0; do
-           iface=`expr $revision - $loop`
-           loop=`expr $loop - 1`
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
            verstring="$verstring_prefix$major.$iface:$verstring"
          done
 
@@ -5328,20 +5337,24 @@ func_mode_link ()
          ;;
 
        linux)
-         major=.`expr $current - $age`
+         func_arith $current - $age
+         major=.$func_arith_result
          versuffix="$major.$age.$revision"
          ;;
 
        osf)
-         major=.`expr $current - $age`
+         func_arith $current - $age
+         major=.$func_arith_result
          versuffix=".$current.$age.$revision"
          verstring="$current.$age.$revision"
 
          # Add in all the interfaces that we are compatible with.
          loop=$age
          while test "$loop" -ne 0; do
-           iface=`expr $current - $loop`
-           loop=`expr $loop - 1`
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
            verstring="$verstring:${iface}.0"
          done
 
@@ -5362,7 +5375,8 @@ func_mode_link ()
        windows)
          # Use '-' rather than '.', since we only want one
          # extension on DOS 8.3 filesystems.
-         major=`expr $current - $age`
+         func_arith $current - $age
+         major=$func_arith_result
          versuffix="-$major"
          ;;
 
@@ -6010,8 +6024,9 @@ EOF
            for cmd in $cmds; do
              IFS="$save_ifs"
              eval cmd=\"$cmd\"
-             if len=`expr "X$cmd" : ".*"` &&
-              test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; 
then
+             func_len " $cmd"
+             len=$func_len_result
+             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; 
then
                func_show_eval "$cmd" 'exit $?'
                skipped_export=false
              else
@@ -6114,8 +6129,9 @@ EOF
        fi
 
        if test "X$skipped_export" != "X:" &&
-          len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-          test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
          :
        else
          # The command line is too long to link in one step, link piecewise
@@ -6175,14 +6191,20 @@ EOF
            if test -n "$save_libobjs"; then
              func_verbose "creating reloadable object files..."
              output=$output_objdir/$output_la-${k}.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
              # Loop over the list of objects to be linked.
              for obj in $save_libobjs
              do
-               eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
                if test "X$objlist" = X ||
-                  { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-                    test "$len" -le "$max_cmd_len"; }; then
-                 objlist="$objlist $obj"
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
                else
                  # The command $test_cmds is almost too long, add a
                  # command to the queue.
@@ -6195,10 +6217,13 @@ EOF
                    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist 
$last_robj~\$RM $last_robj\"
                  fi
                  last_robj=$output_objdir/$output_la-${k}.$objext
-                 k=`expr $k + 1`
+                 func_arith $k + 1
+                 k=$func_arith_result
                  output=$output_objdir/$output_la-${k}.$objext
                  objlist=$obj
-                 len=1
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
                fi
              done
              # Handle the remaining objects by creating one last
@@ -6933,7 +6958,8 @@ EOF
                # Make sure we don't pick an alternate name that also
                # overlaps.
                newobj=lt$counter-$objbase
-               counter=`expr $counter + 1`
+               func_arith $counter + 1
+               counter=$func_arith_result
                case " $oldobjs " in
                *[\ /]"$newobj "*) ;;
                *) if test ! -f "$gentop/$newobj"; then break; fi ;;
@@ -6948,8 +6974,9 @@ EOF
        fi
        eval cmds=\"$old_archive_cmds\"
 
-       if len=`expr "X$cmds" : ".*" 2>/dev/null` &&
-          test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
          cmds=$old_archive_cmds
        else
          # the command line is too long to link in one step, link in parts
@@ -6959,18 +6986,23 @@ EOF
          objlist=
          concat_cmds=
          save_oldobjs=$oldobjs
+         oldobjs=
          # Is there a better way of finding the last object in the list?
          for obj in $save_oldobjs
          do
            last_oldobj=$obj
          done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
          for obj in $save_oldobjs
          do
-           oldobjs="$objlist $obj"
-           objlist="$objlist $obj"
-           eval test_cmds=\"$old_archive_cmds\"
-           if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-              test "$len" -le "$max_cmd_len"; then
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
              :
            else
              # the above command should be used before it gets too long
@@ -6981,6 +7013,7 @@ EOF
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
              eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
              objlist=
+             len=$len0
            fi
          done
          RANLIB=$save_RANLIB
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index 1fc9ccf..cdab378 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -7054,7 +7054,9 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
 xsi_shell=no
 ( _lt_dummy="a/b/c"
   test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, ) >/dev/null 2>&1 \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
 AC_MSG_RESULT([$xsi_shell])
 _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
@@ -7173,6 +7175,19 @@ func_xform ()
   func_xform_result=${1%.*}.lo
 }
 
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
 _LT_EOF
     ;;
   *) # Bourne compatible functions.
@@ -7240,6 +7255,20 @@ func_xform ()
 {
   func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
 }
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "address@hidden"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
 _LT_EOF
 esac
 


hooks/post-receive
--
GNU Libtool




reply via email to

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