]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
meson: build systemd using meson
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 5 Apr 2017 03:03:47 +0000 (23:03 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 24 Apr 2017 01:47:26 +0000 (21:47 -0400)
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

58 files changed:
catalog/meson.build [new file with mode: 0644]
docs/sysvinit/meson.build [new file with mode: 0644]
docs/var-log/meson.build [new file with mode: 0644]
hwdb/meson.build [new file with mode: 0644]
man/meson.build [new file with mode: 0644]
man/rules/meson.build [new file with mode: 0644]
meson.build [new file with mode: 0644]
meson_options.txt [new file with mode: 0644]
network/meson.build [new file with mode: 0644]
po/meson.build [new file with mode: 0644]
rules/meson.build [new file with mode: 0644]
shell-completion/bash/meson.build [new file with mode: 0644]
shell-completion/zsh/meson.build [new file with mode: 0644]
src/analyze/meson.build [new file with mode: 0644]
src/basic/af-to-name.awk [new file with mode: 0644]
src/basic/arphrd-to-name.awk [new file with mode: 0644]
src/basic/cap-to-name.awk [new file with mode: 0644]
src/basic/errno-to-name.awk [new file with mode: 0644]
src/basic/generate-af-list.sh [new file with mode: 0644]
src/basic/generate-arphrd-list.sh [new file with mode: 0644]
src/basic/generate-cap-list.sh [new file with mode: 0644]
src/basic/generate-errno-list.sh [new file with mode: 0644]
src/basic/generate-gperfs.py [new file with mode: 0644]
src/basic/meson.build [new file with mode: 0644]
src/core/load-fragment-gperf-nulstr.awk [new file with mode: 0644]
src/core/meson.build [new file with mode: 0644]
src/coredump/meson.build [new file with mode: 0644]
src/hostname/meson.build [new file with mode: 0644]
src/import/meson.build [new file with mode: 0644]
src/journal-remote/meson.build [new file with mode: 0644]
src/journal/audit_type-to-name.awk [new file with mode: 0644]
src/journal/generate-audit_type-list.sh [new file with mode: 0644]
src/journal/meson.build [new file with mode: 0644]
src/kernel-install/meson.build [new file with mode: 0644]
src/libsystemd-network/meson.build [new file with mode: 0644]
src/libsystemd/meson.build [new file with mode: 0644]
src/libudev/meson.build [new file with mode: 0644]
src/locale/meson.build [new file with mode: 0644]
src/login/meson.build [new file with mode: 0644]
src/machine/meson.build [new file with mode: 0644]
src/network/meson.build [new file with mode: 0644]
src/nspawn/meson.build [new file with mode: 0644]
src/resolve/dns_type-to-name.awk [new file with mode: 0644]
src/resolve/generate-dns_type-gperf.py [new file with mode: 0644]
src/resolve/generate-dns_type-list.sed [new file with mode: 0644]
src/resolve/meson.build [new file with mode: 0644]
src/shared/meson.build [new file with mode: 0644]
src/systemd/meson.build [new file with mode: 0644]
src/timedate/meson.build [new file with mode: 0644]
src/timesync/meson.build [new file with mode: 0644]
src/udev/generate-keyboard-keys-list.sh [new file with mode: 0644]
src/udev/meson.build [new file with mode: 0644]
src/vconsole/meson.build [new file with mode: 0644]
sysctl.d/meson.build [new file with mode: 0644]
sysusers.d/meson.build [new file with mode: 0644]
tmpfiles.d/meson.build [new file with mode: 0644]
units/meson.build [new file with mode: 0644]
units/user/meson.build [new file with mode: 0644]

diff --git a/catalog/meson.build b/catalog/meson.build
new file mode 100644 (file)
index 0000000..b50792e
--- /dev/null
@@ -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 (file)
index 0000000..a519f74
--- /dev/null
@@ -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 (file)
index 0000000..c3d0cdb
--- /dev/null
@@ -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 (file)
index 0000000..4c13a2e
--- /dev/null
@@ -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 (file)
index 0000000..0f0bbd6
--- /dev/null
@@ -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 (file)
index 0000000..00a1413
--- /dev/null
@@ -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 (file)
index 0000000..95445f9
--- /dev/null
@@ -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 (file)
index 0000000..8a08852
--- /dev/null
@@ -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 (file)
index 0000000..b578159
--- /dev/null
@@ -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 (file)
index 0000000..b95c2a3
--- /dev/null
@@ -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 (file)
index 0000000..43142ca
--- /dev/null
@@ -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 (file)
index 0000000..bbd705c
--- /dev/null
@@ -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 (file)
index 0000000..56bf7ae
--- /dev/null
@@ -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 (file)
index 0000000..1ff6b18
--- /dev/null
@@ -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 (file)
index 0000000..e208304
--- /dev/null
@@ -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 (file)
index 0000000..57e4680
--- /dev/null
@@ -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 (file)
index 0000000..d252291
--- /dev/null
@@ -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 (file)
index 0000000..c48c8f9
--- /dev/null
@@ -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 (file)
index 0000000..e4f9f68
--- /dev/null
@@ -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 (file)
index 0000000..e4cd8ab
--- /dev/null
@@ -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 (file)
index 0000000..de4b446
--- /dev/null
@@ -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 (file)
index 0000000..291b118
--- /dev/null
@@ -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 (file)
index 0000000..2e7d893
--- /dev/null
@@ -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 (file)
index 0000000..23caa1c
--- /dev/null
@@ -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 (file)
index 0000000..bc66ff2
--- /dev/null
@@ -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 (file)
index 0000000..3d2f9f3
--- /dev/null
@@ -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 (file)
index 0000000..c7aa8be
--- /dev/null
@@ -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 (file)
index 0000000..43a035c
--- /dev/null
@@ -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 (file)
index 0000000..0c9c4fb
--- /dev/null
@@ -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 (file)
index 0000000..8c89d25
--- /dev/null
@@ -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 (file)
index 0000000..38a4b05
--- /dev/null
@@ -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 (file)
index 0000000..a8befbf
--- /dev/null
@@ -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 (file)
index 0000000..b05db85
--- /dev/null
@@ -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 (file)
index 0000000..517cd69
--- /dev/null
@@ -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 (file)
index 0000000..496601d
--- /dev/null
@@ -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 (file)
index 0000000..e46b57a
--- /dev/null
@@ -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 (file)
index 0000000..5730522
--- /dev/null
@@ -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 (file)
index 0000000..0f3c5b2
--- /dev/null
@@ -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 (file)
index 0000000..5c95706
--- /dev/null
@@ -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 (file)
index 0000000..8e2ca64
--- /dev/null
@@ -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 (file)
index 0000000..8af6cfd
--- /dev/null
@@ -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 (file)
index 0000000..7f91eaf
--- /dev/null
@@ -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 (file)
index 0000000..64d675b
--- /dev/null
@@ -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 (file)
index 0000000..fb36c85
--- /dev/null
@@ -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 (file)
index 0000000..b7bc30f
--- /dev/null
@@ -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 (file)
index 0000000..b225018
--- /dev/null
@@ -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 (file)
index 0000000..f0bc804
--- /dev/null
@@ -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 (file)
index 0000000..91a35b1
--- /dev/null
@@ -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 (file)
index 0000000..f9c19f1
--- /dev/null
@@ -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 (file)
index 0000000..0d03813
--- /dev/null
@@ -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 (file)
index 0000000..cd6ef9c
--- /dev/null
@@ -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 (file)
index 0000000..4965ee3
--- /dev/null
@@ -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 (file)
index 0000000..f2aa6da
--- /dev/null
@@ -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 (file)
index 0000000..a8cf868
--- /dev/null
@@ -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 (file)
index 0000000..92b4128
--- /dev/null
@@ -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 (file)
index 0000000..cba5e17
--- /dev/null
@@ -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 (file)
index 0000000..2013973
--- /dev/null
@@ -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 (file)
index 0000000..f9c73a3
--- /dev/null
@@ -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