bug-vcdimager
[Top][All Lists]
Advanced

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

Re: [VCDImager Bugs/Devel] vcdimager 0.7.20 build problem under Mac OS X


From: Sebastian Hagedorn
Subject: Re: [VCDImager Bugs/Devel] vcdimager 0.7.20 build problem under Mac OS X
Date: Sun, 07 Mar 2004 21:30:59 +0100

Hi,

-- "R. Bernstein" <address@hidden> is rumored to have mumbled on Mittwoch, 3. März 2004 8:40 Uhr -0500 regarding Re: [VCDImager Bugs/Devel] vcdimager 0.7.20 build problem under Mac OS X:

Sebastian Hagedorn writes:
 > strange, I haven't had this problem with libcdio 0.66. Or have you
added   > versioning support in 0.67?

Looking at NEWS for libcdio 0.66, I see the versioning was in
0.66. 0.67 added --without-versioned-libs.

 > I'll try to find out what's the best route to take.

Thanks.

I've examined this some more. Versioning works fine under OS X with libcdio 0.67. I believe the reason for that to be a different version of libtool:

libcdio-0.67/libtool --version
ltmain.sh (GNU libtool) 1.4.3 (1.922.2.111 2002/10/23 02:54:36)

vcdimager-0.7.20] hgd% ./libtool --version
ltmain.sh (GNU libtool) 1.5.2 (1.1220.2.60 2004/01/25 12:25:08) Debian: 192 $

When libcdio calls libtool, the following happens:

/bin/sh ../libtool --mode=link gcc -g -O2 -Wall -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wunused -Wpointer-arith -Wwrite-strings -Wnested-externs -Wno-sign-compare -L/sw/lib -o libiso9660.la -rpath /sw/lib -version-info 1:0:1 -Wl,--version-script=libiso9660.la.ver iso9660.lo iso9660_fs.lo xa.lo libcdio.la -lm

Note that "-Wl,--version-script=libiso9660.la.ver" is part of that command. It results in this:

gcc -r -keep_private_externs -nostdlib -o .libs/libiso9660.0.1.0.dylib-master.o iso9660.lo iso9660_fs.lo xa.lo && gcc -dynamiclib -flat_namespace -undefined suppress -o .libs/libiso9660.0.1.0.dylib .libs/libiso9660.0.1.0.dylib-master.o -L/sw/lib -L./.libs -lcdio -lm -lc --version-script=libiso9660.la.ver -install_name /sw/lib/libiso9660.0.dylib -compatibility_version 2 -current_version 2.0

For whatever reason the second call of gcc includes only "--version-script=libiso9660.la.ver", which gcc ignores (note the absence of -Wl, in front of it). The versioning OS X uses works because of the "-version-info 1:0:1" flag.

When vcdimager calls libtool, it looks like this:

/bin/sh ../libtool --mode=link gcc -g -O2 -Wall -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wunused -Wpointer-arith -Wwrite-strings -Wnested-externs -Wno-sign-compare -L/sw/lib -o libvcdinfo.la -rpath /sw/lib -version-info 0:1:0 -Wl,--version-script=libvcdinfo.la.ver info.lo inf.lo info_private.lo vcd_read.lo -L/sw/lib -lcdio -L/sw/lib -liso9660 -lcdio ../lib/libvcd.la -lm

This is basically the same as with libcdio. But the newer libtool behaves differently:

gcc -dynamiclib -undefined dynamic_lookup -o .libs/libvcdinfo.0.0.1.dylib .libs/info.o .libs/inf.o .libs/info_private.o .libs/vcd_read.o -all_load ../lib/.libs/libvcd.a -L/sw/lib /sw/lib/libiso9660.dylib /sw/lib/libcdio.dylib -lm -Wl,--version-script=libvcdinfo.la.ver -install_name /sw/lib/libvcdinfo.0.dylib -compatibility_version 1 -current_version 1.1

It does only one call to gcc, which contains the original "-Wl,--version-script=libvcdinfo.la.ver" part. Thus the flag "--version-script=libvcdinfo.la.ver" isn't dropped by gcc but rather passed to the loader. The loader (or rather Apple's own libtool) doesn't know it and barfs:

/usr/bin/libtool: unknown option character `-' in: --version-script=libvcdinfo.la.ver

I suppose that libcdio working is just coincidence. If my analysis is correct, the configure script should determine whether GNU ld is being used or not. In fact, it does so already. What needs to be done is for "-Wl,--version-script=libvcdinfo.la.ver" to be passed to libtool *only* if GNU ld is being used ... versioning should *still* work, because libtool does the right thing in translating the "-version-info" flag to the appropriate " -compatibility_version" and "-current_version" flags that are used by OS X.
--
Sebastian Hagedorn
Ehrenfeldgürtel 156, 50823 Köln, Germany
http://www.spinfo.uni-koeln.de/~hgd/

"Being just contaminates the void" - Robyn Hitchcock




reply via email to

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