libtool
[Top][All Lists]
Advanced

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

Re: tag inference broken?


From: Scott James Remnant
Subject: Re: tag inference broken?
Date: Sun, 07 Dec 2003 19:04:46 +0000

On Sat, 2003-12-06 at 15:14, Peter O'Gorman wrote:

> Albert Chin wrote:
> | On Sat, Dec 06, 2003 at 10:57:52PM +0900, Peter O'Gorman wrote:
> |
> |>Okay, I must be stupid, the tag inference goes like this:
> |>case $base_compile in
> |>
> | Before the case, what is the output of:
> |   echo .$CC.
> 
> And things begin to make a little more sense, with echo .$CC. and echo
> .$base_compile. before the case statement in both compile and link
> modes, I get the following output # comments added:
> 
> .gcc -arch ppc -arch i386. # This is .$CC.
> .gcc. # And .$base_compile.
> libtool: link: unable to infer tagged configuration
> libtool: link: specify a tag with `--tag'
> make[1]: *** [libltdl.la] Error 1
> make: *** [all] Error 2
> 
> Looks like it is simply infering too early in link mode.
> 
Yeah, my last patch moved the code to before the rest of the argument
parsing to make -shared, -static and -all-static work with a tagged
configuration.

Here's a patch you might want to try; it moves the tagged config
inference to beneath the argument parsing again.  I also had to move the
handling of those three arguments to beneath it as well, even though for
some reason they were separate (I couldn't find a reason for this
anymore...)

Anyway, this probably breaks everything, but try it anyway :-)

Scott
-- 
Have you ever, ever felt like this?
Had strange things happen?  Are you going round the twist?

diff -ruNp libtool-CVS~/ChangeLog libtool-CVS/ChangeLog
--- libtool-CVS~/ChangeLog      2003-11-30 17:13:29.000000000 +0000
+++ libtool-CVS/ChangeLog       2003-12-07 18:59:19.000000000 +0000
@@ -0,0 +1,7 @@
+2003-12-07  Scott James Remnant  <address@hidden>
+
+       * ltmain.in: Move the code to infer the tagged configuration in
+       link mode until after the argument parsing again, so $base_compile
+       contains the complete command line.  Move the code to handle -shared,
+       -static and -all-static until after this.
+       
diff -ruNp libtool-CVS~/ltmain.in libtool-CVS/ltmain.in
--- libtool-CVS~/ltmain.in      2003-11-26 15:20:42.000000000 +0000
+++ libtool-CVS/ltmain.in       2003-12-07 18:54:43.000000000 +0000
@@ -900,87 +900,7 @@ EOF
     thread_safe=no
     vinfo=
     vinfo_number=no
-
-    # Infer tagged configuration to use if any are available and
-    # if one wasn't chosen via the "--tag" command line option.
-    # Only attempt this if the compiler in the base link
-    # command doesn't match the default compiler.
-    if test -n "$available_tags" && test -z "$tagname"; then
-      case "$base_compile " in
-      # Blanks in the command may have been stripped by the calling shell,
-      # but not from the CC environment variable when configure was run.
-      "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;;
-      # Blanks at the start of $base_compile will cause this to fail
-      # if we don't check for them as well.
-      *)
-       for z in $available_tags; do
-         if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; 
then
-           # Evaluate the configuration.
-           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# 
### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
-           case "$base_compile " in
-           "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
-             # The compiler in $compile_command matches
-             # the one in the tagged configuration.
-             # Assume this is the tagged configuration we want.
-             tagname=$z
-             break
-             ;;
-           esac
-         fi
-       done
-       # If $tagname still isn't set, then no tagged configuration
-       # was found and let the user know that the "--tag" command
-       # line option must be used.
-       if test -z "$tagname"; then
-         $echo "$modename: unable to infer tagged configuration"
-         $echo "$modename: specify a tag with \`--tag'" 1>&2
-         exit 1
-#       else
-#         $echo "$modename: using $tagname tagged configuration"
-       fi
-       ;;
-      esac
-    fi
-
-    # We need to know -static, to get the right output filenames.
-    for arg
-    do
-      case $arg in
-      -shared)
-       if test "$build_libtool_libs" != yes; then
-         $echo "$modename: can not build a shared library" 1>&2
-         $echo "Fatal configuration error." 1>&2
-         exit 1
-       fi
-       build_old_libs=no
-       break
-       ;;
-      -all-static | -static)
-       if test "X$arg" = "X-all-static"; then
-         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; 
then
-           $echo "$modename: warning: complete static linking is impossible in 
this configuration" 1>&2
-         fi
-         if test -n "$link_static_flag"; then
-           dlopen_self=$dlopen_self_static
-           # See comment for -static flag below, for more details.
-           compile_command="$compile_command $link_static_flag"
-           finalize_command="$finalize_command $link_static_flag"
-         fi
-       else
-         if test -z "$pic_flag" && test -n "$link_static_flag"; then
-           dlopen_self=$dlopen_self_static
-         fi
-       fi
-       build_libtool_libs=no
-       build_old_libs=yes
-       prefer_static_libs=yes
-       break
-       ;;
-      esac
-    done
-
-    # See if our shared archives depend on static archives.
-    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+    later=
 
     # Go through the arguments, transforming them on the way.
     while test "$#" -gt 0; do
@@ -1247,7 +1167,7 @@ EOF
 
       case $arg in
       -all-static)
-       # The effects of -all-static are defined in a previous loop.
+        later="$later $arg"
        continue
        ;;
 
@@ -1473,16 +1393,12 @@ EOF
        ;;
 
       -shared)
-       # The effects of -shared are defined in a previous loop.
+        later="$later $arg"
        continue
        ;;
 
       -static)
-       # The effects of -static are defined in a previous loop.
-       # We used to do the same as -all-static on platforms that
-       # didn't have a PIC flag, but the assumption that the effects
-       # would be equivalent was wrong.  It would break on at least
-       # Digital Unix and AIX.
+        later="$later $arg"
        continue
        ;;
 
@@ -1718,6 +1634,85 @@ EOF
       exit 1
     fi
 
+    # Infer tagged configuration to use if any are available and
+    # if one wasn't chosen via the "--tag" command line option.
+    # Only attempt this if the compiler in the base link
+    # command doesn't match the default compiler.
+    if test -n "$available_tags" && test -z "$tagname"; then
+      case $base_compile in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; 
then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# 
### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+           case $base_compile in
+           "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
+             # The compiler in $compile_command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         $echo "$modename: unable to infer tagged configuration"
+         $echo "$modename: specify a tag with \`--tag'" 1>&2
+         exit 1
+#       else
+#         $echo "$modename: using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       if test "$build_libtool_libs" != yes; then
+         $echo "$modename: can not build a shared library" 1>&2
+         $echo "Fatal configuration error." 1>&2
+         exit 1
+       fi
+       build_old_libs=no
+       continue
+       ;;
+      -all-static | -static)
+       if test "X$arg" = "X-all-static"; then
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; 
then
+           $echo "$modename: warning: complete static linking is impossible in 
this configuration" 1>&2
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+           # See comment for -static flag below, for more details.
+           compile_command="$compile_command $link_static_flag"
+           finalize_command="$finalize_command $link_static_flag"
+         fi
+       else
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+       fi
+       build_libtool_libs=no
+       build_old_libs=yes
+       prefer_static_libs=yes
+       continue
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
     if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; 
then
       eval arg=\"$export_dynamic_flag_spec\"
       compile_command="$compile_command $arg"

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

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