summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2017-04-04 23:03:47 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2017-04-23 21:47:26 -0400
commit5c23128daba7236a6080383b2a5649033cfef85c (patch)
tree3ca8af1a386cb490d20fc344ddbf3026bada6af9
parent521e7c3aea7cfc478380acb9857beb938855f00f (diff)
meson: build systemd using meson
It's crucial that we can build systemd using VS2010! ... er, wait, no, that's not the official reason. We need to shed old systems by requring python 3! Oh, no, it's something else. Maybe we need to throw out 345 years of knowlege accumulated in autotools? Whatever, this new thing is cool and shiny, let's use it. This is not complete, I'm throwing it out here for your amusement and critique. - rules for sd-boot are missing. Those might be quite complicated. - rules for tests are missing too. Those are probably quite simple and repetitive, but there's lots of them. - it's likely that I didn't get all the conditions right, I only tested "full" compilation where most deps are provided and nothing is disabled. - busname.target and all .busname units are skipped on purpose. Otherwise, installation into $DESTDIR has the same list of files and the autoconf install, except for .la files. It'd be great if people had a careful look at all the library linking options. I added stuff until things compiled, and in the end there's much less linking then in the old system. But it seems that there's still a lot of unnecessary deps. meson has a `shared_module` statement, which sounds like something appropriate for our nss and pam modules. Unfortunately, I couldn't get it to work. For the nss modules, we need an .so version of '2', but `shared_module` disallows the version argument. For the pam module, it also didn't work, I forgot the reason. The handling of .m4 and .in and .m4.in files is rather awkward. It's likely that this could be simplified. If make support is ever dropped, I think it'd make sense to switch to a different templating system so that two different languages and not required, which would make everything simpler yet. v2: - use get_pkgconfig_variable - use sh not bash - use add_project_arguments v3: - drop required:true and fix progs/prog typo v4: - use find_library('bz2') - add TTY_GID definition - define __SANE_USERSPACE_TYPES__ - use join_paths(prefix, ...) is used on all paths to make them all absolute v5: - replace all declare_dependency's with [] - add more conf.get guards around optional components v6: - drop -pipe, -Wall which are the default in meson - use compiler.has_function() and compiler.has_header_symbol instead of the hand-rolled checks. - fix duplication in 'liblibsystemd' library name - use the right .sym file for pam_systemd - rename 'compiler' to 'cc': shorter, and more idiomatic. v7: - use ENABLE_ENVIRONMENT_D not HAVE_ENVIRONMENT_D - rename prefix to prefixdir, rootprefix to rootprefixdir ("prefix" is too common of a name and too easy to overwrite by mistake) - wrap more stuff with conf.get('ENABLE...') == 1 - use rootprefix=='/' and rootbindir as install_dir, to fix paths under split-usr==true. v8: - use .split() also for src/coredump. Now everything is consistent ;) - add rootlibdir option and use it on the libraries that require it v9: - indentation v10: - fix check for qrencode and libaudit v11: - unify handling of executable paths, provide options for all progs This makes the meson build behave slightly differently than the autoconf-based one, because we always first try to find the executable in the filesystem, and fall back to the default. I think different handling of loadkeys, setfont, and telinit was just a historical accident. In addition to checking in $PATH, also check /usr/sbin/, /sbin for programs. In Fedora $PATH includes /usr/sbin, (and /sbin is is a symlink to /usr/sbin), but in Debian, those directories are not included in the path. C.f. https://github.com/mesonbuild/meson/issues/1576. - call all the options 'xxx-path' for clarity. - sort man/rules/meson.build properly so it's stable
-rw-r--r--catalog/meson.build29
-rw-r--r--docs/sysvinit/meson.build8
-rw-r--r--docs/var-log/meson.build8
-rw-r--r--hwdb/meson.build25
-rw-r--r--man/meson.build109
-rw-r--r--man/rules/meson.build763
-rw-r--r--meson.build1857
-rw-r--r--meson_options.txt191
-rw-r--r--network/meson.build9
-rw-r--r--po/meson.build14
-rw-r--r--rules/meson.build40
-rw-r--r--shell-completion/bash/meson.build52
-rw-r--r--shell-completion/zsh/meson.build49
-rw-r--r--src/analyze/meson.build7
-rw-r--r--src/basic/af-to-name.awk5
-rw-r--r--src/basic/arphrd-to-name.awk5
-rw-r--r--src/basic/cap-to-name.awk5
-rw-r--r--src/basic/errno-to-name.awk4
-rw-r--r--src/basic/generate-af-list.sh5
-rw-r--r--src/basic/generate-arphrd-list.sh5
-rw-r--r--src/basic/generate-cap-list.sh5
-rw-r--r--src/basic/generate-errno-list.sh4
-rw-r--r--src/basic/generate-gperfs.py16
-rw-r--r--src/basic/meson.build283
-rw-r--r--src/core/load-fragment-gperf-nulstr.awk12
-rw-r--r--src/core/meson.build222
-rw-r--r--src/coredump/meson.build17
-rw-r--r--src/hostname/meson.build16
-rw-r--r--src/import/meson.build70
-rw-r--r--src/journal-remote/meson.build45
-rw-r--r--src/journal/audit_type-to-name.awk5
-rw-r--r--src/journal/generate-audit_type-list.sh10
-rw-r--r--src/journal/meson.build104
-rw-r--r--src/kernel-install/meson.build10
-rw-r--r--src/libsystemd-network/meson.build48
-rw-r--r--src/libsystemd/meson.build98
-rw-r--r--src/libudev/meson.build47
-rw-r--r--src/locale/meson.build28
-rw-r--r--src/login/meson.build106
-rw-r--r--src/machine/meson.build39
-rw-r--r--src/network/meson.build111
-rw-r--r--src/nspawn/meson.build33
-rw-r--r--src/resolve/dns_type-to-name.awk7
-rw-r--r--src/resolve/generate-dns_type-gperf.py18
-rw-r--r--src/resolve/generate-dns_type-list.sed1
-rw-r--r--src/resolve/meson.build145
-rw-r--r--src/shared/meson.build154
-rw-r--r--src/systemd/meson.build33
-rw-r--r--src/timedate/meson.build16
-rw-r--r--src/timesync/meson.build28
-rw-r--r--src/udev/generate-keyboard-keys-list.sh4
-rw-r--r--src/udev/meson.build164
-rw-r--r--src/vconsole/meson.build10
-rw-r--r--sysctl.d/meson.build20
-rw-r--r--sysusers.d/meson.build33
-rw-r--r--tmpfiles.d/meson.build39
-rw-r--r--units/meson.build221
-rw-r--r--units/user/meson.build36
58 files changed, 5448 insertions, 0 deletions
diff --git a/catalog/meson.build b/catalog/meson.build
new file mode 100644
index 0000000000..b50792ee2e
--- /dev/null
+++ b/catalog/meson.build
@@ -0,0 +1,29 @@
+# -*- mode: meson -*-
+
+in_files = '''
+ systemd.bg.catalog
+ systemd.be.catalog
+ systemd.be@latin.catalog
+ systemd.fr.catalog
+ systemd.it.catalog
+ systemd.pl.catalog
+ systemd.pt_BR.catalog
+ systemd.ru.catalog
+ systemd.zh_CN.catalog
+ systemd.zh_TW.catalog
+ systemd.catalog
+'''.split()
+
+support_url = get_option('support-url')
+support_sed = 's~%SUPPORT_URL%~@0@~'.format(support_url)
+
+foreach file : in_files
+ custom_target(
+ file,
+ input : file + '.in',
+ output: file,
+ command : [sed, support_sed, '@INPUT@'],
+ capture : true,
+ install : true,
+ install_dir : catalogdir)
+endforeach
diff --git a/docs/sysvinit/meson.build b/docs/sysvinit/meson.build
new file mode 100644
index 0000000000..a519f74cee
--- /dev/null
+++ b/docs/sysvinit/meson.build
@@ -0,0 +1,8 @@
+# -*- mode: meson -*-
+
+file = configure_file(
+ input : 'README.in',
+ output : 'README',
+ configuration : substs)
+install_data(file,
+ install_dir : sysvinit_path)
diff --git a/docs/var-log/meson.build b/docs/var-log/meson.build
new file mode 100644
index 0000000000..c3d0cdbf82
--- /dev/null
+++ b/docs/var-log/meson.build
@@ -0,0 +1,8 @@
+# -*- mode: meson -*-
+
+file = configure_file(
+ input : 'README.in',
+ output : 'README',
+ configuration : substs)
+install_data(file,
+ install_dir : varlogdir)
diff --git a/hwdb/meson.build b/hwdb/meson.build
new file mode 100644
index 0000000000..4c13a2e7a9
--- /dev/null
+++ b/hwdb/meson.build
@@ -0,0 +1,25 @@
+# -*- mode: meson -*-
+
+hwdb_files = files('''
+ 20-pci-vendor-model.hwdb
+ 20-pci-classes.hwdb
+ 20-usb-vendor-model.hwdb
+ 20-usb-classes.hwdb
+ 20-sdio-vendor-model.hwdb
+ 20-sdio-classes.hwdb
+ 20-bluetooth-vendor-product.hwdb
+ 20-acpi-vendor.hwdb
+ 20-OUI.hwdb
+ 20-net-ifname.hwdb
+ 60-evdev.hwdb
+ 60-keyboard.hwdb
+ 60-sensor.hwdb
+ 70-mouse.hwdb
+ 70-pointingstick.hwdb
+ 70-touchpad.hwdb
+'''.split())
+
+if conf.get('ENABLE_HWDB', 0) == 1
+ install_data(hwdb_files,
+ install_dir : udevhwdbdir)
+endif
diff --git a/man/meson.build b/man/meson.build
new file mode 100644
index 0000000000..0f0bbd6ffc
--- /dev/null
+++ b/man/meson.build
@@ -0,0 +1,109 @@
+# -*- mode: meson -*-
+
+# This is lame, I know, but meson has no other include mechanism
+subdir('rules')
+
+# TODO: add regeneration rule:
+# python3 tools/make-man-rules.py --meson man/*xml > man/rules/meson.build
+
+xsltproc = find_program('xsltproc')
+xsltproc_flags = [
+ '--nonet',
+ '--xinclude',
+ '--stringparam', 'man.output.quietly', '1',
+ '--stringparam', 'funcsynopsis.style', 'ansi',
+ '--stringparam', 'man.authors.section.enabled', '0',
+ '--stringparam', 'man.copyright.section.enabled', '0',
+ '--stringparam', 'systemd.version', '@0@'.format(meson.project_version()),
+ '--path',
+ '@0@:@1@'.format(meson.current_build_dir(), meson.current_source_dir())]
+
+custom_man_xsl = files('custom-man.xsl')
+custom_html_xsl = files('custom-man.xsl')
+custom_entities_ent = files('custom-entities.ent')
+
+foreach tuple : manpages
+ stem = tuple[0]
+ section = tuple[1]
+ aliases = tuple[2]
+ condition = tuple[3]
+
+ xml = stem + '.xml'
+ html = stem + '.html'
+ man = stem + '.' + section
+
+ manaliases = []
+ htmlaliases = []
+ foreach alias : aliases
+ manaliases += [alias + '.' + section]
+ htmlaliases += [alias + '.html']
+ endforeach
+
+ mandirn = get_option('mandir') + '/man' + section
+
+ install = condition == '' or conf.get(condition, 0) == 1
+
+ custom_target(
+ man,
+ input : xml,
+ output : [man] + manaliases,
+ command : [xsltproc, '-o', '@OUTPUT0@'] + xsltproc_flags + [custom_man_xsl, '@INPUT@'],
+ install : install,
+ install_dir : mandirn)
+
+ custom_target(
+ html,
+ input : xml,
+ output : [html] + htmlaliases,
+ command : [xsltproc, '-o', '@OUTPUT0@'] + xsltproc_flags + [custom_html_xsl, '@INPUT@'])
+
+ if not install
+ message('Skipping @0@.@1@ because @2@ is @3@'.format(stem, section, condition, install))
+ endif
+endforeach
+
+############################################################
+
+source_xml_files = files()
+foreach tuple : manpages
+ source_xml_files += files(tuple[0] + '.xml')
+endforeach
+
+systemd_directives_xml = custom_target(
+ 'systemd.directives.xml',
+ input : source_xml_files,
+ output : 'systemd.directives.xml',
+ command : [make_directive_index_py, '@OUTPUT@'] + source_xml_files)
+
+nonindex_xml_files = source_xml_files + [systemd_directives_xml]
+systemd_index_xml = custom_target(
+ 'systemd.index.xml',
+ input : nonindex_xml_files,
+ output : 'systemd.index.xml',
+ command : [make_man_index_py, '@OUTPUT@'] + nonindex_xml_files)
+
+foreach tuple : [['systemd.directives', '7', systemd_directives_xml],
+ ['systemd.index', '7', systemd_index_xml]]
+ stem = tuple[0]
+ section = tuple[1]
+ xml = tuple[2]
+
+ html = stem + '.html'
+ man = stem + '.' + section
+
+ mandirn = get_option('mandir') + '/man' + section
+
+ custom_target(
+ man,
+ input : xml,
+ output : man,
+ command : [xsltproc, '-o', '@OUTPUT0@'] + xsltproc_flags + [custom_man_xsl, '@INPUT@'],
+ install : install,
+ install_dir : mandirn)
+
+ custom_target(
+ html,
+ input : xml,
+ output : html,
+ command : [xsltproc, '-o', '@OUTPUT0@'] + xsltproc_flags + [custom_html_xsl, '@INPUT@'])
+endforeach
diff --git a/man/rules/meson.build b/man/rules/meson.build
new file mode 100644
index 0000000000..00a1413325
--- /dev/null
+++ b/man/rules/meson.build
@@ -0,0 +1,763 @@
+# Do not edit. Generated by make-man-rules.py.
+manpages = [
+['binfmt.d', '5', [], 'ENABLE_BINFMT'],
+ ['bootctl', '1', [], 'ENABLE_EFI'],
+ ['bootup', '7', [], ''],
+ ['busctl', '1', [], ''],
+ ['coredump.conf', '5', ['coredump.conf.d'], 'ENABLE_COREDUMP'],
+ ['coredumpctl', '1', [], 'ENABLE_COREDUMP'],
+ ['crypttab', '5', [], 'HAVE_LIBCRYPTSETUP'],
+ ['daemon', '7', [], ''],
+ ['dnssec-trust-anchors.d',
+ '5',
+ ['systemd.negative', 'systemd.positive'],
+ 'ENABLE_RESOLVED'],
+ ['environment.d', '5', [], ''],
+ ['file-hierarchy', '7', [], ''],
+ ['halt', '8', ['poweroff', 'reboot'], ''],
+ ['hostname', '5', [], ''],
+ ['hostnamectl', '1', [], 'ENABLE_HOSTNAMED'],
+ ['hwdb', '7', [], 'ENABLE_HWDB'],
+ ['journal-remote.conf', '5', ['journal-remote.conf.d'], 'HAVE_MICROHTTPD'],
+ ['journal-upload.conf', '5', ['journal-upload.conf.d'], 'HAVE_MICROHTTPD'],
+ ['journalctl', '1', [], ''],
+ ['journald.conf', '5', ['journald.conf.d'], ''],
+ ['kernel-command-line', '7', [], ''],
+ ['kernel-install', '8', [], ''],
+ ['libudev', '3', [], ''],
+ ['locale.conf', '5', [], ''],
+ ['localectl', '1', [], 'ENABLE_LOCALED'],
+ ['localtime', '5', [], ''],
+ ['loginctl', '1', [], 'ENABLE_LOGIND'],
+ ['logind.conf', '5', ['logind.conf.d'], 'ENABLE_LOGIND'],
+ ['machine-id', '5', [], ''],
+ ['machine-info', '5', [], ''],
+ ['machinectl', '1', [], 'ENABLE_MACHINED'],
+ ['modules-load.d', '5', [], 'HAVE_KMOD'],
+ ['networkctl', '1', [], 'ENABLE_NETWORKD'],
+ ['networkd.conf', '5', ['networkd.conf.d'], 'ENABLE_NETWORKD'],
+ ['nss-myhostname', '8', ['libnss_myhostname.so.2'], 'HAVE_MYHOSTNAME'],
+ ['nss-mymachines', '8', ['libnss_mymachines.so.2'], 'ENABLE_MACHINED'],
+ ['nss-resolve', '8', ['libnss_resolve.so.2'], 'ENABLE_RESOLVED'],
+ ['nss-systemd', '8', ['libnss_systemd.so.2'], ''],
+ ['os-release', '5', [], ''],
+ ['pam_systemd', '8', [], 'HAVE_PAM'],
+ ['resolved.conf', '5', ['resolved.conf.d'], 'ENABLE_RESOLVED'],
+ ['runlevel', '8', [], 'HAVE_UTMP'],
+ ['sd-bus-errors',
+ '3',
+ ['SD_BUS_ERROR_ACCESS_DENIED',
+ 'SD_BUS_ERROR_ADDRESS_IN_USE',
+ 'SD_BUS_ERROR_AUTH_FAILED',
+ 'SD_BUS_ERROR_BAD_ADDRESS',
+ 'SD_BUS_ERROR_DISCONNECTED',
+ 'SD_BUS_ERROR_FAILED',
+ 'SD_BUS_ERROR_FILE_EXISTS',
+ 'SD_BUS_ERROR_FILE_NOT_FOUND',
+ 'SD_BUS_ERROR_INCONSISTENT_MESSAGE',
+ 'SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED',
+ 'SD_BUS_ERROR_INVALID_ARGS',
+ 'SD_BUS_ERROR_INVALID_SIGNATURE',
+ 'SD_BUS_ERROR_IO_ERROR',
+ 'SD_BUS_ERROR_LIMITS_EXCEEDED',
+ 'SD_BUS_ERROR_MATCH_RULE_INVALID',
+ 'SD_BUS_ERROR_MATCH_RULE_NOT_FOUND',
+ 'SD_BUS_ERROR_NAME_HAS_NO_OWNER',
+ 'SD_BUS_ERROR_NOT_SUPPORTED',
+ 'SD_BUS_ERROR_NO_MEMORY',
+ 'SD_BUS_ERROR_NO_NETWORK',
+ 'SD_BUS_ERROR_NO_REPLY',
+ 'SD_BUS_ERROR_NO_SERVER',
+ 'SD_BUS_ERROR_PROPERTY_READ_ONLY',
+ 'SD_BUS_ERROR_SERVICE_UNKNOWN',
+ 'SD_BUS_ERROR_TIMEOUT',
+ 'SD_BUS_ERROR_UNIX_PROCESS_ID_UNKNOWN',
+ 'SD_BUS_ERROR_UNKNOWN_INTERFACE',
+ 'SD_BUS_ERROR_UNKNOWN_METHOD',
+ 'SD_BUS_ERROR_UNKNOWN_OBJECT',
+ 'SD_BUS_ERROR_UNKNOWN_PROPERTY'],
+ ''],
+ ['sd-bus', '3', [], ''],
+ ['sd-daemon',
+ '3',
+ ['SD_ALERT',
+ 'SD_CRIT',
+ 'SD_DEBUG',
+ 'SD_EMERG',
+ 'SD_ERR',
+ 'SD_INFO',
+ 'SD_NOTICE',
+ 'SD_WARNING'],
+ ''],
+ ['sd-event', '3', [], ''],
+ ['sd-id128',
+ '3',
+ ['SD_ID128_CONST_STR',
+ 'SD_ID128_FORMAT_STR',
+ 'SD_ID128_FORMAT_VAL',
+ 'SD_ID128_MAKE',
+ 'SD_ID128_MAKE_STR',
+ 'SD_ID128_NULL',
+ 'sd_id128_equal',
+ 'sd_id128_is_null',
+ 'sd_id128_t'],
+ ''],
+ ['sd-journal', '3', [], ''],
+ ['sd-login', '3', [], 'HAVE_PAM'],
+ ['sd_booted', '3', [], ''],
+ ['sd_bus_add_match', '3', [], ''],
+ ['sd_bus_creds_get_pid',
+ '3',
+ ['sd_bus_creds_get_audit_login_uid',
+ 'sd_bus_creds_get_audit_session_id',
+ 'sd_bus_creds_get_cgroup',
+ 'sd_bus_creds_get_cmdline',
+ 'sd_bus_creds_get_comm',
+ 'sd_bus_creds_get_description',
+ 'sd_bus_creds_get_egid',
+ 'sd_bus_creds_get_euid',
+ 'sd_bus_creds_get_exe',
+ 'sd_bus_creds_get_fsgid',
+ 'sd_bus_creds_get_fsuid',
+ 'sd_bus_creds_get_gid',
+ 'sd_bus_creds_get_owner_uid',
+ 'sd_bus_creds_get_ppid',
+ 'sd_bus_creds_get_selinux_context',
+ 'sd_bus_creds_get_session',
+ 'sd_bus_creds_get_sgid',
+ 'sd_bus_creds_get_slice',
+ 'sd_bus_creds_get_suid',
+ 'sd_bus_creds_get_supplementary_gids',
+ 'sd_bus_creds_get_tid',
+ 'sd_bus_creds_get_tid_comm',
+ 'sd_bus_creds_get_tty',
+ 'sd_bus_creds_get_uid',
+ 'sd_bus_creds_get_unique_name',
+ 'sd_bus_creds_get_unit',
+ 'sd_bus_creds_get_user_slice',
+ 'sd_bus_creds_get_user_unit',
+ 'sd_bus_creds_get_well_known_names',
+ 'sd_bus_creds_has_bounding_cap',
+ 'sd_bus_creds_has_effective_cap',
+ 'sd_bus_creds_has_inheritable_cap',
+ 'sd_bus_creds_has_permitted_cap'],
+ ''],
+ ['sd_bus_creds_new_from_pid',
+ '3',
+ ['sd_bus_creds_get_augmented_mask',
+ 'sd_bus_creds_get_mask',
+ 'sd_bus_creds_ref',
+ 'sd_bus_creds_unref',
+ 'sd_bus_creds_unrefp'],
+ ''],
+ ['sd_bus_default',
+ '3',
+ ['sd_bus_default_system',
+ 'sd_bus_default_user',
+ 'sd_bus_open',
+ 'sd_bus_open_system',
+ 'sd_bus_open_system_machine',
+ 'sd_bus_open_system_remote',
+ 'sd_bus_open_user'],
+ ''],
+ ['sd_bus_error',
+ '3',
+ ['SD_BUS_ERROR_MAKE_CONST',
+ 'SD_BUS_ERROR_NULL',
+ 'sd_bus_error_copy',
+ 'sd_bus_error_free',
+ 'sd_bus_error_get_errno',
+ 'sd_bus_error_has_name',
+ 'sd_bus_error_is_set',
+ 'sd_bus_error_set',
+ 'sd_bus_error_set_const',
+ 'sd_bus_error_set_errno',
+ 'sd_bus_error_set_errnof',
+ 'sd_bus_error_set_errnofv',
+ 'sd_bus_error_setf'],
+ ''],
+ ['sd_bus_error_add_map',
+ '3',
+ ['SD_BUS_ERROR_END', 'SD_BUS_ERROR_MAP', 'sd_bus_error_map'],
+ ''],
+ ['sd_bus_get_fd', '3', [], ''],
+ ['sd_bus_message_append', '3', [], ''],
+ ['sd_bus_message_append_array',
+ '3',
+ ['sd_bus_message_append_array_iovec',
+ 'sd_bus_message_append_array_memfd',
+ 'sd_bus_message_append_array_space'],
+ ''],
+ ['sd_bus_message_append_basic', '3', [], ''],
+ ['sd_bus_message_append_string_memfd',
+ '3',
+ ['sd_bus_message_append_string_iovec', 'sd_bus_message_append_string_space'],
+ ''],
+ ['sd_bus_message_append_strv', '3', [], ''],
+ ['sd_bus_message_get_cookie', '3', ['sd_bus_message_get_reply_cookie'], ''],
+ ['sd_bus_message_get_monotonic_usec',
+ '3',
+ ['sd_bus_message_get_realtime_usec', 'sd_bus_message_get_seqnum'],
+ ''],
+ ['sd_bus_message_read_basic', '3', [], ''],
+ ['sd_bus_negotiate_fds',
+ '3',
+ ['sd_bus_negotiate_creds', 'sd_bus_negotiate_timestamp'],
+ ''],
+ ['sd_bus_new', '3', ['sd_bus_ref', 'sd_bus_unref', 'sd_bus_unrefp'], ''],
+ ['sd_bus_path_encode',
+ '3',
+ ['sd_bus_path_decode', 'sd_bus_path_decode_many', 'sd_bus_path_encode_many'],
+ ''],
+ ['sd_bus_process', '3', [], ''],
+ ['sd_bus_request_name', '3', ['sd_bus_release_name'], ''],
+ ['sd_bus_track_add_name',
+ '3',
+ ['sd_bus_track_add_sender',
+ 'sd_bus_track_contains',
+ 'sd_bus_track_count',
+ 'sd_bus_track_count_name',
+ 'sd_bus_track_count_sender',
+ 'sd_bus_track_first',
+ 'sd_bus_track_next',
+ 'sd_bus_track_remove_name',
+ 'sd_bus_track_remove_sender'],
+ ''],
+ ['sd_bus_track_new',
+ '3',
+ ['sd_bus_track_get_bus',
+ 'sd_bus_track_get_recursive',
+ 'sd_bus_track_get_userdata',
+ 'sd_bus_track_ref',
+ 'sd_bus_track_set_recursive',
+ 'sd_bus_track_set_userdata',
+ 'sd_bus_track_unref',
+ 'sd_bus_track_unrefp'],
+ ''],
+ ['sd_event_add_child',
+ '3',
+ ['sd_event_child_handler_t', 'sd_event_source_get_child_pid'],
+ ''],
+ ['sd_event_add_defer',
+ '3',
+ ['sd_event_add_exit', 'sd_event_add_post', 'sd_event_handler_t'],
+ ''],
+ ['sd_event_add_io',
+ '3',
+ ['sd_event_io_handler_t',
+ 'sd_event_source',
+ 'sd_event_source_get_io_events',
+ 'sd_event_source_get_io_fd',
+ 'sd_event_source_get_io_revents',
+ 'sd_event_source_set_io_events',
+ 'sd_event_source_set_io_fd'],
+ ''],
+ ['sd_event_add_signal',
+ '3',
+ ['sd_event_signal_handler_t', 'sd_event_source_get_signal'],
+ ''],
+ ['sd_event_add_time',
+ '3',
+ ['sd_event_source_get_time',
+ 'sd_event_source_get_time_accuracy',
+ 'sd_event_source_get_time_clock',
+ 'sd_event_source_set_time',
+ 'sd_event_source_set_time_accuracy',
+ 'sd_event_time_handler_t'],
+ ''],
+ ['sd_event_exit', '3', ['sd_event_get_exit_code'], ''],
+ ['sd_event_get_fd', '3', [], ''],
+ ['sd_event_new',
+ '3',
+ ['sd_event',
+ 'sd_event_default',
+ 'sd_event_get_tid',
+ 'sd_event_ref',
+ 'sd_event_unref',
+ 'sd_event_unrefp'],
+ ''],
+ ['sd_event_now', '3', [], ''],
+ ['sd_event_run', '3', ['sd_event_loop'], ''],
+ ['sd_event_set_watchdog', '3', ['sd_event_get_watchdog'], ''],
+ ['sd_event_source_get_event', '3', [], ''],
+ ['sd_event_source_get_pending', '3', [], ''],
+ ['sd_event_source_set_description',
+ '3',
+ ['sd_event_source_get_description'],
+ ''],
+ ['sd_event_source_set_enabled',
+ '3',
+ ['SD_EVENT_OFF',
+ 'SD_EVENT_ON',
+ 'SD_EVENT_ONESHOT',
+ 'sd_event_source_get_enabled'],
+ ''],
+ ['sd_event_source_set_prepare', '3', [], ''],
+ ['sd_event_source_set_priority',
+ '3',
+ ['SD_EVENT_PRIORITY_IDLE',
+ 'SD_EVENT_PRIORITY_IMPORTANT',
+ 'SD_EVENT_PRIORITY_NORMAL',
+ 'sd_event_source_get_priority'],
+ ''],
+ ['sd_event_source_set_userdata', '3', ['sd_event_source_get_userdata'], ''],
+ ['sd_event_source_unref',
+ '3',
+ ['sd_event_source_ref', 'sd_event_source_unrefp'],
+ ''],
+ ['sd_event_wait',
+ '3',
+ ['SD_EVENT_ARMED',
+ 'SD_EVENT_EXITING',
+ 'SD_EVENT_FINISHED',
+ 'SD_EVENT_INITIAL',
+ 'SD_EVENT_PENDING',
+ 'SD_EVENT_PREPARING',
+ 'SD_EVENT_RUNNING',
+ 'sd_event_dispatch',
+ 'sd_event_get_iteration',
+ 'sd_event_get_state',
+ 'sd_event_prepare'],
+ ''],
+ ['sd_get_seats',
+ '3',
+ ['sd_get_machine_names', 'sd_get_sessions', 'sd_get_uids'],
+ 'HAVE_PAM'],
+ ['sd_id128_get_machine',
+ '3',
+ ['sd_id128_get_boot',
+ 'sd_id128_get_invocation',
+ 'sd_id128_get_machine_app_specific'],
+ ''],
+ ['sd_id128_randomize', '3', [], ''],
+ ['sd_id128_to_string', '3', ['sd_id128_from_string'], ''],
+ ['sd_is_fifo',
+ '3',
+ ['sd_is_mq',
+ 'sd_is_socket',
+ 'sd_is_socket_inet',
+ 'sd_is_socket_sockaddr',
+ 'sd_is_socket_unix',
+ 'sd_is_special'],
+ ''],
+ ['sd_journal_add_match',
+ '3',
+ ['sd_journal_add_conjunction',
+ 'sd_journal_add_disjunction',
+ 'sd_journal_flush_matches'],
+ ''],
+ ['sd_journal_enumerate_fields',
+ '3',
+ ['SD_JOURNAL_FOREACH_FIELD', 'sd_journal_restart_fields'],
+ ''],
+ ['sd_journal_get_catalog', '3', ['sd_journal_get_catalog_for_message_id'], ''],
+ ['sd_journal_get_cursor', '3', ['sd_journal_test_cursor'], ''],
+ ['sd_journal_get_cutoff_realtime_usec',
+ '3',
+ ['sd_journal_get_cutoff_monotonic_usec'],
+ ''],
+ ['sd_journal_get_data',
+ '3',
+ ['SD_JOURNAL_FOREACH_DATA',
+ 'sd_journal_enumerate_data',
+ 'sd_journal_get_data_threshold',
+ 'sd_journal_restart_data',
+ 'sd_journal_set_data_threshold'],
+ ''],
+ ['sd_journal_get_fd',
+ '3',
+ ['SD_JOURNAL_APPEND',
+ 'SD_JOURNAL_INVALIDATE',
+ 'SD_JOURNAL_NOP',
+ 'sd_journal_get_events',
+ 'sd_journal_get_timeout',
+ 'sd_journal_process',
+ 'sd_journal_reliable_fd',
+ 'sd_journal_wait'],
+ ''],
+ ['sd_journal_get_realtime_usec', '3', ['sd_journal_get_monotonic_usec'], ''],
+ ['sd_journal_get_usage', '3', [], ''],
+ ['sd_journal_has_runtime_files', '3', ['sd_journal_has_persistent_files'], ''],
+ ['sd_journal_next',
+ '3',
+ ['SD_JOURNAL_FOREACH',
+ 'SD_JOURNAL_FOREACH_BACKWARDS',
+ 'sd_journal_next_skip',
+ 'sd_journal_previous',
+ 'sd_journal_previous_skip'],
+ ''],
+ ['sd_journal_open',
+ '3',
+ ['SD_JOURNAL_CURRENT_USER',
+ 'SD_JOURNAL_LOCAL_ONLY',
+ 'SD_JOURNAL_OS_ROOT',
+ 'SD_JOURNAL_RUNTIME_ONLY',
+ 'SD_JOURNAL_SYSTEM',
+ 'sd_journal',
+ 'sd_journal_close',
+ 'sd_journal_open_directory',
+ 'sd_journal_open_directory_fd',
+ 'sd_journal_open_files',
+ 'sd_journal_open_files_fd'],
+ ''],
+ ['sd_journal_print',
+ '3',
+ ['SD_JOURNAL_SUPPRESS_LOCATION',
+ 'sd_journal_perror',
+ 'sd_journal_printv',
+ 'sd_journal_send',
+ 'sd_journal_sendv'],
+ ''],
+ ['sd_journal_query_unique',
+ '3',
+ ['SD_JOURNAL_FOREACH_UNIQUE',
+ 'sd_journal_enumerate_unique',
+ 'sd_journal_restart_unique'],
+ ''],
+ ['sd_journal_seek_head',
+ '3',
+ ['sd_journal_seek_cursor',
+ 'sd_journal_seek_monotonic_usec',
+ 'sd_journal_seek_realtime_usec',
+ 'sd_journal_seek_tail'],
+ ''],
+ ['sd_journal_stream_fd', '3', [], ''],
+ ['sd_listen_fds',
+ '3',
+ ['SD_LISTEN_FDS_START', 'sd_listen_fds_with_names'],
+ ''],
+ ['sd_login_monitor_new',
+ '3',
+ ['sd_login_monitor',
+ 'sd_login_monitor_flush',
+ 'sd_login_monitor_get_events',
+ 'sd_login_monitor_get_fd',
+ 'sd_login_monitor_get_timeout',
+ 'sd_login_monitor_unref',
+ 'sd_login_monitor_unrefp'],
+ 'HAVE_PAM'],
+ ['sd_machine_get_class', '3', ['sd_machine_get_ifindices'], ''],
+ ['sd_notify',
+ '3',
+ ['sd_notifyf', 'sd_pid_notify', 'sd_pid_notify_with_fds', 'sd_pid_notifyf'],
+ ''],
+ ['sd_pid_get_session',
+ '3',
+ ['sd_peer_get_cgroup',
+ 'sd_peer_get_machine_name',
+ 'sd_peer_get_owner_uid',
+ 'sd_peer_get_session',
+ 'sd_peer_get_slice',
+ 'sd_peer_get_unit',
+ 'sd_peer_get_user_slice',
+ 'sd_peer_get_user_unit',
+ 'sd_pid_get_cgroup',
+ 'sd_pid_get_machine_name',
+ 'sd_pid_get_owner_uid',
+ 'sd_pid_get_slice',
+ 'sd_pid_get_unit',
+ 'sd_pid_get_user_slice',
+ 'sd_pid_get_user_unit'],
+ 'HAVE_PAM'],
+ ['sd_seat_get_active',
+ '3',
+ ['sd_seat_can_graphical',
+ 'sd_seat_can_multi_session',
+ 'sd_seat_can_tty',
+ 'sd_seat_get_sessions'],
+ 'HAVE_PAM'],
+ ['sd_session_is_active',
+ '3',
+ ['sd_session_get_class',
+ 'sd_session_get_desktop',
+ 'sd_session_get_display',
+ 'sd_session_get_remote_host',
+ 'sd_session_get_remote_user',
+ 'sd_session_get_seat',
+ 'sd_session_get_service',
+ 'sd_session_get_state',
+ 'sd_session_get_tty',
+ 'sd_session_get_type',
+ 'sd_session_get_uid',
+ 'sd_session_get_vt',
+ 'sd_session_is_remote'],
+ 'HAVE_PAM'],
+ ['sd_uid_get_state',
+ '3',
+ ['sd_uid_get_display',
+ 'sd_uid_get_seats',
+ 'sd_uid_get_sessions',
+ 'sd_uid_is_on_seat'],
+ 'HAVE_PAM'],
+ ['sd_watchdog_enabled', '3', [], ''],
+ ['shutdown', '8', [], ''],
+ ['sysctl.d', '5', [], ''],
+ ['systemctl', '1', [], ''],
+ ['systemd-analyze', '1', [], ''],
+ ['systemd-ask-password-console.service',
+ '8',
+ ['systemd-ask-password-console.path',
+ 'systemd-ask-password-wall.path',
+ 'systemd-ask-password-wall.service'],
+ ''],
+ ['systemd-ask-password', '1', [], ''],
+ ['systemd-backlight@.service', '8', ['systemd-backlight'], 'ENABLE_BACKLIGHT'],
+ ['systemd-binfmt.service', '8', ['systemd-binfmt'], 'ENABLE_BINFMT'],
+ ['systemd-cat', '1', [], ''],
+ ['systemd-cgls', '1', [], ''],
+ ['systemd-cgtop', '1', [], ''],
+ ['systemd-coredump',
+ '8',
+ ['systemd-coredump.socket', 'systemd-coredump@.service'],
+ 'ENABLE_COREDUMP'],
+ ['systemd-cryptsetup-generator', '8', [], 'HAVE_LIBCRYPTSETUP'],
+ ['systemd-cryptsetup@.service',
+ '8',
+ ['systemd-cryptsetup'],
+ 'HAVE_LIBCRYPTSETUP'],
+ ['systemd-debug-generator', '8', [], ''],
+ ['systemd-delta', '1', [], ''],
+ ['systemd-detect-virt', '1', [], ''],
+ ['systemd-environment-d-generator',
+ '8',
+ ['30-systemd-environment-d-generator'],
+ ''],
+ ['systemd-escape', '1', [], ''],
+ ['systemd-firstboot', '1', ['systemd-firstboot.service'], 'ENABLE_FIRSTBOOT'],
+ ['systemd-fsck@.service',
+ '8',
+ ['systemd-fsck', 'systemd-fsck-root.service'],
+ ''],
+ ['systemd-fstab-generator', '8', [], ''],
+ ['systemd-getty-generator', '8', [], ''],
+ ['systemd-gpt-auto-generator', '8', [], ''],
+ ['systemd-halt.service',
+ '8',
+ ['systemd-kexec.service',
+ 'systemd-poweroff.service',
+ 'systemd-reboot.service',
+ 'systemd-shutdown'],
+ ''],
+ ['systemd-hibernate-resume-generator', '8', [], ''],
+ ['systemd-hibernate-resume@.service', '8', ['systemd-hibernate-resume'], ''],
+ ['systemd-hostnamed.service', '8', ['systemd-hostnamed'], 'ENABLE_HOSTNAMED'],
+ ['systemd-hwdb', '8', [], 'ENABLE_HWDB'],
+ ['systemd-importd.service', '8', ['systemd-importd'], 'ENABLE_IMPORTD'],
+ ['systemd-inhibit', '1', [], ''],
+ ['systemd-initctl.service',
+ '8',
+ ['systemd-initctl', 'systemd-initctl.socket'],
+ ''],
+ ['systemd-journal-gatewayd.service',
+ '8',
+ ['systemd-journal-gatewayd', 'systemd-journal-gatewayd.socket'],
+ 'HAVE_MICROHTTPD'],
+ ['systemd-journal-remote', '8', [], 'HAVE_MICROHTTPD'],
+ ['systemd-journal-upload', '8', [], 'HAVE_MICROHTTPD'],
+ ['systemd-journald.service',
+ '8',
+ ['systemd-journald',
+ 'systemd-journald-audit.socket',
+ 'systemd-journald-dev-log.socket',
+ 'systemd-journald.socket'],
+ ''],
+ ['systemd-localed.service', '8', ['systemd-localed'], 'ENABLE_LOCALED'],
+ ['systemd-logind.service', '8', ['systemd-logind'], 'ENABLE_LOGIND'],
+ ['systemd-machine-id-commit.service', '8', [], ''],
+ ['systemd-machine-id-setup', '1', [], ''],
+ ['systemd-machined.service', '8', ['systemd-machined'], 'ENABLE_MACHINED'],
+ ['systemd-modules-load.service', '8', ['systemd-modules-load'], 'HAVE_KMOD'],
+ ['systemd-mount', '1', ['systemd-umount'], ''],
+ ['systemd-networkd-wait-online.service',
+ '8',
+ ['systemd-networkd-wait-online'],
+ 'ENABLE_NETWORKD'],
+ ['systemd-networkd.service', '8', ['systemd-networkd'], 'ENABLE_NETWORKD'],
+ ['systemd-notify', '1', [], ''],
+ ['systemd-nspawn', '1', [], ''],
+ ['systemd-path', '1', [], ''],
+ ['systemd-quotacheck.service',
+ '8',
+ ['systemd-quotacheck'],
+ 'ENABLE_QUOTACHECK'],
+ ['systemd-random-seed.service',
+ '8',
+ ['systemd-random-seed'],
+ 'ENABLE_RANDOMSEED'],
+ ['systemd-remount-fs.service', '8', ['systemd-remount-fs'], ''],
+ ['systemd-resolve', '1', [], ''],
+ ['systemd-resolved.service', '8', ['systemd-resolved'], 'ENABLE_RESOLVED'],
+ ['systemd-rfkill.service',
+ '8',
+ ['systemd-rfkill', 'systemd-rfkill.socket'],
+ 'ENABLE_RFKILL'],
+ ['systemd-run', '1', [], ''],
+ ['systemd-sleep.conf', '5', ['sleep.conf.d'], ''],
+ ['systemd-socket-activate', '1', [], ''],
+ ['systemd-socket-proxyd', '8', [], ''],
+ ['systemd-suspend.service',
+ '8',
+ ['systemd-hibernate.service',
+ 'systemd-hybrid-sleep.service',
+ 'systemd-sleep'],
+ ''],
+ ['systemd-sysctl.service', '8', ['systemd-sysctl'], ''],
+ ['systemd-system-update-generator', '8', [], ''],
+ ['systemd-system.conf',
+ '5',
+ ['system.conf.d', 'systemd-user.conf', 'user.conf.d'],
+ ''],
+ ['systemd-sysusers', '8', ['systemd-sysusers.service'], ''],
+ ['systemd-sysv-generator', '8', [], 'HAVE_SYSV_COMPAT'],
+ ['systemd-timedated.service', '8', ['systemd-timedated'], 'ENABLE_TIMEDATED'],
+ ['systemd-timesyncd.service', '8', ['systemd-timesyncd'], 'ENABLE_TIMESYNCD'],
+ ['systemd-tmpfiles',
+ '8',
+ ['systemd-tmpfiles-clean.service',
+ 'systemd-tmpfiles-clean.timer',
+ 'systemd-tmpfiles-setup-dev.service',
+ 'systemd-tmpfiles-setup.service'],
+ ''],
+ ['systemd-tty-ask-password-agent', '1', [], ''],
+ ['systemd-udevd.service',
+ '8',
+ ['systemd-udevd',
+ 'systemd-udevd-control.socket',
+ 'systemd-udevd-kernel.socket'],
+ ''],
+ ['systemd-update-done.service', '8', ['systemd-update-done'], ''],
+ ['systemd-update-utmp.service',
+ '8',
+ ['systemd-update-utmp', 'systemd-update-utmp-runlevel.service'],
+ 'HAVE_UTMP'],
+ ['systemd-user-sessions.service', '8', ['systemd-user-sessions'], 'HAVE_PAM'],
+ ['systemd-vconsole-setup.service',
+ '8',
+ ['systemd-vconsole-setup'],
+ 'ENABLE_VCONSOLE'],
+ ['systemd-veritysetup-generator', '8', [], 'HAVE_LIBCRYPTSETUP'],
+ ['systemd-veritysetup@.service',
+ '8',
+ ['systemd-veritysetup'],
+ 'HAVE_LIBCRYPTSETUP'],
+ ['systemd-volatile-root.service', '8', ['systemd-volatile-root'], ''],
+ ['systemd', '1', ['init'], ''],
+ ['systemd.automount', '5', [], ''],
+ ['systemd.device', '5', [], ''],
+ ['systemd.environment-generator', '7', [], ''],
+ ['systemd.exec', '5', [], ''],
+ ['systemd.generator', '7', [], ''],
+ ['systemd.journal-fields', '7', [], ''],
+ ['systemd.kill', '5', [], ''],
+ ['systemd.link', '5', [], ''],
+ ['systemd.mount', '5', [], ''],
+ ['systemd.netdev', '5', [], 'ENABLE_NETWORKD'],
+ ['systemd.network', '5', [], 'ENABLE_NETWORKD'],
+ ['systemd.nspawn', '5', [], ''],
+ ['systemd.offline-updates', '7', [], ''],
+ ['systemd.path', '5', [], ''],
+ ['systemd.preset', '5', [], ''],
+ ['systemd.resource-control', '5', [], ''],
+ ['systemd.scope', '5', [], ''],
+ ['systemd.service', '5', [], ''],
+ ['systemd.slice', '5', [], ''],
+ ['systemd.socket', '5', [], ''],
+ ['systemd.special', '7', [], ''],
+ ['systemd.swap', '5', [], ''],
+ ['systemd.target', '5', [], ''],
+ ['systemd.time', '7', [], ''],
+ ['systemd.timer', '5', [], ''],
+ ['systemd.unit', '5', [], ''],
+ ['sysusers.d', '5', [], 'ENABLE_SYSUSERS'],
+ ['telinit', '8', [], ''],
+ ['timedatectl', '1', [], 'ENABLE_TIMEDATED'],
+ ['timesyncd.conf', '5', ['timesyncd.conf.d'], 'ENABLE_TIMESYNCD'],
+ ['tmpfiles.d', '5', [], ''],
+ ['udev', '7', [], ''],
+ ['udev.conf', '5', [], ''],
+ ['udev_device_get_syspath',
+ '3',
+ ['udev_device_get_action',
+ 'udev_device_get_devnode',
+ 'udev_device_get_devnum',
+ 'udev_device_get_devpath',
+ 'udev_device_get_devtype',
+ 'udev_device_get_driver',
+ 'udev_device_get_is_initialized',
+ 'udev_device_get_parent',
+ 'udev_device_get_parent_with_subsystem_devtype',
+ 'udev_device_get_subsystem',
+ 'udev_device_get_sysname',
+ 'udev_device_get_sysnum',
+ 'udev_device_get_udev'],
+ ''],
+ ['udev_device_has_tag',
+ '3',
+ ['udev_device_get_devlinks_list_entry',
+ 'udev_device_get_properties_list_entry',
+ 'udev_device_get_property_value',
+ 'udev_device_get_sysattr_list_entry',
+ 'udev_device_get_sysattr_value',
+ 'udev_device_get_tags_list_entry',
+ 'udev_device_set_sysattr_value'],
+ ''],
+ ['udev_device_new_from_syspath',
+ '3',
+ ['udev_device_new_from_device_id',
+ 'udev_device_new_from_devnum',
+ 'udev_device_new_from_environment',
+ 'udev_device_new_from_subsystem_sysname',
+ 'udev_device_ref',
+ 'udev_device_unref'],
+ ''],
+ ['udev_enumerate_add_match_subsystem',
+ '3',
+ ['udev_enumerate_add_match_is_initialized',
+ 'udev_enumerate_add_match_parent',
+ 'udev_enumerate_add_match_property',
+ 'udev_enumerate_add_match_sysattr',
+ 'udev_enumerate_add_match_sysname',
+ 'udev_enumerate_add_match_tag',
+ 'udev_enumerate_add_nomatch_subsystem',
+ 'udev_enumerate_add_nomatch_sysattr'],
+ ''],
+ ['udev_enumerate_new',
+ '3',
+ ['udev_enumerate_ref', 'udev_enumerate_unref'],
+ ''],
+ ['udev_enumerate_scan_devices',
+ '3',
+ ['udev_enumerate_add_syspath',
+ 'udev_enumerate_get_list_entry',
+ 'udev_enumerate_get_udev',
+ 'udev_enumerate_scan_subsystems'],
+ ''],
+ ['udev_list_entry',
+ '3',
+ ['udev_list_entry_get_by_name',
+ 'udev_list_entry_get_name',
+ 'udev_list_entry_get_next',
+ 'udev_list_entry_get_value'],
+ ''],
+ ['udev_monitor_filter_update',
+ '3',
+ ['udev_monitor_filter_add_match_subsystem_devtype',
+ 'udev_monitor_filter_add_match_tag',
+ 'udev_monitor_filter_remove'],
+ ''],
+ ['udev_monitor_new_from_netlink',
+ '3',
+ ['udev_monitor_ref', 'udev_monitor_unref'],
+ ''],
+ ['udev_monitor_receive_device',
+ '3',
+ ['udev_monitor_enable_receiving',
+ 'udev_monitor_get_fd',
+ 'udev_monitor_get_udev',
+ 'udev_monitor_set_receive_buffer_size'],
+ ''],
+ ['udev_new', '3', ['udev_ref', 'udev_unref'], ''],
+ ['udevadm', '8', [], ''],
+ ['vconsole.conf', '5', [], 'ENABLE_VCONSOLE']
+]
+# Really, do not edit.
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000000..95445f9559
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,1857 @@
+# -*- mode: meson -*-
+
+project('systemd', 'c',
+ version : '233',
+ license : 'LGPLv2+',
+ default_options: [
+ 'c_std=gnu99',
+ 'prefix=/usr',
+ 'sysconfdir=/etc',
+ 'localstatedir=/var',
+ ],
+ meson_version : '>= 0.39.1',
+ )
+
+# We need the same data in three different formats, ugh!
+# Also, for hysterical reasons, we use different variable
+# names, sometimes. Not all variables are included in every
+# set. Ugh, ugh, ugh!
+conf = configuration_data()
+conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
+conf.set_quoted('PACKAGE_VERSION', meson.project_version())
+
+substs = configuration_data()
+substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
+substs.set('PACKAGE_VERSION', meson.project_version())
+
+m4_defines = []
+
+#####################################################################
+
+if get_option('split-usr')
+ conf.set('HAVE_SPLIT_USR', 1)
+ rootprefixdir = '/'
+else
+ rootprefixdir = '/usr'
+endif
+
+sysvinit_path = get_option('sysvinit-path')
+sysvrcnd_path = get_option('sysvrcnd-path')
+if sysvinit_path != '' or sysvrcnd_path != ''
+ conf.set('HAVE_SYSV_COMPAT', 1,
+ description : 'SysV init scripts and rcN.d links are supported')
+endif
+
+# join_paths ignore the preceding arguments if an absolute component is
+# encountered, so this should canonicalize various paths when they are
+# absolute or relative.
+prefixdir = get_option('prefix')
+if not prefixdir.startswith('/')
+ error('Prefix is not absolute: "@0@"'.format(prefixdir))
+endif
+bindir = join_paths(prefixdir, get_option('bindir'))
+libdir = join_paths(prefixdir, get_option('libdir'))
+sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
+includedir = join_paths(prefixdir, get_option('includedir'))
+datadir = join_paths(prefixdir, get_option('datadir'))
+localstatedir = join_paths('/', get_option('localstatedir'))
+
+rootbindir = join_paths(rootprefixdir, 'bin')
+rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
+
+rootlibdir = get_option('rootlibdir')
+if rootlibdir == ''
+ rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
+endif
+
+# Dirs of external packages
+pkgconfigdatadir = datadir + '/pkgconfig'
+pkgconfiglibdir = libdir + '/pkgconfig'
+polkitpolicydir = datadir + '/polkit-1/actions'
+polkitrulesdir = datadir + '/polkit-1/rules.d'
+polkitpkladir = localstatedir + '/lib/polkit-1/localauthority/10-vendor.d'
+varlogdir = localstatedir + '/log'
+xinitrcdir = sysconfdir + '/X11/xinit/xinitrc.d'
+rpmmacrosdir = get_option('rpmmacrosdir')
+
+# Our own paths
+pkgdatadir = datadir + '/systemd'
+environmentdir = prefixdir + '/lib/environment.d'
+pkgsysconfdir = sysconfdir + '/systemd'
+userunitdir = prefixdir + '/lib/systemd/user'
+userpresetdir = prefixdir + '/lib/systemd/user-preset'
+tmpfilesdir = prefixdir + '/lib/tmpfiles.d'
+sysusersdir = prefixdir + '/lib/sysusers.d'
+sysctldir = prefixdir + '/lib/sysctl.d'
+binfmtdir = prefixdir + '/lib/binfmt.d'
+modulesloaddir = prefixdir + '/lib/modules-load.d'
+networkdir = rootprefixdir + '/lib/systemd/network'
+pkgincludedir = includedir + '/systemd'
+systemgeneratordir = rootlibexecdir + '/system-generators'
+usergeneratordir = prefixdir + '/lib/systemd/user-generators'
+systemenvgeneratordir = prefixdir + '/lib/systemd/system-environment-generators'
+userenvgeneratordir = prefixdir + '/lib/systemd/user-environment-generators'
+systemshutdowndir = rootlibexecdir + '/system-shutdown'
+systemsleepdir = rootlibexecdir + '/system-sleep'
+systemunitdir = rootprefixdir + '/lib/systemd/system'
+systempresetdir = rootprefixdir + '/lib/systemd/system-preset'
+udevlibexecdir = rootprefixdir + '/lib/udev'
+udevhomedir = udevlibexecdir + ''
+udevrulesdir = udevlibexecdir + '/rules.d'
+udevhwdbdir = udevlibexecdir + '/hwdb.d'
+catalogdir = prefixdir + '/lib/systemd/catalog'
+kernelinstalldir = prefixdir + '/lib/kernel/install.d'
+factorydir = datadir + '/factory'
+docdir = datadir + '/doc/systemd'
+bootlibdir = prefixdir + '/lib/systemd/boot/efi'
+testsdir = prefixdir + '/lib/systemd/tests'
+systemdstatedir = localstatedir + '/lib/systemd'
+catalogstatedir = systemdstatedir + '/catalog'
+
+dbuspolicydir = get_option('dbuspolicydir')
+if dbuspolicydir == ''
+ dbuspolicydir = datadir + '/dbus-1/system.d'
+endif
+
+dbussessionservicedir = get_option('dbussessionservicedir')
+if dbussessionservicedir == ''
+ dbussessionservicedir = datadir + '/dbus-1/services'
+endif
+
+dbussystemservicedir = get_option('dbussystemservicedir')
+if dbussystemservicedir == ''
+ dbussystemservicedir = datadir + '/dbus-1/system-services'
+endif
+
+pamlibdir = get_option('pamlibdir')
+if pamlibdir == ''
+ pamlibdir = rootlibdir + '/security'
+endif
+
+pamconfdir = get_option('pamconfdir')
+if pamconfdir == ''
+ pamconfdir = sysconfdir + '/pam.d'
+endif
+
+conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
+conf.set_quoted('SYSTEM_CONFIG_UNIT_PATH', pkgsysconfdir + '/system')
+conf.set_quoted('SYSTEM_DATA_UNIT_PATH', systemunitdir)
+conf.set_quoted('SYSTEM_SYSVINIT_PATH', sysvinit_path)
+conf.set_quoted('SYSTEM_SYSVRCND_PATH', sysvrcnd_path)
+conf.set_quoted('USER_CONFIG_UNIT_PATH', pkgsysconfdir + '/user')
+conf.set_quoted('USER_DATA_UNIT_PATH', userunitdir)
+conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
+conf.set_quoted('CATALOG_DATABASE', catalogstatedir + '/database')
+conf.set_quoted('SYSTEMD_CGROUP_AGENT_PATH', rootlibexecdir + '/systemd-cgroups-agent')
+conf.set_quoted('SYSTEMD_BINARY_PATH', rootlibexecdir + '/systemd')
+conf.set_quoted('SYSTEMD_FSCK_PATH', rootlibexecdir + '/systemd-fsck')
+conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', rootlibexecdir + '/systemd-shutdown')
+conf.set_quoted('SYSTEMD_SLEEP_BINARY_PATH', rootlibexecdir + '/systemd-sleep')
+conf.set_quoted('SYSTEMCTL_BINARY_PATH', rootbindir + '/systemctl')
+conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', rootbindir + '/systemd-tty-ask-password-agent')
+conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', bindir + '/systemd-stdio-bridge')
+conf.set_quoted('ROOTPREFIX', rootprefixdir)
+conf.set_quoted('RANDOM_SEED_DIR', localstatedir + '/lib/systemd/')
+conf.set_quoted('RANDOM_SEED', localstatedir + '/lib/systemd/random-seed')
+conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', rootlibexecdir + '/systemd-cryptsetup')
+conf.set_quoted('SYSTEM_GENERATOR_PATH', systemgeneratordir)
+conf.set_quoted('USER_GENERATOR_PATH', usergeneratordir)
+conf.set_quoted('SYSTEM_ENV_GENERATOR_PATH', systemenvgeneratordir)
+conf.set_quoted('USER_ENV_GENERATOR_PATH', userenvgeneratordir)
+conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
+conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
+conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', pkgdatadir + '/kbd-model-map')
+conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', pkgdatadir + '/language-fallback-map')
+conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
+conf.set_quoted('POLKIT_AGENT_BINARY_PATH', bindir + '/pkttyagent')
+conf.set_quoted('LIBDIR', libdir)
+conf.set_quoted('ROOTLIBDIR', rootlibdir)
+conf.set_quoted('ROOTLIBEXECDIR', rootlibexecdir)
+conf.set_quoted('BOOTLIBDIR', bootlibdir)
+conf.set_quoted('SYSTEMD_PULL_PATH', rootlibexecdir + '/systemd-pull')
+conf.set_quoted('SYSTEMD_IMPORT_PATH', rootlibexecdir + '/systemd-import')
+conf.set_quoted('SYSTEMD_EXPORT_PATH', rootlibexecdir + '/systemd-export')
+conf.set_quoted('VENDOR_KEYRING_PATH', rootlibexecdir + '/import-pubring.gpg')
+conf.set_quoted('USER_KEYRING_PATH', pkgsysconfdir + '/import-pubring.gpg')
+conf.set_quoted('DOCUMENT_ROOT', pkgdatadir + '/gatewayd')
+
+conf.set_quoted('ABS_BUILD_DIR', meson.build_root())
+conf.set_quoted('ABS_SRC_DIR', meson.source_root())
+
+substs.set('prefix', prefixdir)
+substs.set('pkgsysconfdir', pkgsysconfdir)
+substs.set('rootlibexecdir', rootlibexecdir)
+substs.set('systemunitdir', systemunitdir)
+substs.set('userunitdir', userunitdir)
+substs.set('systempresetdir', systempresetdir)
+substs.set('userpresetdir', userpresetdir)
+substs.set('udevhwdbdir', udevhwdbdir)
+substs.set('udevrulesdir', udevrulesdir)
+substs.set('catalogdir', catalogdir)
+substs.set('tmpfilesdir', tmpfilesdir)
+substs.set('sysusersdir', sysusersdir)
+substs.set('sysctldir', sysctldir)
+substs.set('binfmtdir', binfmtdir)
+substs.set('modulesloaddir', modulesloaddir)
+substs.set('systemgeneratordir', systemgeneratordir)
+substs.set('usergeneratordir', usergeneratordir)
+substs.set('systemenvgeneratordir', systemenvgeneratordir)
+substs.set('userenvgeneratordir', userenvgeneratordir)
+substs.set('systemshutdowndir', systemshutdowndir)
+substs.set('systemsleepdir', systemsleepdir)
+
+#####################################################################
+
+cc = meson.get_compiler('c')
+pkgconfig = import('pkgconfig')
+
+foreach arg : ['-Wundef',
+ '-Wlogical-op',
+ '-Wmissing-include-dirs',
+ '-Wold-style-definition',
+ '-Wpointer-arith',
+ '-Winit-self',
+ '-Wdeclaration-after-statement',
+ '-Wfloat-equal',
+ '-Wsuggest-attribute=noreturn',
+ '-Werror=missing-prototypes',
+ '-Werror=implicit-function-declaration',
+ '-Werror=missing-declarations',
+ '-Werror=return-type',
+ '-Werror=incompatible-pointer-types',
+ '-Werror=format=2',
+ '-Wstrict-prototypes',
+ '-Wredundant-decls',
+ '-Wmissing-noreturn',
+ '-Wshadow',
+ '-Wendif-labels',
+ '-Wstrict-aliasing=2',
+ '-Wwrite-strings',
+ '-Wno-unused-parameter',
+ '-Wno-missing-field-initializers',
+ '-Wno-unused-result',
+ '-Wno-format-signedness',
+ '-Werror=overflow',
+ '-Wdate-time',
+ '-Wnested-externs',
+ '-ffast-math',
+ '-fno-common',
+ '-fdiagnostics-show-option',
+ '-fno-strict-aliasing',
+ '-fvisibility=hidden',
+ '-fstack-protector',
+ '-fstack-protector-strong',
+ '-fPIE',
+ '--param=ssp-buffer-size=4',
+ ]
+ if cc.has_argument(arg)
+ add_project_arguments(arg, language : 'c')
+ endif
+endforeach
+
+if cc.compiles('
+ #include <time.h>
+ #include <inttypes.h>
+ typedef uint64_t usec_t;
+ usec_t now(clockid_t clock);
+ int main(void) {
+ struct timespec now;
+ return 0;
+ }
+')
+ # TODO: message?
+ add_project_arguments('-Werror=shadow', language : 'c')
+endif
+
+if cc.get_id() == 'clang'
+ foreach arg : ['-Wno-typedef-redefinition',
+ '-Wno-gnu-variable-sized-type-not-at-end',
+ ]
+ if cc.has_argument(arg)
+ add_project_arguments(arg, language : 'c')
+ endif
+ endforeach
+endif
+
+# --as-needed and --no-undefined are provided by meson by default,
+# run mesonconf to see what is enabled
+foreach arg : ['-Wl,-z,relro',
+ '-Wl,-z,now',
+ '-pie',
+ '-Wl,-fuse-ld=gold',
+ ]
+ if cc.has_argument(arg)
+ add_project_link_arguments(arg, language : 'c')
+ endif
+endforeach
+
+#####################################################################
+# compilation result tests
+
+conf.set('_GNU_SOURCE', 1)
+conf.set('__SANE_USERSPACE_TYPES__', 1)
+
+conf.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
+conf.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
+conf.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
+conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
+conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
+conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
+conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
+
+decl_headers = '''
+#include <uchar.h>
+#include <linux/ethtool.h>
+'''
+# FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
+
+foreach decl : ['char16_t',
+ 'char32_t',
+ 'key_serial_t',
+ 'struct ethtool_link_settings',
+ ]
+ if cc.sizeof(decl, prefix : decl_headers) > 0
+ # We get -1 if the size cannot be determined
+ conf.set('HAVE_' + decl.underscorify().to_upper(), 1)
+ endif
+endforeach
+
+foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
+ ['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
+ ['IFLA_VRF_TABLE', 'linux/if_link.h'],
+ ['IFLA_MACVLAN_FLAGS', 'linux/if_link.h'],
+ ['IFLA_IPVLAN_MODE', 'linux/if_link.h'],
+ ['IFLA_PHYS_PORT_ID', 'linux/if_link.h'],
+ ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
+ ['IFLA_VLAN_PROTOCOL', 'linux/if_link.h'],
+ ['IFLA_VXLAN_REMCSUM_NOPARTIAL', 'linux/if_link.h'],
+ ['IFLA_VXLAN_GPE', 'linux/if_link.h'],
+ # if_tunnel.h is buggy and cannot be included on its own
+ ['IFLA_VTI_REMOTE', 'linux/if_tunnel.h', '#include <net/if.h>'],
+ ['IFLA_IPTUN_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
+ ['IFLA_GRE_ENCAP_DPORT', 'linux/if_tunnel.h', '#include <net/if.h>'],
+ ['IFLA_BRIDGE_VLAN_INFO', 'linux/if_bridge.h'],
+ ['IFLA_BRPORT_PROXYARP', 'linux/if_link.h'],
+ ['IFLA_BRPORT_LEARNING_SYNC', 'linux/if_link.h'],
+ ['IFLA_BR_VLAN_DEFAULT_PVID', 'linux/if_link.h'],
+ ['NDA_IFINDEX', 'linux/neighbour.h'],
+ ['IFA_FLAGS', 'linux/if_addr.h'],
+ ['LO_FLAGS_PARTSCAN', 'linux/loop.h'],
+ ]
+ prefix = decl.length() > 2 ? decl[2] : ''
+ have = cc.has_header_symbol(decl[1], decl[0], prefix : prefix)
+ conf.set10('HAVE_DECL_' + decl[0], have)
+endforeach
+
+skip = false
+foreach ident : ['secure_getenv', '__secure_getenv']
+ if not skip and cc.has_function(ident)
+ conf.set('HAVE_' + ident.to_upper(), 1)
+ skip = true
+ endif
+endforeach
+
+foreach ident : [
+ ['memfd_create', '''#include <sys/memfd.h>'''],
+ ['gettid', '''#include <sys/types.h>'''],
+ ['pivot_root', '''#include <stdlib.h>'''], # no known header declares pivot_root
+ ['name_to_handle_at', '''#define _GNU_SOURCE
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>'''],
+ ['setns', '''#define _GNU_SOURCE
+ #include <sched.h>'''],
+ ['getrandom', '''#include <sys/random.h>'''],
+ ['renameat2', '''#include <stdio.h>'''],
+ ['kcmp', '''#include <linux/kcmp.h>'''],
+ ['keyctl', '''#include <sys/types.h>
+ #include <keyutils.h>'''],
+ ['copy_file_range', '''#include <sys/syscall.h>
+ #include <unistd.h>'''],
+ ['explicit_bzero' , '''#include <strings.h>'''],
+ ]
+
+ have = cc.has_function(ident[0], prefix : ident[1])
+ conf.set10('HAVE_DECL_' + ident[0].to_upper(), have)
+endforeach
+
+#####################################################################
+
+sed = find_program('sed')
+grep = find_program('grep')
+awk = find_program('awk')
+m4 = find_program('m4')
+stat = find_program('stat')
+
+# if -Dxxx-path option is found, use that. Otherwise, check in $PATH,
+# /usr/sbin, /sbin, and fall back to the default from middle column.
+progs = [['telinit', '/lib/sysvinit/telinit'],
+ ['quotaon', '/usr/sbin/quotaon' ],
+ ['quotacheck', '/usr/sbin/quotacheck' ],
+ ['kill', '/usr/bin/kill' ],
+ ['kmod', '/usr/bin/kmod' ],
+ ['kexec', '/usr/sbin/kexec' ],
+ ['sulogin', '/usr/sbin/sulogin' ],
+ ['mount', '/usr/bin/mount', 'MOUNT_PATH'],
+ ['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
+ ['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],
+ ['setfont', '/usr/bin/setfont', 'KBD_SETFONT'],
+ ]
+foreach prog : progs
+ path = get_option(prog[0] + '-path')
+ if path != ''
+ message('Using @1@ for @0@'.format(prog[0], path))
+ else
+ exe = find_program(prog[0], '/usr/sbin/' + prog[0], '/sbin/' + prog[0], required: false)
+ path = exe.found() ? exe.path() : prog[1]
+ endif
+ name = prog.length() > 2 ? prog[2] : prog[0].to_upper()
+ conf.set_quoted(name, path)
+endforeach
+
+# TODO: add ln --relative check
+# AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't support --relative ***])])
+
+############################################################
+
+gperf = find_program('gperf')
+
+gperf_test_format = '''
+#include <string.h>
+const char * in_word_set(const char *, @0@);
+@1@
+'''
+gperf_snippet_format = 'echo foo,bar | @0@ -L ANSI-C'
+gperf_snippet = run_command('sh', '-c', gperf_snippet_format.format(gperf.path()))
+gperf_test = gperf_test_format.format('size_t', gperf_snippet.stdout())
+if cc.compiles(gperf_test)
+ gperf_len_type = 'size_t'
+else
+ gperf_test = gperf_test_format.format('unsigned', gperf_snippet.stdout())
+ if cc.compiles(gperf_test)
+ gperf_len_type = 'unsigned'
+ else
+ error('unable to determine gperf len type')
+ endif
+endif
+message('gperf len type is @0@'.format(gperf_len_type))
+conf.set('GPERF_LEN_TYPE', gperf_len_type, description : 'The type of gperf "len" parameter')
+
+############################################################
+
+if not cc.has_header('sys/capability.h')
+ error('POSIX caps headers not found')
+endif
+foreach header : ['linux/btrfs.h',
+ 'linux/memfd.h',
+ 'linux/vm_sockets.h',
+ 'valgrind/memcheck.h',
+ 'valgrind/valgrind.h',
+ ]
+ if cc.has_header(header)
+ conf.set('HAVE_' + header.underscorify().to_upper(), 1)
+ endif
+endforeach
+
+############################################################
+
+conf.set_quoted('FALLBACK_HOSTNAME', get_option('fallback-hostname'))
+
+default_hierarchy = get_option('default-hierarchy')
+conf.set_quoted('DEFAULT_HIERARCHY_NAME', default_hierarchy,
+ description : 'default cgroup hierarchy as string')
+if default_hierarchy == 'legacy'
+ conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_NONE')
+elif default_hierarchy == 'hybrid'
+ conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_SYSTEMD')
+else
+ conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
+endif
+
+time_epoch = get_option('time-epoch')
+if time_epoch == ''
+ NEWS = files('NEWS')
+ time_epoch = run_command(stat, '-c', '%Y', NEWS).stdout()
+endif
+time_epoch = time_epoch.to_int()
+conf.set('TIME_EPOCH', time_epoch)
+
+system_uid_max = get_option('system-uid-max')
+if system_uid_max == ''
+ system_uid_max = run_command(
+ awk,
+ 'BEGIN { uid=999 } /^\s*SYS_UID_MAX\s+/ { uid=$2 } END { print uid }',
+ '/etc/login.defs').stdout()
+endif
+system_uid_max = system_uid_max.to_int()
+conf.set('SYSTEM_UID_MAX', system_uid_max)
+substs.set('systemuidmax', system_uid_max)
+message('Maximum system UID is @0@'.format(system_uid_max))
+
+conf.set_quoted('NOBODY_USER_NAME', get_option('nobody-user'))
+conf.set_quoted('NOBODY_GROUP_NAME', get_option('nobody-group'))
+
+system_gid_max = get_option('system-gid-max')
+if system_gid_max == ''
+ system_gid_max = run_command(
+ awk,
+ 'BEGIN { gid=999 } /^\s*SYS_GID_MAX\s+/ { gid=$2 } END { print gid }',
+ '/etc/login.defs').stdout()
+endif
+system_gid_max = system_gid_max.to_int()
+conf.set('SYSTEM_GID_MAX', system_gid_max)
+substs.set('systemgidmax', system_gid_max)
+message('Maximum system GID is @0@'.format(system_gid_max))
+
+tty_gid = get_option('tty-gid')
+conf.set('TTY_GID', tty_gid)
+m4_defines += ['-DTTY_GID=' + tty_gid]
+
+if get_option('adm-group')
+ m4_defines += ['-DENABLE_ADM_GROUP']
+endif
+
+if get_option('wheel-group')
+ m4_defines += ['-DENABLE_WHEEL_GROUP']
+endif
+
+substs.set('DEV_KVM_MODE', get_option('dev-kvm-mode'))
+
+conf.set10('KILL_USER_PROCESSES', get_option('default-kill-user-processes'))
+
+default_dnssec = get_option('default-dnssec')
+conf.set('DEFAULT_DNSSEC_MODE',
+ 'DNSSEC_' + default_dnssec.underscorify().to_upper())
+
+conf.set_quoted('DNS_SERVERS', get_option('dns-servers'))
+
+conf.set_quoted('NTP_SERVERS', get_option('ntp-servers'))
+
+conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+
+#####################################################################
+
+threads = dependency('threads')
+librt = cc.find_library('rt')
+libm = cc.find_library('m')
+libdl = cc.find_library('dl')
+libcrypt = cc.find_library('crypt')
+
+libcap = dependency('libcap')
+libmount = dependency('mount',
+ version : '>= 2.27')
+
+want_seccomp = get_option('seccomp')
+if want_seccomp != 'no'
+ libseccomp = dependency('libseccomp',
+ required : want_seccomp == 'yes')
+ if libseccomp.found()
+ conf.set('HAVE_SECCOMP', 1)
+ m4_defines += ['-DHAVE_SECCOMP']
+ endif
+else
+ libseccomp = []
+endif
+
+want_selinux = get_option('selinux')
+if want_selinux != 'no'
+ libselinux = dependency('libselinux',
+ version : '>= 2.1.9',
+ required : want_selinux == 'yes')
+ if libselinux.found()
+ conf.set('HAVE_SELINUX', 1)
+ m4_defines += ['-DHAVE_SELINUX']
+ endif
+else
+ libselinux = []
+endif
+
+want_apparmor = get_option('apparmor')
+if want_apparmor != 'no'
+ libapparmor = dependency('libapparmor',
+ required : want_apparmor == 'yes')
+ if libapparmor.found()
+ conf.set('HAVE_APPARMOR', 1)
+ m4_defines += ['-DHAVE_APPARMOR']
+ endif
+else
+ libapparmor = []
+endif
+
+want_smack = get_option('smack')
+if want_smack != 'no'
+ libsmack = dependency('libsmack',
+ required : want_smack == 'yes')
+ if libsmack.found()
+ conf.set('HAVE_SMACK', 1)
+ m4_defines += ['-DHAVE_SMACK']
+ endif
+else
+ libsmack = []
+endif
+
+smack_run_label = get_option('smack-run-label')
+if smack_run_label != ''
+ conf.set_quoted('SMACK_RUN_LABEL', smack_run_label)
+ m4_defines += ['-DHAVE_SMACK_RUN_LABEL']
+endif
+
+want_audit = get_option('audit')
+if want_audit != 'no'
+ libaudit = dependency('audit', required : want_audit == 'yes')
+ if libaudit.found()
+ conf.set('HAVE_AUDIT', 1)
+ endif
+else
+ libaudit = []
+endif
+
+want_blkid = get_option('blkid')
+if want_blkid != 'no'
+ libblkid = dependency('blkid', required : want_blkid == 'yes')
+ if libblkid.found()
+ conf.set('HAVE_BLKID', 1)
+ endif
+else
+ libblkid = []
+endif
+
+want_kmod = get_option('kmod')
+if want_kmod != 'no'
+ libkmod = dependency('libkmod',
+ version : '>= 15',
+ required : want_kmod == 'yes')
+ if libkmod.found()
+ conf.set('HAVE_KMOD', 1)
+ endif
+else
+ libkmod = []
+endif
+
+want_pam = get_option('pam')
+if want_pam != 'no'
+ libpam = cc.find_library('pam', required : want_pam == 'yes')
+ libpam_misc = cc.find_library('pam_misc', required : want_pam == 'yes')
+ if libpam.found() and libpam_misc.found()
+ conf.set('HAVE_PAM', 1)
+ m4_defines += ['-DHAVE_PAM']
+ endif
+else
+ libpam = []
+ libpam_misc = []
+endif
+
+want_microhttpd = get_option('microhttpd')
+if want_microhttpd != 'no'
+ libmicrohttpd = dependency('libmicrohttpd',
+ version : '>= 0.9.33',
+ required : want_microhttpd == 'yes')
+ if libmicrohttpd.found()
+ conf.set('HAVE_MICROHTTPD', 1)
+ m4_defines += ['-DHAVE_MICROHTTPD']
+ endif
+else
+ libmicrohttpd = []
+endif
+
+want_libcryptsetup = get_option('libcryptsetup')
+if want_libcryptsetup != 'no'
+ libcryptsetup = dependency('libcryptsetup',
+ version : '>= 1.6.0',
+ required : want_libcryptsetup == 'yes')
+ if libcryptsetup.found()
+ conf.set('HAVE_LIBCRYPTSETUP', 1)
+ endif
+else
+ libcryptsetup = []
+endif
+
+want_libcurl = get_option('libcurl')
+if want_libcurl != 'no'
+ libcurl = dependency('libcurl',
+ version : '>= 7.32.0',
+ required : want_libcurl == 'yes')
+ if libcurl.found()
+ conf.set('HAVE_LIBCURL', 1)
+ m4_defines += ['-DHAVE_LIBCURL']
+ endif
+else
+ libcurl = []
+endif
+
+want_libidn = get_option('libidn')
+if want_libidn != 'no'
+ libidn = dependency('libidn',
+ required : want_libidn == 'yes')
+ if libidn.found()
+ conf.set('HAVE_LIBIDN', 1)
+ m4_defines += ['-DHAVE_LIBIDN']
+ endif
+else
+ libidn = []
+endif
+
+want_libiptc = get_option('libiptc')
+if want_libiptc != 'no'
+ libiptc = dependency('libiptc',
+ required : want_libiptc == 'yes')
+ if libiptc.found()
+ conf.set('HAVE_LIBIPTC', 1)
+ m4_defines += ['-DHAVE_LIBIPTC']
+ endif
+else
+ libiptc = []
+endif
+
+want_qrencode = get_option('qrencode')
+if want_qrencode != 'no'
+ libqrencode = dependency('libqrencode',
+ required : want_qrencode == 'yes')
+ if libqrencode.found()
+ conf.set('HAVE_QRENCODE', 1)
+ endif
+else
+ libqrencode = []
+endif
+
+want_gnutls = get_option('gnutls')
+if want_gnutls != 'no'
+ libgnutls = dependency('gnutls',
+ version : '>= 3.1.4',
+ required : want_gnutls == 'yes')
+ if libgnutls.found()
+ conf.set('HAVE_GNUTLS', 1)
+ endif
+else
+ libgnutls = []
+endif
+
+want_elfutils = get_option('elfutils')
+if want_elfutils != 'no'
+ libdw = dependency('libdw',
+ required : want_elfutils == 'yes')
+ if libdw.found()
+ conf.set('HAVE_ELFUTILS', 1)
+ endif
+else
+ libdw = []
+endif
+
+want_zlib = get_option('zlib')
+if want_zlib != 'no'
+ libz = dependency('zlib',
+ required : want_zlib == 'yes')
+ if libz.found()
+ conf.set('HAVE_ZLIB', 1)
+ endif
+else
+ libz = []
+endif
+
+want_bzip2 = get_option('bzip2')
+if want_bzip2 != 'no'
+ libbzip2 = cc.find_library('bz2',
+ required : want_bzip2 == 'yes')
+ if libbzip2.found()
+ conf.set('HAVE_BZIP2', 1)
+ endif
+else
+ libbzip2 = []
+endif
+
+want_xz = get_option('xz')
+if want_xz != 'no'
+ libxz = dependency('liblzma',
+ required : want_xz == 'yes')
+ if libxz.found()
+ conf.set('HAVE_XZ', 1)
+ endif
+else
+ libxz = []
+endif
+
+want_lz4 = get_option('lz4')
+if want_lz4 != 'no'
+ liblz4 = dependency('liblz4',
+ required : want_lz4 == 'yes')
+ if liblz4.found()
+ conf.set('HAVE_LZ4', 1)
+ endif
+else
+ liblz4 = []
+endif
+
+libacl = cc.find_library('acl', required : false)
+if libacl.found()
+ conf.set('HAVE_ACL', 1)
+ m4_defines += ['-DHAVE_ACL']
+endif
+
+want_libgcrypt = get_option('libgcrypt')
+if want_libgcrypt != 'no'
+ libgcrypt = cc.find_library('gcrypt', required : want_libgcrypt == 'yes')
+ if libgcrypt.found()
+ conf.set('HAVE_LIBGCRYPT', 1)
+ endif
+else
+ libgcrypt = []
+endif
+
+want_importd = get_option('importd')
+if want_importd != 'no'
+ have_deps = (conf.get('HAVE_LIBCURL', 0) == 1 and
+ conf.get('HAVE_ZLIB', 0) == 1 and
+ conf.get('HAVE_BZIP2', 0) == 1 and
+ conf.get('HAVE_XZ', 0) == 1 and
+ conf.get('HAVE_LZ4', 0) == 1)
+ if have_deps
+ conf.set('ENABLE_IMPORTD', 1)
+ elif want_importd == 'yes'
+ error('importd support was requested, but dependencies are not available')
+ endif
+endif
+
+want_remote = get_option('remote')
+if want_remote != 'no'
+ have_deps = [conf.get('HAVE_MICROHTTPD', 0) == 1,
+ conf.get('HAVE_LIBCURL', 0) == 1]
+ # sd-j-remote requires µhttpd, and sd-j-upload requires libcurl, so
+ # it's possible to build one without the other. Complain only if
+ # support was explictly requested. The auxiliary files like sysusers
+ # config should be installed when any of the programs are built.
+ if want_remote == 'yes' and not (have_deps[0] and have_deps[1])
+ error('remote support was requested, but dependencies are not available')
+ endif
+ if have_deps[0] or have_deps[1]
+ conf.set('ENABLE_REMOTE', 1)
+ endif
+endif
+
+foreach pair : [['utmp', 'HAVE_UTMP'],
+ ['hibernate', 'ENABLE_HIBERNATE'],
+ ['environment-d', 'ENABLE_ENVIRONMENT_D'],
+ ['binfmt', 'ENABLE_BINFMT'],
+ ['coredump', 'ENABLE_COREDUMP'],
+ ['resolve', 'ENABLE_RESOLVED'],
+ ['logind', 'ENABLE_LOGIND'],
+ ['hostnamed', 'ENABLE_HOSTNAMED'],
+ ['localed', 'ENABLE_LOCALED'],
+ ['machined', 'ENABLE_MACHINED'],
+ ['networkd', 'ENABLE_NETWORKD'],
+ ['timedated', 'ENABLE_TIMEDATED'],
+ ['timesyncd', 'ENABLE_TIMESYNCD'],
+ ['myhostname', 'HAVE_MYHOSTNAME'],
+ ['firstboot', 'ENABLE_FIRSTBOOT'],
+ ['randomseed', 'ENABLE_RANDOMSEED'],
+ ['backlight', 'ENABLE_BACKLIGHT'],
+ ['vconsole', 'ENABLE_VCONSOLE'],
+ ['quotacheck', 'ENABLE_QUOTACHECK'],
+ ['sysusers', 'ENABLE_SYSUSERS'],
+ ['tmpfiles', 'ENABLE_TMPFILES'],
+ ['hwdb', 'ENABLE_HWDB'],
+ ['rfkill', 'ENABLE_RFKILL'],
+ ['ldconfig', 'ENABLE_LDCONFIG'],
+ ]
+
+ if get_option(pair[0])
+ conf.set(pair[1], 1)
+ endif
+endforeach
+
+#####################################################################
+
+if get_option('efi')
+ efi_arch = host_machine.cpu_family() # TODO: check this works at all
+ if efi_arch == 'ia32'
+ EFI_MACHINE_TYPE_NAME = 'ia32'
+ elif efi_arch == 'x86_64'
+ EFI_MACHINE_TYPE_NAME = 'x64'
+ elif efi_arch == 'aarch64'
+ EFI_MACHINE_TYPE_NAME = 'x64'
+ else
+ EFI_MACHINE_TYPE_NAME = efi_arch
+ endif
+
+ conf.set('ENABLE_EFI', 1)
+ conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
+endif
+
+#####################################################################
+
+config_h = configure_file(
+ output : 'config.h',
+ configuration : conf)
+
+includes = include_directories('src/basic',
+ 'src/shared',
+ 'src/systemd',
+ 'src/journal',
+ 'src/resolve',
+ 'src/timesync',
+ 'src/login',
+ 'src/udev',
+ 'src/libudev',
+ 'src/core',
+ 'src/libsystemd/sd-bus',
+ 'src/libsystemd/sd-device',
+ 'src/libsystemd/sd-hwdb',
+ 'src/libsystemd/sd-id128',
+ 'src/libsystemd/sd-netlink',
+ 'src/libsystemd/sd-network',
+ 'src/libsystemd-network',
+ )
+
+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')
+subdir('src/basic')
+subdir('src/libsystemd')
+subdir('src/libsystemd-network')
+subdir('src/analyze')
+subdir('src/coredump')
+subdir('src/hostname')
+subdir('src/import')
+subdir('src/journal')
+subdir('src/journal-remote')
+subdir('src/kernel-install')
+subdir('src/locale')
+subdir('src/login')
+subdir('src/machine')
+subdir('src/nspawn')
+subdir('src/resolve')
+subdir('src/timedate')
+subdir('src/timesync')
+subdir('src/vconsole')
+
+libjournal_core = static_library(
+ 'journal-core',
+ libjournal_core_sources,
+ journald_gperf_c,
+ include_directories : includes,
+ link_with : [libbasic,
+ libsystemd_internal,
+ libsystemd_journal_internal],
+ install : false)
+
+libsystemd = shared_library(
+ 'systemd',
+ libsystemd_internal_sources,
+ version : '0.18.0',
+ include_directories : includes,
+ link_args : ['-shared',
+ '-Wl,--version-script=' + libsystemd_sym],
+ link_with : [libbasic,
+ libsystemd_internal,
+ libsystemd_journal_internal],
+ dependencies : [threads],
+ install : true,
+ install_dir : rootlibdir)
+
+############################################################
+
+foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []],
+ ['systemd', '', []],
+ ['mymachines', 'ENABLE_MACHINED', []],
+ ['resolve', 'ENABLE_RESOLVED', [libdl]]]
+
+ condition = tuple[1] == '' or conf.get(tuple[1], 0) == 1
+ if condition
+ module = tuple[0]
+ extra_deps = tuple[2]
+
+ sym = meson.current_source_dir() + '/src/nss-@0@/nss-@0@.sym'.format(module)
+
+ shared_library(
+ 'nss_' + module,
+ 'src/nss-@0@/nss-@0@.c'.format(module),
+ version : '2',
+ include_directories : includes,
+ link_args : ['-shared',
+ '-Wl,--version-script=' + sym,
+ '-Wl,--undefined'],
+ link_with : [libsystemd_internal,
+ libbasic],
+ dependencies : [threads,
+ librt] + extra_deps,
+ install : true,
+ install_dir : rootlibdir)
+ endif
+endforeach
+
+############################################################
+
+subdir('src/libudev')
+subdir('src/shared')
+subdir('src/core')
+subdir('src/udev')
+subdir('src/network')
+
+executable('systemd',
+ systemd_sources,
+ include_directories : includes,
+ link_with : [libcore,
+ libshared],
+ dependencies : [threads,
+ librt,
+ libseccomp,
+ libselinux,
+ libmount],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-analyze',
+ systemd_analyze_sources,
+ include_directories : includes,
+ link_with : [libcore,
+ libshared],
+ dependencies : [threads,
+ librt,
+ libseccomp,
+ libselinux,
+ libmount],
+ install : true)
+
+executable('systemd-journald',
+ systemd_journald_sources,
+ include_directories : includes,
+ link_with : [libsystemd_journal_internal,
+ libjournal_core,
+ libshared,
+ libudev],
+ dependencies : [threads,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-cat',
+ systemd_cat_sources,
+ include_directories : includes,
+ link_with : [libjournal_core,
+ libshared,
+ libudev],
+ dependencies : [threads],
+ install : true)
+
+executable('journalctl',
+ journalctl_sources,
+ include_directories : includes,
+ link_with : [libshared,
+ libudev],
+ dependencies : [threads,
+ libqrencode,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootbindir)
+
+executable('systemd-getty-generator',
+ 'src/getty-generator/getty-generator.c',
+ install : true,
+ install_dir : systemgeneratordir,
+ include_directories : includes,
+ link_with : [libshared])
+
+executable('systemd-debug-generator',
+ 'src/debug-generator/debug-generator.c',
+ install : true,
+ install_dir : systemgeneratordir,
+ include_directories : includes,
+ link_with : [libshared])
+
+executable('systemd-fstab-generator',
+ 'src/fstab-generator/fstab-generator.c',
+ 'src/core/mount-setup.c',
+ install : true,
+ install_dir : systemgeneratordir,
+ include_directories : includes,
+ link_with : [libshared])
+
+if conf.get('ENABLE_ENVIRONMENT_D', 0) == 1
+ executable('30-systemd-environment-d-generator',
+ 'src/environment-d-generator/environment-d-generator.c',
+ install : true,
+ install_dir : userenvgeneratordir,
+ include_directories : includes,
+ link_with : [libshared])
+endif
+
+if conf.get('ENABLE_HIBERNATE', 0) == 1
+ executable('systemd-hibernate-resume-generator',
+ 'src/hibernate-resume/hibernate-resume-generator.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : systemgeneratordir)
+
+ executable('systemd-hibernate-resume',
+ 'src/hibernate-resume/hibernate-resume.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('HAVE_BLKID', 0) == 1
+ executable('systemd-gpt-auto-generator',
+ 'src/gpt-auto-generator/gpt-auto-generator.c',
+ 'src/basic/blkid-util.h',
+ install : true,
+ install_dir : systemgeneratordir,
+ include_directories : includes,
+ link_with : libshared,
+ dependencies : libblkid)
+
+ executable('systemd-dissect',
+ 'src/dissect/dissect.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_RESOLVED', 0) == 1
+ executable('systemd-resolved',
+ systemd_resolved_sources,
+ include_directories : includes,
+ link_with : [libshared,
+ ],
+ dependencies : [threads,
+ libm,
+ libidn],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('systemd-resolve',
+ systemd_resolve_sources,
+ include_directories : includes,
+ link_with : [libshared,
+ ],
+ dependencies : [threads,
+ libm,
+ libidn],
+ install : true)
+endif
+
+if conf.get('ENABLE_LOGIND', 0) == 1
+ executable('systemd-logind',
+ systemd_logind_sources,
+ include_directories : includes,
+ link_with : [liblogind_core,
+ libshared],
+ dependencies : [threads,
+ libacl],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('loginctl',
+ loginctl_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ liblz4,
+ libxz],
+ install : true,
+ install_dir : rootbindir)
+
+ executable('systemd-inhibit',
+ 'src/login/inhibit.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+
+ if conf.get('HAVE_PAM', 0) == 1
+ shared_library(
+ 'pam_systemd',
+ pam_systemd_c,
+ name_prefix : '',
+ include_directories : includes,
+ link_args : ['-shared',
+ '-Wl,--version-script=' + pam_systemd_sym],
+ link_with : [libshared],
+ dependencies : [libpam,
+ libpam_misc],
+ install : true,
+ install_dir : pamlibdir)
+ endif
+endif
+
+if conf.get('HAVE_PAM', 0) == 1
+ executable('systemd-user-sessions',
+ 'src/user-sessions/user-sessions.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_EFI', 0) == 1
+ executable('bootctl',
+ 'src/boot/bootctl.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libblkid],
+ install : true)
+endif
+
+executable('systemd-socket-activate', 'src/activate/activate.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads],
+ install : true)
+
+executable('systemctl', 'src/systemctl/systemctl.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libcap,
+ libselinux,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootbindir)
+
+if conf.get('ENABLE_BACKLIGHT', 0) == 1
+ executable('systemd-backlight',
+ 'src/backlight/backlight.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_RFKILL', 0) == 1
+ executable('systemd-rfkill',
+ 'src/rfkill/rfkill.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+executable('systemd-system-update-generator',
+ 'src/system-update-generator/system-update-generator.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : systemgeneratordir)
+
+if conf.get('HAVE_LIBCRYPTSETUP', 0) == 1
+ executable('systemd-cryptsetup',
+ 'src/cryptsetup/cryptsetup.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcryptsetup],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('systemd-cryptsetup-generator',
+ 'src/cryptsetup/cryptsetup-generator.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcryptsetup],
+ install : true,
+ install_dir : systemgeneratordir)
+
+ executable('systemd-veritysetup',
+ 'src/veritysetup/veritysetup.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcryptsetup],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('systemd-veritysetup-generator',
+ 'src/veritysetup/veritysetup-generator.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcryptsetup],
+ install : true,
+ install_dir : systemgeneratordir)
+endif
+
+if conf.get('HAVE_SYSV_COMPAT', 0) == 1
+ executable('systemd-sysv-generator',
+ 'src/sysv-generator/sysv-generator.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : systemgeneratordir)
+
+ executable('systemd-rc-local-generator',
+ 'src/rc-local-generator/rc-local-generator.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : systemgeneratordir)
+endif
+
+if conf.get('ENABLE_HOSTNAMED', 0) == 1
+ executable('systemd-hostnamed',
+ 'src/hostname/hostnamed.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('hostnamectl',
+ 'src/hostname/hostnamectl.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+endif
+
+if conf.get('ENABLE_LOCALED', 0) == 1
+ executable('systemd-localed',
+ systemd_localed_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libdl],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('localectl',
+ localectl_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+endif
+
+if conf.get('ENABLE_TIMEDATED', 0) == 1
+ executable('systemd-timedated',
+ 'src/timedate/timedated.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('timedatectl',
+ 'src/timedate/timedatectl.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+endif
+
+if conf.get('ENABLE_TIMESYNCD', 0) == 1
+ executable('systemd-timesyncd',
+ systemd_timesyncd_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libm],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_MACHINED', 0) == 1
+ executable('systemd-machined',
+ systemd_machined_sources,
+ include_directories : includes,
+ link_with : [libmachine_core,
+ libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('machinectl',
+ 'src/machine/machinectl.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootbindir)
+endif
+
+if conf.get('ENABLE_IMPORTD', 0) == 1
+ executable('systemd-importd',
+ systemd_importd_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('systemd-pull',
+ systemd_pull_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcurl,
+ libz,
+ libbzip2,
+ libxz,
+ libgcrypt],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('systemd-import',
+ systemd_import_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcurl,
+ libz,
+ libbzip2,
+ libxz],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('systemd-export',
+ systemd_export_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcurl,
+ libz,
+ libbzip2,
+ libxz],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_LIBCURL', 0) == 1
+ executable('systemd-journal-upload',
+ systemd_journal_upload_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libcurl,
+ libgnutls,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
+ executable('systemd-journal-remote',
+ systemd_journal_remote_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libmicrohttpd,
+ libgnutls,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('systemd-journal-gatewayd',
+ systemd_journal_gatewayd_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libmicrohttpd,
+ libgnutls,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_COREDUMP', 0) == 1
+ executable('systemd-coredump',
+ systemd_coredump_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libacl,
+ libdw,
+ libxz,
+ liblz4],
+ install : true,
+ install_dir : rootlibexecdir)
+
+ executable('coredumpctl',
+ coredumpctl_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libxz,
+ liblz4],
+ install : true)
+endif
+
+if conf.get('ENABLE_BINFMT', 0) == 1
+ executable('systemd-binfmt',
+ 'src/binfmt/binfmt.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_VCONSOLE', 0) == 1
+ executable('systemd-vconsole-setup',
+ 'src/vconsole/vconsole-setup.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_RANDOMSEED', 0) == 1
+ executable('systemd-random-seed',
+ 'src/random-seed/random-seed.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+if conf.get('ENABLE_FIRSTBOOT', 0) == 1
+ executable('systemd-firstboot',
+ 'src/firstboot/firstboot.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libcrypt],
+ install : true,
+ install_dir : rootbindir)
+endif
+
+executable('systemd-remount-fs',
+ 'src/remount-fs/remount-fs.c',
+ 'src/core/mount-setup.c',
+ 'src/core/mount-setup.h',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-machine-id-setup',
+ 'src/machine-id-setup/machine-id-setup-main.c',
+ 'src/core/machine-id-setup.c',
+ 'src/core/machine-id-setup.h',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+
+executable('systemd-fsck',
+ 'src/fsck/fsck.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-sleep',
+ 'src/sleep/sleep.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-sysctl',
+ 'src/sysctl/sysctl.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-ac-power',
+ 'src/ac-power/ac-power.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-detect-virt',
+ 'src/detect-virt/detect-virt.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('systemd-delta',
+ 'src/delta/delta.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('systemd-escape',
+ 'src/escape/escape.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+
+executable('systemd-notify',
+ 'src/notify/notify.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+
+executable('systemd-volatile-root',
+ 'src/volatile-root/volatile-root.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-cgroups-agent',
+ 'src/cgroups-agent/cgroups-agent.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-path',
+ 'src/path/path.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('systemd-ask-password',
+ 'src/ask-password/ask-password.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+
+executable('systemd-reply-password',
+ 'src/reply-password/reply-password.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-tty-ask-password-agent',
+ 'src/tty-ask-password-agent/tty-ask-password-agent.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+
+executable('systemd-cgls',
+ 'src/cgls/cgls.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('systemd-cgtop',
+ 'src/cgtop/cgtop.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('systemd-initctl',
+ 'src/initctl/initctl.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-mount',
+ 'src/mount/mount-tool.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('systemd-run',
+ 'src/run/run.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('systemd-stdio-bridge',
+ 'src/stdio-bridge/stdio-bridge.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+executable('busctl',
+ 'src/busctl/busctl.c',
+ 'src/busctl/busctl-introspect.c',
+ 'src/busctl/busctl-introspect.h',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true)
+
+if conf.get('ENABLE_SYSUSERS', 0) == 1
+ executable('systemd-sysusers',
+ 'src/sysusers/sysusers.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+endif
+
+if conf.get('ENABLE_TMPFILES', 0) == 1
+ executable('systemd-tmpfiles',
+ 'src/tmpfiles/tmpfiles.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libacl],
+ install : true,
+ install_dir : rootbindir)
+endif
+
+if conf.get('ENABLE_HWDB', 0) == 1
+ executable('systemd-hwdb',
+ 'src/hwdb/hwdb.c',
+ 'src/libsystemd/sd-hwdb/hwdb-internal.h',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootbindir)
+endif
+
+if conf.get('ENABLE_QUOTACHECK', 0) == 1
+ executable('systemd-quotacheck',
+ 'src/quotacheck/quotacheck.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+executable('systemd-socket-proxyd',
+ 'src/socket-proxy/socket-proxyd.c',
+ include_directories : includes,
+ link_with : [libshared,
+ libsystemd],
+ dependencies : [threads],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-udevd',
+ systemd_udevd_sources,
+ include_directories : includes,
+ link_with : [libudev_core,
+ libudev_internal,
+ libsystemd_network,
+ libshared],
+ dependencies : [libkmod,
+ libidn,
+ libacl],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('udevadm',
+ udevadm_sources,
+ include_directories : includes,
+ link_with : [libudev_core,
+ libudev_internal,
+ libsystemd_network,
+ libshared],
+ dependencies : [libkmod,
+ libidn,
+ libacl],
+ install : true,
+ install_dir : rootbindir)
+
+executable('systemd-shutdown',
+ systemd_shutdown_sources,
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-update-done',
+ 'src/update-done/update-done.c',
+ include_directories : includes,
+ link_with : [libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-update-utmp',
+ 'src/update-utmp/update-utmp.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libaudit],
+ install : true,
+ install_dir : rootlibexecdir)
+
+if conf.get('HAVE_KMOD', 0) == 1
+ executable('systemd-modules-load',
+ 'src/modules-load/modules-load.c',
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [libkmod],
+ install : true,
+ install_dir : rootlibexecdir)
+endif
+
+executable('systemd-nspawn',
+ systemd_nspawn_sources,
+ 'src/core/mount-setup.c', # FIXME: use a variable?
+ 'src/core/mount-setup.h',
+ 'src/core/loopback-setup.c',
+ 'src/core/loopback-setup.h',
+ include_directories : [includes, include_directories('src/nspawn')],
+ link_with : [libfirewall,
+ libshared],
+ dependencies : [libacl,
+ libblkid,
+ libseccomp,
+ libselinux],
+ install : true)
+
+executable('systemd-networkd',
+ systemd_networkd_sources,
+ include_directories : includes,
+ link_with : [libnetworkd_core,
+ libfirewall,
+ libsystemd_network,
+ libudev_internal,
+ libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('systemd-networkd-wait-online',
+ systemd_networkd_wait_online_sources,
+ include_directories : includes,
+ link_with : [libnetworkd_core,
+ libshared],
+ install : true,
+ install_dir : rootlibexecdir)
+
+executable('networkctl',
+ networkctl_sources,
+ include_directories : includes,
+ link_with : [libsystemd_network,
+ libshared],
+ install : true,
+ install_dir : rootbindir)
+
+executable('test-sizeof', 'src/test/test-sizeof.c',
+ include_directories : includes)
+
+make_directive_index_py = find_program('tools/make-directive-index.py')
+make_man_index_py = find_program('tools/make-man-index.py')
+
+subdir('units')
+subdir('sysctl.d')
+subdir('sysusers.d')
+subdir('tmpfiles.d')
+subdir('rules')
+subdir('hwdb')
+subdir('network')
+subdir('man')
+subdir('shell-completion/bash')
+subdir('shell-completion/zsh')
+subdir('docs/sysvinit')
+subdir('docs/var-log')
+
+# FIXME: figure out if the warning is true:
+# https://github.com/mesonbuild/meson/wiki/Reference-manual#install_subdir
+install_subdir('factory/etc',
+ install_dir : factorydir)
+
+
+install_data('xorg/50-systemd-user.sh',
+ install_dir : xinitrcdir)
+install_data('system-preset/90-systemd.preset',
+ install_dir : systempresetdir)
+install_data('README',
+ 'NEWS',
+ 'CODING_STYLE',
+ 'DISTRO_PORTING',
+ 'ENVIRONMENT.md',
+ 'LICENSE.GPL2',
+ 'LICENSE.LGPL2.1',
+ 'src/libsystemd/sd-bus/GVARIANT-SERIALIZATION',
+ install_dir : docdir)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000000..8a08852983
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,191 @@
+# -*- mode: meson -*-
+
+option('split-usr', type : 'boolean', value : false,
+ description : '''assume that /bin, /sbin aren't symlinks into /usr''')
+option('rootlibdir', type : 'string',
+ description : '''[/usr]/lib/x86_64-linux-gnu or such''')
+
+option('sysvinit-path', type : 'string', value : '/etc/init.d',
+ description : 'the directory where the SysV init scripts are located')
+option('sysvrcnd-path', type : 'string', value : '/etc/rc.d',
+ description : 'the base directory for SysV rcN.d directories')
+option('telinit-path', type : 'string', description : 'path to telinit')
+
+option('quotaon-path', type : 'string', description : 'path to quotaon')
+option('quotacheck-path', type : 'string', description : 'path to quotacheck')
+option('kill-path', type : 'string', description : 'path to kill')
+option('kmod-path', type : 'string', description : 'path to kmod')
+option('kexec-path', type : 'string', description : 'path to kexec')
+option('sulogin-path', type : 'string', description : 'path to sulogin')
+option('mount-path', type : 'string', description : 'path to mount')
+option('umount-path', type : 'string', description : 'path to umount')
+option('loadkeys-path', type : 'string', description : 'path to loadkeys')
+option('setfont-path', type : 'string', description : 'path to setfont')
+
+option('utmp', type : 'boolean',
+ description : 'support for utmp/wtmp log handling')
+option('hibernate', type : 'boolean',
+ description : 'support for hibernation')
+option('ldconfig', type : 'boolean',
+ description : 'support for dynamic linker cache creation')
+option('resolve', type : 'boolean',
+ description : 'systemd-resolved stack')
+option('efi', type : 'boolean',
+ description : 'support for EFI')
+option('environment-d', type : 'boolean',
+ description : 'support for environment.d')
+option('binfmt', type : 'boolean',
+ description : 'support for custom binary formats')
+option('coredump', type : 'boolean',
+ description : 'install the coredump handler')
+option('logind', type : 'boolean',
+ description : 'install the systemd-logind stack')
+option('hostnamed', type : 'boolean',
+ description : 'install the systemd-hostnamed stack')
+option('localed', type : 'boolean',
+ description : 'install the systemd-localed stack')
+option('machined', type : 'boolean',
+ description : 'install the systemd-machined stack')
+option('networkd', type : 'boolean',
+ description : 'install the systemd-networkd stack')
+option('timedated', type : 'boolean',
+ description : 'install the systemd-timedated daemon')
+option('timesyncd', type : 'boolean',
+ description : 'install the systemd-timesyncd daemon')
+option('remote', type : 'boolean',
+ description : 'support for "journal over the network"')
+option('myhostname', type : 'boolean',
+ description : 'nss-myhostname support')
+option('firstboot', type : 'boolean',
+ description : 'support for firstboot mechanism')
+option('randomseed', type : 'boolean',
+ description : 'support for restoring random seed')
+option('backlight', type : 'boolean',
+ description : 'support for restoring backlight state')
+option('vconsole', type : 'boolean',
+ description : 'support for vconsole configuration')
+option('quotacheck', type : 'boolean',
+ description : 'support for the quotacheck tools')
+option('sysusers', type : 'boolean',
+ description : 'support for the sysusers configuration')
+option('tmpfiles', type : 'boolean',
+ description : 'support for tmpfiles.d')
+option('importd', type : 'boolean',
+ description : 'install the systemd-importd daemon')
+option('hwdb', type : 'boolean',
+ description : 'support for the hardware database')
+option('rfkill', type : 'boolean',
+ description : 'support for the rfkill tools')
+
+option('certificate-root', type : 'string', value : '/etc/ssl',
+ description : 'the prefix for TLS certificates')
+option('dbuspolicydir', type : 'string',
+ description : 'D-Bus policy directory')
+option('dbussessionservicedir', type : 'string',
+ description : 'D-Bus session service directory')
+option('dbussystemservicedir', type : 'string',
+ description : 'D-Bus system service directory')
+option('pkgconfigdatadir', type : 'string', value : 'share/pkgconfig',
+ description : 'directory for ')
+option('pkgconfiglibdir', type : 'string', value : '',
+ description : 'directory for ')
+option('rpmmacrosdir', type : 'string', value : 'lib/rpm/macros.d',
+ description : 'directory for rpm macros ["no" disables]')
+option('pamlibdir', type : 'string',
+ description : 'directory for PAM modules')
+option('pamconfdir', type : 'string',
+ description : 'directory for PAM configuration ["no" disables]')
+
+option('fallback-hostname', type : 'string', value : 'localhost',
+ description : 'the hostname used if none configured')
+option('default-hierarchy', type : 'combo',
+ choices : ['legacy', 'hybrid', 'unified'], value : 'hybrid',
+ description : 'default cgroup hierarchy')
+option('time-epoch', type : 'string',
+ description : 'time epoch for time clients')
+option('system-uid-max', type : 'string',
+ description : 'maximum system UID')
+option('system-gid-max', type : 'string',
+ description : 'maximum system GID')
+option('tty-gid', type : 'string',
+ description : 'the numeric GID of the "tty" group',
+ value : '5')
+option('adm-group', type : 'boolean',
+ description : 'the ACL for adm group should be added')
+option('wheel-group', type : 'boolean',
+ description : 'the ACL for wheel group should be added')
+option('nobody-user', type : 'string',
+ description : 'The name of the nobody user (the one with UID 65534)',
+ value : 'nobody')
+option('nobody-group', type : 'string',
+ description : 'The name of the nobody group (the one with GID 65534)',
+ value : 'nobody')
+option('dev-kvm-mode', type : 'string', value : '0660',
+ description : '/dev/kvm access mode')
+option('default-kill-user-processes', type : 'boolean',
+ description : 'the default value for KillUserProcesses= setting')
+
+option('default-dnssec', type : 'combo',
+ description : 'default DNSSEC mode',
+ choices : ['yes', 'allow-downgrade', 'no'],
+ value : 'allow-downgrade')
+option('dns-servers', type : 'string',
+ description : 'space-separated list of default DNS servers',
+ value : '8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844')
+option('ntp-servers', type : 'string',
+ description : 'space-separated list of default NTP servers',
+ value : 'time1.google.com time2.google.com time3.google.com time4.google.com')
+option('support-url', type : 'string',
+ description : 'the support URL to show in catalog entries included in systemd',
+ value : 'https://lists.freedesktop.org/mailman/listinfo/systemd-devel')
+
+option('seccomp', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'SECCOMP support')
+option('selinux', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'SELinux support')
+option('apparmor', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'AppArmor support')
+option('smack', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'SMACK support')
+option('smack-run-label', type : 'string',
+ description : 'run systemd --system itself with a specific SMACK label')
+
+option('audit', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libaudit support')
+option('blkid', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libblkid support')
+option('kmod', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'support for loadable modules')
+option('pam', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'PAM support')
+option('microhttpd', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libµhttpd support')
+option('libcryptsetup', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libcryptsetup support')
+option('libcurl', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libcurl support')
+option('libidn', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libidn support')
+option('libiptc', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libiptc support')
+option('qrencode', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libqrencode support')
+option('libgcrypt', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'libgcrypt support')
+option('gnutls', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'gnutls support')
+option('elfutils', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'elfutils support')
+option('zlib', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'zlib compression support')
+option('bzip2', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'bzip2 compression support')
+option('xz', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'xz compression support')
+option('lz4', type : 'combo', choices : ['auto', 'yes', 'no'],
+ description : 'lz4 compression support')
+
+option('bashcompletiondir', type : 'string',
+ description : 'directory for bash completion scripts ["no" disables]')
+option('zshcompletiondir', type : 'string',
+ description : 'directory for zsh completion scripts ["no" disables]')
diff --git a/network/meson.build b/network/meson.build
new file mode 100644
index 0000000000..b578159b03
--- /dev/null
+++ b/network/meson.build
@@ -0,0 +1,9 @@
+# -*- mode: meson -*-
+
+if conf.get('ENABLE_NETWORKD', 0) == 1
+ install_data('80-container-host0.network',
+ '80-container-ve.network',
+ '80-container-vz.network',
+ '99-default.link',
+ install_dir : networkdir)
+endif
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 0000000000..b95c2a3550
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1,14 @@
+# -*- mode: meson -*-
+
+i18n = import('i18n')
+i18n.gettext(meson.project_name())
+
+#####################################################################
+
+intltool_merge = find_program('intltool-merge')
+po_dir = meson.current_source_dir()
+
+intltool_cache = meson.current_build_dir() + '/intltool-merge-cache'
+intltool_command = [intltool_merge, '-x', '-u',
+ '-c', intltool_cache,
+ po_dir, '@INPUT@', '@OUTPUT@']
diff --git a/rules/meson.build b/rules/meson.build
new file mode 100644
index 0000000000..43142ca991
--- /dev/null
+++ b/rules/meson.build
@@ -0,0 +1,40 @@
+# -*- mode: meson -*-
+
+rules = files('''
+ 60-block.rules
+ 60-cdrom_id.rules
+ 60-drm.rules
+ 60-evdev.rules
+ 60-persistent-alsa.rules
+ 60-persistent-input.rules
+ 60-persistent-storage.rules
+ 60-persistent-storage-tape.rules
+ 60-persistent-v4l.rules
+ 60-sensor.rules
+ 60-serial.rules
+ 64-btrfs.rules
+ 70-mouse.rules
+ 70-touchpad.rules
+ 75-net-description.rules
+ 75-probe_mtd.rules
+ 78-sound-card.rules
+ 80-drivers.rules
+ 80-net-setup-link.rules
+'''.split())
+
+install_data(rules,
+ install_dir : udevrulesdir)
+
+rules_in = '''
+ 50-udev-default.rules
+ 99-systemd.rules
+'''.split()
+
+foreach file : rules_in
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ install_data(gen,
+ install_dir : udevrulesdir)
+endforeach
diff --git a/shell-completion/bash/meson.build b/shell-completion/bash/meson.build
new file mode 100644
index 0000000000..bbd705c1cf
--- /dev/null
+++ b/shell-completion/bash/meson.build
@@ -0,0 +1,52 @@
+# -*- mode: meson -*-
+
+bashcompletiondir = get_option('bashcompletiondir')
+if bashcompletiondir == ''
+ bash_completion = dependency('bash-completion', required : false)
+ if bash_completion.found()
+ bashcompletiondir = bash_completion.get_pkgconfig_variable('completionsdir')
+ else
+ bashcompletiondir = datadir + '/bash-completion/completions'
+ endif
+
+ message('bash completions: @0@'.format(bashcompletiondir))
+endif
+
+if bashcompletiondir != 'no'
+ bash_systemctl = configure_file(
+ input : 'systemctl.in',
+ output : 'systemctl',
+ configuration : substs)
+
+ items = [['busctl', ''],
+ ['journalctl', ''],
+ ['systemd-analyze', ''],
+ ['systemd-cat', ''],
+ ['systemd-cgls', ''],
+ ['systemd-cgtop', ''],
+ ['systemd-delta', ''],
+ ['systemd-detect-virt', ''],
+ ['systemd-nspawn', ''],
+ ['systemd-path', ''],
+ ['systemd-run', ''],
+ ['udevadm', ''],
+ ['kernel-install', ''],
+ [bash_systemctl, ''],
+ ['bootctl', 'ENABLE_EFI'],
+ ['coredumpctl', 'ENABLE_COREDUMP'],
+ ['hostnamectl', 'ENABLE_HOSTNAMED'],
+ ['localectl', 'ENABLE_LOCALED'],
+ ['loginctl', 'ENABLE_LOGIND'],
+ ['machinectl', 'ENABLE_MACHINED'],
+ ['networkctl', 'ENABLE_NETWORKD'],
+ ['systemd-resolve', 'ENABLE_RESOLVED'],
+ ['timedatectl', 'ENABLE_TIMEDATED'],
+ ]
+
+ foreach item : items
+ if item[1] == '' or conf.get(item[1], 0) == 1
+ install_data(item[0],
+ install_dir : bashcompletiondir)
+ endif
+ endforeach
+endif
diff --git a/shell-completion/zsh/meson.build b/shell-completion/zsh/meson.build
new file mode 100644
index 0000000000..56bf7aeb03
--- /dev/null
+++ b/shell-completion/zsh/meson.build
@@ -0,0 +1,49 @@
+# -*- mode: meson -*-
+
+zshcompletiondir = get_option('zshcompletiondir')
+if zshcompletiondir == ''
+ zshcompletiondir = datadir + '/zsh/site-functions'
+
+ message('zsh completions: @0@'.format(zshcompletiondir))
+endif
+
+if zshcompletiondir != 'no'
+ zsh_systemctl = configure_file(
+ input : '_systemctl.in',
+ output : '_systemctl',
+ configuration : substs)
+
+ items = [['_busctl', ''],
+ ['_journalctl', ''],
+ ['_systemd-analyze', ''],
+ ['_systemd-delta', ''],
+ ['_systemd-nspawn', ''],
+ ['_systemd', ''],
+ ['_systemd-run', ''],
+ ['_udevadm', ''],
+ ['_kernel-install', ''],
+ ['_sd_hosts_or_user_at_host', ''],
+ ['_sd_outputmodes', ''],
+ ['_sd_unit_files', ''],
+ ['_sd_machines', ''],
+ [zsh_systemctl, ''],
+ ['_bootctl', 'ENABLE_EFI'],
+ ['_coredumpctl', 'ENABLE_COREDUMP'],
+ ['_hostnamectl', 'ENABLE_HOSTNAMED'],
+ ['_localectl', 'ENABLE_LOCALED'],
+ ['_loginctl', 'ENABLE_LOGIND'],
+ ['_machinectl', 'ENABLE_MACHINED'],
+ ['_networkctl', 'ENABLE_NETWORKD'],
+ ['_systemd-inhibit', 'ENABLE_LOGIND'],
+ ['_systemd-resolve', 'ENABLE_RESOLVED'],
+ ['_systemd-tmpfiles', 'ENABLE_TMPFILES'],
+ ['_timedatectl', 'ENABLE_TIMEDATED'],
+ ]
+
+ foreach item : items
+ if item[1] == '' or conf.get(item[1], 0) == 1
+ install_data(item[0],
+ install_dir : zshcompletiondir)
+ endif
+ endforeach
+endif
diff --git a/src/analyze/meson.build b/src/analyze/meson.build
new file mode 100644
index 0000000000..1ff6b182d1
--- /dev/null
+++ b/src/analyze/meson.build
@@ -0,0 +1,7 @@
+# -*- mode: meson -*-
+
+systemd_analyze_sources = files('''
+ analyze.c
+ analyze-verify.c
+ analyze-verify.h
+'''.split())
diff --git a/src/basic/af-to-name.awk b/src/basic/af-to-name.awk
new file mode 100644
index 0000000000..e20830487f
--- /dev/null
+++ b/src/basic/af-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "static const char* const af_names[] = { "}
+!/AF_FILE/ && !/AF_ROUTE/ && !/AF_LOCAL/ {
+ printf " [%s] = \"%s\",\n", $1, $1
+}
+END{print "};"}
diff --git a/src/basic/arphrd-to-name.awk b/src/basic/arphrd-to-name.awk
new file mode 100644
index 0000000000..57e4680f17
--- /dev/null
+++ b/src/basic/arphrd-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "static const char* const arphrd_names[] = { "}
+!/CISCO/ {
+ printf " [ARPHRD_%s] = \"%s\",\n", $1, $1
+}
+END{print "};"}
diff --git a/src/basic/cap-to-name.awk b/src/basic/cap-to-name.awk
new file mode 100644
index 0000000000..d252291851
--- /dev/null
+++ b/src/basic/cap-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "static const char* const capability_names[] = { "}
+{
+ printf " [%s] = \"%s\",\n", $1, tolower($1)
+}
+END{print "};"}
diff --git a/src/basic/errno-to-name.awk b/src/basic/errno-to-name.awk
new file mode 100644
index 0000000000..c48c8f93ab
--- /dev/null
+++ b/src/basic/errno-to-name.awk
@@ -0,0 +1,4 @@
+BEGIN{ print "static const char* const errno_names[] = { " }
+!/EDEADLOCK/ && !/EWOULDBLOCK/ && !/ENOTSUP/ {
+ printf " [%s] = \"%s\",\n", $1, $1 }
+END{ print "};" }
diff --git a/src/basic/generate-af-list.sh b/src/basic/generate-af-list.sh
new file mode 100644
index 0000000000..e4f9f68312
--- /dev/null
+++ b/src/basic/generate-af-list.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+cpp -dM -include sys/socket.h - </dev/null | \
+ grep -Ev 'AF_UNSPEC|AF_MAX' | \
+ awk '/^#define[ \t]+AF_[^ \t]+[ \t]+PF_[^ \t]/ { print $2; }'
diff --git a/src/basic/generate-arphrd-list.sh b/src/basic/generate-arphrd-list.sh
new file mode 100644
index 0000000000..e4cd8ab6d2
--- /dev/null
+++ b/src/basic/generate-arphrd-list.sh
@@ -0,0 +1,5 @@
+#!/bin/sh -e
+
+cpp -dM -include net/if_arp.h - </dev/null | \
+ awk '/^#define[ \t]+ARPHRD_[^ \t]+[ \t]+[^ \t]/ { print $2; }' | \
+ sed -e 's/ARPHRD_//'
diff --git a/src/basic/generate-cap-list.sh b/src/basic/generate-cap-list.sh
new file mode 100644
index 0000000000..de4b44661e
--- /dev/null
+++ b/src/basic/generate-cap-list.sh
@@ -0,0 +1,5 @@
+#!/bin/sh -e
+
+cpp -dM -include linux/capability.h -include "$1" -include "$2" - </dev/null | \
+ awk '/^#define[ \t]+CAP_[A-Z_]+[ \t]+/ { print $2; }' | \
+ grep -v CAP_LAST_CAP
diff --git a/src/basic/generate-errno-list.sh b/src/basic/generate-errno-list.sh
new file mode 100644
index 0000000000..291b118f36
--- /dev/null
+++ b/src/basic/generate-errno-list.sh
@@ -0,0 +1,4 @@
+#!/bin/sh -e
+
+cpp -dM -include errno.h - </dev/null | \
+ awk '/^#define[ \t]+E[^ _]+[ \t]+/ { print $2; }'
diff --git a/src/basic/generate-gperfs.py b/src/basic/generate-gperfs.py
new file mode 100644
index 0000000000..2e7d8931dd
--- /dev/null
+++ b/src/basic/generate-gperfs.py
@@ -0,0 +1,16 @@
+#!/usr/bin/python3
+
+"""Generate %-from-name.gperf from %-list.txt
+"""
+
+import sys
+
+name, prefix, input = sys.argv[1:]
+
+print("""\
+struct {}_name {{ const char* name; int id; }};
+%null-strings
+%%""".format(name))
+
+for line in open(input):
+ print("{0}, {1}{0}".format(line.rstrip(), prefix))
diff --git a/src/basic/meson.build b/src/basic/meson.build
new file mode 100644
index 0000000000..23caa1c7a5
--- /dev/null
+++ b/src/basic/meson.build
@@ -0,0 +1,283 @@
+# -*- mode: meson -*-
+
+basic_sources_plain = files('''
+ af-list.c
+ af-list.h
+ alloc-util.c
+ alloc-util.h
+ architecture.c
+ architecture.h
+ arphrd-list.c
+ arphrd-list.h
+ async.c
+ async.h
+ audit-util.c
+ audit-util.h
+ barrier.c
+ barrier.h
+ bitmap.c
+ bitmap.h
+ blkid-util.h
+ btrfs-ctree.h
+ btrfs-util.c
+ btrfs-util.h
+ build.h
+ bus-label.c
+ bus-label.h
+ calendarspec.c
+ calendarspec.h
+ capability-util.c
+ capability-util.h
+ cap-list.c
+ cap-list.h
+ cgroup-util.c
+ cgroup-util.h
+ chattr-util.c
+ chattr-util.h
+ clock-util.c
+ clock-util.h
+ conf-files.c
+ conf-files.h
+ copy.c
+ copy.h
+ cpu-set-util.c
+ cpu-set-util.h
+ def.h
+ device-nodes.c
+ device-nodes.h
+ dirent-util.c
+ dirent-util.h
+ env-util.c
+ env-util.h
+ errno-list.c
+ errno-list.h
+ escape.c
+ escape.h
+ ether-addr-util.c
+ ether-addr-util.h
+ exec-util.c
+ exec-util.h
+ exit-status.c
+ exit-status.h
+ extract-word.c
+ extract-word.h
+ fd-util.c
+ fd-util.h
+ fileio.c
+ fileio.h
+ fileio-label.c
+ fileio-label.h
+ format-util.h
+ fs-util.c
+ fs-util.h
+ glob-util.c
+ glob-util.h
+ gunicode.c
+ gunicode.h
+ hash-funcs.c
+ hash-funcs.h
+ hashmap.c
+ hashmap.h
+ hexdecoct.c
+ hexdecoct.h
+ hostname-util.c
+ hostname-util.h
+ in-addr-util.c
+ in-addr-util.h
+ ioprio.h
+ io-util.c
+ io-util.h
+ journal-importer.c
+ journal-importer.h
+ khash.c
+ khash.h
+ label.c
+ label.h
+ list.h
+ locale-util.c
+ locale-util.h
+ lockfile-util.c
+ lockfile-util.h
+ log.c
+ log.h
+ login-util.c
+ login-util.h
+ macro.h
+ memfd-util.c
+ memfd-util.h
+ mempool.c
+ mempool.h
+ missing_syscall.h
+ mkdir.c
+ mkdir.h
+ mkdir-label.c
+ mount-util.c
+ mount-util.h
+ MurmurHash2.c
+ MurmurHash2.h
+ nss-util.h
+ ordered-set.c
+ ordered-set.h
+ parse-util.c
+ parse-util.h
+ path-util.c
+ path-util.h
+ prioq.c
+ prioq.h
+ proc-cmdline.c
+ proc-cmdline.h
+ process-util.c
+ process-util.h
+ random-util.c
+ random-util.h
+ ratelimit.c
+ ratelimit.h
+ raw-clone.h
+ refcnt.h
+ replace-var.c
+ replace-var.h
+ rlimit-util.c
+ rlimit-util.h
+ rm-rf.c
+ rm-rf.h
+ securebits.h
+ selinux-util.c
+ selinux-util.h
+ set.h
+ sigbus.c
+ sigbus.h
+ signal-util.c
+ signal-util.h
+ siphash24.c
+ siphash24.h
+ smack-util.c
+ smack-util.h
+ socket-label.c
+ socket-util.c
+ socket-util.h
+ sparse-endian.h
+ special.h
+ stat-util.c
+ stat-util.h
+ stdio-util.h
+ strbuf.c
+ strbuf.h
+ string-table.c
+ string-table.h
+ string-util.c
+ string-util.h
+ strv.c
+ strv.h
+ strxcpyx.c
+ strxcpyx.h
+ syslog-util.c
+ syslog-util.h
+ terminal-util.c
+ terminal-util.h
+ time-util.c
+ time-util.h
+ umask-util.h
+ unaligned.h
+ unit-name.c
+ unit-name.h
+ user-util.c
+ user-util.h
+ utf8.c
+ utf8.h
+ util.c
+ util.h
+ verbs.c
+ verbs.h
+ virt.c
+ virt.h
+ web-util.c
+ web-util.h
+ xattr-util.c
+ xattr-util.h
+ xml.c
+ xml.h
+'''.split())
+
+missing_h = files('missing.h')
+
+generate_gperfs = find_program('generate-gperfs.py')
+
+generate_af_list = find_program('generate-af-list.sh')
+af_list_txt = custom_target(
+ 'af-list.txt',
+ output : 'af-list.txt',
+ command : [generate_af_list],
+ capture : true)
+
+generate_arphrd_list = find_program('generate-arphrd-list.sh')
+arphrd_list_txt = custom_target(
+ 'arphrd-list.txt',
+ output : 'arphrd-list.txt',
+ command : [generate_arphrd_list],
+ capture : true)
+
+generate_cap_list = find_program('generate-cap-list.sh')
+cap_list_txt = custom_target(
+ 'cap-list.txt',
+ output : 'cap-list.txt',
+ command : [generate_cap_list, config_h, missing_h],
+ capture : true)
+
+generate_errno_list = find_program('generate-errno-list.sh')
+errno_list_txt = custom_target(
+ 'errno-list.txt',
+ output : 'errno-list.txt',
+ command : [generate_errno_list],
+ capture : true)
+
+generated_gperf_headers = []
+foreach item : [['af', af_list_txt, 'af', ''],
+ ['arphrd', arphrd_list_txt, 'arphrd', 'ARPHRD_'],
+ ['cap', cap_list_txt, 'capability', ''],
+ ['errno', errno_list_txt, 'errno', '']]
+
+ fname = '@0@-from-name.gperf'.format(item[0])
+ gperf_file = custom_target(
+ fname,
+ input : item[1],
+ output : fname,
+ command : [generate_gperfs, item[2], item[3], '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-from-name.h'.format(item[0])
+ target1 = custom_target(
+ fname,
+ input : gperf_file,
+ output : fname,
+ command : [gperf,
+ '-L', 'ANSI-C', '-t', '--ignore-case',
+ '-N', 'lookup_@0@'.format(item[2]),
+ '-H', 'hash_@0@_name'.format(item[2]),
+ '-p', '-C',
+ '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-to-name.h'.format(item[0])
+ awkscript = '@0@-to-name.awk'.format(item[0])
+ target2 = custom_target(
+ fname,
+ input : [awkscript, item[1]],
+ output : fname,
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+ generated_gperf_headers += [target1, target2]
+endforeach
+
+basic_sources = basic_sources_plain + [missing_h] + generated_gperf_headers
+
+libbasic = static_library(
+ 'basic',
+ basic_sources,
+ include_directories : includes,
+ dependencies : [threads,
+ libcap,
+ libblkid,
+ libselinux,
+ ],
+ install : false)
diff --git a/src/core/load-fragment-gperf-nulstr.awk b/src/core/load-fragment-gperf-nulstr.awk
new file mode 100644
index 0000000000..bc66ff221d
--- /dev/null
+++ b/src/core/load-fragment-gperf-nulstr.awk
@@ -0,0 +1,12 @@
+BEGIN{
+ keywords=0 ; FS="," ;
+ print "extern const char load_fragment_gperf_nulstr[];" ;
+ print "const char load_fragment_gperf_nulstr[] ="
+}
+keyword==1 {
+ print "\"" $$1 "\\0\""
+}
+/%%/ {
+ keyword=1
+}
+END { print ";" }
diff --git a/src/core/meson.build b/src/core/meson.build
new file mode 100644
index 0000000000..3d2f9f37a7
--- /dev/null
+++ b/src/core/meson.build
@@ -0,0 +1,222 @@
+# -*- mode: meson -*-
+
+libcore_la_sources = '''
+ unit.c
+ unit.h
+ unit-printf.c
+ unit-printf.h
+ job.c
+ job.h
+ manager.c
+ manager.h
+ transaction.c
+ transaction.h
+ load-fragment.c
+ load-fragment.h
+ service.c
+ service.h
+ socket.c
+ socket.h
+ busname.c
+ busname.h
+ bus-policy.c
+ bus-policy.h
+ target.c
+ target.h
+ device.c
+ device.h
+ mount.c
+ mount.h
+ automount.c
+ automount.h
+ swap.c
+ swap.h
+ timer.c
+ timer.h
+ path.c
+ path.h
+ slice.c
+ slice.h
+ scope.c
+ scope.h
+ load-dropin.c
+ load-dropin.h
+ execute.c
+ execute.h
+ dynamic-user.c
+ dynamic-user.h
+ kill.c
+ kill.h
+ dbus.c
+ dbus.h
+ dbus-manager.c
+ dbus-manager.h
+ dbus-unit.c
+ dbus-unit.h
+ dbus-job.c
+ dbus-job.h
+ dbus-service.c
+ dbus-service.h
+ dbus-socket.c
+ dbus-socket.h
+ dbus-busname.c
+ dbus-busname.h
+ dbus-target.c
+ dbus-target.h
+ dbus-device.c
+ dbus-device.h
+ dbus-mount.c
+ dbus-mount.h
+ dbus-automount.c
+ dbus-automount.h
+ dbus-swap.c
+ dbus-swap.h
+ dbus-timer.c
+ dbus-timer.h
+ dbus-path.c
+ dbus-path.h
+ dbus-slice.c
+ dbus-slice.h
+ dbus-scope.c
+ dbus-scope.h
+ dbus-execute.c
+ dbus-execute.h
+ dbus-kill.c
+ dbus-kill.h
+ dbus-cgroup.c
+ dbus-cgroup.h
+ cgroup.c
+ cgroup.h
+ selinux-access.c
+ selinux-access.h
+ selinux-setup.c
+ selinux-setup.h
+ smack-setup.c
+ smack-setup.h
+ ima-setup.c
+ ima-setup.h
+ locale-setup.h
+ locale-setup.c
+ hostname-setup.c
+ hostname-setup.h
+ machine-id-setup.c
+ machine-id-setup.h
+ mount-setup.c
+ mount-setup.h
+ kmod-setup.c
+ kmod-setup.h
+ loopback-setup.h
+ loopback-setup.c
+ namespace.c
+ namespace.h
+ killall.h
+ killall.c
+ audit-fd.c
+ audit-fd.h
+ show-status.c
+ show-status.h
+ emergency-action.c
+ emergency-action.h
+'''.split()
+
+load_fragment_gperf_gperf = custom_target(
+ 'load-fragment-gperf.gperf',
+ input : 'load-fragment-gperf.gperf.m4',
+ output: 'load-fragment-gperf.gperf',
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true)
+
+load_fragment_gperf_c = custom_target(
+ 'load-fragment-gperf.c',
+ input : load_fragment_gperf_gperf,
+ output : 'load-fragment-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+awkscript = 'load-fragment-gperf-nulstr.awk'
+load_fragment_gperf_nulstr_c = custom_target(
+ 'load-fragment-gperf-nulstr.c',
+ input : [awkscript, load_fragment_gperf_gperf],
+ output : 'load-fragment-gperf-nulstr.c',
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+libcore = static_library(
+ 'core',
+ libcore_la_sources,
+ load_fragment_gperf_c,
+ load_fragment_gperf_nulstr_c,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libpam,
+ libaudit,
+ libkmod,
+ libapparmor,
+ libmount])
+
+systemd_sources = files('main.c')
+
+systemd_shutdown_sources = files('''
+ shutdown.c
+ umount.c
+ umount.h
+ mount-setup.c
+ mount-setup.h
+ killall.c
+ killall.h
+'''.split())
+
+in_files = [['macros.systemd', rpmmacrosdir],
+ ['triggers.systemd', ''],
+ ['systemd.pc', pkgconfigdatadir]]
+
+foreach item : in_files
+ file = item[0]
+ dir = item[1]
+
+ # If "no", disable generation completely.
+ # If "", generate, but do not install.
+ if dir != 'no'
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ if dir != ''
+ install_data(gen,
+ install_dir : dir)
+ endif
+ endif
+endforeach
+
+install_data('org.freedesktop.systemd1.conf',
+ install_dir : dbuspolicydir)
+install_data('org.freedesktop.systemd1.service',
+ install_dir : dbussystemservicedir)
+
+policy_in = configure_file(
+ input : 'org.freedesktop.systemd1.policy.in.in',
+ output : 'org.freedesktop.systemd1.policy.in',
+ configuration : substs)
+
+custom_target(
+ 'org.freedesktop.systemd1.policy',
+ input : policy_in,
+ output : 'org.freedesktop.systemd1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+
+# TODO: this might work with meson from git, see
+# https://github.com/mesonbuild/meson/issues/1441#issuecomment-283585493
+#
+# i18n.merge_file(
+# 'org.freedesktop.systemd1.policy',
+# po_dir : po_dir,
+# input : policy_in,
+# output : 'org.freedesktop.systemd1.policy',
+# install : true,
+# install_dir : polkitpolicydir)
+
+install_data('system.conf',
+ 'user.conf',
+ install_dir : pkgsysconfdir)
diff --git a/src/coredump/meson.build b/src/coredump/meson.build
new file mode 100644
index 0000000000..c7aa8be46c
--- /dev/null
+++ b/src/coredump/meson.build
@@ -0,0 +1,17 @@
+# -*- mode: meson -*-
+
+systemd_coredump_sources = files('''
+ coredump.c
+ coredump-vacuum.c
+ coredump-vacuum.h
+'''.split())
+
+if conf.get('HAVE_ELFUTILS', 0) == 1
+ systemd_coredump_sources += files(['stacktrace.c',
+ 'stacktrace.h'])
+endif
+
+coredumpctl_sources = files('coredumpctl.c')
+
+install_data('coredump.conf',
+ install_dir : pkgsysconfdir)
diff --git a/src/hostname/meson.build b/src/hostname/meson.build
new file mode 100644
index 0000000000..43a035c0bf
--- /dev/null
+++ b/src/hostname/meson.build
@@ -0,0 +1,16 @@
+# -*- mode: meson -*-
+
+install_data('org.freedesktop.hostname1.conf',
+ install_dir : dbuspolicydir)
+install_data('org.freedesktop.hostname1.service',
+ install_dir : dbussystemservicedir)
+
+if conf.get('ENABLE_HOSTNAMED', 0) == 1
+ custom_target(
+ 'org.freedesktop.hostname1.policy',
+ input : 'org.freedesktop.hostname1.policy.in',
+ output : 'org.freedesktop.hostname1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
diff --git a/src/import/meson.build b/src/import/meson.build
new file mode 100644
index 0000000000..0c9c4fb46c
--- /dev/null
+++ b/src/import/meson.build
@@ -0,0 +1,70 @@
+# -*- mode: meson -*-
+
+systemd_importd_sources = files('''
+ importd.c
+'''.split())
+
+systemd_pull_sources = files('''
+ pull.c
+ pull-raw.c
+ pull-raw.h
+ pull-tar.c
+ pull-tar.h
+ pull-job.c
+ pull-job.h
+ pull-common.c
+ pull-common.h
+ import-common.c
+ import-common.h
+ import-compress.c
+ import-compress.h
+ curl-util.c
+ curl-util.h
+ qcow2-util.c
+ qcow2-util.h
+'''.split())
+
+systemd_import_sources = files('''
+ import.c
+ import-raw.c
+ import-raw.h
+ import-tar.c
+ import-tar.h
+ import-common.c
+ import-common.h
+ import-compress.c
+ import-compress.h
+ qcow2-util.c
+ qcow2-util.h
+'''.split())
+
+systemd_export_sources = files('''
+ export.c
+ export-tar.c
+ export-tar.h
+ export-raw.c
+ export-raw.h
+ import-common.c
+ import-common.h
+ import-compress.c
+ import-compress.h
+'''.split())
+
+if conf.get('ENABLE_IMPORTD', 0) == 1
+ install_data('org.freedesktop.import1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.import1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.import1.policy',
+ input : 'org.freedesktop.import1.policy.in',
+ output : 'org.freedesktop.import1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+
+ install_data('import-pubring.gpg',
+ install_dir : rootlibexecdir)
+ # TODO: shouldn't this be in pkgdatadir?
+endif
diff --git a/src/journal-remote/meson.build b/src/journal-remote/meson.build
new file mode 100644
index 0000000000..8c89d258cf
--- /dev/null
+++ b/src/journal-remote/meson.build
@@ -0,0 +1,45 @@
+# -*- mode: meson -*-
+
+systemd_journal_upload_sources = files('''
+ journal-upload.h
+ journal-upload.c
+ journal-upload-journal.c
+'''.split())
+
+systemd_journal_remote_sources = files('''
+ journal-remote-parse.h
+ journal-remote-parse.c
+ journal-remote-write.h
+ journal-remote-write.c
+ journal-remote.h
+ journal-remote.c
+ microhttpd-util.h
+ microhttpd-util.c
+'''.split())
+
+systemd_journal_gatewayd_sources = files('''
+ journal-gatewayd.c
+ microhttpd-util.h
+ microhttpd-util.c
+'''.split())
+
+if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_LIBCURL', 0) == 1
+ journal_upload_conf = configure_file(
+ input : 'journal-upload.conf.in',
+ output : 'journal-upload.conf',
+ configuration : substs)
+ install_data(journal_upload_conf,
+ install_dir : pkgsysconfdir)
+endif
+
+if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
+ journal_remote_conf = configure_file(
+ input : 'journal-remote.conf.in',
+ output : 'journal-remote.conf',
+ configuration : substs)
+ install_data(journal_remote_conf,
+ install_dir : pkgsysconfdir)
+endif
+
+install_data('browse.html',
+ install_dir : pkgdatadir + '/gatewayd')
diff --git a/src/journal/audit_type-to-name.awk b/src/journal/audit_type-to-name.awk
new file mode 100644
index 0000000000..38a4b05321
--- /dev/null
+++ b/src/journal/audit_type-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "const char *audit_type_to_string(int type) {\n\tswitch(type) {" }
+{
+ printf " case AUDIT_%s: return \"%s\";\n", $1, $1
+}
+END{ print " default: return NULL;\n\t}\n}\n" }
diff --git a/src/journal/generate-audit_type-list.sh b/src/journal/generate-audit_type-list.sh
new file mode 100644
index 0000000000..a8befbfea2
--- /dev/null
+++ b/src/journal/generate-audit_type-list.sh
@@ -0,0 +1,10 @@
+#!/bin/sh -e
+
+includes=""
+for i in "$@"; do
+ includes="$includes -include $i"
+done
+cpp -dM $includes - </dev/null | \
+ grep -vE 'AUDIT_.*(FIRST|LAST)_' | \
+ sed -r -n 's/^#define\s+AUDIT_(\w+)\s+([0-9]{4})\s*$$/\1\t\2/p' | \
+ sort -k2
diff --git a/src/journal/meson.build b/src/journal/meson.build
new file mode 100644
index 0000000000..b05db85a43
--- /dev/null
+++ b/src/journal/meson.build
@@ -0,0 +1,104 @@
+# -*- mode: meson -*-
+
+libsystemd_journal_internal_sources = files('''
+ audit-type.c
+ audit-type.h
+ catalog.c
+ catalog.h
+ compress.c
+ compress.h
+ journal-def.h
+ journal-file.c
+ journal-file.h
+ journal-send.c
+ journal-vacuum.c
+ journal-vacuum.h
+ journal-verify.c
+ journal-verify.h
+ lookup3.c
+ lookup3.h
+ mmap-cache.c
+ mmap-cache.h
+ sd-journal.c
+'''.split())
+
+############################################################
+
+audit_type_includes = [config_h,
+ missing_h,
+ 'linux/audit.h']
+if conf.get('HAVE_AUDIT', 0) == 1
+ audit_type_includes += 'libaudit.h'
+endif
+
+generate_audit_type_list = find_program('generate-audit_type-list.sh')
+audit_type_list_txt = custom_target(
+ 'audit_type-list.txt',
+ output : 'audit_type-list.txt',
+ command : [generate_audit_type_list] + audit_type_includes,
+ capture : true)
+
+audit_type_to_name = custom_target(
+ 'audit_type-to-name.h',
+ input : ['audit_type-to-name.awk', audit_type_list_txt],
+ output : 'audit_type-to-name.h',
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+############################################################
+
+libsystemd_journal_internal = static_library(
+ 'systemd-journal-internal',
+ libsystemd_journal_internal_sources,
+ audit_type_to_name,
+ gcrypt_util_sources,
+ install : false,
+ include_directories : includes,
+ link_with : libbasic,
+ dependencies : [libaudit,
+ ])
+
+libjournal_core_sources = files('''
+ journald-kmsg.c
+ journald-kmsg.h
+ journald-syslog.c
+ journald-syslog.h
+ journald-stream.c
+ journald-stream.h
+ journald-server.c
+ journald-server.h
+ journald-console.c
+ journald-console.h
+ journald-wall.c
+ journald-wall.h
+ journald-native.c
+ journald-native.h
+ journald-audit.c
+ journald-audit.h
+ journald-rate-limit.c
+ journald-rate-limit.h
+ journal-internal.h
+'''.split())
+
+systemd_journald_sources = files('''
+ journald.c
+ journald-server.h
+'''.split())
+
+journald_gperf_c = custom_target(
+ 'journald-gperf.c',
+ input : 'journald-gperf.gperf',
+ output : 'journald-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_cat_sources = files('cat.c')
+
+journalctl_sources = files('journalctl.c')
+
+if conf.get('HAVE_QRENCODE', 0) == 1
+ journalctl_sources += files('journal-qrcode.c',
+ 'journal-qrcode.h')
+endif
+
+install_data('journald.conf',
+ install_dir : pkgsysconfdir)
diff --git a/src/kernel-install/meson.build b/src/kernel-install/meson.build
new file mode 100644
index 0000000000..517cd69c0e
--- /dev/null
+++ b/src/kernel-install/meson.build
@@ -0,0 +1,10 @@
+# -*- mode: meson -*-
+
+install_data('kernel-install',
+ install_mode : 'rwxr-xr-x',
+ install_dir : bindir)
+
+install_data('50-depmod.install',
+ '90-loaderentry.install',
+ install_mode : 'rwxr-xr-x',
+ install_dir : kernelinstalldir)
diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build
new file mode 100644
index 0000000000..496601dfa7
--- /dev/null
+++ b/src/libsystemd-network/meson.build
@@ -0,0 +1,48 @@
+# -*- mode: meson -*-
+
+sources = files('''
+ sd-dhcp-client.c
+ sd-dhcp-server.c
+ dhcp-network.c
+ dhcp-option.c
+ dhcp-packet.c
+ dhcp-internal.h
+ dhcp-server-internal.h
+ dhcp-protocol.h
+ dhcp-lease-internal.h
+ sd-dhcp-lease.c
+ sd-ipv4ll.c
+ sd-ipv4acd.c
+ arp-util.h
+ arp-util.c
+ network-internal.c
+ sd-ndisc.c
+ ndisc-internal.h
+ ndisc-router.h
+ ndisc-router.c
+ icmp6-util.h
+ icmp6-util.c
+ sd-dhcp6-client.c
+ dhcp6-internal.h
+ dhcp6-protocol.h
+ dhcp6-network.c
+ dhcp6-option.c
+ dhcp6-lease-internal.h
+ sd-dhcp6-lease.c
+ dhcp-identifier.h
+ dhcp-identifier.c
+ lldp-internal.h
+ lldp-network.h
+ lldp-network.c
+ lldp-neighbor.h
+ lldp-neighbor.c
+ sd-lldp.c
+'''.split())
+
+network_internal_h = files('network-internal.h')
+
+libsystemd_network = static_library(
+ 'systemd-network',
+ sources,
+ network_internal_h,
+ include_directories : includes)
diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build
new file mode 100644
index 0000000000..e46b57ae68
--- /dev/null
+++ b/src/libsystemd/meson.build
@@ -0,0 +1,98 @@
+# -*- mode: meson -*-
+
+sd_login_c = files('sd-login/sd-login.c')
+
+libsystemd_internal_sources = files('''
+ sd-bus/bus-bloom.c
+ sd-bus/bus-bloom.h
+ sd-bus/bus-common-errors.c
+ sd-bus/bus-common-errors.h
+ sd-bus/bus-container.c
+ sd-bus/bus-container.h
+ sd-bus/bus-control.c
+ sd-bus/bus-control.h
+ sd-bus/bus-convenience.c
+ sd-bus/bus-creds.c
+ sd-bus/bus-creds.h
+ sd-bus/bus-dump.c
+ sd-bus/bus-dump.h
+ sd-bus/bus-error.c
+ sd-bus/bus-error.h
+ sd-bus/bus-gvariant.c
+ sd-bus/bus-gvariant.h
+ sd-bus/bus-internal.c
+ sd-bus/bus-internal.h
+ sd-bus/bus-introspect.c
+ sd-bus/bus-introspect.h
+ sd-bus/bus-kernel.c
+ sd-bus/bus-kernel.h
+ sd-bus/bus-match.c
+ sd-bus/bus-match.h
+ sd-bus/bus-message.c
+ sd-bus/bus-message.h
+ sd-bus/bus-objects.c
+ sd-bus/bus-objects.h
+ sd-bus/bus-protocol.h
+ sd-bus/bus-signature.c
+ sd-bus/bus-signature.h
+ sd-bus/bus-slot.c
+ sd-bus/bus-slot.h
+ sd-bus/bus-socket.c
+ sd-bus/bus-socket.h
+ sd-bus/bus-track.c
+ sd-bus/bus-track.h
+ sd-bus/bus-type.c
+ sd-bus/bus-type.h
+ sd-bus/kdbus.h
+ sd-bus/sd-bus.c
+ sd-daemon/sd-daemon.c
+ sd-device/device-enumerator-private.h
+ sd-device/device-enumerator.c
+ sd-device/device-internal.h
+ sd-device/device-private.c
+ sd-device/device-private.h
+ sd-device/device-util.h
+ sd-device/sd-device.c
+ sd-event/sd-event.c
+ sd-hwdb/hwdb-internal.h
+ sd-hwdb/hwdb-util.h
+ sd-hwdb/sd-hwdb.c
+ sd-id128/id128-util.c
+ sd-id128/id128-util.h
+ sd-id128/sd-id128.c
+ sd-netlink/local-addresses.c
+ sd-netlink/local-addresses.h
+ sd-netlink/netlink-internal.h
+ sd-netlink/netlink-message.c
+ sd-netlink/netlink-socket.c
+ sd-netlink/netlink-types.c
+ sd-netlink/netlink-types.h
+ sd-netlink/netlink-util.c
+ sd-netlink/netlink-util.h
+ sd-netlink/rtnl-message.c
+ sd-netlink/sd-netlink.c
+ sd-network/network-util.c
+ sd-network/network-util.h
+ sd-network/sd-network.c
+ sd-path/sd-path.c
+ sd-resolve/sd-resolve.c
+ sd-utf8/sd-utf8.c
+'''.split()) + sd_login_c
+
+libsystemd_internal = static_library(
+ 'systemd',
+ libsystemd_internal_sources,
+ install : false,
+ include_directories : includes,
+ link_with : libbasic,
+ dependencies : [threads,
+ librt])
+
+libsystemd_sym = meson.current_source_dir() + '/libsystemd.sym'
+
+libsystemd_pc = configure_file(
+ input : 'libsystemd.pc.in',
+ output : 'libsystemd.pc',
+ configuration : substs)
+install_data(libsystemd_pc,
+ install_dir : pkgconfiglibdir)
diff --git a/src/libudev/meson.build b/src/libudev/meson.build
new file mode 100644
index 0000000000..5730522ce0
--- /dev/null
+++ b/src/libudev/meson.build
@@ -0,0 +1,47 @@
+# -*- mode: meson -*-
+
+libudev_sources = '''
+ libudev-private.h
+ libudev-device-internal.h
+ libudev.c
+ libudev-list.c
+ libudev-util.c
+ libudev-device.c
+ libudev-device-private.c
+ libudev-enumerate.c
+ libudev-monitor.c
+ libudev-queue.c
+ libudev-hwdb.c
+'''.split()
+
+############################################################
+
+libudev_sym = meson.current_source_dir() + '/libudev.sym'
+
+libudev = shared_library(
+ 'udev',
+ libudev_sources,
+ version : '1.6.6',
+ include_directories : includes,
+ link_args : ['-shared',
+ '-Wl,--version-script=' + libudev_sym],
+ link_with : [libbasic,
+ libsystemd],
+ install : true,
+ install_dir : rootlibdir)
+
+libudev_internal = static_library(
+ 'udev',
+ libudev_sources,
+ include_directories : includes,
+ link_with : [libbasic,
+ libsystemd])
+
+install_headers('libudev.h')
+
+libudev_pc = configure_file(
+ input : 'libudev.pc.in',
+ output : 'libudev.pc',
+ configuration : substs)
+install_data(libudev_pc,
+ install_dir : pkgconfiglibdir)
diff --git a/src/locale/meson.build b/src/locale/meson.build
new file mode 100644
index 0000000000..0f3c5b2094
--- /dev/null
+++ b/src/locale/meson.build
@@ -0,0 +1,28 @@
+# -*- mode: meson -*-
+
+systemd_localed_sources = files('''
+ localed.c
+ keymap-util.c
+ keymap-util.h
+'''.split())
+
+localectl_sources = files('localectl.c')
+
+if conf.get('ENABLE_LOCALED', 0) == 1
+ install_data('org.freedesktop.locale1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.locale1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.locale1.policy',
+ input : 'org.freedesktop.locale1.policy.in',
+ output : 'org.freedesktop.locale1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
+
+install_data('kbd-model-map',
+ 'language-fallback-map',
+ install_dir : pkgdatadir)
diff --git a/src/login/meson.build b/src/login/meson.build
new file mode 100644
index 0000000000..5c957063eb
--- /dev/null
+++ b/src/login/meson.build
@@ -0,0 +1,106 @@
+# -*- mode: meson -*-
+
+systemd_logind_sources = files('''
+ logind.c
+ logind.h
+'''.split())
+
+logind_gperf_c = custom_target(
+ 'logind_gperf.c',
+ input : 'logind-gperf.gperf',
+ output : 'logind-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_logind_sources += [logind_gperf_c]
+
+
+liblogind_core_sources = files('''
+ logind-core.c
+ logind-device.c
+ logind-device.h
+ logind-button.c
+ logind-button.h
+ logind-action.c
+ logind-action.h
+ logind-seat.c
+ logind-seat.h
+ logind-session.c
+ logind-session.h
+ logind-session-device.c
+ logind-session-device.h
+ logind-user.c
+ logind-user.h
+ logind-inhibit.c
+ logind-inhibit.h
+ logind-dbus.c
+ logind-session-dbus.c
+ logind-seat-dbus.c
+ logind-user-dbus.c
+ logind-utmp.c
+ logind-acl.h
+'''.split())
+
+logind_acl_c = files('logind-acl.c')
+if conf.get('HAVE_ACL', 0) == 1
+ liblogind_core_sources += logind_acl_c
+endif
+
+liblogind_core = static_library(
+ 'logind-core',
+ liblogind_core_sources,
+ include_directories : includes,
+ dependencies : [libacl])
+
+loginctl_sources = files('''
+ loginctl.c
+ sysfs-show.h
+ sysfs-show.c
+'''.split())
+
+if conf.get('ENABLE_LOGIND', 0) == 1
+ logind_conf = configure_file(
+ input : 'logind.conf.in',
+ output : 'logind.conf',
+ configuration : substs)
+ install_data(logind_conf,
+ install_dir : pkgsysconfdir)
+
+ pam_systemd_sym = meson.current_source_dir() + '/pam_systemd.sym'
+ pam_systemd_c = files('pam_systemd.c')
+
+ install_data('org.freedesktop.login1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.login1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.login1.policy',
+ input : 'org.freedesktop.login1.policy.in',
+ output : 'org.freedesktop.login1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+
+ install_data('70-power-switch.rules',
+ '70-uaccess.rules',
+ install_dir : udevrulesdir)
+
+ foreach file : ['71-seat.rules',
+ '73-seat-late.rules']
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ install_data(gen,
+ install_dir : udevrulesdir)
+ endforeach
+
+ custom_target(
+ 'systemd-user',
+ input : 'systemd-user.m4',
+ output: 'systemd-user',
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true,
+ install : pamconfdir != 'no',
+ install_dir : pamconfdir)
+endif
diff --git a/src/machine/meson.build b/src/machine/meson.build
new file mode 100644
index 0000000000..8e2ca64665
--- /dev/null
+++ b/src/machine/meson.build
@@ -0,0 +1,39 @@
+# -*- mode: meson -*-
+
+systemd_machined_sources = files('''
+ machined.c
+ machined.h
+'''.split())
+
+libmachine_core_sources = files('''
+ machine.c
+ machine.h
+ machined-dbus.c
+ machine-dbus.c
+ machine-dbus.h
+ image-dbus.c
+ image-dbus.h
+ operation.c
+ operation.h
+'''.split())
+
+libmachine_core = static_library(
+ 'machine-core',
+ libmachine_core_sources,
+ include_directories : includes,
+ dependencies : [threads])
+
+if conf.get('ENABLE_MACHINED', 0) == 1
+ install_data('org.freedesktop.machine1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.machine1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.machine1.policy',
+ input : 'org.freedesktop.machine1.policy.in',
+ output : 'org.freedesktop.machine1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
diff --git a/src/network/meson.build b/src/network/meson.build
new file mode 100644
index 0000000000..8af6cfde0c
--- /dev/null
+++ b/src/network/meson.build
@@ -0,0 +1,111 @@
+# -*- mode: meson -*-
+
+sources = files('''
+ netdev/bond.c
+ netdev/bond.h
+ netdev/bridge.c
+ netdev/bridge.h
+ netdev/dummy.c
+ netdev/dummy.h
+ netdev/ipvlan.c
+ netdev/ipvlan.h
+ netdev/macvlan.c
+ netdev/macvlan.h
+ netdev/netdev.c
+ netdev/netdev.h
+ netdev/tunnel.c
+ netdev/tunnel.h
+ netdev/tuntap.c
+ netdev/tuntap.h
+ netdev/vcan.c
+ netdev/vcan.h
+ netdev/veth.c
+ netdev/veth.h
+ netdev/vlan.c
+ netdev/vlan.h
+ netdev/vrf.c
+ netdev/vrf.h
+ netdev/vxlan.c
+ netdev/vxlan.h
+ networkd-address-pool.c
+ networkd-address-pool.h
+ networkd-address.c
+ networkd-address.h
+ networkd-brvlan.c
+ networkd-brvlan.h
+ networkd-conf.c
+ networkd-conf.h
+ networkd-dhcp4.c
+ networkd-dhcp6.c
+ networkd-fdb.c
+ networkd-fdb.h
+ networkd-ipv4ll.c
+ networkd-ipv6-proxy-ndp.c
+ networkd-ipv6-proxy-ndp.h
+ networkd-link-bus.c
+ networkd-link.c
+ networkd-link.h
+ networkd-lldp-tx.c
+ networkd-lldp-tx.h
+ networkd-manager-bus.c
+ networkd-manager.c
+ networkd-manager.h
+ networkd-ndisc.c
+ networkd-ndisc.h
+ networkd-network-bus.c
+ networkd-network.c
+ networkd-network.h
+ networkd-route.c
+ networkd-route.h
+ networkd-util.c
+ networkd-util.h
+'''.split())
+
+systemd_networkd_sources = files('networkd.c')
+
+systemd_networkd_wait_online_sources = files('''
+ wait-online/link.c
+ wait-online/link.h
+ wait-online/manager.c
+ wait-online/manager.h
+ wait-online/wait-online.c
+'''.split()) + network_internal_h
+
+networkctl_sources = files('networkctl.c')
+
+if conf.get('ENABLE_NETWORKD', 0) == 1
+ networkd_gperf_c = custom_target(
+ 'networkd-gperf.c',
+ input : 'networkd-gperf.gperf',
+ output : 'networkd-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+ networkd_network_gperf_c = custom_target(
+ 'networkd-network-gperf.c',
+ input : 'networkd-network-gperf.gperf',
+ output : 'networkd-network-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+ netdev_gperf_c = custom_target(
+ 'netdev-gperf.c',
+ input : 'netdev/netdev-gperf.gperf',
+ output : 'netdev-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+ libnetworkd_core = static_library(
+ 'networkd-core',
+ sources,
+ network_internal_h,
+ networkd_gperf_c,
+ networkd_network_gperf_c,
+ netdev_gperf_c,
+ include_directories : includes,
+ link_with : [libshared])
+
+ install_data('org.freedesktop.network1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.network1.service',
+ install_dir : dbussystemservicedir)
+ install_data('systemd-networkd.rules',
+ install_dir : polkitrulesdir)
+endif
diff --git a/src/nspawn/meson.build b/src/nspawn/meson.build
new file mode 100644
index 0000000000..7f91eaf2d7
--- /dev/null
+++ b/src/nspawn/meson.build
@@ -0,0 +1,33 @@
+# -*- mode: meson -*-
+
+systemd_nspawn_sources = files('''
+ nspawn.c
+ nspawn-settings.c
+ nspawn-settings.h
+ nspawn-mount.c
+ nspawn-mount.h
+ nspawn-network.c
+ nspawn-network.h
+ nspawn-expose-ports.c
+ nspawn-expose-ports.h
+ nspawn-cgroup.c
+ nspawn-cgroup.h
+ nspawn-seccomp.c
+ nspawn-seccomp.h
+ nspawn-register.c
+ nspawn-register.h
+ nspawn-setuid.c
+ nspawn-setuid.h
+ nspawn-stub-pid1.c
+ nspawn-stub-pid1.h
+ nspawn-patch-uid.c
+ nspawn-patch-uid.h
+'''.split())
+
+nspawn_gperf_c = custom_target(
+ 'nspawn-gperf.c',
+ input : 'nspawn-gperf.gperf',
+ output : 'nspawn-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_nspawn_sources += [nspawn_gperf_c]
diff --git a/src/resolve/dns_type-to-name.awk b/src/resolve/dns_type-to-name.awk
new file mode 100644
index 0000000000..64d675b0a9
--- /dev/null
+++ b/src/resolve/dns_type-to-name.awk
@@ -0,0 +1,7 @@
+BEGIN{ print "const char *dns_type_to_string(int type) {\n\tswitch(type) {" }
+{
+ printf " case DNS_TYPE_%s: return ", $1;
+ sub(/_/, "-");
+ printf "\"%s\";\n", $1
+}
+END{ print " default: return NULL;\n\t}\n}\n" }
diff --git a/src/resolve/generate-dns_type-gperf.py b/src/resolve/generate-dns_type-gperf.py
new file mode 100644
index 0000000000..fb36c850af
--- /dev/null
+++ b/src/resolve/generate-dns_type-gperf.py
@@ -0,0 +1,18 @@
+#!/usr/bin/python3
+
+"""Generate %-from-name.gperf from %-list.txt
+"""
+
+import sys
+
+name, prefix, input = sys.argv[1:]
+
+print("""\
+struct {}_name {{ const char* name; int id; }};
+%null-strings
+%%""".format(name))
+
+for line in open(input):
+ line = line.rstrip()
+ s = line.replace('_', '-')
+ print("{}, {}{}".format(s, prefix, line))
diff --git a/src/resolve/generate-dns_type-list.sed b/src/resolve/generate-dns_type-list.sed
new file mode 100644
index 0000000000..b7bc30f1f2
--- /dev/null
+++ b/src/resolve/generate-dns_type-list.sed
@@ -0,0 +1 @@
+s/.* DNS_TYPE_(\w+).*/\1/p
diff --git a/src/resolve/meson.build b/src/resolve/meson.build
new file mode 100644
index 0000000000..b2250180f0
--- /dev/null
+++ b/src/resolve/meson.build
@@ -0,0 +1,145 @@
+# -*- mode: meson -*-
+
+basic_dns_sources = files('''
+ resolved-dns-dnssec.c
+ resolved-dns-dnssec.h
+ resolved-dns-packet.c
+ resolved-dns-packet.h
+ resolved-dns-rr.c
+ resolved-dns-rr.h
+ resolved-dns-answer.c
+ resolved-dns-answer.h
+ resolved-dns-question.c
+ resolved-dns-question.h
+ dns-type.c
+'''.split())
+
+dns_type_h = files('dns-type.h')[0]
+
+systemd_resolved_only_sources = files('''
+ resolved.c
+ resolved-manager.c
+ resolved-manager.h
+ resolved-conf.c
+ resolved-conf.h
+ resolved-resolv-conf.c
+ resolved-resolv-conf.h
+ resolved-bus.c
+ resolved-bus.h
+ resolved-link.h
+ resolved-link.c
+ resolved-link-bus.c
+ resolved-link-bus.h
+ resolved-llmnr.h
+ resolved-llmnr.c
+ resolved-mdns.h
+ resolved-mdns.c
+ resolved-def.h
+ resolved-dns-query.h
+ resolved-dns-query.c
+ resolved-dns-synthesize.h
+ resolved-dns-synthesize.c
+ resolved-dns-transaction.h
+ resolved-dns-transaction.c
+ resolved-dns-scope.h
+ resolved-dns-scope.c
+ resolved-dns-server.h
+ resolved-dns-server.c
+ resolved-dns-search-domain.h
+ resolved-dns-search-domain.c
+ resolved-dns-cache.h
+ resolved-dns-cache.c
+ resolved-dns-zone.h
+ resolved-dns-zone.c
+ resolved-dns-stream.h
+ resolved-dns-stream.c
+ resolved-dns-trust-anchor.h
+ resolved-dns-trust-anchor.c
+ resolved-dns-stub.h
+ resolved-dns-stub.c
+ resolved-etc-hosts.h
+ resolved-etc-hosts.c
+'''.split())
+
+systemd_resolve_only_sources = files('resolve-tool.c')
+
+############################################################
+
+dns_type_list_txt = custom_target(
+ 'dns_type-list.txt',
+ input : ['generate-dns_type-list.sed', dns_type_h],
+ output : 'dns_type-list.txt',
+ command : [sed, '-n', '-r', '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+generate_dns_type_gperf = find_program('generate-dns_type-gperf.py')
+
+dns_type_headers = [dns_type_h]
+foreach item : [['dns_type', dns_type_list_txt, 'dns_type', 'DNS_TYPE_']]
+
+ fname = '@0@-from-name.gperf'.format(item[0])
+ gperf_file = custom_target(
+ fname,
+ input : item[1],
+ output : fname,
+ command : [generate_dns_type_gperf, item[2], item[3], '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-from-name.h'.format(item[0])
+ target1 = custom_target(
+ fname,
+ input : gperf_file,
+ output : fname,
+ command : [gperf,
+ '-L', 'ANSI-C', '-t', '--ignore-case',
+ '-N', 'lookup_@0@'.format(item[2]),
+ '-H', 'hash_@0@_name'.format(item[2]),
+ '-p', '-C',
+ '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-to-name.h'.format(item[0])
+ awkscript = '@0@-to-name.awk'.format(item[0])
+ target2 = custom_target(
+ fname,
+ input : [awkscript, item[1]],
+ output : fname,
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+ dns_type_headers += [target1, target2]
+endforeach
+
+resolved_gperf_c = custom_target(
+ 'resolved_gperf.c',
+ input : 'resolved-gperf.gperf',
+ output : 'resolved-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_resolved_sources = (
+ basic_dns_sources +
+ [resolved_gperf_c] +
+ systemd_resolved_only_sources +
+ dns_type_headers)
+
+systemd_resolve_sources = (
+ basic_dns_sources +
+ systemd_resolve_only_sources +
+ dns_type_headers)
+
+if conf.get('ENABLE_RESOLVED', 0) == 1
+ install_data('org.freedesktop.resolve1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.resolve1.service',
+ install_dir : dbussystemservicedir)
+
+ resolved_conf = configure_file(
+ input : 'resolved.conf.in',
+ output : 'resolved.conf',
+ configuration : substs)
+ install_data(resolved_conf,
+ install_dir : pkgsysconfdir)
+endif
+
+install_data('resolv.conf',
+ install_dir : rootlibexecdir)
diff --git a/src/shared/meson.build b/src/shared/meson.build
new file mode 100644
index 0000000000..f0bc8043e1
--- /dev/null
+++ b/src/shared/meson.build
@@ -0,0 +1,154 @@
+# -*- mode: meson -*-
+
+shared_sources = '''
+ acl-util.h
+ acpi-fpdt.c
+ acpi-fpdt.h
+ apparmor-util.c
+ apparmor-util.h
+ ask-password-api.c
+ ask-password-api.h
+ base-filesystem.c
+ base-filesystem.h
+ boot-timestamps.c
+ boot-timestamps.h
+ bus-unit-util.c
+ bus-unit-util.h
+ bus-util.c
+ bus-util.h
+ cgroup-show.c
+ cgroup-show.h
+ clean-ipc.c
+ clean-ipc.h
+ condition.c
+ condition.h
+ conf-parser.c
+ conf-parser.h
+ dev-setup.c
+ dev-setup.h
+ dissect-image.c
+ dissect-image.h
+ dns-domain.c
+ dns-domain.h
+ dropin.c
+ dropin.h
+ efivars.c
+ efivars.h
+ fdset.c
+ fdset.h
+ fstab-util.c
+ fstab-util.h
+ gcrypt-util.c
+ gcrypt-util.h
+ generator.c
+ generator.h
+ gpt.h
+ ima-util.c
+ ima-util.h
+ import-util.c
+ import-util.h
+ initreq.h
+ install.c
+ install.h
+ install-printf.c
+ install-printf.h
+ journal-util.c
+ journal-util.h
+ logs-show.c
+ logs-show.h
+ loop-util.c
+ loop-util.h
+ machine-image.c
+ machine-image.h
+ machine-pool.c
+ machine-pool.h
+ nsflags.c
+ nsflags.h
+ output-mode.c
+ output-mode.h
+ pager.c
+ pager.h
+ path-lookup.c
+ path-lookup.h
+ ptyfwd.c
+ ptyfwd.h
+ resolve-util.c
+ resolve-util.h
+ seccomp-util.h
+ sleep-config.c
+ sleep-config.h
+ spawn-ask-password-agent.c
+ spawn-ask-password-agent.h
+ spawn-polkit-agent.c
+ spawn-polkit-agent.h
+ specifier.c
+ specifier.h
+ switch-root.c
+ switch-root.h
+ sysctl-util.c
+ sysctl-util.h
+ tests.c
+ tests.h
+ test-tables.h
+ udev-util.h
+ uid-range.c
+ uid-range.h
+ utmp-wtmp.h
+ vlan-util.c
+ vlan-util.h
+ volatile-util.c
+ volatile-util.h
+ watchdog.c
+ watchdog.h
+'''.split()
+
+if conf.get('HAVE_ACL', 0) == 1
+ shared_sources += ['acl-util.c']
+endif
+
+if conf.get('HAVE_UTMP', 0) == 1
+ shared_sources += ['utmp-wtmp.c']
+endif
+
+if conf.get('HAVE_SECCOMP', 0) == 1
+ shared_sources += ['seccomp-util.c']
+endif
+
+libshared_name = 'systemd-shared-@0@'.format(meson.project_version())
+
+libshared = shared_library(
+ libshared_name,
+ shared_sources,
+ basic_sources,
+ include_directories : includes,
+ link_args : ['-shared'],
+ c_args : ['-fvisibility=default'],
+ link_with : [libsystemd_journal_internal,
+ libsystemd,
+ libudev,
+ ],
+ dependencies : [threads,
+ librt,
+ libcap,
+ libacl,
+ libcryptsetup,
+ libiptc,
+ libseccomp,
+ libselinux,
+ libidn,
+ libxz,
+ liblz4,
+ ],
+ install : true,
+ install_dir : rootlibexecdir)
+
+if conf.get('HAVE_LIBIPTC', 0) == 1
+ libfirewall = static_library(
+ 'firewall',
+ 'firewall-util.h',
+ 'firewall-util.c',
+ include_directories : includes,
+ dependencies : [libiptc])
+else
+ libfirewall = []
+endif
diff --git a/src/systemd/meson.build b/src/systemd/meson.build
new file mode 100644
index 0000000000..91a35b13fe
--- /dev/null
+++ b/src/systemd/meson.build
@@ -0,0 +1,33 @@
+# -*- mode: meson -*-
+
+headers = '''
+ sd-bus.h
+ sd-bus-protocol.h
+ sd-bus-vtable.h
+ sd-daemon.h
+ sd-event.h
+ sd-id128.h
+ sd-journal.h
+ sd-login.h
+ sd-messages.h
+ _sd-common.h
+'''.split()
+
+# sd-device.h
+# sd-hwdb.h
+# sd-dhcp6-client.h
+# sd-dhcp6-lease.h
+# sd-dhcp-client.h
+# sd-dhcp-lease.h
+# sd-dhcp-server.h
+# sd-ipv4acd.h
+# sd-ipv4ll.h
+# sd-lldp.h
+# sd-ndisc.h
+# sd-netlink.h
+# sd-network.h
+# sd-path.h
+# sd-resolve.h
+# sd-utf8.h
+
+install_headers(headers, subdir : 'systemd')
diff --git a/src/timedate/meson.build b/src/timedate/meson.build
new file mode 100644
index 0000000000..f9c19f1d67
--- /dev/null
+++ b/src/timedate/meson.build
@@ -0,0 +1,16 @@
+# -*- mode: meson -*-
+
+if conf.get('ENABLE_TIMEDATED', 0) == 1
+ install_data('org.freedesktop.timedate1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.timedate1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.timedate1.policy',
+ input : 'org.freedesktop.timedate1.policy.in',
+ output : 'org.freedesktop.timedate1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
diff --git a/src/timesync/meson.build b/src/timesync/meson.build
new file mode 100644
index 0000000000..0d0381305f
--- /dev/null
+++ b/src/timesync/meson.build
@@ -0,0 +1,28 @@
+# -*- mode: meson -*-
+
+systemd_timesyncd_sources = files('''
+ timesyncd.c
+ timesyncd-manager.c
+ timesyncd-manager.h
+ timesyncd-conf.c
+ timesyncd-conf.h
+ timesyncd-server.c
+ timesyncd-server.h
+'''.split())
+
+timesyncd_gperf_c = custom_target(
+ 'timesyncd-gperf.c',
+ input : 'timesyncd-gperf.gperf',
+ output : 'timesyncd-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_timesyncd_sources += [timesyncd_gperf_c]
+
+if conf.get('ENABLE_TIMESYNCD', 0) == 1
+ timesyncd_conf = configure_file(
+ input : 'timesyncd.conf.in',
+ output : 'timesyncd.conf',
+ configuration : substs)
+ install_data(timesyncd_conf,
+ install_dir : pkgsysconfdir)
+endif
diff --git a/src/udev/generate-keyboard-keys-list.sh b/src/udev/generate-keyboard-keys-list.sh
new file mode 100644
index 0000000000..cd6ef9c93b
--- /dev/null
+++ b/src/udev/generate-keyboard-keys-list.sh
@@ -0,0 +1,4 @@
+#!/bin/sh -e
+
+cpp -dM -include linux/input.h - </dev/null | \
+ awk '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9K]/ { if ($2 != "KEY_MAX") { print $2 } }'
diff --git a/src/udev/meson.build b/src/udev/meson.build
new file mode 100644
index 0000000000..4965ee3534
--- /dev/null
+++ b/src/udev/meson.build
@@ -0,0 +1,164 @@
+# -*- mode: meson -*-
+
+udevadm_sources = files('''
+ udevadm.c
+ udevadm-info.c
+ udevadm-control.c
+ udevadm-monitor.c
+ udevadm-hwdb.c
+ udevadm-settle.c
+ udevadm-trigger.c
+ udevadm-test.c
+ udevadm-test-builtin.c
+ udevadm-util.c
+ udevadm-util.h
+'''.split())
+
+systemd_udevd_sources = files('udevd.c')
+
+libudev_core_sources = '''
+ udev.h
+ udev-event.c
+ udev-watch.c
+ udev-node.c
+ udev-rules.c
+ udev-ctrl.c
+ udev-builtin.c
+ udev-builtin-btrfs.c
+ udev-builtin-hwdb.c
+ udev-builtin-input_id.c
+ udev-builtin-keyboard.c
+ udev-builtin-net_id.c
+ udev-builtin-net_setup_link.c
+ udev-builtin-path_id.c
+ udev-builtin-usb_id.c
+ net/link-config.c
+ net/link-config.h
+ net/ethtool-util.c
+ net/ethtool-util.h
+'''.split()
+
+if conf.get('HAVE_KMOD', 0) == 1
+ libudev_core_sources += ['udev-builtin-kmod.c']
+endif
+
+if conf.get('HAVE_BLKID', 0) == 1
+ libudev_core_sources += ['udev-builtin-blkid.c']
+endif
+
+if conf.get('HAVE_ACL', 0) == 1
+ libudev_core_sources += ['udev-builtin-uaccess.c',
+ logind_acl_c,
+ sd_login_c]
+endif
+
+############################################################
+
+generate_keyboard_keys_list = find_program('generate-keyboard-keys-list.sh')
+keyboard_keys_list_txt = custom_target(
+ 'keyboard-keys-list.txt',
+ output : 'keyboard-keys-list.txt',
+ command : [generate_keyboard_keys_list],
+ capture : true)
+
+fname = 'keyboard-keys-from-name.gperf'
+gperf_file = custom_target(
+ fname,
+ input : keyboard_keys_list_txt,
+ output : fname,
+ command : [generate_gperfs, 'key', '', '@INPUT@'],
+ capture : true)
+
+fname = 'keyboard-keys-from-name.h'
+keyboard_keys_from_name_h = custom_target(
+ fname,
+ input : gperf_file,
+ output : fname,
+ command : [gperf,
+ '-L', 'ANSI-C', '-t', '--ignore-case',
+ '-N', 'keyboard_lookup_key',
+ '-H', 'hash_key_name',
+ '-p', '-C',
+ '@INPUT@'],
+ capture : true)
+
+############################################################
+
+link_config_gperf_c = custom_target(
+ 'link-config-gperf.c',
+ input : 'net/link-config-gperf.gperf',
+ output : 'link-config-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+############################################################
+
+libudev_core = static_library(
+ 'udev-core',
+ libudev_core_sources,
+ link_config_gperf_c,
+ keyboard_keys_from_name_h,
+ include_directories : [includes, include_directories('net')],
+ link_with : [libshared])
+
+executable('ata_id',
+ 'ata_id/ata_id.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('cdrom_id',
+ 'cdrom_id/cdrom_id.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('collect',
+ 'collect/collect.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('scsi_id',
+ 'scsi_id/scsi_id.c',
+ 'scsi_id/scsi_id.h',
+ 'scsi_id/scsi_serial.c',
+ 'scsi_id/scsi.h',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('v4l_id',
+ 'v4l_id/v4l_id.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('mtd_probe',
+ 'mtd_probe/mtd_probe.c',
+ 'mtd_probe/mtd_probe.h',
+ 'mtd_probe/probe_smartmedia.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+install_data('udev.conf',
+ install_dir : sysconfdir + '/udev')
+
+udev_pc = configure_file(
+ input : 'udev.pc.in',
+ output : 'udev.pc',
+ configuration : substs)
+install_data(udev_pc,
+ install_dir : pkgconfigdatadir)
diff --git a/src/vconsole/meson.build b/src/vconsole/meson.build
new file mode 100644
index 0000000000..f2aa6daf88
--- /dev/null
+++ b/src/vconsole/meson.build
@@ -0,0 +1,10 @@
+# -*- mode: meson -*-
+
+if conf.get('ENABLE_VCONSOLE', 0) == 1
+ vconsole_rules = configure_file(
+ input : '90-vconsole.rules.in',
+ output : '90-vconsole.rules',
+ configuration : substs)
+ install_data(vconsole_rules,
+ install_dir : udevrulesdir)
+endif
diff --git a/sysctl.d/meson.build b/sysctl.d/meson.build
new file mode 100644
index 0000000000..a8cf868a9b
--- /dev/null
+++ b/sysctl.d/meson.build
@@ -0,0 +1,20 @@
+# -*- mode: meson -*-
+
+install_data(
+ '50-default.conf',
+ install_dir : sysctldir)
+
+in_files = []
+
+if conf.get('ENABLE_COREDUMP', 0) == 1
+ in_files += ['50-coredump.conf']
+endif
+
+foreach file : in_files
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ install_data(gen,
+ install_dir : sysctldir)
+endforeach
diff --git a/sysusers.d/meson.build b/sysusers.d/meson.build
new file mode 100644
index 0000000000..92b4128f8b
--- /dev/null
+++ b/sysusers.d/meson.build
@@ -0,0 +1,33 @@
+# -*- mode: meson -*-
+
+in_files = ['basic.conf']
+
+enable_sysusers = conf.get('ENABLE_SYSUSERS', 0) == 1
+
+foreach file : in_files
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ if enable_sysusers
+ install_data(gen,
+ install_dir : sysusersdir)
+ endif
+endforeach
+
+m4_files = ['systemd.conf']
+
+if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
+ m4_files += ['systemd-remote.conf']
+endif
+
+foreach file : m4_files
+ custom_target(
+ 'sysusers.d/' + file,
+ input : file + '.m4',
+ output: file,
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true,
+ install : enable_sysusers,
+ install_dir : sysusersdir)
+endforeach
diff --git a/tmpfiles.d/meson.build b/tmpfiles.d/meson.build
new file mode 100644
index 0000000000..cba5e1781d
--- /dev/null
+++ b/tmpfiles.d/meson.build
@@ -0,0 +1,39 @@
+# -*- mode: meson -*-
+
+enable_tmpfiles = conf.get('ENABLE_TMPFILES', 0) == 1
+
+tmpfiles = [['home.conf', ''],
+ ['journal-nocow.conf', ''],
+ ['systemd-nologin.conf', ''],
+ ['systemd-nspawn.conf', ''],
+ ['systemd-remote.conf', 'ENABLE_REMOTE'],
+ ['tmp.conf', ''],
+ ['var.conf', ''],
+ ['x11.conf', ''],
+ ['legacy.conf', 'HAVE_SYSV_COMPAT'],
+ ]
+
+foreach pair : tmpfiles
+ if not enable_tmpfiles
+ # do nothing
+ elif pair[1] == '' or conf.get(pair[1], 0) == 1
+ install_data(pair[0], install_dir : tmpfilesdir)
+ else
+ message('Not installing tmpfiles.d/@0@ because @1@ is @2@'.format(
+ pair[0], pair[1], conf.get(pair[1], 0)))
+ endif
+endforeach
+
+m4_files = ['etc.conf',
+ 'systemd.conf']
+
+foreach file : m4_files
+ custom_target(
+ 'tmpfiles.d/' + file,
+ input : file + '.m4',
+ output: file,
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true,
+ install : enable_tmpfiles,
+ install_dir : tmpfilesdir)
+endforeach
diff --git a/units/meson.build b/units/meson.build
new file mode 100644
index 0000000000..2013973c36
--- /dev/null
+++ b/units/meson.build
@@ -0,0 +1,221 @@
+# -*- mode: meson -*-
+
+units = [
+ ['basic.target', ''],
+ ['bluetooth.target', ''],
+ ['cryptsetup-pre.target', 'HAVE_LIBCRYPTSETUP'],
+ ['cryptsetup.target', 'HAVE_LIBCRYPTSETUP'],
+ ['dev-hugepages.mount', ''],
+ ['dev-mqueue.mount', ''],
+ ['emergency.target', ''],
+ ['exit.target', ''],
+ ['final.target', ''],
+ ['getty.target', ''],
+ ['graphical.target', ''],
+ ['halt.target', ''],
+ ['hibernate.target', 'ENABLE_HIBERNATE'],
+ ['hybrid-sleep.target', 'ENABLE_HIBERNATE'],
+ ['initrd-fs.target', ''],
+ ['initrd-root-device.target', ''],
+ ['initrd-root-fs.target', ''],
+ ['initrd-switch-root.target', ''],
+ ['initrd.target', ''],
+ ['kexec.target', ''],
+ ['ldconfig.service', 'ENABLE_LDCONFIG'],
+ ['local-fs-pre.target', ''],
+ ['local-fs.target', ''],
+ ['machine.slice', 'ENABLE_MACHINED'],
+ ['machines.target', 'ENABLE_MACHINED'],
+ ['multi-user.target', ''],
+ ['network-online.target', ''],
+ ['network-pre.target', ''],
+ ['network.target', ''],
+ ['nss-lookup.target', ''],
+ ['nss-user-lookup.target', ''],
+ ['paths.target', ''],
+ ['poweroff.target', ''],
+ ['printer.target', ''],
+ ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT'],
+ ['proc-sys-fs-binfmt_misc.mount', 'ENABLE_BINFMT'],
+ ['reboot.target', ''],
+ ['remote-fs-pre.target', ''],
+ ['remote-fs.target', ''],
+ ['rescue.target', ''],
+ ['rpcbind.target', ''],
+ ['shutdown.target', ''],
+ ['sigpwr.target', ''],
+ ['sleep.target', ''],
+ ['slices.target', ''],
+ ['smartcard.target', ''],
+ ['sockets.target', ''],
+ ['sound.target', ''],
+ ['suspend.target', ''],
+ ['swap.target', ''],
+ ['sys-fs-fuse-connections.mount', ''],
+ ['sys-kernel-config.mount', ''],
+ ['sys-kernel-debug.mount', ''],
+ ['sysinit.target', ''],
+ ['syslog.socket', ''],
+ ['system-update.target', ''],
+ ['system.slice', ''],
+ ['systemd-ask-password-console.path', ''],
+ ['systemd-ask-password-wall.path', ''],
+ ['systemd-coredump.socket', 'ENABLE_COREDUMP'],
+ ['systemd-initctl.socket', ''],
+ ['systemd-journal-gatewayd.socket', ''],
+ ['systemd-journal-remote.socket', ''],
+ ['systemd-journald-audit.socket', ''],
+ ['systemd-journald-dev-log.socket', ''],
+ ['systemd-journald.socket', ''],
+ ['systemd-networkd.socket', ''],
+ ['systemd-rfkill.socket', 'ENABLE_RFKILL'],
+ ['systemd-tmpfiles-clean.timer', ''],
+ ['systemd-udevd-control.socket', ''],
+ ['systemd-udevd-kernel.socket', ''],
+ ['time-sync.target', ''],
+ ['timers.target', ''],
+ ['umount.target', ''],
+ ['user.slice', ''],
+ ['var-lib-machines.mount', ''],
+ ]
+
+foreach pair : units
+ if pair[1] == '' or conf.get(pair[1], 0) == 1
+ install_data(pair[0],
+ install_dir : systemunitdir)
+ endif
+endforeach
+
+in_units = [
+ ['debug-shell.service', ''],
+ ['emergency.service', ''],
+ ['halt-local.service', 'HAVE_SYSV_COMPAT'],
+ ['initrd-cleanup.service', ''],
+ ['initrd-parse-etc.service', ''],
+ ['initrd-switch-root.service', ''],
+ ['initrd-udevadm-cleanup-db.service', ''],
+ ['kmod-static-nodes.service', 'HAVE_KMOD ENABLE_TMPFILES'],
+ ['quotaon.service', 'ENABLE_QUOTACHECK'],
+ ['rc-local.service', 'HAVE_SYSV_COMPAT'],
+ ['rescue.service', ''],
+ ['system-update-cleanup.service', ''],
+ ['systemd-ask-password-console.service', ''],
+ ['systemd-ask-password-wall.service', ''],
+ ['systemd-backlight@.service', 'ENABLE_BACKLIGHT'],
+ ['systemd-binfmt.service', 'ENABLE_BINFMT'],
+ ['systemd-coredump@.service', 'ENABLE_COREDUMP'],
+ ['systemd-exit.service', ''],
+ ['systemd-firstboot.service', 'ENABLE_FIRSTBOOT'],
+ ['systemd-fsck-root.service', ''],
+ ['systemd-fsck@.service', ''],
+ ['systemd-halt.service', ''],
+ ['systemd-hibernate-resume@.service', 'ENABLE_HIBERNATE'],
+ ['systemd-hibernate.service', 'ENABLE_HIBERNATE'],
+ ['systemd-hybrid-sleep.service', 'ENABLE_HIBERNATE'],
+ ['systemd-hostnamed.service', 'ENABLE_HOSTNAMED'],
+ ['systemd-hwdb-update.service', 'ENABLE_HWDB'],
+ ['systemd-importd.service', 'ENABLE_IMPORTD'],
+ ['systemd-initctl.service', ''],
+ ['systemd-journal-catalog-update.service', ''],
+ ['systemd-journal-flush.service', ''],
+ ['systemd-journal-gatewayd.service', 'ENABLE_REMOTE HAVE_MICROHTTPD'],
+ ['systemd-journal-remote.service', 'ENABLE_REMOTE HAVE_MICROHTTPD'],
+ ['systemd-journal-upload.service', 'ENABLE_REMOTE HAVE_LIBCURL'],
+ ['systemd-journald.service', ''],
+ ['systemd-kexec.service', ''],
+ ['systemd-localed.service', 'ENABLE_LOCALED'],
+ ['systemd-logind.service', 'ENABLE_LOGIND'],
+ ['systemd-machine-id-commit.service', ''],
+ ['systemd-machined.service', 'ENABLE_MACHINED'],
+ ['systemd-modules-load.service', 'HAVE_KMOD'],
+ ['systemd-networkd-wait-online.service', 'ENABLE_NETWORKD'],
+ ['systemd-nspawn@.service', ''],
+ ['systemd-poweroff.service', ''],
+ ['systemd-quotacheck.service', 'ENABLE_QUOTACHECK'],
+ ['systemd-random-seed.service', 'ENABLE_RANDOMSEED'],
+ ['systemd-reboot.service', ''],
+ ['systemd-remount-fs.service', ''],
+ ['systemd-rfkill.service', 'ENABLE_RFKILL'],
+ ['systemd-suspend.service', ''],
+ ['systemd-sysctl.service', ''],
+ ['systemd-sysusers.service', 'ENABLE_SYSUSERS'],
+ ['systemd-timedated.service', 'ENABLE_TIMEDATED'],
+ ['systemd-timesyncd.service', 'ENABLE_TIMESYNCD'],
+ ['systemd-tmpfiles-clean.service', 'ENABLE_TMPFILES'],
+ ['systemd-tmpfiles-setup-dev.service', 'ENABLE_TMPFILES'],
+ ['systemd-tmpfiles-setup.service', 'ENABLE_TMPFILES'],
+ ['systemd-udev-settle.service', ''],
+ ['systemd-udev-trigger.service', ''],
+ ['systemd-udevd.service', ''],
+ ['systemd-update-done.service', ''],
+ ['systemd-update-utmp-runlevel.service', 'HAVE_UTMP HAVE_SYSV_COMPAT'],
+ ['systemd-update-utmp.service', 'HAVE_UTMP'],
+ ['systemd-user-sessions.service', ''],
+ ['systemd-vconsole-setup.service', 'ENABLE_VCONSOLE'],
+ ['systemd-volatile-root.service', ''],
+ ]
+
+foreach pair : in_units
+ file = pair[0]
+ conds = pair[1].split(' ')
+ install = ((conds.get(0, '') == '' or conf.get(conds[0], 0) == 1) and
+ (conds.get(1, '') == '' or conf.get(conds[1], 0) == 1))
+
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ if install
+ install_data(gen,
+ install_dir : systemunitdir)
+ endif
+endforeach
+
+m4_units = [
+ ['getty@.service', ''],
+ ['serial-getty@.service', ''],
+ ['tmp.mount', ''],
+ ]
+
+foreach pair : m4_units
+ file = pair[0]
+ install = pair[1] == '' or conf.get(pair[1], 0) == 1
+
+ custom_target(
+ file,
+ input : file + '.m4',
+ output: file,
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true,
+ install : install,
+ install_dir : systemunitdir)
+endforeach
+
+m4_in_units = [
+ ['console-getty.service', ''],
+ ['container-getty@.service', ''],
+ ['systemd-networkd.service', 'ENABLE_NETWORKD'],
+ ['systemd-resolved.service', 'ENABLE_RESOLVED'],
+ ['user@.service', ''],
+ ]
+
+foreach pair : m4_in_units
+ file = pair[0]
+ install = pair[1] == '' or conf.get(pair[1], 0) == 1
+
+ gen = configure_file(
+ input : file + '.m4.in',
+ output : file + '.m4',
+ configuration : substs)
+
+ custom_target(
+ file,
+ input : gen,
+ output: file,
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true,
+ install : install,
+ install_dir : systemunitdir)
+endforeach
+
+subdir('user')
diff --git a/units/user/meson.build b/units/user/meson.build
new file mode 100644
index 0000000000..f9c73a359a
--- /dev/null
+++ b/units/user/meson.build
@@ -0,0 +1,36 @@
+# -*- mode: meson -*-
+
+units = [
+ 'basic.target',
+ 'bluetooth.target',
+ 'default.target',
+ 'exit.target',
+ 'graphical-session-pre.target',
+ 'graphical-session.target',
+ 'paths.target',
+ 'printer.target',
+ 'shutdown.target',
+ 'smartcard.target',
+ 'sockets.target',
+ 'sound.target',
+ 'timers.target',
+ ]
+
+foreach file : units
+ install_data(file,
+ install_dir : userunitdir)
+endforeach
+
+
+in_units = [
+ 'systemd-exit.service',
+ ]
+
+foreach file : in_units
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ install_data(gen,
+ install_dir : userunitdir)
+endforeach