]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
meson: recompile all sources for install_libudev_static and install_libsystemd_static 8689/head
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 25 Apr 2018 13:29:48 +0000 (15:29 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 8 May 2018 15:33:04 +0000 (17:33 +0200)
This means that when those targets are built, all the sources are built again,
instead of reusing the work done to create libbasic.a and other convenience static
libraries. It would be nice to not do this, but there seems to be no support in
our toolchain for joining multiple static libraries into one. When linking
a static library, any -l arguments are simply ignored by ar/gcc-ar, and .a
libraries given as positional arguments are copied verbatim into the archive
so they objects in them cannot be accessed.

https://stackoverflow.com/questions/2157629/linking-static-libraries-to-other-static-libraries
suggests either unzipping all the archives and putting them back togather,
or using a linker script. Unzipping and zipping back together seems ugly.
The other option is not very nice. The linker script language does not
allow "+" to appear in the filenames, and filenames that meson generates
use that, so files would have to be renamed before a linker script was used.
And we would have to generate the linker script on the fly. Either way, this
doesn't seem attractive. Since those static libraries are a niche use case,
it seems reasonable to just go with the easiest and safest solution and
recompile all the source files. Thanks to ccache, this is probably almost as
cheap as actually reusing the convenience .a libraries.

test-libsystemd-sym.c and test-libudev-sym.c compile fine with the generated
static libs, so it seems that they indeed provide all the symbols they should.

meson.build
src/basic/meson.build
src/shared/meson.build
src/udev/meson.build

index cbe2185ad9a224d8063bb69831d560e1d609b733..7b8943f67de1d5dd2e9cc0b419c9fc03c1f80133 100644 (file)
@@ -1349,9 +1349,9 @@ install_libsystemd_static = static_library(
         'systemd',
         libsystemd_sources,
         journal_client_sources,
+        basic_sources,
+        basic_gcrypt_sources,
         include_directories : includes,
-        link_with : [libbasic,
-                     libbasic_gcrypt],
         build_by_default : static_libsystemd != 'false',
         install : static_libsystemd != 'false',
         install_dir : rootlibdir,
@@ -1360,6 +1360,10 @@ install_libsystemd_static = static_library(
                         librt,
                         libxz,
                         liblz4,
+                        libcap,
+                        libblkid,
+                        libmount,
+                        libselinux,
                         libgcrypt],
         c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
 
index 4f63fcef1ce557a2c83618a81a22531d9e184266..ac954dbcb46d5257c8a3cc3c55aeb353a0b521b2 100644 (file)
@@ -303,6 +303,9 @@ foreach item : [['af',     af_list_txt,     'af',         ''],
 endforeach
 
 basic_sources += [missing_h] + generated_gperf_headers
+basic_gcrypt_sources = files(
+        'gcrypt-util.c',
+        'gcrypt-util.h')
 
 libbasic = static_library(
         'basic',
@@ -320,8 +323,7 @@ libbasic = static_library(
 # unnecessary linking to libgcrypt.
 libbasic_gcrypt = static_library(
         'basic-gcrypt',
-        'gcrypt-util.c',
-        'gcrypt-util.h',
+        basic_gcrypt_sources,
         include_directories : includes,
         dependencies : [libgcrypt],
         c_args : ['-fvisibility=default'])
index d0cb38650b60e4f8536688204b58f82d151ba935..e3b076122b0e62ca65d045707a704365d2d785cb 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Copyright 2017 Zbigniew Jędrzejewski-Szmek
 
-shared_sources = '''
+shared_sources = files('''
         acl-util.h
         acpi-fpdt.c
         acpi-fpdt.h
@@ -104,25 +104,25 @@ shared_sources = '''
         watchdog.c
         watchdog.h
         wireguard-netlink.h
-'''.split()
+'''.split())
 
 test_tables_h = files('test-tables.h')
 shared_sources += [test_tables_h]
 
 if conf.get('HAVE_ACL') == 1
-        shared_sources += ['acl-util.c']
+        shared_sources += files('acl-util.c')
 endif
 
 if conf.get('ENABLE_UTMP') == 1
-        shared_sources += ['utmp-wtmp.c']
+        shared_sources += files('utmp-wtmp.c')
 endif
 
 if conf.get('HAVE_SECCOMP') == 1
-        shared_sources += ['seccomp-util.c']
+        shared_sources += files('seccomp-util.c')
 endif
 
 if conf.get('HAVE_LIBIPTC') == 1
-        shared_sources += ['firewall-util.c']
+        shared_sources += files('firewall-util.c')
 endif
 
 libshared_name = 'systemd-shared-@0@'.format(meson.project_version())
index 613a2e24cd6c055e8376918c5b512e2155b5ba75..8fa0627d00529b0bd77c0f9311512552be610c62 100644 (file)
@@ -121,16 +121,16 @@ static_libudev = get_option('static-libudev')
 static_libudev_pic = static_libudev == 'true' or static_libudev == 'pic'
 install_libudev_static = static_library(
         'udev',
+        basic_sources,
+        shared_sources,
+        libsystemd_sources,
         libudev_sources,
         include_directories : includes,
-        link_with : [libshared_static,
-                     libsystemd_static],
-        link_whole : libudev_basic,
         build_by_default : static_libudev != 'false',
         install : static_libudev != 'false',
         install_dir : rootlibdir,
         link_depends : libudev_sym,
-        dependencies : [threads],
+        dependencies : libshared_deps + [libmount],
         c_args : static_libudev_pic ? [] : ['-fno-PIC'],
         pic : static_libudev_pic)