From 37e4d7a8553c6f43217950fa428ac270378c20b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 11:35:01 +0100 Subject: [PATCH 1/9] meson: rename libsystemd_internal to libsystem_static We already use the "_static" suffix for libshared_static ("shared" is the name of the library, "static" is the format) and other libs, so let's rename for consistency. Also change libsystemd_static_sources to libsystemd_sources, since the same list is used for both and shorter is better. --- meson.build | 6 +++--- src/libsystemd/meson.build | 6 +++--- src/libudev/meson.build | 2 +- src/shared/meson.build | 2 +- src/test/meson.build | 4 ++-- src/udev/meson.build | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/meson.build b/meson.build index 11b73bcb19..9dabf342d2 100644 --- a/meson.build +++ b/meson.build @@ -1258,7 +1258,7 @@ libjournal_core = static_library( libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym) libsystemd = shared_library( 'systemd', - libsystemd_internal_sources, + libsystemd_sources, journal_internal_sources, version : libsystemd_version, include_directories : includes, @@ -1338,7 +1338,7 @@ foreach tuple : [['myhostname', 'ENABLE_MYHOSTNAME'], '-shared', '-Wl,--version-script=' + version_script_arg, '-Wl,--undefined'], - link_with : [libsystemd_internal, + link_with : [libsystemd_static, libbasic], dependencies : [threads, librt], @@ -1576,7 +1576,7 @@ if conf.get('ENABLE_LOGIND') == 1 include_directories : includes, link_args : ['-shared', '-Wl,--version-script=' + version_script_arg], - link_with : [libsystemd_internal, + link_with : [libsystemd_static, libshared_static], dependencies : [threads, libpam, diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build index 4abf50b111..b305af159c 100644 --- a/src/libsystemd/meson.build +++ b/src/libsystemd/meson.build @@ -17,7 +17,7 @@ sd_login_c = files('sd-login/sd-login.c') -libsystemd_internal_sources = files(''' +libsystemd_sources = files(''' sd-bus/bus-bloom.c sd-bus/bus-bloom.h sd-bus/bus-common-errors.c @@ -93,9 +93,9 @@ libsystemd_internal_sources = files(''' sd-utf8/sd-utf8.c '''.split()) + sd_login_c -libsystemd_internal = static_library( +libsystemd_static = static_library( 'systemd', - libsystemd_internal_sources, + libsystemd_sources, install : false, include_directories : includes, link_with : libbasic, diff --git a/src/libudev/meson.build b/src/libudev/meson.build index 30d6721b60..09cf762c27 100644 --- a/src/libudev/meson.build +++ b/src/libudev/meson.build @@ -41,7 +41,7 @@ libudev = shared_library( link_args : ['-shared', '-Wl,--version-script=' + libudev_sym_path], link_with : [libbasic, - libsystemd_internal], + libsystemd_static], dependencies : [threads], link_depends : libudev_sym, install : true, diff --git a/src/shared/meson.build b/src/shared/meson.build index 06a944c49d..4620eaa007 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -164,7 +164,7 @@ libshared = shared_library( shared_sources, basic_sources, journal_internal_sources, - libsystemd_internal_sources, + libsystemd_sources, libudev_sources, include_directories : includes, link_args : ['-shared', diff --git a/src/test/meson.build b/src/test/meson.build index 6bb5bd629e..dcec53fa51 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -67,7 +67,7 @@ tests += [ 'src/test/test-helper.c'], [libcore, libudev, - libsystemd_internal], + libsystemd_static], [threads, librt, libseccomp, @@ -772,7 +772,7 @@ tests += [ [['src/libsystemd/sd-bus/test-bus-error.c'], [libshared_static, - libsystemd_internal], + libsystemd_static], []], [['src/libsystemd/sd-bus/test-bus-track.c'], diff --git a/src/udev/meson.build b/src/udev/meson.build index 3b2c7b5e12..fc06d6f85a 100644 --- a/src/udev/meson.build +++ b/src/udev/meson.build @@ -113,7 +113,7 @@ if get_option('link-udev-shared') udev_rpath = rootlibexecdir else udev_link_with = [libshared_static, - libsystemd_internal] + libsystemd_static] udev_rpath = '' endif From 4f561ecda9a3704f4eff46b5f2c33dcd8decf8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 11:53:53 +0100 Subject: [PATCH 2/9] meson: reuse libsystemd_static for libsystemd This gets rid of recompilation, making things faster and avoids duplicated warnings. The result seems to be the same: $ ls -l build/libsystemd.so.0.20.0 build2/libsystemd.so.0.20.0 -rwxrwxr-x. 1 zbyszek zbyszek 3071312 Dec 19 11:45 build2/libsystemd.so.0.20.0 -rwxrwxr-x. 1 zbyszek zbyszek 3071760 Dec 19 11:11 build/libsystemd.so.0.20.0 $ diff -U1 <(objdump -T build/libsystemd.so.0.20.0|sed -r 's/[0-9a-f]{16}/________________/g') <(objdump -T build2/libsystemd.so.0.20.0|sed -r 's/[0-9a-f]{16}/________________/g') -build/libsystemd.so.0.20.0: file format elf64-x86-64 +build2/libsystemd.so.0.20.0: file format elf64-x86-64 --- meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 9dabf342d2..70b2d1b2c9 100644 --- a/meson.build +++ b/meson.build @@ -1258,13 +1258,13 @@ libjournal_core = static_library( libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym) libsystemd = shared_library( 'systemd', - libsystemd_sources, journal_internal_sources, version : libsystemd_version, include_directories : includes, link_args : ['-shared', '-Wl,--version-script=' + libsystemd_sym_path], - link_with : [libbasic], + link_with : libbasic, + link_whole : libsystemd_static, dependencies : [threads, libgcrypt, librt, From 2d4ceca8a5f606beed5f11b0d307913727590c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 14:19:46 +0100 Subject: [PATCH 3/9] meson: link libbasic and libshared_static into libshared gcrypt_util_sources had to be moved because otherwise they appeared twice in libshared.so halfproducts, causing an error. -fvisibility=default is added to libbasic, libshared_static so that the symbols appear properly in the exported symbol list in libshared. The advantage is that files are not compiled twice. When configured with -Dman=false, the ninja target list is reduced from 1588 to 1347 targets. The difference in compilation time is small (<10%). I think this is because of -O0 and ccache and multiple cores, and in different settings the compilation time could be reduced. The main advantage is that errors and warnings are not reported twice. --- meson.build | 4 ++-- src/basic/meson.build | 8 ++++---- src/journal/meson.build | 2 -- src/shared/meson.build | 20 ++++++++++---------- src/test/meson.build | 3 ++- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/meson.build b/meson.build index 70b2d1b2c9..8ea3c03788 100644 --- a/meson.build +++ b/meson.build @@ -1231,8 +1231,7 @@ includes = include_directories('src/basic', 'src/libsystemd/sd-netlink', 'src/libsystemd/sd-network', 'src/libsystemd-network', - '.', - ) + '.') add_project_arguments('-include', 'config.h', language : 'c') @@ -1259,6 +1258,7 @@ libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sy libsystemd = shared_library( 'systemd', journal_internal_sources, + gcrypt_util_sources, version : libsystemd_version, include_directories : includes, link_args : ['-shared', diff --git a/src/basic/meson.build b/src/basic/meson.build index a37e279e57..43a2e11356 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build @@ -15,7 +15,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with systemd; If not, see . -basic_sources_plain = files(''' +basic_sources = files(''' MurmurHash2.c MurmurHash2.h af-list.c @@ -294,7 +294,7 @@ foreach item : [['af', af_list_txt, 'af', ''], generated_gperf_headers += [target1, target2] endforeach -basic_sources = basic_sources_plain + [missing_h] + generated_gperf_headers +basic_sources += [missing_h] + generated_gperf_headers libbasic = static_library( 'basic', @@ -303,6 +303,6 @@ libbasic = static_library( dependencies : [threads, libcap, libblkid, - libselinux, - ], + libselinux], + c_args : ['-fvisibility=default'], install : false) diff --git a/src/journal/meson.build b/src/journal/meson.build index edb2a1a30e..e4d78f330d 100644 --- a/src/journal/meson.build +++ b/src/journal/meson.build @@ -44,8 +44,6 @@ if conf.get('HAVE_GCRYPT') == 1 fsprg.c fsprg.h '''.split()) - - journal_internal_sources += gcrypt_util_sources endif ############################################################ diff --git a/src/shared/meson.build b/src/shared/meson.build index 4620eaa007..a9ad217fec 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -159,24 +159,24 @@ libshared_deps = [threads, libshared_sym_path = '@0@/libshared.sym'.format(meson.current_source_dir()) -libshared = shared_library( +libshared_static = static_library( libshared_name, shared_sources, - basic_sources, + include_directories : includes, + dependencies : libshared_deps, + c_args : ['-fvisibility=default']) + +libshared = shared_library( + libshared_name, journal_internal_sources, libsystemd_sources, libudev_sources, include_directories : includes, link_args : ['-shared', - '-Wl,--version-script=' + libshared_sym_path], + '-Wl,--version-script=' + libshared_sym_path], + link_whole : [libshared_static, + libbasic], c_args : ['-fvisibility=default'], dependencies : libshared_deps, install : true, install_dir : rootlibexecdir) - -libshared_static = static_library( - libshared_name, - shared_sources, - basic_sources, - include_directories : includes, - dependencies : libshared_deps) diff --git a/src/test/meson.build b/src/test/meson.build index dcec53fa51..7ba73af704 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -119,6 +119,7 @@ tests += [ [['src/test/test-dns-domain.c'], [libcore, + libshared, libsystemd_network], []], @@ -167,7 +168,7 @@ tests += [ []], [['src/test/test-copy.c'], - [libshared_static], + [], []], [['src/test/test-sigbus.c'], From 34e221a58bb3f4d5d58fe238a6a5e5a5df30d4ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 19:06:56 +0100 Subject: [PATCH 4/9] Move gcrypt-util to basic/ We were including gcrypt-util.[ch] by hand in the few places where it was used. Create a convenience library to avoid compiling the same files multiple times. v2: - use a separate static library instead of mergin into libbasic --- meson.build | 18 ++++++------------ src/{shared => basic}/gcrypt-util.c | 0 src/{shared => basic}/gcrypt-util.h | 0 src/basic/meson.build | 10 ++++++++++ src/shared/meson.build | 5 ++--- 5 files changed, 18 insertions(+), 15 deletions(-) rename src/{shared => basic}/gcrypt-util.c (100%) rename src/{shared => basic}/gcrypt-util.h (100%) diff --git a/meson.build b/meson.build index 8ea3c03788..fa0b0abf74 100644 --- a/meson.build +++ b/meson.build @@ -1235,9 +1235,6 @@ includes = include_directories('src/basic', add_project_arguments('-include', 'config.h', language : 'c') -gcrypt_util_sources = files('src/shared/gcrypt-util.h', - 'src/shared/gcrypt-util.c') - subdir('po') subdir('catalog') subdir('src/systemd') @@ -1258,15 +1255,14 @@ libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sy libsystemd = shared_library( 'systemd', journal_internal_sources, - gcrypt_util_sources, version : libsystemd_version, include_directories : includes, link_args : ['-shared', '-Wl,--version-script=' + libsystemd_sym_path], - link_with : libbasic, + link_with : [libbasic, + libbasic_gcrypt], link_whole : libsystemd_static, dependencies : [threads, - libgcrypt, librt, libxz, liblz4], @@ -1507,11 +1503,10 @@ endif if conf.get('ENABLE_RESOLVE') == 1 executable('systemd-resolved', systemd_resolved_sources, - gcrypt_util_sources, include_directories : includes, - link_with : [libshared], + link_with : [libshared, + libbasic_gcrypt], dependencies : [threads, - libgcrypt, libgpg_error, libm, libidn], @@ -1521,11 +1516,10 @@ if conf.get('ENABLE_RESOLVE') == 1 exe = executable('systemd-resolve', systemd_resolve_sources, - gcrypt_util_sources, include_directories : includes, - link_with : [libshared], + link_with : [libshared, + libbasic_gcrypt], dependencies : [threads, - libgcrypt, libgpg_error, libm, libidn], diff --git a/src/shared/gcrypt-util.c b/src/basic/gcrypt-util.c similarity index 100% rename from src/shared/gcrypt-util.c rename to src/basic/gcrypt-util.c diff --git a/src/shared/gcrypt-util.h b/src/basic/gcrypt-util.h similarity index 100% rename from src/shared/gcrypt-util.h rename to src/basic/gcrypt-util.h diff --git a/src/basic/meson.build b/src/basic/meson.build index 43a2e11356..fce1d218c0 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build @@ -306,3 +306,13 @@ libbasic = static_library( libselinux], c_args : ['-fvisibility=default'], install : false) + +# A convenience library that is separate from libbasic to avoid +# unnecessary linking to libgcrypt. +libbasic_gcrypt = static_library( + 'basic-gcrypt', + 'gcrypt-util.c', + 'gcrypt-util.h', + include_directories : includes, + dependencies : [libgcrypt], + c_args : ['-fvisibility=default']) diff --git a/src/shared/meson.build b/src/shared/meson.build index a9ad217fec..7402e75592 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -56,8 +56,6 @@ shared_sources = ''' firewall-util.h fstab-util.c fstab-util.h - gcrypt-util.c - gcrypt-util.h generator.c generator.h gpt.h @@ -175,7 +173,8 @@ libshared = shared_library( link_args : ['-shared', '-Wl,--version-script=' + libshared_sym_path], link_whole : [libshared_static, - libbasic], + libbasic, + libbasic_gcrypt], c_args : ['-fvisibility=default'], dependencies : libshared_deps, install : true, From a8e559d4c66d0286061328a0ad5cbfed9080d29c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 19:14:03 +0100 Subject: [PATCH 5/9] meson: link libsystemd_static in libshared instead of recompiling This is similar to the great-grandpa commit. This time the number of meson targets compilation without man is reduced from 1347 to 1302. --- src/libsystemd/meson.build | 3 ++- src/shared/meson.build | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build index b305af159c..9eb5a917cf 100644 --- a/src/libsystemd/meson.build +++ b/src/libsystemd/meson.build @@ -100,7 +100,8 @@ libsystemd_static = static_library( include_directories : includes, link_with : libbasic, dependencies : [threads, - librt]) + librt], + c_args : ['-fvisibility=default']) libsystemd_sym = 'src/libsystemd/libsystemd.sym' diff --git a/src/shared/meson.build b/src/shared/meson.build index 7402e75592..5fa863acef 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -167,14 +167,14 @@ libshared_static = static_library( libshared = shared_library( libshared_name, journal_internal_sources, - libsystemd_sources, libudev_sources, include_directories : includes, link_args : ['-shared', '-Wl,--version-script=' + libshared_sym_path], link_whole : [libshared_static, libbasic, - libbasic_gcrypt], + libbasic_gcrypt, + libsystemd_static], c_args : ['-fvisibility=default'], dependencies : libshared_deps, install : true, From 5e3cec87bee762c4429ec1251632d58e5fd029bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 19:38:43 +0100 Subject: [PATCH 6/9] meson: use a convenience lib for journal user sources Instead of compiling those files twice, once for libsystemd and once for libshared, compile once as a static archive and then link into both. This reduce the meson target for man=no compile to 1291. --- meson.build | 4 ++-- src/journal/meson.build | 12 +++++++++--- src/shared/meson.build | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/meson.build b/meson.build index fa0b0abf74..3e5242e09e 100644 --- a/meson.build +++ b/meson.build @@ -1254,14 +1254,14 @@ libjournal_core = static_library( libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym) libsystemd = shared_library( 'systemd', - journal_internal_sources, version : libsystemd_version, include_directories : includes, link_args : ['-shared', '-Wl,--version-script=' + libsystemd_sym_path], link_with : [libbasic, libbasic_gcrypt], - link_whole : libsystemd_static, + link_whole : [libsystemd_static, + libjournal_client], dependencies : [threads, librt, libxz, diff --git a/src/journal/meson.build b/src/journal/meson.build index e4d78f330d..a23f6a712c 100644 --- a/src/journal/meson.build +++ b/src/journal/meson.build @@ -15,7 +15,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with systemd; If not, see . -journal_internal_sources = files(''' +journal_client_sources = files(''' audit-type.c audit-type.h catalog.c @@ -38,7 +38,7 @@ journal_internal_sources = files(''' '''.split()) if conf.get('HAVE_GCRYPT') == 1 - journal_internal_sources += files(''' + journal_client_sources += files(''' journal-authenticate.c journal-authenticate.h fsprg.c @@ -69,7 +69,13 @@ audit_type_to_name = custom_target( command : [awk, '-f', '@INPUT0@', '@INPUT1@'], capture : true) -journal_internal_sources += [audit_type_to_name] +journal_client_sources += [audit_type_to_name] + +libjournal_client = static_library( + 'journal-client', + journal_client_sources, + include_directories : includes, + c_args : ['-fvisibility=default']) ############################################################ diff --git a/src/shared/meson.build b/src/shared/meson.build index 5fa863acef..290fa0524c 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -166,7 +166,6 @@ libshared_static = static_library( libshared = shared_library( libshared_name, - journal_internal_sources, libudev_sources, include_directories : includes, link_args : ['-shared', @@ -174,7 +173,8 @@ libshared = shared_library( link_whole : [libshared_static, libbasic, libbasic_gcrypt, - libsystemd_static], + libsystemd_static, + libjournal_client], c_args : ['-fvisibility=default'], dependencies : libshared_deps, install : true, From 0c06b50662b94c6805c78193ac4d80875ae33668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 20:54:46 +0100 Subject: [PATCH 7/9] meson: rename libudev_internal to libudev_static and link into libudev This reduces the meson man=false target count to 1281. v2: - link test-engine with libshared instead of libsystemd_static Previous version built fine on F27, but fails on F26 with the following error: /usr/bin/ld: /tmp/ccr8HRGw.ltrans6.ltrans.o: undefined reference to symbol '__start_BUS_ERROR_MAP@@SD_SHARED' /home/zbyszek/fedora/systemd/systemd-9d5aae75c64f5583a110f03b94816aacc03bbf4d/x86_64-redhat-linux-gnu/src/shared/libsystemd-shared-236.so: error adding symbols: DSO missing from command line v3: - add libudev_basic --- meson.build | 8 ++++---- src/libudev/meson.build | 17 ++--------------- src/network/meson.build | 4 ++-- src/test/meson.build | 6 +++--- src/udev/meson.build | 28 ++++++++++++++++++++++++---- 5 files changed, 35 insertions(+), 28 deletions(-) diff --git a/meson.build b/meson.build index 3e5242e09e..e73b24dedb 100644 --- a/meson.build +++ b/meson.build @@ -2223,7 +2223,7 @@ if conf.get('ENABLE_HWDB') == 1 'src/hwdb/hwdb.c', 'src/libsystemd/sd-hwdb/hwdb-internal.h', include_directories : includes, - link_with : [libudev_internal], + link_with : [libudev_static], install_rpath : udev_rpath, install : true, install_dir : rootbindir) @@ -2256,7 +2256,7 @@ exe = executable('systemd-udevd', c_args : ['-DLOG_REALM=LOG_REALM_UDEV'], link_with : [libudev_core, libsystemd_network, - libudev_internal], + libudev_static], dependencies : [threads, libkmod, libidn, @@ -2273,7 +2273,7 @@ exe = executable('udevadm', include_directories : includes, link_with : [libudev_core, libsystemd_network, - libudev_internal], + libudev_static], dependencies : [threads, libkmod, libidn, @@ -2347,7 +2347,7 @@ if conf.get('ENABLE_NETWORKD') == 1 include_directories : includes, link_with : [libnetworkd_core, libsystemd_network, - libudev_internal, + libudev_static, libshared], dependencies : [threads], install_rpath : rootlibexecdir, diff --git a/src/libudev/meson.build b/src/libudev/meson.build index 09cf762c27..c381352ce8 100644 --- a/src/libudev/meson.build +++ b/src/libudev/meson.build @@ -31,21 +31,8 @@ libudev_sources = files(''' ############################################################ -libudev_sym = 'libudev.sym' -libudev_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libudev_sym) -libudev = shared_library( - 'udev', - libudev_sources, - version : libudev_version, - include_directories : includes, - link_args : ['-shared', - '-Wl,--version-script=' + libudev_sym_path], - link_with : [libbasic, - libsystemd_static], - dependencies : [threads], - link_depends : libudev_sym, - install : true, - install_dir : rootlibdir) +libudev_sym = files('libudev.sym') +libudev_sym_path = meson.current_source_dir() + '/libudev.sym' install_headers('libudev.h') libudev_h_path = '@0@/libudev.h'.format(meson.current_source_dir()) diff --git a/src/network/meson.build b/src/network/meson.build index f97484eb26..914f9f93c6 100644 --- a/src/network/meson.build +++ b/src/network/meson.build @@ -151,7 +151,7 @@ if conf.get('ENABLE_NETWORKD') == 1 [['src/network/test-network.c'], [libnetworkd_core, - libudev_internal, + libudev_static, libsystemd_network, libshared], [threads]], @@ -166,7 +166,7 @@ if conf.get('ENABLE_NETWORKD') == 1 'src/network/test-network-tables.c', test_tables_h], [libnetworkd_core, - libudev_internal, + libudev_static, libudev_core, libsystemd_network, libshared], diff --git a/src/test/meson.build b/src/test/meson.build index 7ba73af704..71b440637d 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -67,7 +67,7 @@ tests += [ 'src/test/test-helper.c'], [libcore, libudev, - libsystemd_static], + libshared], [threads, librt, libseccomp, @@ -411,7 +411,7 @@ tests += [ [libcore, libjournal_core, libudev_core, - libudev_internal, + libudev_static, libsystemd_network, libshared], [threads, @@ -611,7 +611,7 @@ tests += [ [['src/test/test-udev.c'], [libudev_core, - libudev_internal, + libudev_static, libsystemd_network, libshared], [threads, diff --git a/src/udev/meson.build b/src/udev/meson.build index fc06d6f85a..2c0e3a65df 100644 --- a/src/udev/meson.build +++ b/src/udev/meson.build @@ -117,11 +117,31 @@ else udev_rpath = '' endif -libudev_internal = static_library( - 'udev', +libudev_basic = static_library( + 'udev-basic', libudev_sources, include_directories : includes, - link_with : udev_link_with) + c_args : ['-fvisibility=default']) + +libudev_static = static_library( + 'udev', + 'udev.h', + include_directories : includes, + link_with : udev_link_with, + link_whole : libudev_basic) + +libudev = shared_library( + 'udev', + version : libudev_version, + include_directories : includes, + link_args : ['-shared', + '-Wl,--version-script=' + libudev_sym_path], + link_with : [libsystemd_static, libshared_static], + link_whole : libudev_basic, + dependencies : [threads], + link_depends : libudev_sym, + install : true, + install_dir : rootlibdir) libudev_core_includes = [includes, include_directories('net')] libudev_core = static_library( @@ -150,7 +170,7 @@ foreach prog : [['ata_id/ata_id.c'], prog, include_directories : includes, c_args : ['-DLOG_REALM=LOG_REALM_UDEV'], - link_with : [libudev_internal], + link_with : [libudev_static], install_rpath : udev_rpath, install : true, install_dir : udevlibexecdir) From 568a4ff8b18e58c09b72655a4a3c046a11da08cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Dec 2017 22:46:01 +0100 Subject: [PATCH 8/9] meson: use a convenience lib for shared resolve files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reduces the man=false meson target count from 1281 to 1253. -- A fully scientific test: git grep _sources, :/*.build|cut -d: -f2|tr -d ' '|sort|uniq -c reveals that libudev_sources is the only source list now reused twice. There's some ugly circular dependency between libudev and libshared, and anyway I'm not sure if we don't want to use different compilation options (LOG_REALM_…) in those two cases, so I'm leaving that alone for now. --- meson.build | 6 ++++-- src/resolve/meson.build | 33 ++++++++++++++++----------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/meson.build b/meson.build index e73b24dedb..516cc69adc 100644 --- a/meson.build +++ b/meson.build @@ -1505,7 +1505,8 @@ if conf.get('ENABLE_RESOLVE') == 1 systemd_resolved_sources, include_directories : includes, link_with : [libshared, - libbasic_gcrypt], + libbasic_gcrypt, + libsystemd_resolve_core], dependencies : [threads, libgpg_error, libm, @@ -1518,7 +1519,8 @@ if conf.get('ENABLE_RESOLVE') == 1 systemd_resolve_sources, include_directories : includes, link_with : [libshared, - libbasic_gcrypt], + libbasic_gcrypt, + libsystemd_resolve_core], dependencies : [threads, libgpg_error, libm, diff --git a/src/resolve/meson.build b/src/resolve/meson.build index ee1acb5166..15752d24ff 100644 --- a/src/resolve/meson.build +++ b/src/resolve/meson.build @@ -31,7 +31,7 @@ basic_dns_sources = files(''' dns_type_h = files('dns-type.h')[0] -systemd_resolved_only_sources = files(''' +systemd_resolved_sources = files(''' resolved.c resolved-manager.c resolved-manager.h @@ -80,7 +80,7 @@ systemd_resolved_only_sources = files(''' resolved-etc-hosts.c '''.split()) -systemd_resolve_only_sources = files('resolve-tool.c') +systemd_resolve_sources = files('resolve-tool.c') ############################################################ @@ -141,14 +141,13 @@ resolved_dnssd_gperf_c = custom_target( output : 'resolved-dnssd-gperf.c', command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@']) -systemd_resolved_sources = (basic_dns_sources + - [resolved_gperf_c, resolved_dnssd_gperf_c] + - systemd_resolved_only_sources + - dns_type_headers) +libsystemd_resolve_core = static_library( + 'systemd-resolve-core', + basic_dns_sources, + dns_type_headers, + include_directories : includes) -systemd_resolve_sources = (basic_dns_sources + - systemd_resolve_only_sources + - dns_type_headers) +systemd_resolved_sources += [resolved_gperf_c, resolved_dnssd_gperf_c] if conf.get('ENABLE_RESOLVE') == 1 install_data('org.freedesktop.resolve1.conf', @@ -178,37 +177,37 @@ endif tests += [ [['src/resolve/test-resolve-tables.c', - basic_dns_sources, dns_type_headers, 'src/shared/test-tables.h'], - [], + [libsystemd_resolve_core, + libshared], [libgcrypt, libgpg_error, libm], 'ENABLE_RESOLVE'], [['src/resolve/test-dns-packet.c', - basic_dns_sources, dns_type_headers], - [], + [libsystemd_resolve_core, + libshared], [libgcrypt, libgpg_error, libm], 'ENABLE_RESOLVE'], [['src/resolve/test-resolved-packet.c', - basic_dns_sources, dns_type_headers], - [], + [libsystemd_resolve_core, + libshared], [libgcrypt, libgpg_error, libm], 'ENABLE_RESOLVE'], [['src/resolve/test-dnssec.c', - basic_dns_sources, dns_type_headers], - [], + [libsystemd_resolve_core, + libshared], [libgcrypt, libgpg_error, libm], From 7f1ea2cc94ac7b4d85474b413c025df14668687d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 20 Dec 2017 09:12:08 +0100 Subject: [PATCH 9/9] meson: add a single .h file to shared libs with no sources Otherwise stuff doesn't build on old Ubuntu with meson-0.42.1-1~xenial. --- meson.build | 1 + src/udev/meson.build | 1 + 2 files changed, 2 insertions(+) diff --git a/meson.build b/meson.build index 516cc69adc..1a842a8d91 100644 --- a/meson.build +++ b/meson.build @@ -1254,6 +1254,7 @@ libjournal_core = static_library( libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym) libsystemd = shared_library( 'systemd', + 'src/systemd/sd-id128.h', # pick a header file at random to work around old meson bug version : libsystemd_version, include_directories : includes, link_args : ['-shared', diff --git a/src/udev/meson.build b/src/udev/meson.build index 2c0e3a65df..de2fd2d9c4 100644 --- a/src/udev/meson.build +++ b/src/udev/meson.build @@ -132,6 +132,7 @@ libudev_static = static_library( libudev = shared_library( 'udev', + 'udev.h', # pick a header file at random to work around old meson bug version : libudev_version, include_directories : includes, link_args : ['-shared',