build-sys: autotoolify build of check libraries
Many thanks to Iván Briano (sachieru@gmail.com) for pointing out this
thread in libtool mailing list:
http://www.mail-archive.com/libtool@gnu.org/msg09627.html
Passing '-rpath /nowhere' in LDFLAGS we are able to create shared libs
that are not installed.
diff --git a/Makefile.am b/Makefile.am
index 0ccad62..242d3e6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -133,27 +133,20 @@
# TESTSUITE
# ------------------------------------------------------------------------------
-# libtool will not create a shared library that is not installed. Workaround
-# this by creating it by ourselves
-CREATE_SHARED_OVERRIDE_LIB = \
- $(AM_V_CCLD)gcc -fPIC $(AM_CPPFLAGS) $(AM_CFLAGS) -shared $^ \
- -o $@ $(AM_LDFLAGS) -ldl
+TESTSUITE_OVERRIDE_LIBS = testsuite/uname.la testsuite/path.la \
+ testsuite/init_module.la
+TESTSUITE_OVERRIDE_LIBS_LDFLAGS = avoid-version -module -shared -export-dynamic \
+ -rpath /nowhere -ldl
-testsuite/uname.so: testsuite/uname.c
- $(CREATE_SHARED_OVERRIDE_LIB)
+check_LTLIBRARIES = $(TESTSUITE_OVERRIDE_LIBS)
-testsuite/path.so: testsuite/path.c
- $(CREATE_SHARED_OVERRIDE_LIB)
+testsuite_uname_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS)
+testsuite_path_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS)
-testsuite/init_module.so: testsuite/init_module.c $(abs_top_builddir)/libkmod/.libs/libkmod-private.a
- $(CREATE_SHARED_OVERRIDE_LIB)
-
-EXTRA_DIST += testsuite/uname.c testsuite/path.c testsuite/init_module.c
-CLEANFILES += testsuite/uname.so testsuite/path.so testsuite/init_module.so
-
-testsuite/rootfs:
- $(AM_V_GEN) tar -C testsuite/ \
- -xJf $(top_srcdir)/testsuite/rootfs.tar.xz
+testsuite_init_module_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS)
+testsuite_init_module_la_SOURCES = testsuite/init_module.c \
+ testsuite/stripped_module.h
+testsuite_init_module_la_LIBADD = libkmod/libkmod-private.la
testsuite-distclean:
-rm -rf testsuite/rootfs
@@ -165,13 +158,10 @@
-DTESTSUITE_ROOTFS=\"$(abs_top_builddir)/testsuite/rootfs/\" \
-DABS_TOP_BUILDDIR=\"$(abs_top_builddir)\"
-check_LTLIBRARIES = testsuite/libtestsuite.la
+check_LTLIBRARIES += testsuite/libtestsuite.la
testsuite_libtestsuite_la_SOURCES = testsuite/testsuite.c \
testsuite/testsuite.h
-testsuite_libtestsuite_la_DEPENDENCIES = testsuite/uname.so \
- testsuite/path.so \
- testsuite/init_module.so \
- testsuite/rootfs
+testsuite_libtestsuite_la_DEPENDENCIES = testsuite/rootfs
testsuite_libtestsuite_la_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
TESTSUITE = testsuite/test-init testsuite/test-testsuite testsuite/test-loaded \
diff --git a/testsuite/testsuite.c b/testsuite/testsuite.c
index 7788b98..b66427f 100644
--- a/testsuite/testsuite.c
+++ b/testsuite/testsuite.c
@@ -26,13 +26,15 @@
{ NULL, 0, 0, 0 }
};
+#define OVERRIDE_LIBDIR ABS_TOP_BUILDDIR "/testsuite/.libs/"
+
struct _env_config {
const char *key;
const char *ldpreload;
} env_config[_TC_LAST] = {
- [TC_UNAME_R] = { S_TC_UNAME_R, ABS_TOP_BUILDDIR "/testsuite/uname.so" },
- [TC_ROOTFS] = { S_TC_ROOTFS, ABS_TOP_BUILDDIR "/testsuite/path.so" },
- [TC_INIT_MODULE_RETCODES] = { S_TC_INIT_MODULE_RETCODES, ABS_TOP_BUILDDIR "/testsuite/init_module.so" },
+ [TC_UNAME_R] = { S_TC_UNAME_R, OVERRIDE_LIBDIR "uname.so" },
+ [TC_ROOTFS] = { S_TC_ROOTFS, OVERRIDE_LIBDIR "path.so" },
+ [TC_INIT_MODULE_RETCODES] = { S_TC_INIT_MODULE_RETCODES, OVERRIDE_LIBDIR "init_module.so" },
};
static void help(void)