libtool
[Top][All Lists]
Advanced

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

Re: win32 short name and IFS='~'


From: Naofumi Yasufuku
Subject: Re: win32 short name and IFS='~'
Date: Tue, 01 Apr 2003 16:51:16 +0900
User-agent: Wanderlust/2.10.0 (Venus) SEMI/1.14.5 (Awara-Onsen) FLIM/1.14.5 (Demachiyanagi) APEL/10.4 Emacs/21.2 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI)

At Mon, 31 Mar 2003 23:10:35 +0900,
Naofumi Yasufuku wrote:
> 
> [1  <text/plain; US-ASCII (7bit)>]
> At Mon, 31 Mar 2003 05:52:47 +0900,
> Naofumi Yasufuku wrote:
> > 
> > Hi,
> > 
> > libtool uses '~' as IFS in some commands (ex. $archive_expsym_cmds),
> > so that win32 short name which includes '~' (ex. c:/progra~1/foo/...)
> > causes a problem. For example, if we want to build DLL which is linked
> > with -Lc:/progra~1/foo/lib -lbar, DLL build command fails.
> > 
> > I think it can be solved by putting off the command list variable
> > expansion until its execution loop.
> > 
> 
> This is the patch against the latest CVS HEAD.
> I've tested it under Cygwin/MinGW on my WinXP box.
> 
> Could anyone test this patch?
> 
> Regards,
> --Naofumi
> 
> tilde-ifs.patch:
[snip]


Former tilde-ifs.patch has a problem with piecewise linking.

This is the fixed version of tilde-ifs.patch.
I've tested it under MinGW/Cygwin and Linux.

Regards,
--Naofumi


tilde-ifs-2.patch:
-------------------------------------------------------------------------------
Index: ltmain.in
===================================================================
RCS file: /cvsroot/libtool/libtool/ltmain.in,v
retrieving revision 1.333
diff -u -r1.333 ltmain.in
--- ltmain.in   31 Mar 2003 17:36:00 -0000      1.333
+++ ltmain.in   1 Apr 2003 07:28:58 -0000
@@ -2279,9 +2279,9 @@
            else
              $show "extracting exported symbol list from \`$soname'"
              save_ifs="$IFS"; IFS='~'
-             eval cmds=\"$extract_expsyms_cmds\"
-             for cmd in $cmds; do
+             for cmd in $extract_expsyms_cmds; do
                IFS="$save_ifs"
+               eval cmd=\"$cmd\"
                $show "$cmd"
                $run eval "$cmd" || exit $?
              done
@@ -2292,9 +2292,9 @@
            if test -f "$output_objdir/$newlib"; then :; else
              $show "generating import library for \`$soname'"
              save_ifs="$IFS"; IFS='~'
-             eval cmds=\"$old_archive_from_expsyms_cmds\"
-             for cmd in $cmds; do
+             for cmd in $old_archive_from_expsyms_cmds; do
                IFS="$save_ifs"
+               eval cmd=\"$cmd\"
                $show "$cmd"
                $run eval "$cmd" || exit $?
              done
@@ -3541,10 +3541,10 @@
            $show "generating symbol list for \`$libname.la'"
            export_symbols="$output_objdir/$libname.exp"
            $run $rm $export_symbols
-           eval cmds=\"$export_symbols_cmds\"
            save_ifs="$IFS"; IFS='~'
-           for cmd in $cmds; do
+           for cmd in $export_symbols_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
                $show "$cmd"
@@ -3661,19 +3661,20 @@
        # Do each of the archive commands.
        if test "$module" = yes && test -n "$module_cmds" ; then
          if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-           eval cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
          else
-           eval cmds=\"$module_cmds\"
+           cmds=$module_cmds
          fi
        else
-       if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-         eval cmds=\"$archive_expsym_cmds\"
-       else
-         eval cmds=\"$archive_cmds\"
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           cmds=$archive_expsym_cmds
+         else
+           cmds=$archive_cmds
          fi
        fi
 
-       if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` &&
+       eval test_cmds=\"$cmds\"
+       if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
           test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
          :
        else
@@ -3695,8 +3696,7 @@
 
          # Clear the reloadable object creation command queue and
          # initialize k to one.
-         test_cmds=
-         concat_cmds=
+         temp_cmds=
          objlist=
          delfiles=
          last_robj=
@@ -3705,22 +3705,22 @@
          # Loop over the list of objects to be linked.
          for obj in $save_libobjs
          do
-           eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+           eval temp_cmds=\"$reload_cmds $objlist $last_robj\"
            if test "X$objlist" = X ||
-              { len=`expr "X$test_cmds" : ".*"` &&
+              { len=`expr "X$temp_cmds" : ".*"` &&
                 test "$len" -le "$max_cmd_len"; }; then
              objlist="$objlist $obj"
            else
-             # The command $test_cmds is almost too long, add a
-             # command to the queue.
-             if test "$k" -eq 1 ; then
-               # The first file doesn't have a previous command to add.
-               eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
-             else
-               # All subsequent reloadable object files will link in
-               # the last one created.
-               eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist 
$last_robj\"
-             fi
+             # The command $temp_cmds is almost too long, link piecewise.
+             temp_cmds="$reload_cmds \$objlist \$last_robj"
+              save_ifs="$IFS"; IFS='~'
+             for cmd in $temp_cmds; do
+               IFS="$save_ifs"
+               eval cmd=\"$cmd\"
+               $show "$cmd"
+               $run eval "$cmd" || exit $?
+             done
+             IFS="$save_ifs"
              last_robj=$output_objdir/$save_output-${k}.$objext
              k=`expr $k + 1`
              output=$output_objdir/$save_output-${k}.$objext
@@ -3731,16 +3731,30 @@
          # Handle the remaining objects by creating one last
          # reloadable object file.  All subsequent reloadable object
          # files will link in the last one created.
-         test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-         eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+         temp_cmds="$reload_cmds \$objlist \$last_robj"
+         save_ifs="$IFS"; IFS='~'
+         for cmd in $temp_cmds; do
+           IFS="$save_ifs"
+           eval cmd=\"$cmd\"
+           $show "$cmd"
+           $run eval "$cmd" || exit $?
+         done
+         IFS="$save_ifs"
 
          if ${skipped_export-false}; then
            $show "generating symbol list for \`$libname.la'"
            export_symbols="$output_objdir/$libname.exp"
            $run $rm $export_symbols
            libobjs=$output
-           # Append the command to create the export file.
-           eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+           # Execute the command to create the export file.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $export_symbols_cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             $show "$cmd"
+             $run eval "$cmd" || exit $?
+           done
+           IFS="$save_ifs"
           fi
 
          # Set up a command to remove the reloadale object files
@@ -3752,17 +3766,6 @@
            delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
          done
 
-         $echo "creating a temporary reloadable object file: $output"
-
-         # Loop through the commands generated above and execute them.
-         save_ifs="$IFS"; IFS='~'
-         for cmd in $concat_cmds; do
-           IFS="$save_ifs"
-           $show "$cmd"
-           $run eval "$cmd" || exit $?
-         done
-         IFS="$save_ifs"
-
          libobjs=$output
          # Restore the value of output.
          output=$save_output
@@ -3770,23 +3773,15 @@
          if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
            eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
          fi
-         # Expand the library linking commands again to reset the
-         # value of $libobjs for piecewise linking.
-
-         # Do each of the archive commands.
-         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-           eval cmds=\"$archive_expsym_cmds\"
-         else
-           eval cmds=\"$archive_cmds\"
-         fi
 
          # Append the command to remove the reloadable object files
          # to the just-reset $cmds.
-         eval cmds=\"\$cmds~$rm $delfiles\"
+         cmds="$cmds~\$rm \$delfiles"
        fi
        save_ifs="$IFS"; IFS='~'
        for cmd in $cmds; do
          IFS="$save_ifs"
+         eval cmd=\"$cmd\"
          $show "$cmd"
          $run eval "$cmd" || exit $?
        done
@@ -3937,10 +3932,10 @@
       reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e 
'/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### 
testsuite: skip nested quoting test
 
       output="$obj"
-      eval cmds=\"$reload_cmds\"
       save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
+      for cmd in $reload_cmds; do
        IFS="$save_ifs"
+       eval cmd=\"$cmd\"
        $show "$cmd"
        $run eval "$cmd" || exit $?
       done
@@ -3973,10 +3968,10 @@
        # Only do commands if we really have different PIC objects.
        reload_objs="$libobjs $reload_conv_objs"
        output="$libobj"
-       eval cmds=\"$reload_cmds\"
        save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
+       for cmd in $reload_cmds; do
          IFS="$save_ifs"
+         eval cmd=\"$cmd\"
          $show "$cmd"
          $run eval "$cmd" || exit $?
        done
@@ -4948,11 +4943,12 @@
 
       # Do each command in the archive commands.
       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = 
yes; then
-       eval cmds=\"$old_archive_from_new_cmds\"
+       cmds=$old_archive_from_new_cmds
       else
-       eval cmds=\"$old_archive_cmds\"
+       cmds=$old_archive_cmds
 
-       if len=`expr "X$cmds" : ".*"` &&
+       eval test_cmds=\"$cmds\"
+       if len=`expr "X$test_cmds" : ".*"` &&
             test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
          :
        else
@@ -4961,7 +4957,6 @@
          save_RANLIB=$RANLIB
          RANLIB=:
          objlist=
-         concat_cmds=
          save_oldobjs=$oldobjs
          # GNU ar 2.10+ was changed to match POSIX; thus no paths are
          # encoded into archives.  This makes 'ar r' malfunction in
@@ -4996,23 +4991,29 @@
              if test "$obj" = "$last_oldobj" ; then
                RANLIB=$save_RANLIB
              fi  
-             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             # a piece archive
+             save_ifs="$IFS"; IFS='~'
+             for cmd in $old_archive_cmds; do
+               IFS="$save_ifs"
+               eval cmd=\"$cmd\"
+               $show "$cmd"
+               $run eval "$cmd" || exit $?
+             done
+             IFS="$save_ifs"
              objlist=
            fi
          done
          RANLIB=$save_RANLIB
          oldobjs=$objlist
          if test "X$oldobjs" = "X" ; then
-           eval cmds=\"\$concat_cmds\"
-         else
-           eval cmds=\"\$concat_cmds~$old_archive_cmds\"
+           cmds=""
          fi
        fi
       fi
       save_ifs="$IFS"; IFS='~'
       for cmd in $cmds; do
        IFS="$save_ifs"
+       eval cmd=\"$cmd\"
        $show "$cmd"
        $run eval "$cmd" || exit $?
       done
@@ -5408,10 +5409,10 @@
 
          # Do each command in the postinstall commands.
          lib="$destdir/$realname"
-         eval cmds=\"$postinstall_cmds\"
          save_ifs="$IFS"; IFS='~'
-         for cmd in $cmds; do
+         for cmd in $postinstall_cmds; do
            IFS="$save_ifs"
+           eval cmd=\"$cmd\"
            $show "$cmd"
            $run eval "$cmd" || exit $?
          done
@@ -5630,10 +5631,10 @@
       fi
 
       # Do each command in the postinstall commands.
-      eval cmds=\"$old_postinstall_cmds\"
       save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
+      for cmd in $old_postinstall_cmds; do
        IFS="$save_ifs"
+       eval cmd=\"$cmd\"
        $show "$cmd"
        $run eval "$cmd" || exit $?
       done
@@ -5668,10 +5669,10 @@
       for libdir in $libdirs; do
        if test -n "$finish_cmds"; then
          # Do each command in the finish commands.
-         eval cmds=\"$finish_cmds\"
          save_ifs="$IFS"; IFS='~'
-         for cmd in $cmds; do
+         for cmd in $finish_cmds; do
            IFS="$save_ifs"
+           eval cmd=\"$cmd\"
            $show "$cmd"
            $run eval "$cmd" || admincmds="$admincmds
        $cmd"
@@ -5945,10 +5946,10 @@
          if test "$mode" = uninstall; then
            if test -n "$library_names"; then
              # Do each command in the postuninstall commands.
-             eval cmds=\"$postuninstall_cmds\"
              save_ifs="$IFS"; IFS='~'
-             for cmd in $cmds; do
+             for cmd in $postuninstall_cmds; do
                IFS="$save_ifs"
+               eval cmd=\"$cmd\"
                $show "$cmd"
                $run eval "$cmd"
                if test "$?" -ne 0 && test "$rmforce" != yes; then
@@ -5960,10 +5961,10 @@
 
            if test -n "$old_library"; then
              # Do each command in the old_postuninstall commands.
-             eval cmds=\"$old_postuninstall_cmds\"
              save_ifs="$IFS"; IFS='~'
-             for cmd in $cmds; do
+             for cmd in $old_postuninstall_cmds; do
                IFS="$save_ifs"
+               eval cmd=\"$cmd\"
                $show "$cmd"
                $run eval "$cmd"
                if test "$?" -ne 0 && test "$rmforce" != yes; then
-------------------------------------------------------------------------------


Attachment: tilde-ifs-2.patch.gz
Description: Binary data


reply via email to

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