summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/analyze/meson.build7
-rw-r--r--src/basic/af-to-name.awk5
-rw-r--r--src/basic/arphrd-to-name.awk5
-rw-r--r--src/basic/cap-to-name.awk5
-rw-r--r--src/basic/errno-to-name.awk4
-rw-r--r--src/basic/generate-af-list.sh5
-rw-r--r--src/basic/generate-arphrd-list.sh5
-rw-r--r--src/basic/generate-cap-list.sh5
-rw-r--r--src/basic/generate-errno-list.sh4
-rw-r--r--src/basic/generate-gperfs.py16
-rw-r--r--src/basic/meson.build283
-rw-r--r--src/core/load-fragment-gperf-nulstr.awk12
-rw-r--r--src/core/meson.build222
-rw-r--r--src/coredump/meson.build17
-rw-r--r--src/hostname/meson.build16
-rw-r--r--src/import/meson.build70
-rw-r--r--src/journal-remote/meson.build45
-rw-r--r--src/journal/audit_type-to-name.awk5
-rw-r--r--src/journal/generate-audit_type-list.sh10
-rw-r--r--src/journal/meson.build104
-rw-r--r--src/kernel-install/meson.build10
-rw-r--r--src/libsystemd-network/meson.build48
-rw-r--r--src/libsystemd/meson.build98
-rw-r--r--src/libudev/meson.build47
-rw-r--r--src/locale/meson.build28
-rw-r--r--src/login/meson.build106
-rw-r--r--src/machine/meson.build39
-rw-r--r--src/network/meson.build111
-rw-r--r--src/nspawn/meson.build33
-rw-r--r--src/resolve/dns_type-to-name.awk7
-rw-r--r--src/resolve/generate-dns_type-gperf.py18
-rw-r--r--src/resolve/generate-dns_type-list.sed1
-rw-r--r--src/resolve/meson.build145
-rw-r--r--src/shared/meson.build154
-rw-r--r--src/systemd/meson.build33
-rw-r--r--src/timedate/meson.build16
-rw-r--r--src/timesync/meson.build28
-rw-r--r--src/udev/generate-keyboard-keys-list.sh4
-rw-r--r--src/udev/meson.build164
-rw-r--r--src/vconsole/meson.build10
40 files changed, 1945 insertions, 0 deletions
diff --git a/src/analyze/meson.build b/src/analyze/meson.build
new file mode 100644
index 0000000000..1ff6b182d1
--- /dev/null
+++ b/src/analyze/meson.build
@@ -0,0 +1,7 @@
+# -*- mode: meson -*-
+
+systemd_analyze_sources = files('''
+ analyze.c
+ analyze-verify.c
+ analyze-verify.h
+'''.split())
diff --git a/src/basic/af-to-name.awk b/src/basic/af-to-name.awk
new file mode 100644
index 0000000000..e20830487f
--- /dev/null
+++ b/src/basic/af-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "static const char* const af_names[] = { "}
+!/AF_FILE/ && !/AF_ROUTE/ && !/AF_LOCAL/ {
+ printf " [%s] = \"%s\",\n", $1, $1
+}
+END{print "};"}
diff --git a/src/basic/arphrd-to-name.awk b/src/basic/arphrd-to-name.awk
new file mode 100644
index 0000000000..57e4680f17
--- /dev/null
+++ b/src/basic/arphrd-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "static const char* const arphrd_names[] = { "}
+!/CISCO/ {
+ printf " [ARPHRD_%s] = \"%s\",\n", $1, $1
+}
+END{print "};"}
diff --git a/src/basic/cap-to-name.awk b/src/basic/cap-to-name.awk
new file mode 100644
index 0000000000..d252291851
--- /dev/null
+++ b/src/basic/cap-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "static const char* const capability_names[] = { "}
+{
+ printf " [%s] = \"%s\",\n", $1, tolower($1)
+}
+END{print "};"}
diff --git a/src/basic/errno-to-name.awk b/src/basic/errno-to-name.awk
new file mode 100644
index 0000000000..c48c8f93ab
--- /dev/null
+++ b/src/basic/errno-to-name.awk
@@ -0,0 +1,4 @@
+BEGIN{ print "static const char* const errno_names[] = { " }
+!/EDEADLOCK/ && !/EWOULDBLOCK/ && !/ENOTSUP/ {
+ printf " [%s] = \"%s\",\n", $1, $1 }
+END{ print "};" }
diff --git a/src/basic/generate-af-list.sh b/src/basic/generate-af-list.sh
new file mode 100644
index 0000000000..e4f9f68312
--- /dev/null
+++ b/src/basic/generate-af-list.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+cpp -dM -include sys/socket.h - </dev/null | \
+ grep -Ev 'AF_UNSPEC|AF_MAX' | \
+ awk '/^#define[ \t]+AF_[^ \t]+[ \t]+PF_[^ \t]/ { print $2; }'
diff --git a/src/basic/generate-arphrd-list.sh b/src/basic/generate-arphrd-list.sh
new file mode 100644
index 0000000000..e4cd8ab6d2
--- /dev/null
+++ b/src/basic/generate-arphrd-list.sh
@@ -0,0 +1,5 @@
+#!/bin/sh -e
+
+cpp -dM -include net/if_arp.h - </dev/null | \
+ awk '/^#define[ \t]+ARPHRD_[^ \t]+[ \t]+[^ \t]/ { print $2; }' | \
+ sed -e 's/ARPHRD_//'
diff --git a/src/basic/generate-cap-list.sh b/src/basic/generate-cap-list.sh
new file mode 100644
index 0000000000..de4b44661e
--- /dev/null
+++ b/src/basic/generate-cap-list.sh
@@ -0,0 +1,5 @@
+#!/bin/sh -e
+
+cpp -dM -include linux/capability.h -include "$1" -include "$2" - </dev/null | \
+ awk '/^#define[ \t]+CAP_[A-Z_]+[ \t]+/ { print $2; }' | \
+ grep -v CAP_LAST_CAP
diff --git a/src/basic/generate-errno-list.sh b/src/basic/generate-errno-list.sh
new file mode 100644
index 0000000000..291b118f36
--- /dev/null
+++ b/src/basic/generate-errno-list.sh
@@ -0,0 +1,4 @@
+#!/bin/sh -e
+
+cpp -dM -include errno.h - </dev/null | \
+ awk '/^#define[ \t]+E[^ _]+[ \t]+/ { print $2; }'
diff --git a/src/basic/generate-gperfs.py b/src/basic/generate-gperfs.py
new file mode 100644
index 0000000000..2e7d8931dd
--- /dev/null
+++ b/src/basic/generate-gperfs.py
@@ -0,0 +1,16 @@
+#!/usr/bin/python3
+
+"""Generate %-from-name.gperf from %-list.txt
+"""
+
+import sys
+
+name, prefix, input = sys.argv[1:]
+
+print("""\
+struct {}_name {{ const char* name; int id; }};
+%null-strings
+%%""".format(name))
+
+for line in open(input):
+ print("{0}, {1}{0}".format(line.rstrip(), prefix))
diff --git a/src/basic/meson.build b/src/basic/meson.build
new file mode 100644
index 0000000000..23caa1c7a5
--- /dev/null
+++ b/src/basic/meson.build
@@ -0,0 +1,283 @@
+# -*- mode: meson -*-
+
+basic_sources_plain = files('''
+ af-list.c
+ af-list.h
+ alloc-util.c
+ alloc-util.h
+ architecture.c
+ architecture.h
+ arphrd-list.c
+ arphrd-list.h
+ async.c
+ async.h
+ audit-util.c
+ audit-util.h
+ barrier.c
+ barrier.h
+ bitmap.c
+ bitmap.h
+ blkid-util.h
+ btrfs-ctree.h
+ btrfs-util.c
+ btrfs-util.h
+ build.h
+ bus-label.c
+ bus-label.h
+ calendarspec.c
+ calendarspec.h
+ capability-util.c
+ capability-util.h
+ cap-list.c
+ cap-list.h
+ cgroup-util.c
+ cgroup-util.h
+ chattr-util.c
+ chattr-util.h
+ clock-util.c
+ clock-util.h
+ conf-files.c
+ conf-files.h
+ copy.c
+ copy.h
+ cpu-set-util.c
+ cpu-set-util.h
+ def.h
+ device-nodes.c
+ device-nodes.h
+ dirent-util.c
+ dirent-util.h
+ env-util.c
+ env-util.h
+ errno-list.c
+ errno-list.h
+ escape.c
+ escape.h
+ ether-addr-util.c
+ ether-addr-util.h
+ exec-util.c
+ exec-util.h
+ exit-status.c
+ exit-status.h
+ extract-word.c
+ extract-word.h
+ fd-util.c
+ fd-util.h
+ fileio.c
+ fileio.h
+ fileio-label.c
+ fileio-label.h
+ format-util.h
+ fs-util.c
+ fs-util.h
+ glob-util.c
+ glob-util.h
+ gunicode.c
+ gunicode.h
+ hash-funcs.c
+ hash-funcs.h
+ hashmap.c
+ hashmap.h
+ hexdecoct.c
+ hexdecoct.h
+ hostname-util.c
+ hostname-util.h
+ in-addr-util.c
+ in-addr-util.h
+ ioprio.h
+ io-util.c
+ io-util.h
+ journal-importer.c
+ journal-importer.h
+ khash.c
+ khash.h
+ label.c
+ label.h
+ list.h
+ locale-util.c
+ locale-util.h
+ lockfile-util.c
+ lockfile-util.h
+ log.c
+ log.h
+ login-util.c
+ login-util.h
+ macro.h
+ memfd-util.c
+ memfd-util.h
+ mempool.c
+ mempool.h
+ missing_syscall.h
+ mkdir.c
+ mkdir.h
+ mkdir-label.c
+ mount-util.c
+ mount-util.h
+ MurmurHash2.c
+ MurmurHash2.h
+ nss-util.h
+ ordered-set.c
+ ordered-set.h
+ parse-util.c
+ parse-util.h
+ path-util.c
+ path-util.h
+ prioq.c
+ prioq.h
+ proc-cmdline.c
+ proc-cmdline.h
+ process-util.c
+ process-util.h
+ random-util.c
+ random-util.h
+ ratelimit.c
+ ratelimit.h
+ raw-clone.h
+ refcnt.h
+ replace-var.c
+ replace-var.h
+ rlimit-util.c
+ rlimit-util.h
+ rm-rf.c
+ rm-rf.h
+ securebits.h
+ selinux-util.c
+ selinux-util.h
+ set.h
+ sigbus.c
+ sigbus.h
+ signal-util.c
+ signal-util.h
+ siphash24.c
+ siphash24.h
+ smack-util.c
+ smack-util.h
+ socket-label.c
+ socket-util.c
+ socket-util.h
+ sparse-endian.h
+ special.h
+ stat-util.c
+ stat-util.h
+ stdio-util.h
+ strbuf.c
+ strbuf.h
+ string-table.c
+ string-table.h
+ string-util.c
+ string-util.h
+ strv.c
+ strv.h
+ strxcpyx.c
+ strxcpyx.h
+ syslog-util.c
+ syslog-util.h
+ terminal-util.c
+ terminal-util.h
+ time-util.c
+ time-util.h
+ umask-util.h
+ unaligned.h
+ unit-name.c
+ unit-name.h
+ user-util.c
+ user-util.h
+ utf8.c
+ utf8.h
+ util.c
+ util.h
+ verbs.c
+ verbs.h
+ virt.c
+ virt.h
+ web-util.c
+ web-util.h
+ xattr-util.c
+ xattr-util.h
+ xml.c
+ xml.h
+'''.split())
+
+missing_h = files('missing.h')
+
+generate_gperfs = find_program('generate-gperfs.py')
+
+generate_af_list = find_program('generate-af-list.sh')
+af_list_txt = custom_target(
+ 'af-list.txt',
+ output : 'af-list.txt',
+ command : [generate_af_list],
+ capture : true)
+
+generate_arphrd_list = find_program('generate-arphrd-list.sh')
+arphrd_list_txt = custom_target(
+ 'arphrd-list.txt',
+ output : 'arphrd-list.txt',
+ command : [generate_arphrd_list],
+ capture : true)
+
+generate_cap_list = find_program('generate-cap-list.sh')
+cap_list_txt = custom_target(
+ 'cap-list.txt',
+ output : 'cap-list.txt',
+ command : [generate_cap_list, config_h, missing_h],
+ capture : true)
+
+generate_errno_list = find_program('generate-errno-list.sh')
+errno_list_txt = custom_target(
+ 'errno-list.txt',
+ output : 'errno-list.txt',
+ command : [generate_errno_list],
+ capture : true)
+
+generated_gperf_headers = []
+foreach item : [['af', af_list_txt, 'af', ''],
+ ['arphrd', arphrd_list_txt, 'arphrd', 'ARPHRD_'],
+ ['cap', cap_list_txt, 'capability', ''],
+ ['errno', errno_list_txt, 'errno', '']]
+
+ fname = '@0@-from-name.gperf'.format(item[0])
+ gperf_file = custom_target(
+ fname,
+ input : item[1],
+ output : fname,
+ command : [generate_gperfs, item[2], item[3], '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-from-name.h'.format(item[0])
+ target1 = custom_target(
+ fname,
+ input : gperf_file,
+ output : fname,
+ command : [gperf,
+ '-L', 'ANSI-C', '-t', '--ignore-case',
+ '-N', 'lookup_@0@'.format(item[2]),
+ '-H', 'hash_@0@_name'.format(item[2]),
+ '-p', '-C',
+ '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-to-name.h'.format(item[0])
+ awkscript = '@0@-to-name.awk'.format(item[0])
+ target2 = custom_target(
+ fname,
+ input : [awkscript, item[1]],
+ output : fname,
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+ generated_gperf_headers += [target1, target2]
+endforeach
+
+basic_sources = basic_sources_plain + [missing_h] + generated_gperf_headers
+
+libbasic = static_library(
+ 'basic',
+ basic_sources,
+ include_directories : includes,
+ dependencies : [threads,
+ libcap,
+ libblkid,
+ libselinux,
+ ],
+ install : false)
diff --git a/src/core/load-fragment-gperf-nulstr.awk b/src/core/load-fragment-gperf-nulstr.awk
new file mode 100644
index 0000000000..bc66ff221d
--- /dev/null
+++ b/src/core/load-fragment-gperf-nulstr.awk
@@ -0,0 +1,12 @@
+BEGIN{
+ keywords=0 ; FS="," ;
+ print "extern const char load_fragment_gperf_nulstr[];" ;
+ print "const char load_fragment_gperf_nulstr[] ="
+}
+keyword==1 {
+ print "\"" $$1 "\\0\""
+}
+/%%/ {
+ keyword=1
+}
+END { print ";" }
diff --git a/src/core/meson.build b/src/core/meson.build
new file mode 100644
index 0000000000..3d2f9f37a7
--- /dev/null
+++ b/src/core/meson.build
@@ -0,0 +1,222 @@
+# -*- mode: meson -*-
+
+libcore_la_sources = '''
+ unit.c
+ unit.h
+ unit-printf.c
+ unit-printf.h
+ job.c
+ job.h
+ manager.c
+ manager.h
+ transaction.c
+ transaction.h
+ load-fragment.c
+ load-fragment.h
+ service.c
+ service.h
+ socket.c
+ socket.h
+ busname.c
+ busname.h
+ bus-policy.c
+ bus-policy.h
+ target.c
+ target.h
+ device.c
+ device.h
+ mount.c
+ mount.h
+ automount.c
+ automount.h
+ swap.c
+ swap.h
+ timer.c
+ timer.h
+ path.c
+ path.h
+ slice.c
+ slice.h
+ scope.c
+ scope.h
+ load-dropin.c
+ load-dropin.h
+ execute.c
+ execute.h
+ dynamic-user.c
+ dynamic-user.h
+ kill.c
+ kill.h
+ dbus.c
+ dbus.h
+ dbus-manager.c
+ dbus-manager.h
+ dbus-unit.c
+ dbus-unit.h
+ dbus-job.c
+ dbus-job.h
+ dbus-service.c
+ dbus-service.h
+ dbus-socket.c
+ dbus-socket.h
+ dbus-busname.c
+ dbus-busname.h
+ dbus-target.c
+ dbus-target.h
+ dbus-device.c
+ dbus-device.h
+ dbus-mount.c
+ dbus-mount.h
+ dbus-automount.c
+ dbus-automount.h
+ dbus-swap.c
+ dbus-swap.h
+ dbus-timer.c
+ dbus-timer.h
+ dbus-path.c
+ dbus-path.h
+ dbus-slice.c
+ dbus-slice.h
+ dbus-scope.c
+ dbus-scope.h
+ dbus-execute.c
+ dbus-execute.h
+ dbus-kill.c
+ dbus-kill.h
+ dbus-cgroup.c
+ dbus-cgroup.h
+ cgroup.c
+ cgroup.h
+ selinux-access.c
+ selinux-access.h
+ selinux-setup.c
+ selinux-setup.h
+ smack-setup.c
+ smack-setup.h
+ ima-setup.c
+ ima-setup.h
+ locale-setup.h
+ locale-setup.c
+ hostname-setup.c
+ hostname-setup.h
+ machine-id-setup.c
+ machine-id-setup.h
+ mount-setup.c
+ mount-setup.h
+ kmod-setup.c
+ kmod-setup.h
+ loopback-setup.h
+ loopback-setup.c
+ namespace.c
+ namespace.h
+ killall.h
+ killall.c
+ audit-fd.c
+ audit-fd.h
+ show-status.c
+ show-status.h
+ emergency-action.c
+ emergency-action.h
+'''.split()
+
+load_fragment_gperf_gperf = custom_target(
+ 'load-fragment-gperf.gperf',
+ input : 'load-fragment-gperf.gperf.m4',
+ output: 'load-fragment-gperf.gperf',
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true)
+
+load_fragment_gperf_c = custom_target(
+ 'load-fragment-gperf.c',
+ input : load_fragment_gperf_gperf,
+ output : 'load-fragment-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+awkscript = 'load-fragment-gperf-nulstr.awk'
+load_fragment_gperf_nulstr_c = custom_target(
+ 'load-fragment-gperf-nulstr.c',
+ input : [awkscript, load_fragment_gperf_gperf],
+ output : 'load-fragment-gperf-nulstr.c',
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+libcore = static_library(
+ 'core',
+ libcore_la_sources,
+ load_fragment_gperf_c,
+ load_fragment_gperf_nulstr_c,
+ include_directories : includes,
+ link_with : [libshared],
+ dependencies : [threads,
+ libpam,
+ libaudit,
+ libkmod,
+ libapparmor,
+ libmount])
+
+systemd_sources = files('main.c')
+
+systemd_shutdown_sources = files('''
+ shutdown.c
+ umount.c
+ umount.h
+ mount-setup.c
+ mount-setup.h
+ killall.c
+ killall.h
+'''.split())
+
+in_files = [['macros.systemd', rpmmacrosdir],
+ ['triggers.systemd', ''],
+ ['systemd.pc', pkgconfigdatadir]]
+
+foreach item : in_files
+ file = item[0]
+ dir = item[1]
+
+ # If "no", disable generation completely.
+ # If "", generate, but do not install.
+ if dir != 'no'
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ if dir != ''
+ install_data(gen,
+ install_dir : dir)
+ endif
+ endif
+endforeach
+
+install_data('org.freedesktop.systemd1.conf',
+ install_dir : dbuspolicydir)
+install_data('org.freedesktop.systemd1.service',
+ install_dir : dbussystemservicedir)
+
+policy_in = configure_file(
+ input : 'org.freedesktop.systemd1.policy.in.in',
+ output : 'org.freedesktop.systemd1.policy.in',
+ configuration : substs)
+
+custom_target(
+ 'org.freedesktop.systemd1.policy',
+ input : policy_in,
+ output : 'org.freedesktop.systemd1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+
+# TODO: this might work with meson from git, see
+# https://github.com/mesonbuild/meson/issues/1441#issuecomment-283585493
+#
+# i18n.merge_file(
+# 'org.freedesktop.systemd1.policy',
+# po_dir : po_dir,
+# input : policy_in,
+# output : 'org.freedesktop.systemd1.policy',
+# install : true,
+# install_dir : polkitpolicydir)
+
+install_data('system.conf',
+ 'user.conf',
+ install_dir : pkgsysconfdir)
diff --git a/src/coredump/meson.build b/src/coredump/meson.build
new file mode 100644
index 0000000000..c7aa8be46c
--- /dev/null
+++ b/src/coredump/meson.build
@@ -0,0 +1,17 @@
+# -*- mode: meson -*-
+
+systemd_coredump_sources = files('''
+ coredump.c
+ coredump-vacuum.c
+ coredump-vacuum.h
+'''.split())
+
+if conf.get('HAVE_ELFUTILS', 0) == 1
+ systemd_coredump_sources += files(['stacktrace.c',
+ 'stacktrace.h'])
+endif
+
+coredumpctl_sources = files('coredumpctl.c')
+
+install_data('coredump.conf',
+ install_dir : pkgsysconfdir)
diff --git a/src/hostname/meson.build b/src/hostname/meson.build
new file mode 100644
index 0000000000..43a035c0bf
--- /dev/null
+++ b/src/hostname/meson.build
@@ -0,0 +1,16 @@
+# -*- mode: meson -*-
+
+install_data('org.freedesktop.hostname1.conf',
+ install_dir : dbuspolicydir)
+install_data('org.freedesktop.hostname1.service',
+ install_dir : dbussystemservicedir)
+
+if conf.get('ENABLE_HOSTNAMED', 0) == 1
+ custom_target(
+ 'org.freedesktop.hostname1.policy',
+ input : 'org.freedesktop.hostname1.policy.in',
+ output : 'org.freedesktop.hostname1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
diff --git a/src/import/meson.build b/src/import/meson.build
new file mode 100644
index 0000000000..0c9c4fb46c
--- /dev/null
+++ b/src/import/meson.build
@@ -0,0 +1,70 @@
+# -*- mode: meson -*-
+
+systemd_importd_sources = files('''
+ importd.c
+'''.split())
+
+systemd_pull_sources = files('''
+ pull.c
+ pull-raw.c
+ pull-raw.h
+ pull-tar.c
+ pull-tar.h
+ pull-job.c
+ pull-job.h
+ pull-common.c
+ pull-common.h
+ import-common.c
+ import-common.h
+ import-compress.c
+ import-compress.h
+ curl-util.c
+ curl-util.h
+ qcow2-util.c
+ qcow2-util.h
+'''.split())
+
+systemd_import_sources = files('''
+ import.c
+ import-raw.c
+ import-raw.h
+ import-tar.c
+ import-tar.h
+ import-common.c
+ import-common.h
+ import-compress.c
+ import-compress.h
+ qcow2-util.c
+ qcow2-util.h
+'''.split())
+
+systemd_export_sources = files('''
+ export.c
+ export-tar.c
+ export-tar.h
+ export-raw.c
+ export-raw.h
+ import-common.c
+ import-common.h
+ import-compress.c
+ import-compress.h
+'''.split())
+
+if conf.get('ENABLE_IMPORTD', 0) == 1
+ install_data('org.freedesktop.import1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.import1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.import1.policy',
+ input : 'org.freedesktop.import1.policy.in',
+ output : 'org.freedesktop.import1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+
+ install_data('import-pubring.gpg',
+ install_dir : rootlibexecdir)
+ # TODO: shouldn't this be in pkgdatadir?
+endif
diff --git a/src/journal-remote/meson.build b/src/journal-remote/meson.build
new file mode 100644
index 0000000000..8c89d258cf
--- /dev/null
+++ b/src/journal-remote/meson.build
@@ -0,0 +1,45 @@
+# -*- mode: meson -*-
+
+systemd_journal_upload_sources = files('''
+ journal-upload.h
+ journal-upload.c
+ journal-upload-journal.c
+'''.split())
+
+systemd_journal_remote_sources = files('''
+ journal-remote-parse.h
+ journal-remote-parse.c
+ journal-remote-write.h
+ journal-remote-write.c
+ journal-remote.h
+ journal-remote.c
+ microhttpd-util.h
+ microhttpd-util.c
+'''.split())
+
+systemd_journal_gatewayd_sources = files('''
+ journal-gatewayd.c
+ microhttpd-util.h
+ microhttpd-util.c
+'''.split())
+
+if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_LIBCURL', 0) == 1
+ journal_upload_conf = configure_file(
+ input : 'journal-upload.conf.in',
+ output : 'journal-upload.conf',
+ configuration : substs)
+ install_data(journal_upload_conf,
+ install_dir : pkgsysconfdir)
+endif
+
+if conf.get('ENABLE_REMOTE', 0) == 1 and conf.get('HAVE_MICROHTTPD', 0) == 1
+ journal_remote_conf = configure_file(
+ input : 'journal-remote.conf.in',
+ output : 'journal-remote.conf',
+ configuration : substs)
+ install_data(journal_remote_conf,
+ install_dir : pkgsysconfdir)
+endif
+
+install_data('browse.html',
+ install_dir : pkgdatadir + '/gatewayd')
diff --git a/src/journal/audit_type-to-name.awk b/src/journal/audit_type-to-name.awk
new file mode 100644
index 0000000000..38a4b05321
--- /dev/null
+++ b/src/journal/audit_type-to-name.awk
@@ -0,0 +1,5 @@
+BEGIN{ print "const char *audit_type_to_string(int type) {\n\tswitch(type) {" }
+{
+ printf " case AUDIT_%s: return \"%s\";\n", $1, $1
+}
+END{ print " default: return NULL;\n\t}\n}\n" }
diff --git a/src/journal/generate-audit_type-list.sh b/src/journal/generate-audit_type-list.sh
new file mode 100644
index 0000000000..a8befbfea2
--- /dev/null
+++ b/src/journal/generate-audit_type-list.sh
@@ -0,0 +1,10 @@
+#!/bin/sh -e
+
+includes=""
+for i in "$@"; do
+ includes="$includes -include $i"
+done
+cpp -dM $includes - </dev/null | \
+ grep -vE 'AUDIT_.*(FIRST|LAST)_' | \
+ sed -r -n 's/^#define\s+AUDIT_(\w+)\s+([0-9]{4})\s*$$/\1\t\2/p' | \
+ sort -k2
diff --git a/src/journal/meson.build b/src/journal/meson.build
new file mode 100644
index 0000000000..b05db85a43
--- /dev/null
+++ b/src/journal/meson.build
@@ -0,0 +1,104 @@
+# -*- mode: meson -*-
+
+libsystemd_journal_internal_sources = files('''
+ audit-type.c
+ audit-type.h
+ catalog.c
+ catalog.h
+ compress.c
+ compress.h
+ journal-def.h
+ journal-file.c
+ journal-file.h
+ journal-send.c
+ journal-vacuum.c
+ journal-vacuum.h
+ journal-verify.c
+ journal-verify.h
+ lookup3.c
+ lookup3.h
+ mmap-cache.c
+ mmap-cache.h
+ sd-journal.c
+'''.split())
+
+############################################################
+
+audit_type_includes = [config_h,
+ missing_h,
+ 'linux/audit.h']
+if conf.get('HAVE_AUDIT', 0) == 1
+ audit_type_includes += 'libaudit.h'
+endif
+
+generate_audit_type_list = find_program('generate-audit_type-list.sh')
+audit_type_list_txt = custom_target(
+ 'audit_type-list.txt',
+ output : 'audit_type-list.txt',
+ command : [generate_audit_type_list] + audit_type_includes,
+ capture : true)
+
+audit_type_to_name = custom_target(
+ 'audit_type-to-name.h',
+ input : ['audit_type-to-name.awk', audit_type_list_txt],
+ output : 'audit_type-to-name.h',
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+############################################################
+
+libsystemd_journal_internal = static_library(
+ 'systemd-journal-internal',
+ libsystemd_journal_internal_sources,
+ audit_type_to_name,
+ gcrypt_util_sources,
+ install : false,
+ include_directories : includes,
+ link_with : libbasic,
+ dependencies : [libaudit,
+ ])
+
+libjournal_core_sources = files('''
+ journald-kmsg.c
+ journald-kmsg.h
+ journald-syslog.c
+ journald-syslog.h
+ journald-stream.c
+ journald-stream.h
+ journald-server.c
+ journald-server.h
+ journald-console.c
+ journald-console.h
+ journald-wall.c
+ journald-wall.h
+ journald-native.c
+ journald-native.h
+ journald-audit.c
+ journald-audit.h
+ journald-rate-limit.c
+ journald-rate-limit.h
+ journal-internal.h
+'''.split())
+
+systemd_journald_sources = files('''
+ journald.c
+ journald-server.h
+'''.split())
+
+journald_gperf_c = custom_target(
+ 'journald-gperf.c',
+ input : 'journald-gperf.gperf',
+ output : 'journald-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_cat_sources = files('cat.c')
+
+journalctl_sources = files('journalctl.c')
+
+if conf.get('HAVE_QRENCODE', 0) == 1
+ journalctl_sources += files('journal-qrcode.c',
+ 'journal-qrcode.h')
+endif
+
+install_data('journald.conf',
+ install_dir : pkgsysconfdir)
diff --git a/src/kernel-install/meson.build b/src/kernel-install/meson.build
new file mode 100644
index 0000000000..517cd69c0e
--- /dev/null
+++ b/src/kernel-install/meson.build
@@ -0,0 +1,10 @@
+# -*- mode: meson -*-
+
+install_data('kernel-install',
+ install_mode : 'rwxr-xr-x',
+ install_dir : bindir)
+
+install_data('50-depmod.install',
+ '90-loaderentry.install',
+ install_mode : 'rwxr-xr-x',
+ install_dir : kernelinstalldir)
diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build
new file mode 100644
index 0000000000..496601dfa7
--- /dev/null
+++ b/src/libsystemd-network/meson.build
@@ -0,0 +1,48 @@
+# -*- mode: meson -*-
+
+sources = files('''
+ sd-dhcp-client.c
+ sd-dhcp-server.c
+ dhcp-network.c
+ dhcp-option.c
+ dhcp-packet.c
+ dhcp-internal.h
+ dhcp-server-internal.h
+ dhcp-protocol.h
+ dhcp-lease-internal.h
+ sd-dhcp-lease.c
+ sd-ipv4ll.c
+ sd-ipv4acd.c
+ arp-util.h
+ arp-util.c
+ network-internal.c
+ sd-ndisc.c
+ ndisc-internal.h
+ ndisc-router.h
+ ndisc-router.c
+ icmp6-util.h
+ icmp6-util.c
+ sd-dhcp6-client.c
+ dhcp6-internal.h
+ dhcp6-protocol.h
+ dhcp6-network.c
+ dhcp6-option.c
+ dhcp6-lease-internal.h
+ sd-dhcp6-lease.c
+ dhcp-identifier.h
+ dhcp-identifier.c
+ lldp-internal.h
+ lldp-network.h
+ lldp-network.c
+ lldp-neighbor.h
+ lldp-neighbor.c
+ sd-lldp.c
+'''.split())
+
+network_internal_h = files('network-internal.h')
+
+libsystemd_network = static_library(
+ 'systemd-network',
+ sources,
+ network_internal_h,
+ include_directories : includes)
diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build
new file mode 100644
index 0000000000..e46b57ae68
--- /dev/null
+++ b/src/libsystemd/meson.build
@@ -0,0 +1,98 @@
+# -*- mode: meson -*-
+
+sd_login_c = files('sd-login/sd-login.c')
+
+libsystemd_internal_sources = files('''
+ sd-bus/bus-bloom.c
+ sd-bus/bus-bloom.h
+ sd-bus/bus-common-errors.c
+ sd-bus/bus-common-errors.h
+ sd-bus/bus-container.c
+ sd-bus/bus-container.h
+ sd-bus/bus-control.c
+ sd-bus/bus-control.h
+ sd-bus/bus-convenience.c
+ sd-bus/bus-creds.c
+ sd-bus/bus-creds.h
+ sd-bus/bus-dump.c
+ sd-bus/bus-dump.h
+ sd-bus/bus-error.c
+ sd-bus/bus-error.h
+ sd-bus/bus-gvariant.c
+ sd-bus/bus-gvariant.h
+ sd-bus/bus-internal.c
+ sd-bus/bus-internal.h
+ sd-bus/bus-introspect.c
+ sd-bus/bus-introspect.h
+ sd-bus/bus-kernel.c
+ sd-bus/bus-kernel.h
+ sd-bus/bus-match.c
+ sd-bus/bus-match.h
+ sd-bus/bus-message.c
+ sd-bus/bus-message.h
+ sd-bus/bus-objects.c
+ sd-bus/bus-objects.h
+ sd-bus/bus-protocol.h
+ sd-bus/bus-signature.c
+ sd-bus/bus-signature.h
+ sd-bus/bus-slot.c
+ sd-bus/bus-slot.h
+ sd-bus/bus-socket.c
+ sd-bus/bus-socket.h
+ sd-bus/bus-track.c
+ sd-bus/bus-track.h
+ sd-bus/bus-type.c
+ sd-bus/bus-type.h
+ sd-bus/kdbus.h
+ sd-bus/sd-bus.c
+ sd-daemon/sd-daemon.c
+ sd-device/device-enumerator-private.h
+ sd-device/device-enumerator.c
+ sd-device/device-internal.h
+ sd-device/device-private.c
+ sd-device/device-private.h
+ sd-device/device-util.h
+ sd-device/sd-device.c
+ sd-event/sd-event.c
+ sd-hwdb/hwdb-internal.h
+ sd-hwdb/hwdb-util.h
+ sd-hwdb/sd-hwdb.c
+ sd-id128/id128-util.c
+ sd-id128/id128-util.h
+ sd-id128/sd-id128.c
+ sd-netlink/local-addresses.c
+ sd-netlink/local-addresses.h
+ sd-netlink/netlink-internal.h
+ sd-netlink/netlink-message.c
+ sd-netlink/netlink-socket.c
+ sd-netlink/netlink-types.c
+ sd-netlink/netlink-types.h
+ sd-netlink/netlink-util.c
+ sd-netlink/netlink-util.h
+ sd-netlink/rtnl-message.c
+ sd-netlink/sd-netlink.c
+ sd-network/network-util.c
+ sd-network/network-util.h
+ sd-network/sd-network.c
+ sd-path/sd-path.c
+ sd-resolve/sd-resolve.c
+ sd-utf8/sd-utf8.c
+'''.split()) + sd_login_c
+
+libsystemd_internal = static_library(
+ 'systemd',
+ libsystemd_internal_sources,
+ install : false,
+ include_directories : includes,
+ link_with : libbasic,
+ dependencies : [threads,
+ librt])
+
+libsystemd_sym = meson.current_source_dir() + '/libsystemd.sym'
+
+libsystemd_pc = configure_file(
+ input : 'libsystemd.pc.in',
+ output : 'libsystemd.pc',
+ configuration : substs)
+install_data(libsystemd_pc,
+ install_dir : pkgconfiglibdir)
diff --git a/src/libudev/meson.build b/src/libudev/meson.build
new file mode 100644
index 0000000000..5730522ce0
--- /dev/null
+++ b/src/libudev/meson.build
@@ -0,0 +1,47 @@
+# -*- mode: meson -*-
+
+libudev_sources = '''
+ libudev-private.h
+ libudev-device-internal.h
+ libudev.c
+ libudev-list.c
+ libudev-util.c
+ libudev-device.c
+ libudev-device-private.c
+ libudev-enumerate.c
+ libudev-monitor.c
+ libudev-queue.c
+ libudev-hwdb.c
+'''.split()
+
+############################################################
+
+libudev_sym = meson.current_source_dir() + '/libudev.sym'
+
+libudev = shared_library(
+ 'udev',
+ libudev_sources,
+ version : '1.6.6',
+ include_directories : includes,
+ link_args : ['-shared',
+ '-Wl,--version-script=' + libudev_sym],
+ link_with : [libbasic,
+ libsystemd],
+ install : true,
+ install_dir : rootlibdir)
+
+libudev_internal = static_library(
+ 'udev',
+ libudev_sources,
+ include_directories : includes,
+ link_with : [libbasic,
+ libsystemd])
+
+install_headers('libudev.h')
+
+libudev_pc = configure_file(
+ input : 'libudev.pc.in',
+ output : 'libudev.pc',
+ configuration : substs)
+install_data(libudev_pc,
+ install_dir : pkgconfiglibdir)
diff --git a/src/locale/meson.build b/src/locale/meson.build
new file mode 100644
index 0000000000..0f3c5b2094
--- /dev/null
+++ b/src/locale/meson.build
@@ -0,0 +1,28 @@
+# -*- mode: meson -*-
+
+systemd_localed_sources = files('''
+ localed.c
+ keymap-util.c
+ keymap-util.h
+'''.split())
+
+localectl_sources = files('localectl.c')
+
+if conf.get('ENABLE_LOCALED', 0) == 1
+ install_data('org.freedesktop.locale1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.locale1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.locale1.policy',
+ input : 'org.freedesktop.locale1.policy.in',
+ output : 'org.freedesktop.locale1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
+
+install_data('kbd-model-map',
+ 'language-fallback-map',
+ install_dir : pkgdatadir)
diff --git a/src/login/meson.build b/src/login/meson.build
new file mode 100644
index 0000000000..5c957063eb
--- /dev/null
+++ b/src/login/meson.build
@@ -0,0 +1,106 @@
+# -*- mode: meson -*-
+
+systemd_logind_sources = files('''
+ logind.c
+ logind.h
+'''.split())
+
+logind_gperf_c = custom_target(
+ 'logind_gperf.c',
+ input : 'logind-gperf.gperf',
+ output : 'logind-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_logind_sources += [logind_gperf_c]
+
+
+liblogind_core_sources = files('''
+ logind-core.c
+ logind-device.c
+ logind-device.h
+ logind-button.c
+ logind-button.h
+ logind-action.c
+ logind-action.h
+ logind-seat.c
+ logind-seat.h
+ logind-session.c
+ logind-session.h
+ logind-session-device.c
+ logind-session-device.h
+ logind-user.c
+ logind-user.h
+ logind-inhibit.c
+ logind-inhibit.h
+ logind-dbus.c
+ logind-session-dbus.c
+ logind-seat-dbus.c
+ logind-user-dbus.c
+ logind-utmp.c
+ logind-acl.h
+'''.split())
+
+logind_acl_c = files('logind-acl.c')
+if conf.get('HAVE_ACL', 0) == 1
+ liblogind_core_sources += logind_acl_c
+endif
+
+liblogind_core = static_library(
+ 'logind-core',
+ liblogind_core_sources,
+ include_directories : includes,
+ dependencies : [libacl])
+
+loginctl_sources = files('''
+ loginctl.c
+ sysfs-show.h
+ sysfs-show.c
+'''.split())
+
+if conf.get('ENABLE_LOGIND', 0) == 1
+ logind_conf = configure_file(
+ input : 'logind.conf.in',
+ output : 'logind.conf',
+ configuration : substs)
+ install_data(logind_conf,
+ install_dir : pkgsysconfdir)
+
+ pam_systemd_sym = meson.current_source_dir() + '/pam_systemd.sym'
+ pam_systemd_c = files('pam_systemd.c')
+
+ install_data('org.freedesktop.login1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.login1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.login1.policy',
+ input : 'org.freedesktop.login1.policy.in',
+ output : 'org.freedesktop.login1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+
+ install_data('70-power-switch.rules',
+ '70-uaccess.rules',
+ install_dir : udevrulesdir)
+
+ foreach file : ['71-seat.rules',
+ '73-seat-late.rules']
+ gen = configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs)
+ install_data(gen,
+ install_dir : udevrulesdir)
+ endforeach
+
+ custom_target(
+ 'systemd-user',
+ input : 'systemd-user.m4',
+ output: 'systemd-user',
+ command : [m4, '-P'] + m4_defines + ['@INPUT@'],
+ capture : true,
+ install : pamconfdir != 'no',
+ install_dir : pamconfdir)
+endif
diff --git a/src/machine/meson.build b/src/machine/meson.build
new file mode 100644
index 0000000000..8e2ca64665
--- /dev/null
+++ b/src/machine/meson.build
@@ -0,0 +1,39 @@
+# -*- mode: meson -*-
+
+systemd_machined_sources = files('''
+ machined.c
+ machined.h
+'''.split())
+
+libmachine_core_sources = files('''
+ machine.c
+ machine.h
+ machined-dbus.c
+ machine-dbus.c
+ machine-dbus.h
+ image-dbus.c
+ image-dbus.h
+ operation.c
+ operation.h
+'''.split())
+
+libmachine_core = static_library(
+ 'machine-core',
+ libmachine_core_sources,
+ include_directories : includes,
+ dependencies : [threads])
+
+if conf.get('ENABLE_MACHINED', 0) == 1
+ install_data('org.freedesktop.machine1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.machine1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.machine1.policy',
+ input : 'org.freedesktop.machine1.policy.in',
+ output : 'org.freedesktop.machine1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
diff --git a/src/network/meson.build b/src/network/meson.build
new file mode 100644
index 0000000000..8af6cfde0c
--- /dev/null
+++ b/src/network/meson.build
@@ -0,0 +1,111 @@
+# -*- mode: meson -*-
+
+sources = files('''
+ netdev/bond.c
+ netdev/bond.h
+ netdev/bridge.c
+ netdev/bridge.h
+ netdev/dummy.c
+ netdev/dummy.h
+ netdev/ipvlan.c
+ netdev/ipvlan.h
+ netdev/macvlan.c
+ netdev/macvlan.h
+ netdev/netdev.c
+ netdev/netdev.h
+ netdev/tunnel.c
+ netdev/tunnel.h
+ netdev/tuntap.c
+ netdev/tuntap.h
+ netdev/vcan.c
+ netdev/vcan.h
+ netdev/veth.c
+ netdev/veth.h
+ netdev/vlan.c
+ netdev/vlan.h
+ netdev/vrf.c
+ netdev/vrf.h
+ netdev/vxlan.c
+ netdev/vxlan.h
+ networkd-address-pool.c
+ networkd-address-pool.h
+ networkd-address.c
+ networkd-address.h
+ networkd-brvlan.c
+ networkd-brvlan.h
+ networkd-conf.c
+ networkd-conf.h
+ networkd-dhcp4.c
+ networkd-dhcp6.c
+ networkd-fdb.c
+ networkd-fdb.h
+ networkd-ipv4ll.c
+ networkd-ipv6-proxy-ndp.c
+ networkd-ipv6-proxy-ndp.h
+ networkd-link-bus.c
+ networkd-link.c
+ networkd-link.h
+ networkd-lldp-tx.c
+ networkd-lldp-tx.h
+ networkd-manager-bus.c
+ networkd-manager.c
+ networkd-manager.h
+ networkd-ndisc.c
+ networkd-ndisc.h
+ networkd-network-bus.c
+ networkd-network.c
+ networkd-network.h
+ networkd-route.c
+ networkd-route.h
+ networkd-util.c
+ networkd-util.h
+'''.split())
+
+systemd_networkd_sources = files('networkd.c')
+
+systemd_networkd_wait_online_sources = files('''
+ wait-online/link.c
+ wait-online/link.h
+ wait-online/manager.c
+ wait-online/manager.h
+ wait-online/wait-online.c
+'''.split()) + network_internal_h
+
+networkctl_sources = files('networkctl.c')
+
+if conf.get('ENABLE_NETWORKD', 0) == 1
+ networkd_gperf_c = custom_target(
+ 'networkd-gperf.c',
+ input : 'networkd-gperf.gperf',
+ output : 'networkd-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+ networkd_network_gperf_c = custom_target(
+ 'networkd-network-gperf.c',
+ input : 'networkd-network-gperf.gperf',
+ output : 'networkd-network-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+ netdev_gperf_c = custom_target(
+ 'netdev-gperf.c',
+ input : 'netdev/netdev-gperf.gperf',
+ output : 'netdev-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+ libnetworkd_core = static_library(
+ 'networkd-core',
+ sources,
+ network_internal_h,
+ networkd_gperf_c,
+ networkd_network_gperf_c,
+ netdev_gperf_c,
+ include_directories : includes,
+ link_with : [libshared])
+
+ install_data('org.freedesktop.network1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.network1.service',
+ install_dir : dbussystemservicedir)
+ install_data('systemd-networkd.rules',
+ install_dir : polkitrulesdir)
+endif
diff --git a/src/nspawn/meson.build b/src/nspawn/meson.build
new file mode 100644
index 0000000000..7f91eaf2d7
--- /dev/null
+++ b/src/nspawn/meson.build
@@ -0,0 +1,33 @@
+# -*- mode: meson -*-
+
+systemd_nspawn_sources = files('''
+ nspawn.c
+ nspawn-settings.c
+ nspawn-settings.h
+ nspawn-mount.c
+ nspawn-mount.h
+ nspawn-network.c
+ nspawn-network.h
+ nspawn-expose-ports.c
+ nspawn-expose-ports.h
+ nspawn-cgroup.c
+ nspawn-cgroup.h
+ nspawn-seccomp.c
+ nspawn-seccomp.h
+ nspawn-register.c
+ nspawn-register.h
+ nspawn-setuid.c
+ nspawn-setuid.h
+ nspawn-stub-pid1.c
+ nspawn-stub-pid1.h
+ nspawn-patch-uid.c
+ nspawn-patch-uid.h
+'''.split())
+
+nspawn_gperf_c = custom_target(
+ 'nspawn-gperf.c',
+ input : 'nspawn-gperf.gperf',
+ output : 'nspawn-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_nspawn_sources += [nspawn_gperf_c]
diff --git a/src/resolve/dns_type-to-name.awk b/src/resolve/dns_type-to-name.awk
new file mode 100644
index 0000000000..64d675b0a9
--- /dev/null
+++ b/src/resolve/dns_type-to-name.awk
@@ -0,0 +1,7 @@
+BEGIN{ print "const char *dns_type_to_string(int type) {\n\tswitch(type) {" }
+{
+ printf " case DNS_TYPE_%s: return ", $1;
+ sub(/_/, "-");
+ printf "\"%s\";\n", $1
+}
+END{ print " default: return NULL;\n\t}\n}\n" }
diff --git a/src/resolve/generate-dns_type-gperf.py b/src/resolve/generate-dns_type-gperf.py
new file mode 100644
index 0000000000..fb36c850af
--- /dev/null
+++ b/src/resolve/generate-dns_type-gperf.py
@@ -0,0 +1,18 @@
+#!/usr/bin/python3
+
+"""Generate %-from-name.gperf from %-list.txt
+"""
+
+import sys
+
+name, prefix, input = sys.argv[1:]
+
+print("""\
+struct {}_name {{ const char* name; int id; }};
+%null-strings
+%%""".format(name))
+
+for line in open(input):
+ line = line.rstrip()
+ s = line.replace('_', '-')
+ print("{}, {}{}".format(s, prefix, line))
diff --git a/src/resolve/generate-dns_type-list.sed b/src/resolve/generate-dns_type-list.sed
new file mode 100644
index 0000000000..b7bc30f1f2
--- /dev/null
+++ b/src/resolve/generate-dns_type-list.sed
@@ -0,0 +1 @@
+s/.* DNS_TYPE_(\w+).*/\1/p
diff --git a/src/resolve/meson.build b/src/resolve/meson.build
new file mode 100644
index 0000000000..b2250180f0
--- /dev/null
+++ b/src/resolve/meson.build
@@ -0,0 +1,145 @@
+# -*- mode: meson -*-
+
+basic_dns_sources = files('''
+ resolved-dns-dnssec.c
+ resolved-dns-dnssec.h
+ resolved-dns-packet.c
+ resolved-dns-packet.h
+ resolved-dns-rr.c
+ resolved-dns-rr.h
+ resolved-dns-answer.c
+ resolved-dns-answer.h
+ resolved-dns-question.c
+ resolved-dns-question.h
+ dns-type.c
+'''.split())
+
+dns_type_h = files('dns-type.h')[0]
+
+systemd_resolved_only_sources = files('''
+ resolved.c
+ resolved-manager.c
+ resolved-manager.h
+ resolved-conf.c
+ resolved-conf.h
+ resolved-resolv-conf.c
+ resolved-resolv-conf.h
+ resolved-bus.c
+ resolved-bus.h
+ resolved-link.h
+ resolved-link.c
+ resolved-link-bus.c
+ resolved-link-bus.h
+ resolved-llmnr.h
+ resolved-llmnr.c
+ resolved-mdns.h
+ resolved-mdns.c
+ resolved-def.h
+ resolved-dns-query.h
+ resolved-dns-query.c
+ resolved-dns-synthesize.h
+ resolved-dns-synthesize.c
+ resolved-dns-transaction.h
+ resolved-dns-transaction.c
+ resolved-dns-scope.h
+ resolved-dns-scope.c
+ resolved-dns-server.h
+ resolved-dns-server.c
+ resolved-dns-search-domain.h
+ resolved-dns-search-domain.c
+ resolved-dns-cache.h
+ resolved-dns-cache.c
+ resolved-dns-zone.h
+ resolved-dns-zone.c
+ resolved-dns-stream.h
+ resolved-dns-stream.c
+ resolved-dns-trust-anchor.h
+ resolved-dns-trust-anchor.c
+ resolved-dns-stub.h
+ resolved-dns-stub.c
+ resolved-etc-hosts.h
+ resolved-etc-hosts.c
+'''.split())
+
+systemd_resolve_only_sources = files('resolve-tool.c')
+
+############################################################
+
+dns_type_list_txt = custom_target(
+ 'dns_type-list.txt',
+ input : ['generate-dns_type-list.sed', dns_type_h],
+ output : 'dns_type-list.txt',
+ command : [sed, '-n', '-r', '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+generate_dns_type_gperf = find_program('generate-dns_type-gperf.py')
+
+dns_type_headers = [dns_type_h]
+foreach item : [['dns_type', dns_type_list_txt, 'dns_type', 'DNS_TYPE_']]
+
+ fname = '@0@-from-name.gperf'.format(item[0])
+ gperf_file = custom_target(
+ fname,
+ input : item[1],
+ output : fname,
+ command : [generate_dns_type_gperf, item[2], item[3], '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-from-name.h'.format(item[0])
+ target1 = custom_target(
+ fname,
+ input : gperf_file,
+ output : fname,
+ command : [gperf,
+ '-L', 'ANSI-C', '-t', '--ignore-case',
+ '-N', 'lookup_@0@'.format(item[2]),
+ '-H', 'hash_@0@_name'.format(item[2]),
+ '-p', '-C',
+ '@INPUT@'],
+ capture : true)
+
+ fname = '@0@-to-name.h'.format(item[0])
+ awkscript = '@0@-to-name.awk'.format(item[0])
+ target2 = custom_target(
+ fname,
+ input : [awkscript, item[1]],
+ output : fname,
+ command : [awk, '-f', '@INPUT0@', '@INPUT1@'],
+ capture : true)
+
+ dns_type_headers += [target1, target2]
+endforeach
+
+resolved_gperf_c = custom_target(
+ 'resolved_gperf.c',
+ input : 'resolved-gperf.gperf',
+ output : 'resolved-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_resolved_sources = (
+ basic_dns_sources +
+ [resolved_gperf_c] +
+ systemd_resolved_only_sources +
+ dns_type_headers)
+
+systemd_resolve_sources = (
+ basic_dns_sources +
+ systemd_resolve_only_sources +
+ dns_type_headers)
+
+if conf.get('ENABLE_RESOLVED', 0) == 1
+ install_data('org.freedesktop.resolve1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.resolve1.service',
+ install_dir : dbussystemservicedir)
+
+ resolved_conf = configure_file(
+ input : 'resolved.conf.in',
+ output : 'resolved.conf',
+ configuration : substs)
+ install_data(resolved_conf,
+ install_dir : pkgsysconfdir)
+endif
+
+install_data('resolv.conf',
+ install_dir : rootlibexecdir)
diff --git a/src/shared/meson.build b/src/shared/meson.build
new file mode 100644
index 0000000000..f0bc8043e1
--- /dev/null
+++ b/src/shared/meson.build
@@ -0,0 +1,154 @@
+# -*- mode: meson -*-
+
+shared_sources = '''
+ acl-util.h
+ acpi-fpdt.c
+ acpi-fpdt.h
+ apparmor-util.c
+ apparmor-util.h
+ ask-password-api.c
+ ask-password-api.h
+ base-filesystem.c
+ base-filesystem.h
+ boot-timestamps.c
+ boot-timestamps.h
+ bus-unit-util.c
+ bus-unit-util.h
+ bus-util.c
+ bus-util.h
+ cgroup-show.c
+ cgroup-show.h
+ clean-ipc.c
+ clean-ipc.h
+ condition.c
+ condition.h
+ conf-parser.c
+ conf-parser.h
+ dev-setup.c
+ dev-setup.h
+ dissect-image.c
+ dissect-image.h
+ dns-domain.c
+ dns-domain.h
+ dropin.c
+ dropin.h
+ efivars.c
+ efivars.h
+ fdset.c
+ fdset.h
+ fstab-util.c
+ fstab-util.h
+ gcrypt-util.c
+ gcrypt-util.h
+ generator.c
+ generator.h
+ gpt.h
+ ima-util.c
+ ima-util.h
+ import-util.c
+ import-util.h
+ initreq.h
+ install.c
+ install.h
+ install-printf.c
+ install-printf.h
+ journal-util.c
+ journal-util.h
+ logs-show.c
+ logs-show.h
+ loop-util.c
+ loop-util.h
+ machine-image.c
+ machine-image.h
+ machine-pool.c
+ machine-pool.h
+ nsflags.c
+ nsflags.h
+ output-mode.c
+ output-mode.h
+ pager.c
+ pager.h
+ path-lookup.c
+ path-lookup.h
+ ptyfwd.c
+ ptyfwd.h
+ resolve-util.c
+ resolve-util.h
+ seccomp-util.h
+ sleep-config.c
+ sleep-config.h
+ spawn-ask-password-agent.c
+ spawn-ask-password-agent.h
+ spawn-polkit-agent.c
+ spawn-polkit-agent.h
+ specifier.c
+ specifier.h
+ switch-root.c
+ switch-root.h
+ sysctl-util.c
+ sysctl-util.h
+ tests.c
+ tests.h
+ test-tables.h
+ udev-util.h
+ uid-range.c
+ uid-range.h
+ utmp-wtmp.h
+ vlan-util.c
+ vlan-util.h
+ volatile-util.c
+ volatile-util.h
+ watchdog.c
+ watchdog.h
+'''.split()
+
+if conf.get('HAVE_ACL', 0) == 1
+ shared_sources += ['acl-util.c']
+endif
+
+if conf.get('HAVE_UTMP', 0) == 1
+ shared_sources += ['utmp-wtmp.c']
+endif
+
+if conf.get('HAVE_SECCOMP', 0) == 1
+ shared_sources += ['seccomp-util.c']
+endif
+
+libshared_name = 'systemd-shared-@0@'.format(meson.project_version())
+
+libshared = shared_library(
+ libshared_name,
+ shared_sources,
+ basic_sources,
+ include_directories : includes,
+ link_args : ['-shared'],
+ c_args : ['-fvisibility=default'],
+ link_with : [libsystemd_journal_internal,
+ libsystemd,
+ libudev,
+ ],
+ dependencies : [threads,
+ librt,
+ libcap,
+ libacl,
+ libcryptsetup,
+ libiptc,
+ libseccomp,
+ libselinux,
+ libidn,
+ libxz,
+ liblz4,
+ ],
+ install : true,
+ install_dir : rootlibexecdir)
+
+if conf.get('HAVE_LIBIPTC', 0) == 1
+ libfirewall = static_library(
+ 'firewall',
+ 'firewall-util.h',
+ 'firewall-util.c',
+ include_directories : includes,
+ dependencies : [libiptc])
+else
+ libfirewall = []
+endif
diff --git a/src/systemd/meson.build b/src/systemd/meson.build
new file mode 100644
index 0000000000..91a35b13fe
--- /dev/null
+++ b/src/systemd/meson.build
@@ -0,0 +1,33 @@
+# -*- mode: meson -*-
+
+headers = '''
+ sd-bus.h
+ sd-bus-protocol.h
+ sd-bus-vtable.h
+ sd-daemon.h
+ sd-event.h
+ sd-id128.h
+ sd-journal.h
+ sd-login.h
+ sd-messages.h
+ _sd-common.h
+'''.split()
+
+# sd-device.h
+# sd-hwdb.h
+# sd-dhcp6-client.h
+# sd-dhcp6-lease.h
+# sd-dhcp-client.h
+# sd-dhcp-lease.h
+# sd-dhcp-server.h
+# sd-ipv4acd.h
+# sd-ipv4ll.h
+# sd-lldp.h
+# sd-ndisc.h
+# sd-netlink.h
+# sd-network.h
+# sd-path.h
+# sd-resolve.h
+# sd-utf8.h
+
+install_headers(headers, subdir : 'systemd')
diff --git a/src/timedate/meson.build b/src/timedate/meson.build
new file mode 100644
index 0000000000..f9c19f1d67
--- /dev/null
+++ b/src/timedate/meson.build
@@ -0,0 +1,16 @@
+# -*- mode: meson -*-
+
+if conf.get('ENABLE_TIMEDATED', 0) == 1
+ install_data('org.freedesktop.timedate1.conf',
+ install_dir : dbuspolicydir)
+ install_data('org.freedesktop.timedate1.service',
+ install_dir : dbussystemservicedir)
+
+ custom_target(
+ 'org.freedesktop.timedate1.policy',
+ input : 'org.freedesktop.timedate1.policy.in',
+ output : 'org.freedesktop.timedate1.policy',
+ command : intltool_command,
+ install : true,
+ install_dir : polkitpolicydir)
+endif
diff --git a/src/timesync/meson.build b/src/timesync/meson.build
new file mode 100644
index 0000000000..0d0381305f
--- /dev/null
+++ b/src/timesync/meson.build
@@ -0,0 +1,28 @@
+# -*- mode: meson -*-
+
+systemd_timesyncd_sources = files('''
+ timesyncd.c
+ timesyncd-manager.c
+ timesyncd-manager.h
+ timesyncd-conf.c
+ timesyncd-conf.h
+ timesyncd-server.c
+ timesyncd-server.h
+'''.split())
+
+timesyncd_gperf_c = custom_target(
+ 'timesyncd-gperf.c',
+ input : 'timesyncd-gperf.gperf',
+ output : 'timesyncd-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+systemd_timesyncd_sources += [timesyncd_gperf_c]
+
+if conf.get('ENABLE_TIMESYNCD', 0) == 1
+ timesyncd_conf = configure_file(
+ input : 'timesyncd.conf.in',
+ output : 'timesyncd.conf',
+ configuration : substs)
+ install_data(timesyncd_conf,
+ install_dir : pkgsysconfdir)
+endif
diff --git a/src/udev/generate-keyboard-keys-list.sh b/src/udev/generate-keyboard-keys-list.sh
new file mode 100644
index 0000000000..cd6ef9c93b
--- /dev/null
+++ b/src/udev/generate-keyboard-keys-list.sh
@@ -0,0 +1,4 @@
+#!/bin/sh -e
+
+cpp -dM -include linux/input.h - </dev/null | \
+ awk '/^#define[ \t]+KEY_[^ ]+[ \t]+[0-9K]/ { if ($2 != "KEY_MAX") { print $2 } }'
diff --git a/src/udev/meson.build b/src/udev/meson.build
new file mode 100644
index 0000000000..4965ee3534
--- /dev/null
+++ b/src/udev/meson.build
@@ -0,0 +1,164 @@
+# -*- mode: meson -*-
+
+udevadm_sources = files('''
+ udevadm.c
+ udevadm-info.c
+ udevadm-control.c
+ udevadm-monitor.c
+ udevadm-hwdb.c
+ udevadm-settle.c
+ udevadm-trigger.c
+ udevadm-test.c
+ udevadm-test-builtin.c
+ udevadm-util.c
+ udevadm-util.h
+'''.split())
+
+systemd_udevd_sources = files('udevd.c')
+
+libudev_core_sources = '''
+ udev.h
+ udev-event.c
+ udev-watch.c
+ udev-node.c
+ udev-rules.c
+ udev-ctrl.c
+ udev-builtin.c
+ udev-builtin-btrfs.c
+ udev-builtin-hwdb.c
+ udev-builtin-input_id.c
+ udev-builtin-keyboard.c
+ udev-builtin-net_id.c
+ udev-builtin-net_setup_link.c
+ udev-builtin-path_id.c
+ udev-builtin-usb_id.c
+ net/link-config.c
+ net/link-config.h
+ net/ethtool-util.c
+ net/ethtool-util.h
+'''.split()
+
+if conf.get('HAVE_KMOD', 0) == 1
+ libudev_core_sources += ['udev-builtin-kmod.c']
+endif
+
+if conf.get('HAVE_BLKID', 0) == 1
+ libudev_core_sources += ['udev-builtin-blkid.c']
+endif
+
+if conf.get('HAVE_ACL', 0) == 1
+ libudev_core_sources += ['udev-builtin-uaccess.c',
+ logind_acl_c,
+ sd_login_c]
+endif
+
+############################################################
+
+generate_keyboard_keys_list = find_program('generate-keyboard-keys-list.sh')
+keyboard_keys_list_txt = custom_target(
+ 'keyboard-keys-list.txt',
+ output : 'keyboard-keys-list.txt',
+ command : [generate_keyboard_keys_list],
+ capture : true)
+
+fname = 'keyboard-keys-from-name.gperf'
+gperf_file = custom_target(
+ fname,
+ input : keyboard_keys_list_txt,
+ output : fname,
+ command : [generate_gperfs, 'key', '', '@INPUT@'],
+ capture : true)
+
+fname = 'keyboard-keys-from-name.h'
+keyboard_keys_from_name_h = custom_target(
+ fname,
+ input : gperf_file,
+ output : fname,
+ command : [gperf,
+ '-L', 'ANSI-C', '-t', '--ignore-case',
+ '-N', 'keyboard_lookup_key',
+ '-H', 'hash_key_name',
+ '-p', '-C',
+ '@INPUT@'],
+ capture : true)
+
+############################################################
+
+link_config_gperf_c = custom_target(
+ 'link-config-gperf.c',
+ input : 'net/link-config-gperf.gperf',
+ output : 'link-config-gperf.c',
+ command : [gperf, '@INPUT@', '--output-file', '@OUTPUT@'])
+
+############################################################
+
+libudev_core = static_library(
+ 'udev-core',
+ libudev_core_sources,
+ link_config_gperf_c,
+ keyboard_keys_from_name_h,
+ include_directories : [includes, include_directories('net')],
+ link_with : [libshared])
+
+executable('ata_id',
+ 'ata_id/ata_id.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('cdrom_id',
+ 'cdrom_id/cdrom_id.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('collect',
+ 'collect/collect.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('scsi_id',
+ 'scsi_id/scsi_id.c',
+ 'scsi_id/scsi_id.h',
+ 'scsi_id/scsi_serial.c',
+ 'scsi_id/scsi.h',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('v4l_id',
+ 'v4l_id/v4l_id.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+executable('mtd_probe',
+ 'mtd_probe/mtd_probe.c',
+ 'mtd_probe/mtd_probe.h',
+ 'mtd_probe/probe_smartmedia.c',
+ include_directories : includes,
+ link_with : [libudev_internal,
+ libshared],
+ install : true,
+ install_dir : udevlibexecdir)
+
+install_data('udev.conf',
+ install_dir : sysconfdir + '/udev')
+
+udev_pc = configure_file(
+ input : 'udev.pc.in',
+ output : 'udev.pc',
+ configuration : substs)
+install_data(udev_pc,
+ install_dir : pkgconfigdatadir)
diff --git a/src/vconsole/meson.build b/src/vconsole/meson.build
new file mode 100644
index 0000000000..f2aa6daf88
--- /dev/null
+++ b/src/vconsole/meson.build
@@ -0,0 +1,10 @@
+# -*- mode: meson -*-
+
+if conf.get('ENABLE_VCONSOLE', 0) == 1
+ vconsole_rules = configure_file(
+ input : '90-vconsole.rules.in',
+ output : '90-vconsole.rules',
+ configuration : substs)
+ install_data(vconsole_rules,
+ install_dir : udevrulesdir)
+endif