summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrand SIMONNET <bsimonnet@chromium.org>2014-08-20 15:43:23 -0700
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2015-02-20 20:49:45 +0000
commit57696a2e8a5eb2df3177f5b52c512a14f3cab1f5 (patch)
tree01646dc540fc6d36b4d5e00a1bce6d42564b3a30
parent7d214f4d5855c43a7aa0bec385d93e4a67a09f5f (diff)
downloaddbus-57696a2e8a5eb2df3177f5b52c512a14f3cab1f5.tar.gz
Link dbus-daemon and dbus-daemon-lauch-helper against libdbus
The shared can be used by dbus-daemon and dbus-daemon-launch-helper by exporting the private symbols needed, reducing the size of dbus by about 500k. The private symbols are exposed under the version LIBDBUS_PRIVATE_@VERSION_NUMBER@. [Altered by Simon McVittie and Ralf Habacker to clear up some problematic linking.] Bug: https://bugs.freedesktop.org/show_bug.cgi?id=83115 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk> Reviewed-by: Ralf Habacker <ralf.habacker@freenet.de>
-rw-r--r--bus/Makefile.am19
-rw-r--r--cmake/CMakeLists.txt7
-rw-r--r--cmake/dbus/CMakeLists.txt7
-rw-r--r--configure.ac8
-rw-r--r--dbus/Makefile.am23
-rw-r--r--dbus/Version.in10
-rw-r--r--m4/ld-version-script.m443
-rw-r--r--test/Makefile.am31
-rw-r--r--test/name-test/Makefile.am10
9 files changed, 95 insertions, 63 deletions
diff --git a/bus/Makefile.am b/bus/Makefile.am
index 9d3cb006..0b9998da 100644
--- a/bus/Makefile.am
+++ b/bus/Makefile.am
@@ -112,6 +112,7 @@ dbus_daemon_SOURCES= \
main.c
dbus_daemon_LDADD= \
+ $(top_builddir)/dbus/libdbus-1.la \
$(top_builddir)/dbus/libdbus-internal.la \
$(EFENCE) \
$(DBUS_BUS_LIBS)
@@ -136,7 +137,8 @@ dbus_daemon_launch_helper_SOURCES= \
$(LAUNCH_HELPER_SOURCES)
dbus_daemon_launch_helper_LDADD= \
- $(top_builddir)/dbus/libdbus-internal.la \
+ $(top_builddir)/dbus/libdbus-1.la \
+ $(top_builddir)/dbus/libdbus-internal.la \
$(DBUS_LAUNCHER_LIBS)
## we build another binary so we can do the launch testing without root privs.
@@ -146,6 +148,7 @@ dbus_daemon_launch_helper_test_SOURCES= \
$(LAUNCH_HELPER_SOURCES)
dbus_daemon_launch_helper_test_LDADD= \
+ $(top_builddir)/dbus/libdbus-1.la \
$(top_builddir)/dbus/libdbus-internal.la \
$(DBUS_LAUNCHER_LIBS)
@@ -160,8 +163,10 @@ test_bus_launch_helper_SOURCES= \
$(LAUNCH_HELPER_SOURCES)
test_bus_launch_helper_LDADD= \
+ $(top_builddir)/dbus/libdbus-1.la \
$(top_builddir)/dbus/libdbus-internal.la \
$(DBUS_LAUNCHER_LIBS)
+ $(NULL)
test_bus_launch_helper_CPPFLAGS = \
$(AM_CPPFLAGS) \
@@ -205,13 +210,21 @@ test_bus_system_SOURCES= \
utils.h \
test-system.c
-test_bus_system_LDADD=$(top_builddir)/dbus/libdbus-internal.la $(DBUS_BUS_LIBS)
+test_bus_system_LDADD = \
+ $(top_builddir)/dbus/libdbus-1.la \
+ $(top_builddir)/dbus/libdbus-internal.la \
+ $(DBUS_BUS_LIBS) \
+ $(NULL)
test_bus_SOURCES= \
$(BUS_SOURCES) \
test-main.c
-test_bus_LDADD=$(top_builddir)/dbus/libdbus-internal.la $(DBUS_BUS_LIBS)
+test_bus_LDADD = \
+ $(top_builddir)/dbus/libdbus-1.la \
+ $(top_builddir)/dbus/libdbus-internal.la \
+ $(DBUS_BUS_LIBS) \
+ $(NULL)
## mop up the gcov files
clean-local:
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 9a1be6c4..adc6d4b2 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -475,13 +475,8 @@ endif (DBUS_BUILD_TESTS)
set(DBUS_LIBRARIES dbus-1)
set(DBUS_INTERNAL_LIBRARIES dbus-internal)
-# settings for building and using static internal lib
-# important note: DBUS_INTERNAL_xxxxx_DEFINITIONS must *not* be set when building dbus-1 library
set (DBUS_INTERNAL_ADD_LIBRARY_OPTIONS STATIC)
-set (DBUS_INTERNAL_LIBRARY_DEFINITIONS "-DDBUS_STATIC_BUILD")
-# For now, the CMake build system doesn't support replacing the internal
-# main loop with dbus-glib
-set (DBUS_INTERNAL_CLIENT_DEFINITIONS "-DDBUS_STATIC_BUILD -DDBUS_COMPILATION")
+set (DBUS_INTERNAL_CLIENT_DEFINITIONS "-DDBUS_COMPILATION")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h )
diff --git a/cmake/dbus/CMakeLists.txt b/cmake/dbus/CMakeLists.txt
index a6aaba07..7c6b1ee9 100644
--- a/cmake/dbus/CMakeLists.txt
+++ b/cmake/dbus/CMakeLists.txt
@@ -291,15 +291,10 @@ install_files(/include/dbus FILES ${dbusinclude_HEADERS})
### Internal library, used for the daemon, tools and tests, compiled statically.
add_library(dbus-internal ${DBUS_INTERNAL_ADD_LIBRARY_OPTIONS}
- ${DBUS_LIB_SOURCES}
- ${DBUS_LIB_HEADERS}
- ${DBUS_SHARED_SOURCES}
- ${DBUS_SHARED_HEADERS}
${DBUS_UTIL_SOURCES}
${DBUS_UTIL_HEADERS}
)
-target_link_libraries(dbus-internal)
-set_target_properties(dbus-internal PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_LIBRARY_DEFINITIONS})
+target_link_libraries(dbus-internal dbus-1)
if(WIN32)
if(WINCE)
target_link_libraries(dbus-internal ws2)
diff --git a/configure.ac b/configure.ac
index 6dcf64af..f197f07d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -47,6 +47,8 @@ LT_AGE=12
AC_SUBST(LT_CURRENT)
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)
+SOVERSION=`expr ${LT_CURRENT} - ${LT_AGE}`
+AC_SUBST([SOVERSION])
DBUS_MAJOR_VERSION=dbus_major_version
DBUS_MINOR_VERSION=dbus_minor_version
@@ -1418,6 +1420,11 @@ case $host_os in
;;
esac
+### Detect if ld supports --version-script
+
+gl_LD_VERSION_SCRIPT
+AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT],
+ [test "x$have_ld_version_script" = xyes])
### Doxygen Documentation
AC_PATH_PROG(DOXYGEN, doxygen, no)
@@ -1824,6 +1831,7 @@ fi
AC_CONFIG_FILES([
Doxyfile
+dbus/Version
dbus/versioninfo.rc
dbus/dbus-arch-deps.h
bus/system.conf
diff --git a/dbus/Makefile.am b/dbus/Makefile.am
index 2dcb0c39..56668d30 100644
--- a/dbus/Makefile.am
+++ b/dbus/Makefile.am
@@ -54,9 +54,6 @@ else
dbus_res =
dbus_res_ldflag =
no_undefined =
-## don't export symbols that start with "_" (we use this
-## convention for internal symbols)
-export_symbols = -export-symbols-regex "^[^_].*"
intllibs = @LTLIBINTL@
@@ -275,34 +272,33 @@ libdbus_1_la_SOURCES= \
$(DBUS_SHARED_SOURCES)
libdbus_internal_la_SOURCES= \
- $(DBUS_LIB_SOURCES) \
- $(DBUS_SHARED_SOURCES) \
$(DBUS_UTIL_SOURCES)
BUILT_SOURCES=$(nodist_dbusarchinclude_HEADERS)
EXTRA_DIST=dbus-arch-deps.h.in
-## this library is the same as libdbus, but exports all the symbols
-## and is only used for static linking within the dbus package.
noinst_LTLIBRARIES=libdbus-internal.la
libdbus_1_la_CPPFLAGS = \
$(AM_CPPFLAGS) \
-Ddbus_1_EXPORTS \
$(NULL)
+
+if HAVE_LD_VERSION_SCRIPT
+SYMBOL_EXPORT_LDFLAGS=-Wl,--version-script=Version
+else
+SYMBOL_EXPORT_LDFLAGS=
+endif
+
libdbus_1_la_LIBADD= $(LIBDBUS_LIBS)
libdbus_1_la_LDFLAGS = \
$(AM_LDFLAGS) \
- $(export_symbols) \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+ $(SYMBOL_EXPORT_LDFLAGS) \
-no-undefined \
$(NULL)
-libdbus_internal_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DDBUS_STATIC_BUILD \
- $(NULL)
-libdbus_internal_la_LIBADD=$(LIBDBUS_LIBS)
+libdbus_internal_la_LIBADD=$(LIBDBUS_LIBS) libdbus-1.la
if DBUS_WIN
# This must be a separate convenience library, otherwise libtool notices
@@ -312,7 +308,6 @@ if DBUS_WIN
noinst_LTLIBRARIES += libdbus-init-win.la
libdbus_init_win_la_SOURCES = dbus-init-win.cpp
libdbus_1_la_LIBADD += libdbus-init-win.la
-libdbus_internal_la_LIBADD += libdbus-init-win.la
endif
noinst_PROGRAMS =
diff --git a/dbus/Version.in b/dbus/Version.in
new file mode 100644
index 00000000..f6cc3676
--- /dev/null
+++ b/dbus/Version.in
@@ -0,0 +1,10 @@
+LIBDBUS_1_@SOVERSION@ {
+ global:
+ dbus_*;
+ local:
+ *;
+};
+LIBDBUS_PRIVATE_@DBUS_VERSION@ {
+ global:
+ _dbus_*;
+};
diff --git a/m4/ld-version-script.m4 b/m4/ld-version-script.m4
new file mode 100644
index 00000000..228f52f5
--- /dev/null
+++ b/m4/ld-version-script.m4
@@ -0,0 +1,43 @@
+# ld-version-script.m4 serial 1
+dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# FIXME: The test below returns a false positive for mingw
+# cross-compiles, 'local:' statements does not reduce number of
+# exported symbols in a DLL. Use --disable-ld-version-script to work
+# around the problem.
+
+# gl_LD_VERSION_SCRIPT
+# --------------------
+# Check if LD supports linker scripts, and define automake conditional
+# HAVE_LD_VERSION_SCRIPT if so.
+AC_DEFUN([gl_LD_VERSION_SCRIPT],
+[
+ AC_ARG_ENABLE([ld-version-script],
+ AS_HELP_STRING([--enable-ld-version-script],
+ [enable linker version script (default is enabled when possible)]),
+ [have_ld_version_script=$enableval], [])
+ if test -z "$have_ld_version_script"; then
+ AC_MSG_CHECKING([if LD -Wl,--version-script works])
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+ cat > conftest.map <<EOF
+VERS_1 {
+ global: sym;
+};
+
+VERS_2 {
+ global: sym;
+} VERS_1;
+EOF
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
+ [have_ld_version_script=yes], [have_ld_version_script=no])
+ rm -f conftest.map
+ LDFLAGS="$save_LDFLAGS"
+ AC_MSG_RESULT($have_ld_version_script)
+ fi
+])
diff --git a/test/Makefile.am b/test/Makefile.am
index 92fbdefb..723d7767 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -4,23 +4,15 @@
SUBDIRS= . name-test
DIST_SUBDIRS=name-test
-# CPPFLAGS for binaries that are normally dynamic
AM_CPPFLAGS = \
-I$(top_srcdir) \
- $(DBUS_STATIC_BUILD_CPPFLAGS) \
+ -DDBUS_COMPILATION \
$(GLIB_CFLAGS) \
$(NULL)
# improve backtraces from test stuff
AM_LDFLAGS = @R_DYNAMIC_LDFLAG@
-# CPPFLAGS for binaries that are always static
-static_cppflags = \
- $(AM_CPPFLAGS) \
- -DDBUS_STATIC_BUILD \
- -DDBUS_COMPILATION \
- $(NULL)
-
noinst_LTLIBRARIES = libdbus-testutils.la
libdbus_testutils_la_SOURCES = \
@@ -35,13 +27,11 @@ libdbus_testutils_la_SOURCES += \
$(NULL)
endif
-testutils_shared_if_possible_cppflags = $(static_cppflags)
+testutils_shared_if_possible_cppflags = $(AM_CPPFLAGS)
testutils_shared_if_possible_libs = libdbus-testutils.la
-libdbus_testutils_la_CPPFLAGS = \
- $(static_cppflags) \
- $(NULL)
libdbus_testutils_la_LIBADD = \
+ $(top_builddir)/dbus/libdbus-1.la \
$(top_builddir)/dbus/libdbus-internal.la \
$(NULL)
@@ -80,43 +70,31 @@ endif !DBUS_ENABLE_EMBEDDED_TESTS
noinst_PROGRAMS= $(TEST_BINARIES)
-test_service_CPPFLAGS = $(static_cppflags)
test_service_LDADD = libdbus-testutils.la
-test_names_CPPFLAGS = $(static_cppflags)
test_names_LDADD = libdbus-testutils.la
-## break_loader_CPPFLAGS = $(static_cppflags)
## break_loader_LDADD = $(top_builddir)/dbus/libdbus-internal.la
-test_shell_service_CPPFLAGS = $(static_cppflags)
test_shell_service_LDADD = libdbus-testutils.la
test_shell_SOURCES = shell-test.c
-test_shell_CPPFLAGS = $(static_cppflags)
test_shell_LDADD = libdbus-testutils.la
test_spawn_SOURCES = spawn-test.c
-test_spawn_CPPFLAGS = $(static_cppflags)
test_spawn_LDADD = $(top_builddir)/dbus/libdbus-internal.la
test_printf_SOURCES = internals/printf.c
-test_printf_CPPFLAGS = $(static_cppflags)
test_printf_LDADD = $(top_builddir)/dbus/libdbus-internal.la
test_refs_SOURCES = internals/refs.c
-test_refs_CPPFLAGS = $(static_cppflags)
test_refs_LDADD = libdbus-testutils.la $(GLIB_LIBS)
test_syslog_SOURCES = internals/syslog.c
-test_syslog_CPPFLAGS = $(static_cppflags)
test_syslog_LDADD = libdbus-testutils.la $(GLIB_LIBS)
manual_dir_iter_SOURCES = manual-dir-iter.c
-manual_dir_iter_CPPFLAGS = $(static_cppflags)
manual_dir_iter_LDADD = $(top_builddir)/dbus/libdbus-internal.la
manual_paths_SOURCES = manual-paths.c
-manual_paths_CPPFLAGS = $(static_cppflags)
manual_paths_LDADD = $(top_builddir)/dbus/libdbus-internal.la
manual_tcp_SOURCES = manual-tcp.c
-manual_tcp_CPPFLAGS = $(static_cppflags)
manual_tcp_LDADD = $(top_builddir)/dbus/libdbus-internal.la
EXTRA_DIST = dbus-test-runner
@@ -265,9 +243,6 @@ test_uid_permissions_LDADD = \
test_fdpass_SOURCES = \
fdpass.c \
$(NULL)
-test_fdpass_CPPFLAGS = \
- $(static_cppflags) \
- $(NULL)
test_fdpass_LDADD = \
libdbus-testutils.la \
$(GLIB_LIBS) \
diff --git a/test/name-test/Makefile.am b/test/name-test/Makefile.am
index 8df98990..b28a7e86 100644
--- a/test/name-test/Makefile.am
+++ b/test/name-test/Makefile.am
@@ -1,8 +1,6 @@
-# Everything in this directory is statically-linked to libdbus-internal
AM_CPPFLAGS = \
-I$(top_srcdir) \
-DDBUS_COMPILATION \
- -DDBUS_STATIC_BUILD \
$(NULL)
# if assertions are enabled, improve backtraces
@@ -34,10 +32,10 @@ if DBUS_ENABLE_EMBEDDED_TESTS
## build even when not doing "make check"
noinst_PROGRAMS=test-pending-call-dispatch test-pending-call-timeout test-threads-init test-ids test-shutdown test-privserver test-privserver-client test-autolaunch
-test_pending_call_dispatch_LDADD=$(top_builddir)/dbus/libdbus-internal.la
-test_pending_call_timeout_LDADD=$(top_builddir)/dbus/libdbus-internal.la
-test_threads_init_LDADD=$(top_builddir)/dbus/libdbus-internal.la
-test_ids_LDADD=$(top_builddir)/dbus/libdbus-internal.la
+test_pending_call_dispatch_LDADD=$(top_builddir)/dbus/libdbus-1.la
+test_pending_call_timeout_LDADD=$(top_builddir)/dbus/libdbus-1.la
+test_threads_init_LDADD=$(top_builddir)/dbus/libdbus-1.la
+test_ids_LDADD=$(top_builddir)/dbus/libdbus-1.la
test_shutdown_LDADD=../libdbus-testutils.la
test_privserver_LDADD=../libdbus-testutils.la