]> git.ipfire.org Git - thirdparty/pciutils.git/commitdiff
Fix building shared libraries on Darwin
authorRichard Yao <ryao@gentoo.org>
Mon, 20 Oct 2014 03:13:06 +0000 (23:13 -0400)
committerMartin Mares <mj@ucw.cz>
Sat, 1 Nov 2014 15:41:00 +0000 (16:41 +0100)
The original patch by Apple did not support building shared libraries on
Darwin. This corrects that oversight. It also fixes a few other
miscellaneous issues like incorrect platform detection and the lack of
an entry in the README file.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Makefile
README
lib/Makefile
lib/access.c
lib/configure
lib/internal.h

index 0a21ee80cd83414617f83b8a183f04774cfd05cf..9589ea34d95cedec2751c881b304def8e4c16caf 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -114,7 +114,11 @@ install: all
        $(INSTALL) -c -m 644 lspci.8 setpci.8 update-pciids.8 $(DESTDIR)$(MANDIR)/man8
        $(INSTALL) -c -m 644 pcilib.7 $(DESTDIR)$(MANDIR)/man7
 ifeq ($(SHARED),yes)
-       ln -sf $(PCILIB) $(DESTDIR)$(LIBDIR)/$(LIBNAME).so$(ABI_VERSION)
+ifeq ($(LIBEXT),dylib)
+       ln -sf $(PCILIB) $(DESTDIR)$(LIBDIR)/$(LIBNAME)$(ABI_VERSION).$(LIBEXT)
+else
+       ln -sf $(PCILIB) $(DESTDIR)$(LIBDIR)/$(LIBNAME).$(LIBEXT)$(ABI_VERSION)
+endif
 endif
 
 ifeq ($(SHARED),yes)
@@ -130,7 +134,11 @@ install-lib: $(PCIINC_INS) lib/$(PCILIBPC) install-pcilib
        $(INSTALL) -c -m 644 $(PCIINC_INS) $(DESTDIR)$(INCDIR)/pci
        $(INSTALL) -c -m 644 lib/$(PCILIBPC) $(DESTDIR)$(PKGCFDIR)
 ifeq ($(SHARED),yes)
-       ln -sf $(LIBNAME).so$(ABI_VERSION) $(DESTDIR)$(LIBDIR)/$(LIBNAME).so
+ifeq ($(LIBEXT),dylib)
+       ln -sf $(LIBNAME)$(ABI_VERSION).$(LIBEXT) $(DESTDIR)$(LIBDIR)/$(LIBNAME).$(LIBEXT)
+else
+       ln -sf $(LIBNAME).$(LIBEXT)$(ABI_VERSION) $(DESTDIR)$(LIBDIR)/$(LIBNAME).$(LIBEXT)
+endif
 endif
 
 uninstall: all
diff --git a/README b/README
index d136b86390955e875151ad599ff7408b4671ff76..32f5fa2f784e9af88d4dd3e4a12209c09d6f07ac 100644 (file)
--- a/README
+++ b/README
@@ -26,6 +26,7 @@ In runs on the following systems:
        CYGWIN          (direct port access)
        BeOS            (via syscalls)
        Haiku           (via /dev/misc/poke)
+       Darwin          (via IOKit)
 
 It should be very easy to add support for other systems as well (volunteers
 wanted; if you want to try that, I'll be very glad to see the patches and
index 7bab161934bbd716027b82e1b80960dc3329f1ec..1fedbe639eaee98700d5d6018daf56d820a8ec5c 100644 (file)
@@ -56,7 +56,11 @@ $(PCILIB): $(addsuffix .o,$(OBJS))
 else
 CFLAGS += -fPIC -fvisibility=hidden
 $(PCILIB): $(addsuffix .o,$(OBJS))
+ ifdef PCI_HAVE_PM_DARWIN_DEVICE
+       $(CC) -shared $(LDFLAGS) $(SONAME) -Wl,-install_name,$(LIBDIR)/$(PCILIB) -o $@ $^ $(LIB_LDLIBS)
+ else
        $(CC) -shared $(LDFLAGS) $(SONAME) -Wl,--version-script=libpci.ver -o $@ $^ $(LIB_LDLIBS)
+ endif
 endif
 
 $(PCILIBPC): libpci.pc.in
index c23a2fd159723f62f9febcdb2f6bea26db600672..bb5c9ceea1f58e0e5a7429bb00bd361b4fd972e9 100644 (file)
@@ -170,11 +170,13 @@ pci_fill_info_v32(struct pci_dev *d, int flags)
 /* In version 3.1, pci_fill_info got new flags => versioned alias */
 /* In version 3.2, the same has happened */
 STATIC_ALIAS(int pci_fill_info(struct pci_dev *d, int flags), pci_fill_info_v32(d, flags));
+#ifndef __APPLE__
 DEFINE_ALIAS(int pci_fill_info_v30(struct pci_dev *d, int flags), pci_fill_info_v32);
 DEFINE_ALIAS(int pci_fill_info_v31(struct pci_dev *d, int flags), pci_fill_info_v32);
 SYMBOL_VERSION(pci_fill_info_v30, pci_fill_info@LIBPCI_3.0);
 SYMBOL_VERSION(pci_fill_info_v31, pci_fill_info@LIBPCI_3.1);
 SYMBOL_VERSION(pci_fill_info_v32, pci_fill_info@@LIBPCI_3.2);
+#endif
 
 void
 pci_setup_cache(struct pci_dev *d, byte *cache, int len)
index e00007926b60ff97f8a3842f19f02568056e08fb..a647d336b091a9f3795ac961a1198907b632d69c 100755 (executable)
@@ -58,6 +58,7 @@ echo >$m 'WITH_LIBS='
 
 echo_n "Looking for access methods..."
 LIBRESOLV=-lresolv
+LIBEXT=so
 
 case $sys in
        linux*)
@@ -101,12 +102,13 @@ case $sys in
                LIBRESOLV=
                ;;
 
-        darwin)
+        darwin*)
                echo_n " darwin-device"
                echo >>$c '#define PCI_HAVE_PM_DARWIN_DEVICE'
                echo >>$m 'WITH_LIBS+=-lresolv -framework CoreFoundation -framework IOKit'
                echo >>$c '#define PCI_HAVE_64BIT_ADDRESS'
                LIBRESOLV=
+               LIBEXT=dylib
                ;;
        aix)
                echo_n " aix-device"
@@ -146,6 +148,7 @@ case $sys in
                ;;
 esac
 
+echo >>$m "LIBEXT="$LIBEXT
 echo >>$c '#define PCI_HAVE_PM_DUMP'
 echo " dump"
 
@@ -227,13 +230,17 @@ if [ "$SHARED" = no ] ; then
        echo >>$m 'LDLIBS=$(WITH_LIBS)'
        echo >>$m 'LIB_LDLIBS='
 else
-       echo >>$m 'PCILIB=$(LIBNAME).so.$(VERSION)'
+       if [ "$LIBEXT" = so ]; then
+               echo >>$m 'PCILIB=$(LIBNAME).$(LIBEXT).$(VERSION)'
+       else
+               echo >>$m 'PCILIB=$(LIBNAME).$(VERSION).$(LIBEXT)'
+       fi
        # We link the dependencies _to_ the library, so we do not need explicit deps in .pc
        echo >>$m 'LDLIBS='
        echo >>$m 'LIB_LDLIBS=$(WITH_LIBS)'
        echo >>$c '#define PCI_SHARED_LIB'
-       if [ "$SHARED" = yes ; then
-               echo >>$m 'SONAME=-Wl,-soname,$(LIBNAME).so$(ABI_VERSION)'
+       if [ "$SHARED" = yes -a "$LIBEXT" = so ]; then
+               echo >>$m 'SONAME=-Wl,-soname,$(LIBNAME).$(LIBEXT)$(ABI_VERSION)'
        fi
 fi
 echo >>$m 'PCILIBPC=$(LIBNAME).pc'
index 6045948656af30bf2a4716dc16f5c4565fb88685..03c02f95ce5d50d0a22f14cfcf8823498debb7d4 100644 (file)
 
 #ifdef PCI_SHARED_LIB
 #define PCI_ABI __attribute__((visibility("default")))
+#ifdef __APPLE__
+#define STATIC_ALIAS(_decl, _for) _decl { return _for; }
+#else
 #define STATIC_ALIAS(_decl, _for)
+#endif
 #define DEFINE_ALIAS(_decl, _for) extern _decl __attribute__((alias(#_for)))
 #define SYMBOL_VERSION(_int, _ext) asm(".symver " #_int "," #_ext)
 #else