meson: add option to skip installing to $sysconfdir

This is useful for development where overwriting files out side
the configured prefix will affect the host as well as stateless
systems such as NixOS that don't let packages install to /etc but handle
configuration on their own.

Alternative to https://github.com/systemd/systemd/pull/17501

tested with:

$ mkdir inst build && cd build
$ meson \
  -Dcreate-log-dirs=false \
  -Dsysvrcnd-path=$(realpath ../inst)/etc/rc.d \
  -Dsysvinit-path=$(realpath ../inst)/etc/init.d \
  -Drootprefix=$(realpath ../inst) \
  -Dinstall-sysconfdir=false \
  --prefix=$(realpath ../inst) ..
$ ninja install
This commit is contained in:
Jörg Thalheim 2020-11-12 08:01:39 +01:00 committed by Zbigniew Jędrzejewski-Szmek
parent faa73d4e0c
commit d7aa78c32f
20 changed files with 111 additions and 63 deletions

View File

@ -42,12 +42,14 @@ if conf.get('ENABLE_HWDB') == 1
hwdb_files_test, hwdb_files_test,
install_dir : udevhwdbdir) install_dir : udevhwdbdir)
meson.add_install_script('sh', '-c', if install_sysconfdir
mkdir_p.format(join_paths(sysconfdir, 'udev/hwdb.d'))) meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'udev/hwdb.d')))
meson.add_install_script('sh', '-c', meson.add_install_script('sh', '-c',
'test -n "$DESTDIR" || @0@/systemd-hwdb update' 'test -n "$DESTDIR" || @0@/systemd-hwdb update'
.format(rootbindir)) .format(rootbindir))
endif
if want_tests != 'false' if want_tests != 'false'
parse_hwdb_py = find_program('parse_hwdb.py') parse_hwdb_py = find_program('parse_hwdb.py')

View File

@ -126,6 +126,7 @@ if rootlibdir == ''
rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1]) rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
endif endif
install_sysconfdir = get_option('install-sysconfdir')
# Dirs of external packages # Dirs of external packages
pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir') pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir') pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
@ -2776,8 +2777,10 @@ if conf.get('ENABLE_BINFMT') == 1
meson.add_install_script('sh', '-c', meson.add_install_script('sh', '-c',
mkdir_p.format(binfmtdir)) mkdir_p.format(binfmtdir))
meson.add_install_script('sh', '-c', if install_sysconfdir
mkdir_p.format(join_paths(sysconfdir, 'binfmt.d'))) meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
endif
endif endif
if conf.get('ENABLE_REPART') == 1 if conf.get('ENABLE_REPART') == 1
@ -2891,8 +2894,10 @@ executable(
install : true, install : true,
install_dir : rootlibexecdir) install_dir : rootlibexecdir)
install_data('src/sleep/sleep.conf', if install_sysconfdir
install_dir : pkgsysconfdir) install_data('src/sleep/sleep.conf',
install_dir : pkgsysconfdir)
endif
public_programs += executable( public_programs += executable(
'systemd-sysctl', 'systemd-sysctl',
@ -3243,8 +3248,10 @@ if conf.get('HAVE_KMOD') == 1
meson.add_install_script('sh', '-c', meson.add_install_script('sh', '-c',
mkdir_p.format(modulesloaddir)) mkdir_p.format(modulesloaddir))
meson.add_install_script('sh', '-c', if install_sysconfdir
mkdir_p.format(join_paths(sysconfdir, 'modules-load.d'))) meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
endif
endif endif
public_programs += executable( public_programs += executable(
@ -3489,8 +3496,10 @@ subdir('docs/var-log')
install_subdir('factory/etc', install_subdir('factory/etc',
install_dir : factorydir) install_dir : factorydir)
install_data('xorg/50-systemd-user.sh', if install_sysconfdir
install_dir : xinitrcdir) install_data('xorg/50-systemd-user.sh',
install_dir : xinitrcdir)
endif
install_data('modprobe.d/systemd.conf', install_data('modprobe.d/systemd.conf',
install_dir : modprobedir) install_dir : modprobedir)
install_data('LICENSE.GPL2', install_data('LICENSE.GPL2',

View File

@ -180,6 +180,8 @@ option('pamconfdir', type : 'string',
description : 'directory for PAM configuration ["no" disables]') description : 'directory for PAM configuration ["no" disables]')
option('docdir', type : 'string', option('docdir', type : 'string',
description : 'documentation directory') description : 'documentation directory')
option('install-sysconfdir', type : 'boolean', value : true,
description : 'install configuration files to $sysconfdir')
option('fallback-hostname', type : 'string', value : 'localhost', option('fallback-hostname', type : 'string', value : 'localhost',
description : 'the hostname used if none configured') description : 'the hostname used if none configured')

View File

@ -10,8 +10,10 @@ if conf.get('ENABLE_NETWORKD') == 1
'80-wifi-station.network.example', '80-wifi-station.network.example',
install_dir : networkdir) install_dir : networkdir)
meson.add_install_script('sh', '-c', if install_sysconfdir
mkdir_p.format(join_paths(sysconfdir, 'systemd/network'))) meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'systemd/network')))
endif
endif endif
install_data('99-default.link', install_data('99-default.link',

View File

@ -192,12 +192,14 @@ in_files = [['macros.systemd', rpmmacrosdir],
foreach item : in_files foreach item : in_files
file = item[0] file = item[0]
dir = item[1] dir = item[1]
if install_sysconfdir or dir != pkgsysconfdir
configure_file(
input : file + '.in',
output : file,
configuration : substs,
install_dir : dir == 'no' ? '' : dir)
endif
configure_file(
input : file + '.in',
output : file,
configuration : substs,
install_dir : dir == 'no' ? '' : dir)
endforeach endforeach
install_data('org.freedesktop.systemd1.conf', install_data('org.freedesktop.systemd1.conf',
@ -217,6 +219,8 @@ meson.add_install_script('sh', '-c', mkdir_p.format(systemsleepdir))
meson.add_install_script('sh', '-c', mkdir_p.format(systemgeneratordir)) meson.add_install_script('sh', '-c', mkdir_p.format(systemgeneratordir))
meson.add_install_script('sh', '-c', mkdir_p.format(usergeneratordir)) meson.add_install_script('sh', '-c', mkdir_p.format(usergeneratordir))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'system'))) if install_sysconfdir
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'user'))) meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'system')))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(sysconfdir, 'xdg/systemd'))) meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'user')))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(sysconfdir, 'xdg/systemd')))
endif

View File

@ -13,7 +13,7 @@ endif
coredumpctl_sources = files('coredumpctl.c') coredumpctl_sources = files('coredumpctl.c')
if conf.get('ENABLE_COREDUMP') == 1 if conf.get('ENABLE_COREDUMP') == 1 and install_sysconfdir
install_data('coredump.conf', install_data('coredump.conf',
install_dir : pkgsysconfdir) install_dir : pkgsysconfdir)
endif endif

View File

@ -107,8 +107,10 @@ if conf.get('ENABLE_HOMED') == 1
install_data('org.freedesktop.home1.policy', install_data('org.freedesktop.home1.policy',
install_dir : polkitpolicydir) install_dir : polkitpolicydir)
install_data('homed.conf', if install_sysconfdir
install_dir : pkgsysconfdir) install_data('homed.conf',
install_dir : sysconfdir)
endif
endif endif
tests += [ tests += [

View File

@ -48,8 +48,10 @@ if conf.get('ENABLE_REMOTE') ==1 and conf.get('HAVE_LIBCURL') == 1
input : 'journal-upload.conf.in', input : 'journal-upload.conf.in',
output : 'journal-upload.conf', output : 'journal-upload.conf',
configuration : substs) configuration : substs)
install_data(journal_upload_conf, if install_sysconfdir
install_dir : pkgsysconfdir) install_data(journal_upload_conf,
install_dir : pkgsysconfdir)
endif
endif endif
if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1 if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
@ -57,8 +59,10 @@ if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
input : 'journal-remote.conf.in', input : 'journal-remote.conf.in',
output : 'journal-remote.conf', output : 'journal-remote.conf',
configuration : substs) configuration : substs)
install_data(journal_remote_conf, if install_sysconfdir
install_dir : pkgsysconfdir) install_data(journal_remote_conf,
install_dir : pkgsysconfdir)
endif
install_data('browse.html', install_data('browse.html',
install_dir : join_paths(pkgdatadir, 'gatewayd')) install_dir : join_paths(pkgdatadir, 'gatewayd'))

View File

@ -107,8 +107,10 @@ journalctl_sources = files('''
pcre2-dlopen.h pcre2-dlopen.h
'''.split()) '''.split())
install_data('journald.conf', if install_sysconfdir
install_dir : pkgsysconfdir) install_data('journald.conf',
install_dir : pkgsysconfdir)
endif
if get_option('create-log-dirs') if get_option('create-log-dirs')
meson.add_install_script( meson.add_install_script(

View File

@ -3,16 +3,19 @@
want_kernel_install = get_option('kernel-install') want_kernel_install = get_option('kernel-install')
if want_kernel_install if want_kernel_install
install_data('kernel-install', install_data('kernel-install',
install_mode : 'rwxr-xr-x', install_mode : 'rwxr-xr-x',
install_dir : bindir) install_dir : bindir)
install_data('00-entry-directory.install', install_data('00-entry-directory.install',
'50-depmod.install', '50-depmod.install',
'90-loaderentry.install', '90-loaderentry.install',
install_mode : 'rwxr-xr-x', install_mode : 'rwxr-xr-x',
install_dir : kernelinstalldir) install_dir : kernelinstalldir)
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'kernel/install.d')))
endif
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'kernel/install.d')))
endif endif

View File

@ -74,8 +74,10 @@ if conf.get('ENABLE_LOGIND') == 1
input : 'logind.conf.in', input : 'logind.conf.in',
output : 'logind.conf', output : 'logind.conf',
configuration : substs) configuration : substs)
install_data(logind_conf, if install_sysconfdir
install_dir : pkgsysconfdir) install_data(logind_conf,
install_dir : pkgsysconfdir)
endif
install_data('org.freedesktop.login1.conf', install_data('org.freedesktop.login1.conf',
install_dir : dbuspolicydir) install_dir : dbuspolicydir)

View File

@ -236,8 +236,10 @@ if conf.get('ENABLE_NETWORKD') == 1
install_dir : polkitpkladir) install_dir : polkitpkladir)
endif endif
install_data('networkd.conf', if install_sysconfdir
install_dir : pkgsysconfdir) install_data('networkd.conf',
install_dir : pkgsysconfdir)
endif
fuzzers += [ fuzzers += [
[['src/network/fuzz-netdev-parser.c', [['src/network/fuzz-netdev-parser.c',

View File

@ -29,6 +29,8 @@ if conf.get('ENABLE_OOMD') == 1
install_data('org.freedesktop.oom1.service', install_data('org.freedesktop.oom1.service',
install_dir : dbussystemservicedir) install_dir : dbussystemservicedir)
install_data('oomd.conf', if install_sysconfdir
install_dir : pkgsysconfdir) install_data('oomd.conf',
install_dir : sysconfdir)
endif
endif endif

View File

@ -4,7 +4,7 @@ systemd_pstore_sources = files('''
pstore.c pstore.c
'''.split()) '''.split())
if conf.get('ENABLE_PSTORE') == 1 if conf.get('ENABLE_PSTORE') == 1 and install_sysconfdir
install_data('pstore.conf', install_data('pstore.conf',
install_dir : pkgsysconfdir) install_dir : pkgsysconfdir)
endif endif

View File

@ -169,8 +169,10 @@ if conf.get('ENABLE_RESOLVE') == 1
input : 'resolved.conf.in', input : 'resolved.conf.in',
output : 'resolved.conf', output : 'resolved.conf',
configuration : substs) configuration : substs)
install_data(resolved_conf, if install_sysconfdir
install_dir : pkgsysconfdir) install_data(resolved_conf,
install_dir : pkgsysconfdir)
endif
install_data('resolv.conf', install_data('resolv.conf',
install_dir : rootlibexecdir) install_dir : rootlibexecdir)

View File

@ -26,8 +26,10 @@ if conf.get('ENABLE_TIMESYNCD') == 1
input : 'timesyncd.conf.in', input : 'timesyncd.conf.in',
output : 'timesyncd.conf', output : 'timesyncd.conf',
configuration : substs) configuration : substs)
install_data(timesyncd_conf, if install_sysconfdir
install_dir : pkgsysconfdir) install_data(timesyncd_conf,
install_dir : pkgsysconfdir)
endif
install_data('org.freedesktop.timesync1.conf', install_data('org.freedesktop.timesync1.conf',
install_dir : dbuspolicydir) install_dir : dbuspolicydir)
install_data('org.freedesktop.timesync1.service', install_data('org.freedesktop.timesync1.service',

View File

@ -185,8 +185,10 @@ foreach prog : [['ata_id/ata_id.c'],
install_dir : udevlibexecdir) install_dir : udevlibexecdir)
endforeach endforeach
install_data('udev.conf', if install_sysconfdir
install_dir : join_paths(sysconfdir, 'udev')) install_data('udev.conf',
install_dir : join_paths(sysconfdir, 'udev'))
endif
configure_file( configure_file(
input : 'udev.pc.in', input : 'udev.pc.in',
@ -194,8 +196,10 @@ configure_file(
configuration : substs, configuration : substs,
install_dir : pkgconfigdatadir == 'no' ? '' : pkgconfigdatadir) install_dir : pkgconfigdatadir == 'no' ? '' : pkgconfigdatadir)
meson.add_install_script('sh', '-c', if install_sysconfdir
mkdir_p.format(join_paths(sysconfdir, 'udev/rules.d'))) meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'udev/rules.d')))
endif
fuzzers += [ fuzzers += [
[['src/udev/net/fuzz-link-parser.c', [['src/udev/net/fuzz-link-parser.c',

View File

@ -26,5 +26,7 @@ foreach file : in_files
install_dir : sysctldir) install_dir : sysctldir)
endforeach endforeach
meson.add_install_script('sh', '-c', if install_sysconfdir
mkdir_p.format(join_paths(sysconfdir, 'sysctl.d'))) meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'sysctl.d')))
endif

View File

@ -55,7 +55,7 @@ foreach file : m4_files
endif endif
endforeach endforeach
if enable_tmpfiles if enable_tmpfiles and install_sysconfdir
meson.add_install_script( meson.add_install_script(
'sh', '-c', 'sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'tmpfiles.d'))) mkdir_p.format(join_paths(sysconfdir, 'tmpfiles.d')))

View File

@ -326,9 +326,11 @@ install_data('user-.slice.d/10-defaults.conf',
############################################################ ############################################################
meson.add_install_script(meson_make_symlink, if install_sysconfdir
join_paths(pkgsysconfdir, 'user'), meson.add_install_script(meson_make_symlink,
join_paths(sysconfdir, 'xdg/systemd/user')) join_paths(pkgsysconfdir, 'user'),
join_paths(sysconfdir, 'xdg/systemd/user'))
endif
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
join_paths(dbussystemservicedir, 'org.freedesktop.systemd1.service'), join_paths(dbussystemservicedir, 'org.freedesktop.systemd1.service'),
join_paths(dbussessionservicedir, 'org.freedesktop.systemd1.service')) join_paths(dbussessionservicedir, 'org.freedesktop.systemd1.service'))