]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
meson: Extract objects instead of creating intermediate static libraries
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 7 May 2025 20:55:15 +0000 (22:55 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 12 May 2025 11:35:50 +0000 (13:35 +0200)
Currently, when we want to add unit tests for code that is compiled into
an executable, we either compile the code at least twice (once for the
executable, and once for each test that uses it) or we create a static
library which is then used by both the executable and all the tests.

Both of these options are not ideal, compiling source files more than
once slows down the build for no reason and creating the intermediate
static libraries takes a lot of boilerplate.

Instead, let's use the extract_objects() method that meson exposes on
build targets. This allows us to extract the objects corresponding to
specific source files and use them in other executables. Because we
define all executables upfront into a dictionary, we integrate this into
the dictionary approach by adding two new fields:

- 'extract' takes a list of files for which objects should be extracted.
  The extracted objects are stored in a dict keyed by the executable name
  from which they were extracted.
- 'objects' takes the name of an executable from which the extracted
  objects should be added to the current executable.

One side effect of this approach is that we can't build test executables
anymore without building the main executable, so we stop building test
executables unless we're also building the main executable. This allows
us to switch to using subdir_done() in all of these subdirectories to skip
parsing them if the corresponding component is disabled.

These changes get me down from 2439 => 2403 ninja targets on a full rebuild
from scratch.

25 files changed:
meson.build
rules.d/meson.build
src/analyze/meson.build
src/busctl/meson.build
src/coredump/meson.build
src/home/meson.build
src/import/meson.build
src/journal-remote/meson.build
src/journal/meson.build
src/locale/meson.build
src/login/meson.build
src/machine/meson.build
src/network/meson.build
src/nspawn/meson.build
src/nsresourced/meson.build
src/oom/meson.build
src/resolve/meson.build
src/shutdown/meson.build
src/sleep/meson.build
src/timesync/meson.build
src/tmpfiles/meson.build
src/udev/meson.build
src/vmspawn/meson.build
src/xdg-autostart-generator/meson.build
tools/oss-fuzz.sh

index e64e289d58fa003551b73c865b0c2f432b27eb78..a10a1038719a562c1924a1990baa6666754b3873 100644 (file)
@@ -2004,6 +2004,7 @@ catalogs = []
 modules = [] # nss, pam, and other plugins
 executables = []
 executables_by_name = {}
+objects_by_name = {}
 fuzzer_exes = []
 generated_sources = [version_h, vmlinux_h_dependency]
 
@@ -2430,7 +2431,8 @@ foreach dict : executables
         kwargs = {}
         foreach key, val : dict
                 if key in ['name', 'dbus', 'public', 'conditions',
-                           'type', 'suite', 'timeout', 'parallel']
+                           'type', 'suite', 'timeout', 'parallel',
+                           'objects', 'extract']
                         continue
                 endif
 
@@ -2441,6 +2443,17 @@ foreach dict : executables
                 kwargs += { key : [ kwargs.get(key, []), val ]}
         endforeach
 
+        foreach val : dict.get('objects', [])
+                obj = objects_by_name[val]
+                kwargs += {
+                        'objects' : obj['objects'],
+                        'include_directories' : [
+                                kwargs.get('include_directories', []),
+                                obj['include_directories'],
+                        ],
+                }
+        endforeach
+
         if is_test
                 kwargs += { 'install_dir' : kwargs.get('install_dir') / dict.get('type', '') }
                 foreach key, val : test_additional_kwargs
@@ -2461,6 +2474,15 @@ foreach dict : executables
 
         executables_by_name += { name : exe }
 
+        if dict.has_key('extract')
+                objects_by_name += {
+                        name : {
+                                'objects' : exe.extract_objects(dict['extract']),
+                                'include_directories' : fs.parent(dict['extract'][0]),
+                        }
+                }
+        endif
+
         if dict.get('build_by_default', true)
                 if dict.get('dbus', false)
                         dbus_programs += exe
index 997cab8699468f42955d970ed29131a606b6595b..0f808b0fd154d5450619210d93e3eb641619db9b 100644 (file)
@@ -43,7 +43,7 @@ rules = [
          conf.get('HAVE_DMI') == 1],
 
         [files('70-power-switch.rules'),
-         enable_logind],
+         conf.get('ENABLE_LOGIND') == 1]
 ]
 
 all_rules = []
@@ -65,9 +65,9 @@ rules_in = [
         ['64-btrfs.rules'],
         ['99-systemd.rules'],
 
-        ['70-uaccess.rules',   enable_logind and conf.get('HAVE_ACL') == 1],
-        ['71-seat.rules',      enable_logind],
-        ['73-seat-late.rules', enable_logind],
+        ['70-uaccess.rules',   conf.get('ENABLE_LOGIND') == 1 and conf.get('HAVE_ACL') == 1],
+        ['71-seat.rules',      conf.get('ENABLE_LOGIND') == 1],
+        ['73-seat-late.rules', conf.get('ENABLE_LOGIND') == 1],
 
         ['90-vconsole.rules',  conf.get('ENABLE_VCONSOLE') == 1],
 ]
index 5a7c6c9285a8691acd21add07cd2e6f3a5908958..b84d064d332be567d747a5ea10c65615a0d1b54a 100644 (file)
@@ -34,15 +34,18 @@ systemd_analyze_sources = files(
         'analyze-unit-files.c',
         'analyze-unit-paths.c',
         'analyze-verify.c',
-        'analyze-verify-util.c',
         'analyze.c',
 )
+systemd_analyze_extract_sources = files(
+        'analyze-verify-util.c'
+)
 
 executables += [
         executable_template + {
                 'name' : 'systemd-analyze',
                 'public' : conf.get('ENABLE_ANALYZE') == 1,
-                'sources' : systemd_analyze_sources,
+                'sources' : [systemd_analyze_sources, systemd_analyze_extract_sources],
+                'extract' : systemd_analyze_extract_sources,
                 'include_directories' : core_includes,
                 'link_with' : [
                         libcore,
@@ -52,9 +55,7 @@ executables += [
                 'install' : conf.get('ENABLE_ANALYZE') == 1,
         },
         core_test_template + {
-                'sources' : files(
-                        'test-verify.c',
-                        'analyze-verify-util.c',
-                ),
+                'sources' : files('test-verify.c'),
+                'objects' : ['systemd-analyze'],
         },
 ]
index 6b3a479b21921a9c97018b7a007ff3777a871a18..8c8e110360d4aa88364efd63342461311b3f94a7 100644 (file)
@@ -1,20 +1,21 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
 busctl_sources = files(
-        'busctl-introspect.c',
         'busctl.c',
 )
+busctl_extract_sources = files(
+        'busctl-introspect.c',
+)
 
 executables += [
         executable_template + {
                 'name' : 'busctl',
                 'public' : true,
-                'sources' : busctl_sources,
+                'sources' : [busctl_sources, busctl_extract_sources],
+                'extract' : busctl_extract_sources,
         },
         test_template + {
-                'sources' : files(
-                        'test-busctl-introspect.c',
-                        'busctl-introspect.c',
-                )
+                'sources' : files('test-busctl-introspect.c'),
+                'objects' : ['busctl'],
         },
 ]
index bb81149b60f48d432b57f32d0b46be5990768ad1..e1667e19a9bb54f4a64ba2bbd2dfd8d01ae69cf7 100644 (file)
@@ -1,7 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_COREDUMP') != 1
+        subdir_done()
+endif
+
 systemd_coredump_sources = files(
         'coredump.c',
+)
+systemd_coredump_extract_sources = files(
         'coredump-vacuum.c',
 )
 
@@ -15,29 +21,26 @@ common_dependencies = [
 executables += [
         libexec_template + {
                 'name' : 'systemd-coredump',
-                'conditions' : ['ENABLE_COREDUMP'],
-                'sources' : systemd_coredump_sources,
+                'sources' : [systemd_coredump_sources, systemd_coredump_extract_sources],
+                'extract' : systemd_coredump_extract_sources,
                 'link_with' : [libshared],
                 'dependencies' : common_dependencies + [libacl],
         },
         executable_template + {
                 'name' : 'coredumpctl',
                 'public' : true,
-                'conditions' : ['ENABLE_COREDUMP'],
                 'sources' : files('coredumpctl.c'),
                 'link_with' : [libshared],
                 'dependencies' : common_dependencies,
         },
         test_template + {
-                'sources' : files(
-                        'test-coredump-vacuum.c',
-                        'coredump-vacuum.c',
-                ),
+                'sources' : files('test-coredump-vacuum.c'),
+                'objects' : ['systemd-coredump'],
                 'type' : 'manual',
         },
 ]
 
-if conf.get('ENABLE_COREDUMP') == 1 and install_sysconfdir_samples
+if install_sysconfdir_samples
         install_data('coredump.conf',
                      install_dir : pkgconfigfiledir)
 endif
index 7e267dadd3891deac8e86e21034cddbc056f7696..acbefef054defe30c8e510e14ab8b1437c9d005a 100644 (file)
@@ -4,8 +4,25 @@ if conf.get('ENABLE_HOMED') != 1
         subdir_done()
 endif
 
-systemd_homework_sources = files(
+systemd_homed_sources = files(
+        'homed-bus.c',
+        'homed-conf.c',
+        'homed-home-bus.c',
+        'homed-home.c',
+        'homed-manager-bus.c',
+        'homed-manager.c',
+        'homed-operation.c',
+        'homed-varlink.c',
+        'homed.c',
+        'user-record-sign.c',
+)
+systemd_homed_extract_sources = files(
         'home-util.c',
+        'user-record-password-quality.c',
+        'user-record-util.c',
+)
+
+systemd_homework_sources = files(
         'homework-blob.c',
         'homework-cifs.c',
         'homework-directory.c',
@@ -15,7 +32,6 @@ systemd_homework_sources = files(
         'homework-password-cache.c',
         'homework-quota.c',
         'homework.c',
-        'user-record-util.c',
 )
 
 if conf.get('HAVE_P11KIT') == 1
@@ -25,22 +41,6 @@ if conf.get('HAVE_LIBFIDO2') == 1
         systemd_homework_sources += files('homework-fido2.c')
 endif
 
-systemd_homed_sources = files(
-        'home-util.c',
-        'homed-bus.c',
-        'homed-conf.c',
-        'homed-home-bus.c',
-        'homed-home.c',
-        'homed-manager-bus.c',
-        'homed-manager.c',
-        'homed-operation.c',
-        'homed-varlink.c',
-        'homed.c',
-        'user-record-password-quality.c',
-        'user-record-sign.c',
-        'user-record-util.c',
-)
-
 homed_gperf_c = custom_target(
         'homed_gperf.c',
         input : 'homed-gperf.gperf',
@@ -51,13 +51,10 @@ generated_sources += [homed_gperf_c]
 systemd_homed_sources += [homed_gperf_c]
 
 homectl_sources = files(
-        'home-util.c',
         'homectl-fido2.c',
         'homectl-pkcs11.c',
         'homectl-recovery-key.c',
         'homectl.c',
-        'user-record-password-quality.c',
-        'user-record-util.c',
 )
 
 pam_systemd_home_sources = files(
@@ -67,9 +64,24 @@ pam_systemd_home_sources = files(
 )
 
 executables += [
+        libexec_template + {
+                'name' : 'systemd-homed',
+                'dbus' : true,
+                'sources' : [systemd_homed_sources, systemd_homed_extract_sources],
+                'include_directories' : includes +
+                                        include_directories('.'),
+                'extract' : systemd_homed_extract_sources,
+                'dependencies' : [
+                        libcrypt,
+                        libm,
+                        libopenssl,
+                        threads,
+                ],
+        },
         libexec_template + {
                 'name' : 'systemd-homework',
                 'sources' : systemd_homework_sources,
+                'objects' : ['systemd-homed'],
                 'link_with' : [
                         libshared,
                         libshared_fdisk
@@ -83,23 +95,11 @@ executables += [
                         threads,
                 ],
         },
-        libexec_template + {
-                'name' : 'systemd-homed',
-                'dbus' : true,
-                'sources' : systemd_homed_sources,
-                'include_directories' : includes +
-                                        include_directories('.'),
-                'dependencies' : [
-                        libcrypt,
-                        libm,
-                        libopenssl,
-                        threads,
-                ],
-        },
         executable_template + {
                 'name' : 'homectl',
                 'public' : true,
                 'sources' : homectl_sources,
+                'objects' : ['systemd-homed'],
                 'dependencies' : [
                         libcrypt,
                         libdl,
index 3cee46e58ce3c1bd4bb836e95fcf2d91f76a4a60..65e1ff2e1209e57e79bd0e75ea1abb23f71d9259 100644 (file)
@@ -7,6 +7,11 @@ endif
 systemd_importd_sources = files(
         'importd.c',
 )
+systemd_importd_extract_sources = files(
+        'import-common.c',
+        'import-compress.c',
+        'qcow2-util.c',
+)
 
 systemd_pull_sources = files(
         'pull.c',
@@ -33,30 +38,6 @@ systemd_export_sources = files(
         'export-raw.c',
 )
 
-importd_common_sources = files(
-        'import-common.c',
-        'import-compress.c',
-        'qcow2-util.c',
-)
-
-lib_import_common = static_library(
-        'import-common',
-        sources : importd_common_sources,
-        include_directories : includes,
-        dependencies : [
-                libbzip2,
-                libxz,
-                libz,
-                libzstd,
-                userspace,
-        ],
-        build_by_default : false)
-
-common_libs = [
-        lib_import_common,
-        libshared,
-]
-
 common_deps = [
         libbzip2,
         libcurl,
@@ -69,16 +50,15 @@ executables += [
         libexec_template + {
                 'name' : 'systemd-importd',
                 'dbus' : true,
-                'conditions' : ['ENABLE_IMPORTD'],
-                'sources' : systemd_importd_sources,
-                'dependencies' : threads,
+                'sources' : [systemd_importd_sources, systemd_importd_extract_sources],
+                'extract' : systemd_importd_extract_sources,
+                'dependencies' : [common_deps, threads],
         },
         libexec_template + {
                 'name' : 'systemd-pull',
                 'public' : true,
-                'conditions' : ['ENABLE_IMPORTD'],
                 'sources' : systemd_pull_sources,
-                'link_with' : common_libs,
+                'objects' : ['systemd-importd'],
                 'dependencies' : common_deps + [
                         libopenssl,
                 ],
@@ -86,43 +66,37 @@ executables += [
         libexec_template + {
                 'name' : 'systemd-import',
                 'public' : true,
-                'conditions' : ['ENABLE_IMPORTD'],
                 'sources' : systemd_import_sources,
-                'link_with' : common_libs,
+                'objects' : ['systemd-importd'],
                 'dependencies' : common_deps,
         },
         libexec_template + {
                 'name' : 'systemd-import-fs',
                 'public' : true,
-                'conditions' : ['ENABLE_IMPORTD'],
                 'sources' : systemd_import_fs_sources,
-                'link_with' : common_libs,
+                'objects' : ['systemd-importd'],
+                'dependencies' : common_deps,
         },
         libexec_template + {
                 'name' : 'systemd-export',
                 'public' : true,
-                'conditions' : ['ENABLE_IMPORTD'],
                 'sources' : systemd_export_sources,
-                'link_with' : common_libs,
+                'objects' : ['systemd-importd'],
                 'dependencies' : common_deps,
         },
         executable_template + {
                 'name' : 'importctl',
                 'public' : true,
-                'conditions' : ['ENABLE_IMPORTD'],
                 'sources' : files('importctl.c'),
         },
         generator_template + {
                 'name' : 'systemd-import-generator',
                 'sources' : files('import-generator.c'),
-                'conditions' : ['ENABLE_IMPORTD'],
         },
         test_template + {
-                'sources' : files(
-                        'test-qcow2.c',
-                        'qcow2-util.c',
-                ),
-                'dependencies' : libz,
+                'sources' : files('test-qcow2.c'),
+                'objects' : ['systemd-importd'],
+                'dependencies' : common_deps,
                 'conditions' : ['HAVE_ZLIB'],
                 'type' : 'manual',
         },
index 12d763336466d09c5ed3b024e8d315ee220912c4..7ccf060dce6a118310196973a553e83d72a9fbfc 100644 (file)
@@ -1,13 +1,20 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_REMOTE') != 1
+        subdir_done()
+endif
+
 systemd_journal_upload_sources = files(
         'journal-compression-util.c',
-        'journal-header-util.c',
         'journal-upload-journal.c',
         'journal-upload.c',
 )
+systemd_journal_upload_extract_sources = files(
+        'journal-header-util.c',
+)
 
-libsystemd_journal_remote_sources = files(
+systemd_journal_remote_sources = files('journal-remote-main.c')
+systemd_journal_remote_extract_sources = files(
         'journal-compression-util.c',
         'journal-remote-parse.c',
         'journal-remote-write.c',
@@ -15,25 +22,11 @@ libsystemd_journal_remote_sources = files(
 )
 
 if conf.get('HAVE_MICROHTTPD') == 1
-        libsystemd_journal_remote_sources += files(
+        systemd_journal_remote_extract_sources += files(
                 'microhttpd-util.c',
         )
 endif
 
-libsystemd_journal_remote = static_library(
-        'systemd-journal-remote',
-        libsystemd_journal_remote_sources,
-        include_directories : includes,
-        dependencies : [libgnutls,
-                        liblz4_cflags,
-                        libmicrohttpd,
-                        libxz_cflags,
-                        threads,
-                        userspace],
-        build_by_default : false)
-
-systemd_journal_remote_sources = files('journal-remote-main.c')
-
 systemd_journal_gatewayd_sources = files(
         'journal-gatewayd.c',
         'microhttpd-util.c',
@@ -51,57 +44,40 @@ executables += [
         libexec_template + {
                 'name' : 'systemd-journal-upload',
                 'public' : true,
-                'conditions' : [
-                        'ENABLE_REMOTE',
-                        'HAVE_LIBCURL',
-                ],
-                'sources' : systemd_journal_upload_sources,
+                'conditions' : ['HAVE_LIBCURL'],
+                'sources' : [systemd_journal_upload_sources, systemd_journal_upload_extract_sources],
+                'extract' : systemd_journal_upload_extract_sources,
                 'dependencies' : common_deps + [libcurl],
         },
         libexec_template + {
                 'name' : 'systemd-journal-remote',
                 'public' : true,
-                'conditions' : [
-                        'ENABLE_REMOTE',
-                        'HAVE_MICROHTTPD',
-                ],
-                'sources' : systemd_journal_remote_sources,
-                'link_with' : [
-                        libshared,
-                        libsystemd_journal_remote,
-                ],
+                'conditions' : ['HAVE_MICROHTTPD'],
+                'sources' : [systemd_journal_remote_sources, systemd_journal_remote_extract_sources],
+                'extract' : systemd_journal_remote_extract_sources,
                 'dependencies' : common_deps + [libmicrohttpd],
         },
         libexec_template + {
                 'name' : 'systemd-journal-gatewayd',
                 'public' : true,
-                'conditions' : [
-                        'ENABLE_REMOTE',
-                        'HAVE_MICROHTTPD',
-                ],
+                'conditions' : ['HAVE_MICROHTTPD'],
                 'sources' : systemd_journal_gatewayd_sources,
                 'dependencies' : common_deps + [libmicrohttpd],
         },
+        test_template + {
+                'sources' : files('test-journal-header-util.c'),
+                'objects' : ['systemd-journal-upload'],
+        },
         fuzz_template + {
                 'sources' : files('fuzz-journal-remote.c'),
-                'link_with' : [
-                        libshared,
-                        libsystemd_journal_remote,
-                ],
-        },
-]
-
-executables += [
-        test_template + {
-                'sources' : files('test-journal-header-util.c', 'journal-header-util.c'),
+                'objects' : ['systemd-journal-remote'],
+                'dependencies' : common_deps + [libmicrohttpd],
         },
 ]
 
 in_files = [
-        ['journal-upload.conf',
-         conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_LIBCURL') == 1 and install_sysconfdir_samples],
-        ['journal-remote.conf',
-         conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1 and install_sysconfdir_samples]]
+        ['journal-upload.conf', conf.get('HAVE_LIBCURL') == 1 and install_sysconfdir_samples],
+        ['journal-remote.conf', conf.get('HAVE_MICROHTTPD') == 1 and install_sysconfdir_samples]]
 
 foreach tuple : in_files
         file = tuple[0]
@@ -114,7 +90,7 @@ foreach tuple : in_files
                 install_dir : pkgconfigfiledir)
 endforeach
 
-if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
+if conf.get('HAVE_MICROHTTPD') == 1
         install_data('browse.html',
                      install_dir : pkgdatadir / 'gatewayd')
 
index c672cbe3278042b5b74f7cfc2dad4b9608d20ac8..a7fcd9a41f08162699e09b9046198f7cfb2de7e2 100644 (file)
@@ -1,6 +1,9 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-sources = files(
+systemd_journald_sources = files(
+        'journald.c',
+)
+systemd_journald_extract_sources = files(
         'journald-audit.c',
         'journald-client.c',
         'journald-console.c',
@@ -14,6 +17,9 @@ sources = files(
         'journald-syslog.c',
         'journald-varlink.c',
         'journald-wall.c',
+        # Build fuzz-journald.c as part of systemd-journald so we only compile it once instead of once per
+        # fuzz test.
+        'fuzz-journald.c',
 )
 
 journald_gperf_c = custom_target(
@@ -23,15 +29,7 @@ journald_gperf_c = custom_target(
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
 generated_sources += journald_gperf_c
-sources += journald_gperf_c
-
-libjournal_core = static_library(
-        'journal-core',
-        sources,
-        include_directories : includes,
-        dependencies: [threads,
-                       userspace],
-        build_by_default : false)
+systemd_journald_extract_sources += journald_gperf_c
 
 journalctl_sources = files(
         'journalctl.c',
@@ -54,28 +52,20 @@ else
 endif
 
 journal_test_template = test_template + {
-        'link_with' : [
-                libjournal_core,
-                libshared,
-        ],
+        'objects' : ['systemd-journald'],
 }
 
 journal_fuzz_template = fuzz_template + {
-        'link_with' : [
-                libjournal_core,
-                libshared,
-        ],
+        'objects' : ['systemd-journald'],
         'dependencies' : libselinux,
 }
 
 executables += [
         libexec_template + {
                 'name' : 'systemd-journald',
-                'sources' : files('journald.c'),
-                'link_with' : [
-                        libjournal_core,
-                        libshared,
-                ],
+                'sources' : [systemd_journald_sources, systemd_journald_extract_sources],
+                'include_directories' : [libexec_template['include_directories'], include_directories('.')],
+                'extract' : systemd_journald_extract_sources,
                 'dependencies' : [
                         liblz4_cflags,
                         libselinux,
@@ -89,18 +79,14 @@ executables += [
                 'public' : true,
                 'conditions' : ['HAVE_QRENCODE'],
                 'sources' : files('bsod.c'),
-                'link_with' : libshared,
                 'dependencies' : libqrencode,
         },
         executable_template + {
                 'name' : 'systemd-cat',
                 'public' : true,
                 'sources' : files('cat.c'),
-                'link_with' : [
-                        libjournal_core,
-                        libshared,
-                ],
-                'dependencies' : threads,
+                'objects' : ['systemd-journald'],
+                'dependencies' : [libselinux, threads],
         },
         executable_template + {
                 'name' : 'journalctl',
@@ -123,11 +109,13 @@ executables += [
                         libxz_cflags,
                 ],
         },
-        test_template + {
-                'sources' : files(
-                        'test-journald-rate-limit.c',
-                        'journald-rate-limit.c',
-                ),
+        journal_test_template + {
+                'sources' : files('test-journald-rate-limit.c'),
+                'dependencies' : [
+                        liblz4_cflags,
+                        libselinux,
+                        libxz_cflags,
+                ],
         },
         journal_test_template + {
                 'sources' : files('test-journald-syslog.c'),
@@ -145,40 +133,22 @@ executables += [
                 ],
         },
         journal_fuzz_template + {
-                'sources' : files(
-                        'fuzz-journald-audit.c',
-                        'fuzz-journald.c',
-                ),
+                'sources' : files('fuzz-journald-audit.c'),
         },
         journal_fuzz_template + {
-                'sources' : files(
-                        'fuzz-journald-kmsg.c',
-                        'fuzz-journald.c',
-                ),
+                'sources' : files('fuzz-journald-kmsg.c'),
         },
         journal_fuzz_template + {
-                'sources' : files(
-                        'fuzz-journald-native.c',
-                        'fuzz-journald.c',
-                ),
+                'sources' : files('fuzz-journald-native.c'),
         },
         journal_fuzz_template + {
-                'sources' : files(
-                        'fuzz-journald-native-fd.c',
-                        'fuzz-journald.c',
-                ),
+                'sources' : files('fuzz-journald-native-fd.c'),
         },
         journal_fuzz_template + {
-                'sources' : files(
-                        'fuzz-journald-stream.c',
-                        'fuzz-journald.c',
-                ),
+                'sources' : files('fuzz-journald-stream.c'),
         },
         journal_fuzz_template + {
-                'sources' : files(
-                        'fuzz-journald-syslog.c',
-                        'fuzz-journald.c',
-                ),
+                'sources' : files('fuzz-journald-syslog.c'),
         },
 ]
 
index 3d3aa589c33439bf0cc424a4a9b4db55c54ca65b..e9c61f49b32981850905ef3b0bc49594ea52d856 100644 (file)
@@ -1,8 +1,14 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_LOCALED') != 1
+        subdir_done()
+endif
+
 systemd_localed_sources = files(
+        'localed.c'
+)
+systemd_localed_extract_sources = files(
         'localed-util.c',
-        'localed.c',
         'xkbcommon-util.c',
 )
 
@@ -23,22 +29,18 @@ executables += [
         libexec_template + {
                 'name' : 'systemd-localed',
                 'dbus' : true,
-                'conditions' : ['ENABLE_LOCALED'],
-                'sources' : systemd_localed_sources,
+                'sources' : [systemd_localed_sources, systemd_localed_extract_sources],
+                'extract' : systemd_localed_extract_sources,
                 'dependencies' : libxkbcommon_deps,
         },
         executable_template + {
                 'name' : 'localectl',
                 'public' : true,
-                'conditions' : ['ENABLE_LOCALED'],
                 'sources' : files('localectl.c'),
         },
         test_template + {
-                'sources' : files(
-                        'test-localed-util.c',
-                        'localed-util.c',
-                        'xkbcommon-util.c',
-                ),
+                'sources' : files('test-localed-util.c'),
+                'objects' : ['systemd-localed'],
                 'dependencies' : libxkbcommon_deps,
         },
 ]
@@ -49,14 +51,12 @@ executables += [
 kbd_model_map = meson.current_source_dir() / 'kbd-model-map'
 language_fallback_map = meson.current_source_dir() / 'language-fallback-map'
 
-if conf.get('ENABLE_LOCALED') == 1
-        install_data('org.freedesktop.locale1.conf',
-                     install_dir : dbuspolicydir)
-        install_data('org.freedesktop.locale1.service',
-                     install_dir : dbussystemservicedir)
-        install_data('org.freedesktop.locale1.policy',
-                     install_dir : polkitpolicydir)
-        install_data('kbd-model-map',
-                     'language-fallback-map',
-                     install_dir : pkgdatadir)
-endif
+install_data('org.freedesktop.locale1.conf',
+                install_dir : dbuspolicydir)
+install_data('org.freedesktop.locale1.service',
+                install_dir : dbussystemservicedir)
+install_data('org.freedesktop.locale1.policy',
+                install_dir : polkitpolicydir)
+install_data('kbd-model-map',
+                'language-fallback-map',
+                install_dir : pkgdatadir)
index 6b617ca4482956d3013176d2896dc0c224602a50..99096c4c292e6e11b4d5f448647125d093f42d5a 100644 (file)
@@ -1,18 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_LOGIND') != 1
+        subdir_done()
+endif
+
 systemd_logind_sources = files(
         'logind.c',
 )
-
-logind_gperf_c = custom_target(
-        'logind_gperf.c',
-        input : 'logind-gperf.gperf',
-        output : 'logind-gperf.c',
-        command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
-
-generated_sources += logind_gperf_c
-
-liblogind_core_sources = files(
+systemd_logind_extract_sources = files(
         'logind-action.c',
         'logind-brightness.c',
         'logind-button.c',
@@ -33,15 +28,14 @@ liblogind_core_sources = files(
         'logind-wall.c',
 )
 
-liblogind_core_sources += [logind_gperf_c]
+logind_gperf_c = custom_target(
+        'logind_gperf.c',
+        input : 'logind-gperf.gperf',
+        output : 'logind-gperf.c',
+        command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
-liblogind_core = static_library(
-        'logind-core',
-        liblogind_core_sources,
-        include_directories : includes,
-        dependencies : [libacl,
-                        userspace],
-        build_by_default : false)
+generated_sources += logind_gperf_c
+systemd_logind_extract_sources += [logind_gperf_c]
 
 loginctl_sources = files(
         'loginctl.c',
@@ -52,12 +46,9 @@ executables += [
         libexec_template + {
                 'name' : 'systemd-logind',
                 'dbus' : true,
-                'conditions' : ['ENABLE_LOGIND'],
-                'sources' : systemd_logind_sources,
-                'link_with' : [
-                        liblogind_core,
-                        libshared,
-                ],
+                'sources' : [systemd_logind_sources, systemd_logind_extract_sources],
+                'include_directories' : [libexec_template['include_directories'], include_directories('.')],
+                'extract' : systemd_logind_extract_sources,
                 'dependencies' : [
                         libacl,
                         threads,
@@ -66,7 +57,6 @@ executables += [
         executable_template + {
                 'name' : 'loginctl',
                 'public' : true,
-                'conditions' : ['ENABLE_LOGIND'],
                 'sources' : loginctl_sources,
                 'dependencies' : [
                         liblz4_cflags,
@@ -78,12 +68,10 @@ executables += [
         executable_template + {
                 'name' : 'systemd-inhibit',
                 'public' : true,
-                'conditions' : ['ENABLE_LOGIND'],
                 'sources' : files('inhibit.c'),
         },
         libexec_template + {
                 'name' : 'systemd-user-runtime-dir',
-                'conditions' : ['ENABLE_LOGIND'],
                 'sources' : files('user-runtime-dir.c'),
         },
         test_template + {
@@ -92,10 +80,7 @@ executables += [
         },
         test_template + {
                 'sources' : files('test-login-tables.c'),
-                'link_with' : [
-                        liblogind_core,
-                        libshared,
-                ],
+                'objects' : ['systemd-logind'],
                 'dependencies' : threads,
         },
         test_template + {
@@ -111,31 +96,24 @@ simple_tests += files(
 modules += [
         pam_template + {
                 'name' : 'pam_systemd',
-                'conditions' : [
-                        'ENABLE_LOGIND',
-                        'HAVE_PAM',
-                ],
+                'conditions' : ['HAVE_PAM'],
                 'sources' : files('pam_systemd.c'),
                 'version-script' : meson.current_source_dir() / 'pam_systemd.sym',
         },
         pam_template + {
                 'name' : 'pam_systemd_loadkey',
-                'conditions' : [
-                        'HAVE_PAM',
-                ],
+                'conditions' : ['HAVE_PAM'],
                 'sources' : files('pam_systemd_loadkey.c'),
                 'version-script' : meson.current_source_dir() / 'pam_systemd_loadkey.sym',
         },
 ]
 
-enable_logind = conf.get('ENABLE_LOGIND') == 1
-
 custom_target(
         'logind.conf',
         input : 'logind.conf.in',
         output : 'logind.conf',
         command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
-        install : enable_logind and install_sysconfdir_samples and pkgsysconfdir != 'no',
+        install : install_sysconfdir_samples and pkgsysconfdir != 'no',
         install_dir : pkgconfigfiledir)
 
 custom_target(
@@ -143,16 +121,14 @@ custom_target(
         input : 'systemd-user.in',
         output : 'systemd-user',
         command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
-        install : enable_logind and pamconfdir != 'no',
+        install : pamconfdir != 'no',
         install_dir : pamconfdir)
 
-if enable_logind
-        install_data('org.freedesktop.login1.conf',
-                     install_dir : dbuspolicydir)
-        install_data('org.freedesktop.login1.service',
-                     install_dir : dbussystemservicedir)
-        install_data('org.freedesktop.login1.policy',
-                     install_dir : polkitpolicydir)
-        install_data('10-systemd-logind-root-ignore-inhibitors.rules.example',
-                     install_dir : polkitrulesdir)
-endif
+install_data('org.freedesktop.login1.conf',
+                install_dir : dbuspolicydir)
+install_data('org.freedesktop.login1.service',
+                install_dir : dbussystemservicedir)
+install_data('org.freedesktop.login1.policy',
+                install_dir : polkitpolicydir)
+install_data('10-systemd-logind-root-ignore-inhibitors.rules.example',
+                install_dir : polkitrulesdir)
index c596f71b5d4dc2de943a6c6fd17bfee787b3b041..19ab1fa8f7e22022a2685b6237dabc50461fca7e 100644 (file)
@@ -1,6 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-libmachine_core_sources = files(
+if conf.get('ENABLE_MACHINED') != 1
+        subdir_done()
+endif
+
+systemd_machined_sources = files(
+        'machined.c'
+)
+systemd_machined_extract_sources = files(
         'image.c',
         'image-dbus.c',
         'image-varlink.c',
@@ -13,29 +20,16 @@ libmachine_core_sources = files(
         'operation.c',
 )
 
-libmachine_core = static_library(
-        'machine-core',
-        libmachine_core_sources,
-        include_directories : includes,
-        dependencies : [threads,
-                        userspace],
-        build_by_default : false)
-
 executables += [
         libexec_template + {
                 'name' : 'systemd-machined',
                 'dbus' : true,
-                'conditions' : ['ENABLE_MACHINED'],
-                'sources' : files('machined.c'),
-                'link_with' : [
-                        libmachine_core,
-                        libshared,
-                ],
+                'sources' : [systemd_machined_sources, systemd_machined_extract_sources],
+                'extract' : systemd_machined_extract_sources,
         },
         executable_template + {
                 'name' : 'machinectl',
                 'public' : true,
-                'conditions' : ['ENABLE_MACHINED'],
                 'sources' : files('machinectl.c'),
                 'dependencies' : [
                         liblz4_cflags,
@@ -46,19 +40,14 @@ executables += [
         },
         test_template + {
                 'sources' : files('test-machine-tables.c'),
-                'link_with': [
-                        libmachine_core,
-                        libshared
-                ],
+                'objects' : ['systemd-machined'],
                 'dependencies': threads,
         },
 ]
 
-if conf.get('ENABLE_MACHINED') == 1
-        install_data('org.freedesktop.machine1.conf',
-                     install_dir : dbuspolicydir)
-        install_data('org.freedesktop.machine1.service',
-                     install_dir : dbussystemservicedir)
-        install_data('org.freedesktop.machine1.policy',
-                     install_dir : polkitpolicydir)
-endif
+install_data('org.freedesktop.machine1.conf',
+             install_dir : dbuspolicydir)
+install_data('org.freedesktop.machine1.service',
+             install_dir : dbussystemservicedir)
+install_data('org.freedesktop.machine1.policy',
+             install_dir : polkitpolicydir)
index 5d6fc9a806004d3fd746bbef154f66b87298e5fa..990dac22839ac6d7422270bbeb360cfa8e19cca0 100644 (file)
@@ -2,7 +2,10 @@
 
 subdir('bpf/sysctl_monitor')
 
-sources = files(
+systemd_networkd_sources = files(
+        'networkd.c'
+)
+systemd_networkd_extract_sources = files(
         'netdev/bareudp.c',
         'netdev/batadv.c',
         'netdev/bond.c',
@@ -111,8 +114,6 @@ sources = files(
         'tc/teql.c',
 )
 
-systemd_networkd_sources = files('networkd.c')
-
 systemd_networkd_wait_online_sources = files(
         'wait-online/dns-configuration.c',
         'wait-online/link.c',
@@ -136,16 +137,11 @@ networkctl_sources = files(
         'networkctl-util.c',
 )
 
-network_generator_sources = files(
-        'generator/main.c',
-        'generator/network-generator.c',
-)
-
 networkd_network_gperf_gperf = files('networkd-network-gperf.gperf')
 networkd_netdev_gperf_gperf = files('netdev/netdev-gperf.gperf')
 
 if conf.get('HAVE_VMLINUX_H') == 1
-        sources += sysctl_monitor_skel_h
+        systemd_networkd_extract_sources += sysctl_monitor_skel_h
 endif
 
 networkd_gperf_c = custom_target(
@@ -167,7 +163,7 @@ netdev_gperf_c = custom_target(
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
 generated_sources += [networkd_gperf_c, networkd_network_gperf_c, netdev_gperf_c]
-sources += [networkd_gperf_c, networkd_network_gperf_c, netdev_gperf_c]
+systemd_networkd_extract_sources += [networkd_gperf_c, networkd_network_gperf_c, netdev_gperf_c]
 
 if get_option('link-networkd-shared')
         networkd_link_with = [libshared]
@@ -178,27 +174,23 @@ endif
 
 network_includes = [libsystemd_network_includes, include_directories(['.', 'netdev', 'tc'])]
 
-libnetworkd_core = static_library(
-        'networkd-core',
-        sources,
-        include_directories : network_includes,
-        dependencies : userspace,
-        link_with : networkd_link_with,
-        build_by_default : false)
-
 network_test_template = test_template + {
+        'conditions' : ['ENABLE_NETWORKD'],
         'link_with' : [
-                libnetworkd_core,
+                networkd_link_with,
                 libsystemd_network,
         ],
+        'objects' : ['systemd-networkd'],
         'include_directories' : network_includes,
 }
 
 network_fuzz_template = fuzz_template + {
+        'conditions' : ['ENABLE_NETWORKD'],
         'link_with' : [
-                libnetworkd_core,
+                networkd_link_with,
                 libsystemd_network,
         ],
+        'objects' : ['systemd-networkd'],
         'dependencies' : threads,
         'include_directories' : network_includes,
 }
@@ -208,10 +200,10 @@ executables += [
                 'name' : 'systemd-networkd',
                 'dbus' : true,
                 'conditions' : ['ENABLE_NETWORKD'],
-                'sources' : systemd_networkd_sources,
+                'sources' : [systemd_networkd_sources, systemd_networkd_extract_sources],
+                'extract' : systemd_networkd_extract_sources,
                 'include_directories' : network_includes,
                 'link_with' : [
-                        libnetworkd_core,
                         libsystemd_network,
                         networkd_link_with,
                 ],
@@ -237,14 +229,13 @@ executables += [
         },
         libexec_template + {
                 'name' : 'systemd-network-generator',
-                'sources' : network_generator_sources,
+                'sources' : files('generator/network-generator.c', 'generator/main.c'),
+                'extract' : files('generator/network-generator.c'),
                 'link_with' : networkd_link_with,
         },
         test_template + {
-                'sources' : files(
-                        'generator/test-network-generator.c',
-                        'generator/network-generator.c',
-                ),
+                'sources' : files('generator/test-network-generator.c'),
+                'objects' : ['systemd-network-generator'],
                 'suite' : 'network',
         },
         network_test_template + {
index f7fa908806d62cb0fd69e330aac6a37e0d60fd84..b59017c15ecdfadb0c500d3c347de505f6f350ac 100644 (file)
@@ -1,18 +1,26 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-libnspawn_core_sources = files(
+if conf.get('ENABLE_NSPAWN') != 1
+        subdir_done()
+endif
+
+nspawn_sources = files(
+        'nspawn.c',
         'nspawn-bind-user.c',
         'nspawn-cgroup.c',
-        'nspawn-expose-ports.c',
-        'nspawn-mount.c',
         'nspawn-network.c',
-        'nspawn-oci.c',
         'nspawn-register.c',
         'nspawn-seccomp.c',
-        'nspawn-settings.c',
         'nspawn-setuid.c',
         'nspawn-stub-pid1.c',
 )
+nspawn_extract_sources = files(
+        'nspawn-expose-ports.c',
+        'nspawn-mount.c',
+        'nspawn-network.c',
+        'nspawn-oci.c',
+        'nspawn-settings.c',
+)
 
 nspawn_gperf_c = custom_target(
         'nspawn-gperf.c',
@@ -21,26 +29,11 @@ nspawn_gperf_c = custom_target(
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
 generated_sources += nspawn_gperf_c
-libnspawn_core_sources += nspawn_gperf_c
-
-libnspawn_core = static_library(
-        'nspawn-core',
-        libnspawn_core_sources,
-        include_directories : includes,
-        dependencies : [libacl,
-                        libseccomp,
-                        libselinux,
-                        userspace],
-        build_by_default : false)
-
-nspawn_libs = [
-        libnspawn_core,
-        libshared,
-]
+nspawn_extract_sources += nspawn_gperf_c
 
 nspawn_common_template = {
-        'link_with' : nspawn_libs,
         'dependencies' : libseccomp,
+        'objects' : ['systemd-nspawn'],
 }
 nspawn_test_template = test_template + nspawn_common_template
 nspawn_fuzz_template = fuzz_template + nspawn_common_template
@@ -49,12 +42,16 @@ executables += [
         executable_template + {
                 'name' : 'systemd-nspawn',
                 'public' : true,
-                'conditions' : ['ENABLE_NSPAWN'],
-                'sources' : files('nspawn.c'),
-                'link_with' : nspawn_libs,
+                'sources' : [nspawn_sources, nspawn_extract_sources],
+                'include_directories' : [
+                        executable_template['include_directories'],
+                        include_directories('.')
+                ],
+                'extract' : nspawn_extract_sources,
                 'dependencies' : [
                         libblkid,
                         libseccomp,
+                        libselinux,
                 ],
         },
         nspawn_test_template + {
index b80d6b2a3427399ff8de5aa73789ce502279a826..85ebf6a0217c78ea3b62bb77bae6c8e0ebc8dc4a 100644 (file)
@@ -6,46 +6,45 @@ endif
 
 subdir('bpf/userns_restrict')
 
-systemd_nsresourcework_sources = files(
-        'nsresourcework.c',
-        'userns-restrict.c',
-        'userns-registry.c',
-)
-
 systemd_nsresourced_sources = files(
         'nsresourced-manager.c',
         'nsresourced.c',
+)
+systemd_nsresourced_extract_sources = files(
         'userns-restrict.c',
         'userns-registry.c',
 )
-
-userns_restrict_include = include_directories('.')
+systemd_nsresourcework_sources = files(
+        'nsresourcework.c'
+)
+test_userns_restrict_sources = files(
+        'test-userns-restrict.c'
+)
 
 if conf.get('HAVE_VMLINUX_H') == 1
-        systemd_nsresourcework_sources += userns_restrict_skel_h
         systemd_nsresourced_sources += userns_restrict_skel_h
-
-        executables += [
-                test_template + {
-                        'sources' : files('test-userns-restrict.c', 'userns-restrict.c') + userns_restrict_skel_h,
-                        'conditions' : ['HAVE_VMLINUX_H'],
-                        'include_directories' : [ includes, userns_restrict_include ],
-                },
-        ]
+        systemd_nsresourcework_sources += userns_restrict_skel_h
+        test_userns_restrict_sources += userns_restrict_skel_h
 endif
 
 executables += [
         libexec_template + {
-                'name' : 'systemd-nsresourcework',
-                'sources' : systemd_nsresourcework_sources,
+                'name' : 'systemd-nsresourced',
+                'sources' : [systemd_nsresourced_sources, systemd_nsresourced_extract_sources],
+                'include_directories' : [libexec_template['include_directories'], include_directories('.')],
+                'extract' : systemd_nsresourced_extract_sources,
                 'dependencies' : threads,
-                'include_directories' : [ includes, userns_restrict_include ],
         },
         libexec_template + {
-                'name' : 'systemd-nsresourced',
-                'sources' : systemd_nsresourced_sources,
+                'name' : 'systemd-nsresourcework',
+                'sources' : systemd_nsresourcework_sources,
                 'dependencies' : threads,
-                'include_directories' : [ includes, userns_restrict_include ],
+                'objects' : ['systemd-nsresourced'],
+        },
+        test_template + {
+                'sources' : test_userns_restrict_sources,
+                'conditions' : ['HAVE_VMLINUX_H'],
+                'objects' : ['systemd-nsresourced'],
         },
 ]
 
index bd4b734e0f88617ce76ccdce6a80b7d4610db410..1d0880e3f28ee7ea487561af97913d9dd80dfa43 100644 (file)
@@ -1,10 +1,16 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_OOMD') != 1
+        subdir_done()
+endif
+
 systemd_oomd_sources = files(
         'oomd.c',
         'oomd-conf.c',
         'oomd-manager.c',
         'oomd-manager-bus.c',
+)
+systemd_oomd_extract_sources = files(
         'oomd-util.c',
 )
 
@@ -12,34 +18,29 @@ executables += [
         libexec_template + {
                 'name' : 'systemd-oomd',
                 'dbus' : true,
-                'conditions' : ['ENABLE_OOMD'],
-                'sources' : systemd_oomd_sources,
+                'sources' : [systemd_oomd_sources, systemd_oomd_extract_sources],
+                'extract' : systemd_oomd_extract_sources,
                 'dependencies' : libatomic,
         },
         executable_template + {
                 'name' : 'oomctl',
                 'public' : true,
-                'conditions' : ['ENABLE_OOMD'],
                 'sources' : files('oomctl.c'),
         },
         test_template + {
-                'sources' : files(
-                        'test-oomd-util.c',
-                        'oomd-util.c',
-                ),
+                'sources' : files('test-oomd-util.c'),
+                'objects' : ['systemd-oomd'],
                 'dependencies' : libatomic,
         },
 ]
 
-if conf.get('ENABLE_OOMD') == 1
-        install_data('org.freedesktop.oom1.conf',
-                     install_dir : dbuspolicydir)
+install_data('org.freedesktop.oom1.conf',
+                install_dir : dbuspolicydir)
 
-        install_data('org.freedesktop.oom1.service',
-                     install_dir : dbussystemservicedir)
+install_data('org.freedesktop.oom1.service',
+                install_dir : dbussystemservicedir)
 
-        if install_sysconfdir_samples
-                install_data('oomd.conf',
-                             install_dir : pkgconfigfiledir)
-        endif
+if install_sysconfdir_samples
+        install_data('oomd.conf',
+                        install_dir : pkgconfigfiledir)
 endif
index 9461d6a862982382e9c69a6ae380a4c79cd40b85..57edb6508f868618a6c133cd7766d1033dfafb2a 100644 (file)
@@ -1,6 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_RESOLVE') != 1
+        subdir_done()
+endif
+
 systemd_resolved_sources = files(
+        'resolved.c',
+)
+systemd_resolved_extract_sources = files(
         'dns-type.c',
         'resolved-bus.c',
         'resolved-conf.c',
@@ -84,26 +91,15 @@ resolved_dnssd_gperf_c = custom_target(
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
 generated_sources += [dns_type_from_name_h, dns_type_to_name_h, resolved_gperf_c, resolved_dnssd_gperf_c]
-systemd_resolved_sources += [dns_type_from_name_h, dns_type_to_name_h, resolved_gperf_c, resolved_dnssd_gperf_c]
+systemd_resolved_extract_sources += [dns_type_from_name_h, dns_type_to_name_h, resolved_gperf_c, resolved_dnssd_gperf_c]
 
 if conf.get('ENABLE_DNS_OVER_TLS') == 1
-        systemd_resolved_sources += files(
+        systemd_resolved_extract_sources += files(
                 'resolved-dnstls.c',
         )
 endif
 
-resolved_core = static_library(
-        'systemd-resolved-core',
-        systemd_resolved_sources,
-        include_directories : includes,
-        dependencies : userspace,
-        build_by_default : false)
-
 resolve_common_template = {
-        'link_with' : [
-                libshared,
-                resolved_core,
-        ],
         'dependencies' : [
                 libopenssl,
                 libm,
@@ -111,20 +107,20 @@ resolve_common_template = {
         ],
 }
 
-resolve_test_template = test_template + resolve_common_template
-resolve_fuzz_template = fuzz_template + resolve_common_template
+resolve_test_template = test_template + resolve_common_template + {'objects' : ['systemd-resolved']}
+resolve_fuzz_template = fuzz_template + resolve_common_template + {'objects' : ['systemd-resolved']}
 
 executables += [
         libexec_template + resolve_common_template + {
                 'name' : 'systemd-resolved',
                 'dbus' : true,
-                'conditions' : ['ENABLE_RESOLVE'],
-                'sources' : files('resolved.c'),
+                'sources' : [systemd_resolved_sources, systemd_resolved_extract_sources],
+                'include_directories' : [libexec_template['include_directories'], include_directories('.')],
+                'extract' : systemd_resolved_extract_sources,
         },
         executable_template + resolve_common_template + {
                 'name' : 'resolvectl',
                 'public' : true,
-                'conditions' : ['ENABLE_RESOLVE'],
                 'sources' : files(
                         'resolvconf-compat.c',
                         'resolvectl.c',
@@ -132,6 +128,7 @@ executables += [
                 'dependencies' : resolve_common_template['dependencies'] + [
                         libidn,
                 ],
+                'objects' : ['systemd-resolved'],
         },
         resolve_test_template + {
                 'sources' : files('test-resolve-tables.c'),
@@ -140,10 +137,7 @@ executables += [
                 'sources' : files('test-dns-answer.c'),
         },
         resolve_test_template + {
-                'sources' : files(
-                        'test-dns-cache.c',
-                        'resolved-dns-cache.c'
-                ),
+                'sources' : files('test-dns-cache.c'),
         },
         resolve_test_template + {
                 'sources' : files('test-dns-packet.c'),
@@ -161,10 +155,7 @@ executables += [
                 'sources' : files('test-dns-question.c'),
         },
         resolve_test_template + {
-                'sources' : files(
-                        'test-resolved-etc-hosts.c',
-                        'resolved-etc-hosts.c',
-                ),
+                'sources' : files('test-resolved-etc-hosts.c'),
         },
         resolve_test_template + {
                 'sources' : files('test-resolved-packet.c'),
@@ -203,40 +194,35 @@ executables += [
                 'sources' : files('fuzz-dns-packet.c'),
         },
         resolve_fuzz_template + {
-                'sources' : files(
-                        'fuzz-etc-hosts.c',
-                        'resolved-etc-hosts.c',
-                ),
+                'sources' : files('fuzz-etc-hosts.c'),
         },
         resolve_fuzz_template + {
                 'sources' : files('fuzz-resource-record.c'),
         },
 ]
 
-if conf.get('ENABLE_RESOLVE') == 1
-        install_data('org.freedesktop.resolve1.conf',
-                     install_dir : dbuspolicydir)
-        install_data('org.freedesktop.resolve1.service',
-                     install_dir : dbussystemservicedir)
-        install_data('org.freedesktop.resolve1.policy',
-                     install_dir : polkitpolicydir)
-        install_data('resolv.conf',
-                     install_dir : libexecdir)
-
-        install_symlink('resolvconf',
-                        pointing_to : sbin_to_bin + 'resolvectl',
-                        install_dir : sbindir)
-
-        # symlink for backwards compatibility after rename
-        install_symlink('systemd-resolve',
-                        pointing_to : 'resolvectl',
-                        install_dir : bindir)
-endif
+install_data('org.freedesktop.resolve1.conf',
+             install_dir : dbuspolicydir)
+install_data('org.freedesktop.resolve1.service',
+             install_dir : dbussystemservicedir)
+install_data('org.freedesktop.resolve1.policy',
+             install_dir : polkitpolicydir)
+install_data('resolv.conf',
+                install_dir : libexecdir)
+
+install_symlink('resolvconf',
+                pointing_to : sbin_to_bin + 'resolvectl',
+                install_dir : sbindir)
+
+# symlink for backwards compatibility after rename
+install_symlink('systemd-resolve',
+                pointing_to : 'resolvectl',
+                install_dir : bindir)
 
 custom_target(
         'resolved.conf',
         input : 'resolved.conf.in',
         output : 'resolved.conf',
         command : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'],
-        install : conf.get('ENABLE_RESOLVE') == 1 and install_sysconfdir_samples,
+        install : install_sysconfdir_samples,
         install_dir : pkgconfigfiledir)
index 9bc60f83e5c199211209c58749f281edac76dfbb..5fc896c000530e052eb46371889b1fffdcbadb28 100644 (file)
@@ -4,20 +4,23 @@ systemd_shutdown_sources = files(
         'detach-dm.c',
         'detach-loopback.c',
         'detach-md.c',
-        'detach-swap.c',
         'shutdown.c',
+)
+systemd_shutdown_extract_sources = files(
+        'detach-swap.c',
         'umount.c',
 )
 
 executables += [
         libexec_template + {
                 'name' : 'systemd-shutdown',
-                'sources' : systemd_shutdown_sources,
+                'sources' : [systemd_shutdown_sources, systemd_shutdown_extract_sources],
+                'extract' : systemd_shutdown_extract_sources,
                 'dependencies' : libmount,
         },
         libexec_template + {
                 'name' : 'systemd-shutdown.standalone',
-                'sources' : systemd_shutdown_sources,
+                'sources' : [systemd_shutdown_sources, systemd_shutdown_extract_sources],
                 'c_args' : '-DSTANDALONE',
                 'link_with' : [
                         libbasic_static,
@@ -29,11 +32,8 @@ executables += [
                 'install' : have_standalone_binaries,
         },
         test_template + {
-                'sources' : files(
-                        'test-umount.c',
-                        'detach-swap.c',
-                        'umount.c',
-                ),
+                'sources' : files('test-umount.c'),
+                'objects' : ['systemd-shutdown'],
                 'dependencies' : libmount,
         },
 ]
index fc0037e3876cdf489baee0fccc2f9c9701d0fbef..03fc9f1ab5029cd39da9eace91fc99e492bb8e47 100644 (file)
@@ -1,18 +1,22 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+sleep_sources = files(
+        'sleep.c',
+)
+sleep_extract_sources = files(
+        'battery-capacity.c',
+)
+
 executables += [
         libexec_template + {
                 'name' : 'systemd-sleep',
-                'sources' : files(
-                        'sleep.c',
-                        'battery-capacity.c',
-                ),
+                'sources' : [sleep_sources, sleep_extract_sources],
+                'include_directories' : [libexec_template['include_directories'], include_directories('.')],
+                'extract' : sleep_extract_sources,
         },
         test_template + {
-                'sources' : files(
-                        'test-battery-capacity.c',
-                        'battery-capacity.c',
-                ),
+                'sources' : files('test-battery-capacity.c'),
+                'objects' : ['systemd-sleep'],
         },
 ]
 
index 19437ee927cea68b276112685205bfccfd3c6dce..d32e32dcbc3a35e21fbabaa4111fdad1159363ff 100644 (file)
@@ -1,15 +1,18 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-sources = files(
-        'timesyncd-conf.c',
-        'timesyncd-manager.c',
-        'timesyncd-server.c',
-)
+if conf.get('ENABLE_TIMESYNCD') != 1
+        subdir_done()
+endif
 
-systemd_timesyncd_sources = files(
+timesyncd_sources = files(
         'timesyncd.c',
         'timesyncd-bus.c',
 )
+timesyncd_extract_sources = files(
+        'timesyncd-conf.c',
+        'timesyncd-manager.c',
+        'timesyncd-server.c',
+)
 
 timesyncd_gperf_c = custom_target(
         'timesyncd-gperf.c',
@@ -18,7 +21,7 @@ timesyncd_gperf_c = custom_target(
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
 generated_sources += timesyncd_gperf_c
-sources += timesyncd_gperf_c
+timesyncd_extract_sources += timesyncd_gperf_c
 
 if get_option('link-timesyncd-shared')
         timesyncd_link_with = [libshared]
@@ -27,20 +30,13 @@ else
                                libshared_static]
 endif
 
-libtimesyncd_core = static_library(
-        'timesyncd-core',
-        sources,
-        include_directories : includes,
-        dependencies : userspace,
-        link_with : timesyncd_link_with,
-        build_by_default : false)
-
 executables += [
         libexec_template + {
                 'name' : 'systemd-timesyncd',
-                'conditions' : ['ENABLE_TIMESYNCD'],
-                'sources' : systemd_timesyncd_sources,
-                'link_with' : libtimesyncd_core,
+                'sources' : [timesyncd_sources, timesyncd_extract_sources],
+                'include_directories' : [libexec_template['include_directories'], include_directories('.')],
+                'extract' : timesyncd_extract_sources,
+                'link_with' : timesyncd_link_with,
                 'dependencies' : [
                         libm,
                         threads,
@@ -48,16 +44,13 @@ executables += [
         },
         libexec_template + {
                 'name' : 'systemd-time-wait-sync',
-                'conditions' : ['ENABLE_TIMESYNCD'],
                 'sources' : files('wait-sync.c'),
-                'link_with' : libtimesyncd_core,
+                'objects' : ['systemd-timesyncd'],
+                'dependencies' : libm,
         },
         test_template + {
                 'sources' : files('test-timesync.c'),
-                'link_with' : [
-                        libshared,
-                        libtimesyncd_core,
-                ],
+                'objects' : ['systemd-timesyncd'],
                 'dependencies' : libm,
         },
 ]
@@ -70,13 +63,11 @@ custom_target(
         install : conf.get('ENABLE_TIMESYNCD') == 1 and install_sysconfdir_samples,
         install_dir : pkgconfigfiledir)
 
-if conf.get('ENABLE_TIMESYNCD') == 1
-        install_data('org.freedesktop.timesync1.conf',
-                     install_dir : dbuspolicydir)
-        install_data('org.freedesktop.timesync1.service',
-                     install_dir : dbussystemservicedir)
-        install_data('80-systemd-timesync.list',
-                     install_dir : ntpservicelistdir)
-        install_data('org.freedesktop.timesync1.policy',
-                     install_dir : polkitpolicydir)
-endif
+install_data('org.freedesktop.timesync1.conf',
+             install_dir : dbuspolicydir)
+install_data('org.freedesktop.timesync1.service',
+             install_dir : dbussystemservicedir)
+install_data('80-systemd-timesync.list',
+             install_dir : ntpservicelistdir)
+install_data('org.freedesktop.timesync1.policy',
+             install_dir : polkitpolicydir)
index 09ad8395866730af84f7b733ce4c89f12d46b4fa..e035d5f03d1c4525d0458addf44e5f1ed2769721 100644 (file)
@@ -1,7 +1,13 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_TMPFILES') != 1
+        subdir_done()
+endif
+
 systemd_tmpfiles_sources = files(
         'tmpfiles.c',
+)
+systemd_tmpfiles_extract_sources = files(
         'offline-passwd.c',
 )
 
@@ -9,15 +15,14 @@ executables += [
         executable_template + {
                 'name' : 'systemd-tmpfiles',
                 'public' : true,
-                'conditions' : ['ENABLE_TMPFILES'],
-                'sources' : systemd_tmpfiles_sources,
+                'sources' : [systemd_tmpfiles_sources, systemd_tmpfiles_extract_sources],
+                'extract' : systemd_tmpfiles_extract_sources,
                 'dependencies' : libacl,
         },
         executable_template + {
                 'name' : 'systemd-tmpfiles.standalone',
                 'public' : have_standalone_binaries,
-                'conditions' : ['ENABLE_TMPFILES'],
-                'sources' : systemd_tmpfiles_sources,
+                'sources' : [systemd_tmpfiles_sources, systemd_tmpfiles_extract_sources],
                 'c_args' : '-DSTANDALONE',
                 'link_with' : [
                         libbasic_static,
@@ -29,9 +34,7 @@ executables += [
                 'install' : have_standalone_binaries,
         },
         test_template + {
-                'sources' : files(
-                        'test-offline-passwd.c',
-                        'offline-passwd.c',
-                ),
+                'sources' : files('test-offline-passwd.c'),
+                'objects' : ['systemd-tmpfiles'],
         },
 ]
index 412f5729d44fa4c96acdd4e56f3b928459835ad2..ba0a6b14ff056e349bd8b15eeb92087083158fbc 100644 (file)
@@ -17,8 +17,7 @@ udevadm_sources = files(
         'udevadm.c',
         'udevd.c',
 )
-
-libudevd_core_sources = files(
+udevadm_extract_sources = files(
         'net/link-config.c',
         'udev-builtin.c',
         'udev-builtin-btrfs.c',
@@ -49,15 +48,15 @@ libudevd_core_sources = files(
 )
 
 if conf.get('HAVE_KMOD') == 1
-        libudevd_core_sources += files('udev-builtin-kmod.c')
+        udevadm_extract_sources += files('udev-builtin-kmod.c')
 endif
 
 if conf.get('HAVE_BLKID') == 1
-        libudevd_core_sources += files('udev-builtin-blkid.c')
+        udevadm_extract_sources += files('udev-builtin-blkid.c')
 endif
 
 if conf.get('HAVE_ACL') == 1
-        libudevd_core_sources += files('udev-builtin-uaccess.c')
+        udevadm_extract_sources += files('udev-builtin-uaccess.c')
 endif
 
 ############################################################
@@ -104,6 +103,7 @@ link_config_gperf_c = custom_target(
         output : 'link-config-gperf.c',
         command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
 
+udevadm_extract_sources += link_config_gperf_c
 generated_sources += link_config_gperf_c
 
 ############################################################
@@ -119,18 +119,6 @@ endif
 
 ############################################################
 
-libudevd_core = static_library(
-        'udev-core',
-        libudevd_core_sources,
-        link_config_gperf_c,
-        keyboard_keys_from_name_h,
-        include_directories : includes + include_directories('net'),
-        link_with : udev_link_with,
-        dependencies : [libblkid,
-                        libkmod_cflags,
-                        userspace],
-        build_by_default : false)
-
 udev_dependencies = [
         libacl,
         libblkid,
@@ -147,12 +135,10 @@ udev_plugin_template = executable_template + {
 }
 
 udev_common_template = {
-        'link_with' : [
-                libshared,
-                libudevd_core,
-        ],
+        'objects' : ['udevadm'],
         'dependencies' : [
                 libacl,
+                libblkid,
                 threads,
         ],
 }
@@ -163,11 +149,19 @@ udev_binaries_dict = [
         executable_template + {
                 'name' : 'udevadm',
                 'public' : true,
-                'sources' : udevadm_sources,
-                'link_with' : [libudevd_core],
+                'sources' : [
+                        udevadm_sources,
+                        udevadm_extract_sources,
+                        keyboard_keys_from_name_h,
+                ],
+                'include_directories' : [
+                        libexec_template['include_directories'],
+                        include_directories('.', 'net'),
+                ],
                 'dependencies' : udev_dependencies,
                 'install_rpath' : udev_rpath,
                 'install_tag' : 'udev',
+                'extract' : udevadm_extract_sources,
         },
         udev_plugin_template + {
                 'name' : 'ata_id',
@@ -188,6 +182,7 @@ udev_binaries_dict = [
                         'fido_id/fido_id.c',
                         'fido_id/fido_id_desc.c',
                 ),
+                'extract' : files('fido_id/fido_id_desc.c'),
         },
         udev_plugin_template + {
                 'name' : 'iocost',
@@ -221,15 +216,12 @@ endforeach
 executables += udev_binaries_dict
 executables += [
         test_template + {
-                'sources' : files(
-                        'fido_id/test-fido-id-desc.c',
-                        'fido_id/fido_id_desc.c',
-                ),
+                'sources' : files('fido_id/test-fido-id-desc.c'),
+                'objects' : ['fido_id'],
                 'suite' : 'udev',
         },
         udev_test_template + {
                 'sources' : files('net/test-link-config-tables.c'),
-                'include_directories' : includes + include_directories('.'),
                 'suite' : 'udev',
         },
         udev_test_template + {
@@ -258,14 +250,11 @@ executables += [
                 'sources' : files('test-udev-spawn.c'),
         },
         fuzz_template + {
-                'sources' : files(
-                        'fido_id/fuzz-fido-id-desc.c',
-                        'fido_id/fido_id_desc.c',
-                ),
+                'sources' : files('fido_id/fuzz-fido-id-desc.c'),
+                'objects' : ['fido_id'],
         },
         udev_fuzz_template + {
                 'sources' : files('net/fuzz-link-parser.c'),
-                'include_directories' : includes + include_directories('.'),
         },
         udev_fuzz_template + {
                 'sources' : files('fuzz-udev-rule-parse-value.c'),
index c4decd84344e05fa7714e1daaa8acf02d19b48d9..eefe81c8709c560abddf9ec35a829cd5be44c950 100644 (file)
@@ -4,39 +4,27 @@ if conf.get('ENABLE_VMSPAWN') != 1
         subdir_done()
 endif
 
-libvmspawn_core_sources = files(
+vmspawn_sources = files(
+        'vmspawn.c',
         'vmspawn-settings.c',
-        'vmspawn-util.c',
         'vmspawn-scope.c',
         'vmspawn-mount.c',
         'vmspawn-register.c',
 )
-
-libvmspawn_core = static_library(
-        'vmspawn-core',
-        libvmspawn_core_sources,
-        include_directories : includes,
-        dependencies : [userspace],
-        build_by_default : false)
-
-vmspawn_libs = [
-        libvmspawn_core,
-        libshared,
-]
-
-vmspawn_test_template = test_template + {
-        'link_with' : [vmspawn_libs],
-}
+vmspawn_extract_sources = files(
+        'vmspawn-util.c',
+)
 
 executables += [
         executable_template + {
                 'name' : 'systemd-vmspawn',
                 'public' : true,
-                'sources' : files('vmspawn.c'),
-                'link_with' : vmspawn_libs,
+                'sources' : [vmspawn_sources, vmspawn_extract_sources],
+                'extract' : vmspawn_extract_sources,
                 'dependencies' : [libblkid]
         },
-        vmspawn_test_template + {
+        test_template + {
                 'sources' : files('test-vmspawn-util.c'),
+                'objects' : ['systemd-vmspawn'],
         },
 ]
index c938932c6215415571cb6f03214095e0ea8d29c4..58620b5dcd54b14d9bbbcf64a3bb85507b894a07 100644 (file)
@@ -1,32 +1,36 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+if conf.get('ENABLE_XDG_AUTOSTART') != 1
+        subdir_done()
+endif
+
 systemd_xdg_autostart_generator_sources = files(
         'xdg-autostart-generator.c',
+)
+systemd_xdg_autostart_generator_extract_sources = files(
         'xdg-autostart-service.c',
 )
 
 executables += [
         executable_template + {
                 'name' : 'systemd-xdg-autostart-generator',
-                'conditions' : ['ENABLE_XDG_AUTOSTART'],
-                'sources' : systemd_xdg_autostart_generator_sources,
+                'sources' : [
+                        systemd_xdg_autostart_generator_sources,
+                        systemd_xdg_autostart_generator_extract_sources,
+                ],
+                'extract' : systemd_xdg_autostart_generator_extract_sources,
                 'install_dir' : usergeneratordir,
         },
         libexec_template + {
                 'name' : 'systemd-xdg-autostart-condition',
-                'conditions' : ['ENABLE_XDG_AUTOSTART'],
                 'sources' : files('xdg-autostart-condition.c'),
         },
         test_template + {
-                'sources' : files(
-                        'test-xdg-autostart.c',
-                        'xdg-autostart-service.c',
-                ),
+                'sources' : files('test-xdg-autostart.c'),
+                'objects' : ['systemd-xdg-autostart-generator'],
         },
         fuzz_template + {
-                'sources' : files(
-                        'fuzz-xdg-desktop.c',
-                        'xdg-autostart-service.c',
-                ),
+                'sources' : files('fuzz-xdg-desktop.c'),
+                'objects' : ['systemd-xdg-autostart-generator'],
         },
 ]
index df3d39eba6d5bfb18a86e6b15e92d827eb80d1ca..05f9191fb66f712c18cae1fb12d68a8f55de1481 100755 (executable)
@@ -32,7 +32,7 @@ meson_args=("-Db_lundef=false")
 if [ -z "$FUZZING_ENGINE" ]; then
     meson_args+=("-Dllvm-fuzz=true")
 else
-    meson_args+=("-Doss-fuzz=true" "--auto-features=disabled")
+    meson_args+=("-Doss-fuzz=true" "--auto-features=disabled" "-Dnspawn=enabled" "-Dresolve=true")
 
     apt-get update
     apt-get install -y gperf m4 gettext python3-pip \