On Aug 31, 2010, at 7:37 AM, Michael Dickens wrote:

Does any project beyond GNU Radio's USRP actually -require- the "libusb-legacy" (0.1.12) port / library?

The reason I'm asking is that I want to rename the installed "libusb- legacy" libraries from "libusb.dylib" (etc) to "libusb- legacy.dylib" (etc) in order to avoid the (as I'm calling it) "same name different directory" library linking issue described below [*]. I've verified that this renaming is relatively simple to implement via REINPLACE patches to the "libusb-legacy" code, and that it does indeed resolve the "same name different directory" issue (because, well, the libraries no longer have the same name :).

NOTES
---
1) There is a "libusb-compat" version that is API compatible (not ABI compatible, which is why USRP requires the legacy version), which almost all of the MacPorts ports have been moved to using. In a search of all current MacPorts Portfiles, I find that libmtp (and, Amarok via that) has this library requirement, but those ports can use libusb-compat -- so, I'm updating the Portfiles to reflect this change. Hence, after the change, and inside MacPorts only, the USRP port will be the only port to -require- the libusb-legacy port.

2) All versions of LIBUSB (1.0, compat, legacy) install a PKGCONFIG file that describes the necessary LDFLAGS, CFLAGS, and so forth for compiling and linking -- in my experience, all modern MAKE variants (qmake, cmake, autotools) either directly check for PKGCONFIG files or easily allow for their use & hence I'd like to think that nobody hard-wires these external libraries any longer. My proposed change will be reflected in the installed PKGCONFIG file for libusb-legacy, so relinking your external-to-MacPorts project should be just a matter of re-configuring and re-building.

[*] "same name different directory" library link issue
---
Suppose we have the libraries:

1) "libfoo" is installed with FOO_LDFLAGS="-L${prefix}/lib -lfoo";

2) "libusb-compat" is installed with LIBUSB_COMPAT_LDFLAGS="-L$ {prefix}/lib -lusb";

3) "libusb-legacy" is installed with LIBUSB_LEGACY_LDFLAGS="-L$ {prefix}/lib/libusb-legacy -lusb";

then what is the linking result from:

gcc -o foo foo.o ${FOO_LDFLAGS} ${LIBUSB_LEGACY_LDFLAGS}

(assuming that the commands and files exist and are otherwise valid)? Expanding this command out I get:

gcc -o foo foo.o -L${prefix}/lib -lfoo -L${prefix}/lib/libusb-legacy -lusb

and since GCC works by searching the -L paths in the order presented, "-lusb" will be found in ${prefix}/lib, not in my desired ${prefix}/lib/libusb-legacy. Hence, I need to do one of:

Wouldn't adding your desired flags to the front of configure.env, configure.pre_args or where ever else needed work?


// Brad
_______________________________________________
macports-users mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macports-users

Reply via email to