[libvirt] [PATCH 2/4] build: use library rather than cross-directory compilation

Eric Blake eblake at redhat.com
Mon Sep 9 15:51:33 UTC 2013


If we use subdir-objects with automake, any reference to a
cross-directory .c file will result in automake creating
rules that track dependency in the cross directory.  But this
presents a problem during 'make distclean' - if the cross
directory is cleaned up first, then the daemon directory will
be left with dangling references to .Po dependency files that
no longer exist.

Meanwhile, referring to the cross-directory .c file means
that we are compiling the file twice - once in src, and once
in daemon.  Better is to compile just once in src into a
convenience library, and then use that library from daemon.

The tests directory had a similar situation of a cross-directory
.c file; to solve that, we actually need a convenience library.

* daemon/Makefile.am (DAEMON_SOURCES): Drop .c files...
(libvirtd_LDADD): ...and instead use library.
(libvirtd_conf_la_SOURCES): Declare a new convenience library.
(libvirtd_LDFLAGS): Drop duplicate flag.
* tests/Makefile.am (libvirtdconftest_SOURCES): Drop .c file...
(libvirtdconftest_LDADD): ..and instead use library.

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 daemon/Makefile.am | 32 +++++++++++++++++++++++++-------
 tests/Makefile.am  |  4 ++--
 2 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index e0b8744..eb58de9 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -37,14 +37,12 @@ DAEMON_GENERATED =			\

 DAEMON_SOURCES =					\
 		libvirtd.c libvirtd.h			\
-		libvirtd-config.c libvirtd-config.h	\
 		remote.c remote.h			\
 		stream.c stream.h			\
-		../src/remote/remote_protocol.c		\
-		../src/remote/lxc_protocol.c		\
-		../src/remote/qemu_protocol.c		\
 		$(DAEMON_GENERATED)

+LIBVIRTD_CONF_SOURCES = libvirtd-config.c libvirtd-config.h
+
 DISTCLEANFILES =
 EXTRA_DIST =						\
 	remote_dispatch.h				\
@@ -67,7 +65,9 @@ EXTRA_DIST =						\
 	THREADS.txt					\
 	libvirtd.pod.in					\
 	libvirtd.8.in					\
-	$(DAEMON_SOURCES)
+	$(DAEMON_SOURCES)				\
+	$(LIBVIRTD_CONF_SOURCES)			\
+	$(NULL)

 BUILT_SOURCES =

@@ -95,6 +95,22 @@ qemu_dispatch.h: $(srcdir)/../src/rpc/gendispatch.pl \

 if WITH_LIBVIRTD

+# Build a convenience library, for reuse in tests/libvirtdconftest
+noinst_LTLIBRARIES = libvirtd_conf.la
+libvirtd_conf_la_SOURCES = $(LIBVIRTD_CONF_SOURCES)
+libvirtd_conf_la_CFLAGS = \
+	$(LIBXML_CFLAGS) \
+	$(WARN_CFLAGS) $(PIE_CFLAGS) \
+	$(COVERAGE_CFLAGS) \
+	$(NULL)
+libvirtd_conf_la_LDFLAGS =				\
+	$(RELRO_LDFLAGS)				\
+	$(PIE_LDFLAGS)					\
+	$(COVERAGE_LDFLAGS)				\
+	$(NO_INDIRECT_LDFLAGS)				\
+	$(NULL)
+libvirtd_conf_la_LIBADD = $(LIBXML_LIBS)
+
 man8_MANS = libvirtd.8

 sbin_PROGRAMS = libvirtd
@@ -130,7 +146,6 @@ libvirtd_CFLAGS = \
 libvirtd_LDFLAGS =					\
 	$(RELRO_LDFLAGS)				\
 	$(PIE_LDFLAGS)					\
-	$(RELRO_LDFLAGS)				\
 	$(COVERAGE_LDFLAGS)				\
 	$(NO_INDIRECT_LDFLAGS)				\
 	$(NULL)
@@ -148,8 +163,11 @@ libvirtd_LDADD += ../src/libvirt_probes.lo
 endif WITH_DTRACE_PROBES

 libvirtd_LDADD += \
+	libvirtd_conf.la \
 	../src/libvirt-lxc.la \
-	../src/libvirt-qemu.la
+	../src/libvirt-qemu.la \
+	../src/libvirt_driver_remote.la \
+	$(NULL)

 if ! WITH_DRIVER_MODULES
 if WITH_QEMU
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1a24367..e5cf740 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -599,8 +599,8 @@ commandhelper_LDFLAGS = -static
 if WITH_LIBVIRTD
 libvirtdconftest_SOURCES = \
 	libvirtdconftest.c testutils.h testutils.c \
-	../daemon/libvirtd-config.c
-libvirtdconftest_LDADD = $(LDADDS)
+	$(NULL)
+libvirtdconftest_LDADD = ../daemon/libvirtd_conf.la $(LDADDS)
 else ! WITH_LIBVIRTD
 EXTRA_DIST += libvirtdconftest.c
 endif ! WITH_LIBVIRTD
-- 
1.8.3.1




More information about the libvir-list mailing list