From c6c454ab6ca9d19041d4f16e6139b514fe1b954f Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Tue, 21 Feb 2012 11:25:14 -0500 Subject: [PATCH] Detect and document dependency on -ldl on Linux, -lc on BSD for dlopen Signed-off-by: Mathieu Desnoyers --- README | 6 +++--- configure.ac | 20 +++++++++++++++++-- doc/examples/easy-ust/Makefile | 3 ++- doc/examples/gen-tp/Makefile | 4 +++- liblttng-ust-fork/Makefile.am | 9 ++++++++- liblttng-ust-libc-wrapper/Makefile.am | 9 ++++++++- tests/demo/Makefile.am | 10 ++++++++-- tests/demo/README | 3 ++- tests/dlopen/Makefile.am | 9 ++++++++- tests/hello-static-lib/Makefile.am | 9 ++++++++- tests/hello.cxx/Makefile.am | 7 +++++++ tests/hello/Makefile.am | 7 +++++++ tests/hello/Makefile.example.bsd | 8 ++++++++ ...akefile.example => Makefile.example.linux} | 0 14 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 tests/hello/Makefile.example.bsd rename tests/hello/{Makefile.example => Makefile.example.linux} (100%) diff --git a/README b/README index e2b52aa0..78ed56f6 100644 --- a/README +++ b/README @@ -67,7 +67,7 @@ USAGE: "TRACEPOINT_DEFINE" and include the tracepoint provider. - Use "-I." for the compilation unit containing the tracepoint provider include (e.g. tp.c). - - Link application with "-ldl". + - Link application with "-ldl" on Linux, with "-lc" on BSD. - If building the provider directly into the application, link the application with "-llttng-ust". - If building a static library for the provider, link the static @@ -75,7 +75,7 @@ USAGE: - Include the tracepoint provider header into all C files using the provider. - Example: - tests/hello/ hello.c tp.c ust_tests_hello.h Makefile.example + tests/hello/ hello.c tp.c ust_tests_hello.h Makefile.example.* 2) Compile the Tracepoint Provider separately from the application, using dynamic linking: @@ -87,7 +87,7 @@ USAGE: files that use the provider. - Compile the tracepoint provider with "-I.". - Link the tracepoint provider with "-llttng-ust". - - Link application with "-ldl". + - Link application with "-ldl" on Linux, "-lc" on BSD. - Set a LD_PRELOAD environment to preload the tracepoint provider shared object before starting the application when tracing is needed. diff --git a/configure.ac b/configure.ac index aa0fac34..167cd880 100644 --- a/configure.ac +++ b/configure.ac @@ -42,7 +42,23 @@ AC_PROG_MAKE_SET LT_INIT ## Checks for libraries. -AC_CHECK_LIB([dl], [dlopen]) +AC_CHECK_LIB([dl], [dlopen], +[ + have_libdl=yes +], +[ + #libdl not found, check for dlopen in libc. + AC_CHECK_LIB([c], [dlopen], + [ + have_libc_dl=yes + ], + [ + AC_MSG_ERROR([Cannot find dlopen in libdl nor libc. Use [LDFLAGS]=-Ldir to specify their location.]) + ]) +]) +AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBDL], [test "x$have_libdl" = "xyes"]) +AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBC_DL], [test "x$have_libc_dl" = "xyes"]) + AC_CHECK_LIB([pthread], [pthread_create]) # Check for libuuid @@ -59,7 +75,7 @@ AC_CHECK_LIB([uuid], [uuid_generate], have_libc_uuid=yes ], [ - AC_MSG_ERROR([Cannot find libuuid uuid_generate nor libc uuid_create. Use [LDFLAGS]=-Ldir to specify its location.]) + AC_MSG_ERROR([Cannot find libuuid uuid_generate nor libc uuid_create. Use [LDFLAGS]=-Ldir to specify their location.]) ]) ] ) diff --git a/doc/examples/easy-ust/Makefile b/doc/examples/easy-ust/Makefile index 597071b5..3d043df4 100644 --- a/doc/examples/easy-ust/Makefile +++ b/doc/examples/easy-ust/Makefile @@ -16,7 +16,8 @@ # the "html" target helps for documentation (req. code2html) CC = gcc -LIBS = -ldl -llttng-ust +LIBS = -ldl -llttng-ust # On Linux +#LIBS = -lc -llttng-ust # On BSD CFLAGS = -I. all: sample diff --git a/doc/examples/gen-tp/Makefile b/doc/examples/gen-tp/Makefile index b29eed4c..518f0174 100644 --- a/doc/examples/gen-tp/Makefile +++ b/doc/examples/gen-tp/Makefile @@ -16,7 +16,9 @@ # provider probe. CC = gcc -LIBS = -ldl -llttng-ust + +LIBS = -ldl -llttng-ust #On Linux +#LIBS = -lc -llttng-ust #On BSD all: sample diff --git a/liblttng-ust-fork/Makefile.am b/liblttng-ust-fork/Makefile.am index e0e42a3f..49466f64 100644 --- a/liblttng-ust-fork/Makefile.am +++ b/liblttng-ust-fork/Makefile.am @@ -4,6 +4,13 @@ AM_CFLAGS = -fno-strict-aliasing lib_LTLIBRARIES = liblttng-ust-fork.la liblttng_ust_fork_la_SOURCES = ustfork.c liblttng_ust_fork_la_LIBADD = \ - -ldl \ $(top_builddir)/liblttng-ust/liblttng-ust.la + +if LTTNG_UST_BUILD_WITH_LIBDL +liblttng_ust_fork_la_LIBADD += -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +liblttng_ust_fork_la_LIBADD += -lc +endif + libustfork_CFLAGS = -DUST_COMPONENT=liblttng-ust-fork -fno-strict-aliasing diff --git a/liblttng-ust-libc-wrapper/Makefile.am b/liblttng-ust-libc-wrapper/Makefile.am index 6220f76c..5b3f7f0d 100644 --- a/liblttng-ust-libc-wrapper/Makefile.am +++ b/liblttng-ust-libc-wrapper/Makefile.am @@ -5,9 +5,16 @@ lib_LTLIBRARIES = liblttng-ust-libc-wrapper.la liblttng_ust_libc_wrapper_la_SOURCES = \ lttng-ust-malloc.c \ ust_libc.h -liblttng_ust_libc_wrapper_la_LIBADD = -ldl \ +liblttng_ust_libc_wrapper_la_LIBADD = \ -L$(top_builddir)/liblttng-ust/.libs \ -llttng-ust +if LTTNG_UST_BUILD_WITH_LIBDL +liblttng_ust_libc_wrapper_la_LIBADD += -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +liblttng_ust_libc_wrapper_la_LIBADD += -lc +endif + noinst_SCRIPTS = run EXTRA_DIST = run diff --git a/tests/demo/Makefile.am b/tests/demo/Makefile.am index f96980ed..e4570ff0 100644 --- a/tests/demo/Makefile.am +++ b/tests/demo/Makefile.am @@ -33,5 +33,11 @@ liblttng_ust_provider_ust_tests_demo3_la_LDFLAGS = \ noinst_PROGRAMS = demo demo_SOURCES = demo.c ust_tests_demo.h -# The demo program only depends on libdl. -demo_LDFLAGS = -ldl +# The demo program only depends on libdl/libc for dlopen(). +if LTTNG_UST_BUILD_WITH_LIBDL +demo_LDADD = -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +demo_LDADD = -lc +endif + diff --git a/tests/demo/README b/tests/demo/README index cc51b67c..03ee4ee1 100644 --- a/tests/demo/README +++ b/tests/demo/README @@ -4,7 +4,8 @@ demo-trace shell script preloads the provider shared objects before executing the demo. Executing "demo" without the shell wrapper will not provide any tracing support. This ensures the demo binary can be distributed on distros without depending on having liblttng-ust.so in -place. Note: the "demo" program must be compiled with "-ldl". +place. Note: the "demo" program must be compiled with "-ldl" on Linux, +with "-lc" on BSD. The simplest command to trace the demo program are: lttng create diff --git a/tests/dlopen/Makefile.am b/tests/dlopen/Makefile.am index 89fd9dbf..de05346c 100644 --- a/tests/dlopen/Makefile.am +++ b/tests/dlopen/Makefile.am @@ -6,7 +6,14 @@ libdummy_la_SOURCES = libdummy.c libdummy_la_LIBADD = $(top_builddir)/libust/libust.la $(top_builddir)/libust-initializer.o libdummy_la_LDFLAGS = -rpath /nowhere dlopen_SOURCES = dlopen.c -dlopen_LDADD = -ldl $(top_builddir)/libust/libust.la $(top_builddir)/libust-initializer.o +dlopen_LDADD = $(top_builddir)/libust/libust.la $(top_builddir)/libust-initializer.o + +if LTTNG_UST_BUILD_WITH_LIBDL +dlopen_LDADD += -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +dlopen_LDADD += -lc +endif noinst_SCRIPTS = run EXTRA_DIST = run diff --git a/tests/hello-static-lib/Makefile.am b/tests/hello-static-lib/Makefile.am index 0eff080c..66334894 100644 --- a/tests/hello-static-lib/Makefile.am +++ b/tests/hello-static-lib/Makefile.am @@ -8,7 +8,14 @@ liblttng_ust_provider_ust_test_hello_la_LIBADD = \ noinst_PROGRAMS = hello hello_SOURCES = hello.c -hello_LDADD = -ldl liblttng-ust-provider-ust-test-hello.la +hello_LDADD = liblttng-ust-provider-ust-test-hello.la + +if LTTNG_UST_BUILD_WITH_LIBDL +hello_LDADD += -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +hello_LDADD += -lc +endif noinst_SCRIPTS = run EXTRA_DIST = run diff --git a/tests/hello.cxx/Makefile.am b/tests/hello.cxx/Makefile.am index 3e84796a..f56f431c 100644 --- a/tests/hello.cxx/Makefile.am +++ b/tests/hello.cxx/Makefile.am @@ -4,5 +4,12 @@ noinst_PROGRAMS = hello hello_SOURCES = hello.cpp tp.c ust_tests_hello.h hello_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la +if LTTNG_UST_BUILD_WITH_LIBDL +hello_LDADD += -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +hello_LDADD += -lc +endif + noinst_SCRIPTS = run EXTRA_DIST = run diff --git a/tests/hello/Makefile.am b/tests/hello/Makefile.am index d866b6da..847e64d9 100644 --- a/tests/hello/Makefile.am +++ b/tests/hello/Makefile.am @@ -4,5 +4,12 @@ noinst_PROGRAMS = hello hello_SOURCES = hello.c tp.c ust_tests_hello.h hello_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la +if LTTNG_UST_BUILD_WITH_LIBDL +hello_LDADD += -ldl +endif +if LTTNG_UST_BUILD_WITH_LIBC_DL +hello_LDADD += -lc +endif + noinst_SCRIPTS = run EXTRA_DIST = run diff --git a/tests/hello/Makefile.example.bsd b/tests/hello/Makefile.example.bsd new file mode 100644 index 00000000..607171c2 --- /dev/null +++ b/tests/hello/Makefile.example.bsd @@ -0,0 +1,8 @@ +# Example makefile for build outside of the LTTng-UST tree. + +hello: + ${CC} -O2 -I. -o hello -lc -llttng-ust hello.c tp.c + +.PHONY: clean +clean: + rm -f hello diff --git a/tests/hello/Makefile.example b/tests/hello/Makefile.example.linux similarity index 100% rename from tests/hello/Makefile.example rename to tests/hello/Makefile.example.linux -- 2.34.1