[libvirt] [PATCH 06/15] Generate libvirt.def from libvirt.syms

Matthias Bolte matthias.bolte at googlemail.com
Mon Mar 22 01:25:36 UTC 2010


The MinGW linker needs the libvirt.def file.
---
 configure.ac    |    5 +++++
 src/.gitignore  |    1 +
 src/Makefile.am |   15 +++++++++++----
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index bcf1d5a..6e568ee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1733,6 +1733,7 @@ CYGWIN_EXTRA_LIBADD=
 CYGWIN_EXTRA_PYTHON_LIBADD=
 MINGW_EXTRA_LDFLAGS=
 WIN32_EXTRA_CFLAGS=
+LIBVIRT_SYMBOL_FILE=libvirt.syms
 case "$host" in
   *-*-cygwin*)
     CYGWIN_EXTRA_LDFLAGS="-no-undefined"
@@ -1752,6 +1753,9 @@ case "$host" in
     if test "x$enable_shared" = "xno"; then
       WIN32_EXTRA_CFLAGS="-DLIBVIRT_STATIC"
     fi
+    # Also set the symbol file to .def, so src/Makefile generates libvirt.def
+    # from libvirt.syms and passes libvirt.def instead of libvirt.syms to the linker
+    LIBVIRT_SYMBOL_FILE=libvirt.def
     ;;
 esac
 AC_SUBST([CYGWIN_EXTRA_LDFLAGS])
@@ -1759,6 +1763,7 @@ AC_SUBST([CYGWIN_EXTRA_LIBADD])
 AC_SUBST([CYGWIN_EXTRA_PYTHON_LIBADD])
 AC_SUBST([MINGW_EXTRA_LDFLAGS])
 AC_SUBST([WIN32_EXTRA_CFLAGS])
+AC_SUBST([LIBVIRT_SYMBOL_FILE])
 
 dnl Look for windres to build a Windows icon resource.
 AC_CHECK_TOOL([WINDRES], [windres], [no])
diff --git a/src/.gitignore b/src/.gitignore
index 26b8689..a5c27a5 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -12,6 +12,7 @@ Makefile.in
 *.cov
 libvirt_parthelper
 libvirt_lxc
+libvirt.def
 libvirt.syms
 *.i
 *.s
diff --git a/src/Makefile.am b/src/Makefile.am
index 0aa3443..fea1bd3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -828,7 +828,7 @@ EXTRA_DIST += \
   libvirt_macvtap.syms		\
   libvirt_daemon.syms
 
-BUILT_SOURCES = libvirt.syms
+BUILT_SOURCES = libvirt.syms libvirt.def
 
 libvirt.syms: libvirt_public.syms $(USED_SYM_FILES)
 	rm -f $@-tmp $@
@@ -844,18 +844,25 @@ libvirt.syms: libvirt_public.syms $(USED_SYM_FILES)
 	chmod a-w $@-tmp
 	mv $@-tmp libvirt.syms
 
+libvirt.def: libvirt.syms
+	rm -f -- $@-tmp $@
+	printf 'EXPORTS\n' > $@-tmp
+	sed -e '/^$$/d; /#/d; /:/d; /\}/d; /\*/d; /LIBVIRT_/d; s/\(.*\)\;/\1/g' $^ >> $@-tmp
+	chmod a-w $@-tmp
+	mv $@-tmp libvirt.def
+
 # Empty source list - it merely links a bunch of convenience libs together
 libvirt_la_SOURCES =
 libvirt_la_LIBADD += \
 		    $(CYGWIN_EXTRA_LIBADD) ../gnulib/lib/libgnu.la
-libvirt_la_LDFLAGS = $(VERSION_SCRIPT_FLAGS)libvirt.syms \
+libvirt_la_LDFLAGS = $(VERSION_SCRIPT_FLAGS)$(LIBVIRT_SYMBOL_FILE) \
                      -version-info $(LIBVIRT_VERSION_INFO) \
                     $(COVERAGE_CFLAGS:-f%=-Wc,-f%) \
                     $(LIBXML_LIBS) \
 		    $(DRIVER_MODULE_LIBS) \
 		    $(CYGWIN_EXTRA_LDFLAGS) $(MINGW_EXTRA_LDFLAGS)
 libvirt_la_CFLAGS = $(COVERAGE_CFLAGS) -DIN_LIBVIRT
-libvirt_la_DEPENDENCIES = $(libvirt_la_LIBADD) libvirt.syms
+libvirt_la_DEPENDENCIES = $(libvirt_la_LIBADD) $(LIBVIRT_SYMBOL_FILE)
 
 # Create an automake "convenience library" version of libvirt_la,
 # just for testing, since the test harness requires access to internal
@@ -865,7 +872,7 @@ noinst_LTLIBRARIES += libvirt_test.la
 # Remove version script from convenience library
 test_LDFLAGS =						\
   $$(echo '$(libvirt_la_LDFLAGS)'			\
-     |sed 's!$(VERSION_SCRIPT_FLAGS)libvirt.syms!!'	\
+     |sed 's!$(VERSION_SCRIPT_FLAGS)$(LIBVIRT_SYMBOL_FILE)!!'	\
      |sed 's!-version-info $(LIBVIRT_VERSION_INFO)!!')
 
 # Just like the above, but with a slightly different set of public symbols.
-- 
1.6.3.3




More information about the libvir-list mailing list