This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: libtool bug


Charles Wilson schrieb:
The attached patch (against libtool cvs branch 2.0) ain't pretty, but it works on cygwin and shouldn't break other platforms.

------------------------------------------------------------------------
2004-10-09 Charles Wilson <spam.protected>

	* config/ltmain.m4sh (func_mode_link): don't relink
	on cygwin/mingw; no need.  But do ensure that wrappers
	are created unless doing a purely static build.


Which will leed to this backported patch (attached) for our folks using libtool-devel-1.5.10-1. (patch uses absolute paths)


libtool-2cvs is a bit advanced, but this is essentially what charles patch did.

It did help on re-building gdal, esp. in the make install step.
I will also check on my other failing packages. (libming, php)

But it didn't help on another (related?) new cygwin libtool problem:

Sometimes it switches to .exe instead of .dll. Will investigate this further. My current theory is that -o <soname> just missed the .dll extension and .exe is then taken as default.

/bin/sh.exe ./libtool --mode=link g++ $LIBS -Wl,--enable-runtime-pseudo-reloc -o libgdal.la ./gcore/*.lo ./port/*.lo ./alg/*.lo ... \
-rpath /usr/lib \
-no-undefined \
-version-info 5:1:4
rm -fr .libs/libgdal.a .libs/libgdal.dll.a .libs/libgdal.la .libs/libgdal.lai
creating reloadable object files...
creating a temporary reloadable object file: .libs/libgdal.la-2.o
/usr/i686-pc-cygwin/bin/ld.exe -r -o .libs/libgdal.la-1.o $OBJS...
/usr/i686-pc-cygwin/bin/ld.exe -r -o .libs/libgdal.la-2.o $OBJS...


g++ -shared -nostdlib .libs/libgdal.la-2.o -L/usr/lib /usr/lib/libgeos.dll.a /usr/lib/libjasper.dll.a /usr/lib/libpng.dll.a /usr/lib/libz.dll.a /usr/lib/libsqlite3.dll.a -L/lib /usr/lib/libpq.dll.a -L/usr/lib/gcc/i686-pc-cygwin/3.4.1 -L/usr/lib/gcc/i686-pc-cygwin/3.4.1/../../.. -lstdc++ -lgcc -lcygwin -luser32 -lkernel32 -ladvapi32 -lshell32 -lgcc -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-runtime-pseudo-reloc
-o .libs/cyggdal-1 -Wl,--image-base=0x10000000
^^^ .dll missing!
-Wl,--out-implib,.libs/libgdal.dll.a


does this ring a bell somewhere? $output missing the extension.

I see in one code section that for case $linkmode prog) the .exe extension and then any extension is stripped.

    case $linkmode in
...
    prog)
      case $host in
	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
      esac

but we are in linkmode=lib.
and this is the failing place, exactly after your patch:

if test "$wrappers_required" = no; then
# Replace the output file specification.
compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`


$output misses the ".dll"
I would rather use something like this:

compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/${outputname}${shrext}"'%g'`

correct?
--
Reini Urban
http://xarch.tu-graz.ac.at/home/rurban/
--- /usr/autotool/devel/share/libtool/ltmain.sh-1.5.10	2004-09-22 08:50:51.001000000 +0200
+++ /usr/autotool/devel/share/libtool/ltmain.sh	2004-10-10 15:19:24.098794800 +0200
@@ -2414,10 +2414,19 @@
 	link_static=no # Whether the deplib will be linked statically
 	if test -n "$library_names" &&
 	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	    case $host in
+	    *cygwin* | *mingw*)
+		# No point in relinking DLLs because paths are not encoded
+		notinst_deplibs="$notinst_deplibs $lib"
+		need_relink=no
+	      ;;
+	    *)
 	  if test "$installed" = no; then
 	    notinst_deplibs="$notinst_deplibs $lib"
 	    need_relink=yes
 	  fi
+	    ;;
+	    esac
 	  # This is a shared library
 
 	  # Warn about portability, can't link against -module's on
@@ -4499,7 +4508,20 @@
 	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
       fi
 
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *)
       if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
 	# Replace the output file specification.
 	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
 	link_command="$compile_command$compile_rpath"

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]