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