Fix: Libtool fails to find dependent libraries when cross-compiling lttng-tools
authorChristian Babeux <christian.babeux@efficios.com>
Fri, 3 Aug 2012 20:31:27 +0000 (16:31 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Fri, 10 Aug 2012 22:40:16 +0000 (18:40 -0400)
This problem arise when cross compiling and linking libraries with
indirect libraries dependencies (such as liblttng-ust). This "bug" is
caused by an upstream modification in the libtool package on Debian
system. The libtool "link_all_deplibs" flag is set to "no" by default
on linux targets (AFAIK, other distros set it to "unknown").

The chosen solution is to detect such cases via the configure script
and automagically patch the libtool.m4 by forcing the "link_all_deplibs"
to "unknown".

This fixup can be disabled with the appropriate configure flag:

./configure --disable-libtool-linkdep-fixup

Sample configure output on affected systems:

checking for occurence(s) of link_all_deplibs = no in
 ./config/libtool.m4... 3
configure: WARNING: the detected libtool will not link all
     dependencies, forcing link_all_deplibs = unknown

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
configure.ac

index 17e6b67e02b339a9a28ef693f834442d94cc8ec4..3a023cdccb9797c636b7b46d43f0630742657541 100644 (file)
@@ -14,6 +14,31 @@ AC_DEFINE_UNQUOTED([VERSION_DESCRIPTION], ["$version_description"], "")
 
 AC_CONFIG_HEADERS([include/config.h])
 
+AC_PROG_GREP
+# libtool link_all_deplibs fixup. See http://bugs.lttng.org/issues/321.
+AC_ARG_ENABLE(libtool-linkdep-fixup,
+       AS_HELP_STRING([--disable-libtool-linkdep-fixup],
+                       [disable the libtool fixup for linking all dependent libraries (link_all_deplibs)]),
+       libtool_fixup=$enableval,
+       libtool_fixup=yes)
+
+AS_IF([test "x$libtool_fixup" = "xyes"],
+           [
+           libtool_m4="$srcdir/config/libtool.m4"
+           libtool_flag_pattern=".*link_all_deplibs\s*,\s*\$1\s*)"
+           AC_MSG_CHECKING([for occurence(s) of link_all_deplibs = no in $libtool_m4])
+           libtool_flag_pattern_count=$(grep -c "$libtool_flag_pattern\s*=\s*no" $libtool_m4)
+           AS_IF([test $libtool_flag_pattern_count -ne 0],
+           [
+                 AC_MSG_RESULT([$libtool_flag_pattern_count])
+                 AC_MSG_WARN([the detected libtool will not link all dependencies, forcing link_all_deplibs = unknown])
+                 sed -i "s/\($libtool_flag_pattern\)\s*=\s*no/\1=unknown/g" $libtool_m4
+                 ],
+                 [
+                 AC_MSG_RESULT([none])
+                 ])
+           ])
+
 AC_CHECK_HEADERS([ \
        sys/types.h unistd.h fcntl.h string.h pthread.h limits.h \
        signal.h stdlib.h sys/un.h sys/socket.h stdlib.h stdio.h \
This page took 0.035248 seconds and 4 git commands to generate.