From 58c07f1d59ef683faf8b747e40bd75401306acf4 Mon Sep 17 00:00:00 2001 From: Euan Kemp Date: Mon, 24 Jun 2024 15:59:48 +0200 Subject: [PATCH] meson: patch in an install prefix for building on nix Used in the nixpkgs version of libvirt so that we can install things in the nix store, but read them from the root filesystem. --- meson.build | 9 +++++++ meson_options.txt | 2 ++ src/ch/meson.build | 6 ++--- src/interface/meson.build | 2 +- src/libxl/meson.build | 18 +++++++------- src/locking/meson.build | 8 +++---- src/lxc/meson.build | 10 ++++---- src/meson.build | 18 +++++++------- src/network/meson.build | 14 +++++------ src/node_device/meson.build | 2 +- src/nwfilter/meson.build | 6 ++--- src/nwfilter/xml/meson.build | 2 +- src/qemu/meson.build | 40 +++++++++++++++---------------- src/remote/meson.build | 10 ++++---- src/secret/meson.build | 4 ++-- src/security/apparmor/meson.build | 8 +++---- src/storage/meson.build | 6 ++--- tools/meson.build | 2 +- tools/ssh-proxy/meson.build | 2 +- 19 files changed, 90 insertions(+), 79 deletions(-) diff --git a/meson.build b/meson.build index e98ab0d5ac..376f241c07 100644 --- a/meson.build +++ b/meson.build @@ -47,6 +47,8 @@ if host_machine.system() == 'windows' conf.set('WINVER', '0x0600') # Win Vista / Server 2008 endif +# patched in for nix +install_prefix = get_option('install_prefix') # set various paths @@ -65,6 +67,13 @@ else sysconfdir = prefix / get_option('sysconfdir') endif +# nix: don't prefix the localstatedir; some things need to write to it, so it +# can't be in the nix store, and that's what the prefix is. +# We'll prefix things ourselves where needed +localstatedir = get_option('localstatedir') +# Same for sysconfidr +sysconfdir = get_option('sysconfdir') + # if --prefix is /usr, don't use /usr/var for localstatedir or /usr/etc for # sysconfdir as this makes a lot of things break in testing situations if prefix == '/usr' diff --git a/meson_options.txt b/meson_options.txt index cdc8687795..c2b6da140c 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,3 +1,5 @@ +option('install_prefix', type: 'string', value: '', description: 'prefix for nix store installation') + option('no_git', type: 'boolean', value: false, description: 'Disable git submodule update') option('packager', type: 'string', value: '', description: 'Extra packager name') option('packager_version', type: 'string', value: '', description: 'Extra packager version') diff --git a/src/ch/meson.build b/src/ch/meson.build index 633966aac7..c0ce823345 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -74,8 +74,8 @@ if conf.has('WITH_CH') } virt_install_dirs += [ - localstatedir / 'lib' / 'libvirt' / 'ch', - localstatedir / 'log' / 'libvirt' / 'ch', - runstatedir / 'libvirt' / 'ch', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'ch', + install_prefix + localstatedir / 'log' / 'libvirt' / 'ch', + install_prefix + runstatedir / 'libvirt' / 'ch', ] endif diff --git a/src/interface/meson.build b/src/interface/meson.build index 3d2991315e..20f3266738 100644 --- a/src/interface/meson.build +++ b/src/interface/meson.build @@ -59,6 +59,6 @@ if conf.has('WITH_INTERFACE') } virt_install_dirs += [ - runstatedir / 'libvirt' / 'interface', + install_prefix + runstatedir / 'libvirt' / 'interface', ] endif diff --git a/src/libxl/meson.build b/src/libxl/meson.build index e75a8f2fdb..d1800b4ea5 100644 --- a/src/libxl/meson.build +++ b/src/libxl/meson.build @@ -81,14 +81,14 @@ if conf.has('WITH_LIBXL') } virt_install_dirs += [ - confdir / 'libxl', - confdir / 'libxl' / 'autostart', - localstatedir / 'lib' / 'libvirt' / 'libxl', - localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel', - localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel' / 'target', - localstatedir / 'lib' / 'libvirt' / 'libxl' / 'dump', - localstatedir / 'lib' / 'libvirt' / 'libxl' / 'save', - localstatedir / 'log' / 'libvirt' / 'libxl', - runstatedir / 'libvirt' / 'libxl', + install_prefix + confdir / 'libxl', + install_prefix + confdir / 'libxl' / 'autostart', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel' / 'target', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'dump', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'save', + install_prefix + localstatedir / 'log' / 'libvirt' / 'libxl', + install_prefix + runstatedir / 'libvirt' / 'libxl', ] endif diff --git a/src/locking/meson.build b/src/locking/meson.build index c3dfcf2961..cdc1442775 100644 --- a/src/locking/meson.build +++ b/src/locking/meson.build @@ -249,14 +249,14 @@ if conf.has('WITH_LIBVIRTD') } virt_install_dirs += [ - localstatedir / 'lib' / 'libvirt' / 'lockd', - localstatedir / 'lib' / 'libvirt' / 'lockd' / 'files', - runstatedir / 'libvirt' / 'lockd', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'lockd', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'lockd' / 'files', + install_prefix + runstatedir / 'libvirt' / 'lockd', ] if conf.has('WITH_SANLOCK') virt_install_dirs += [ - localstatedir / 'lib' / 'libvirt' / 'sanlock', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'sanlock', ] endif endif diff --git a/src/lxc/meson.build b/src/lxc/meson.build index bf9afabc0f..6e9547000a 100644 --- a/src/lxc/meson.build +++ b/src/lxc/meson.build @@ -190,10 +190,10 @@ if conf.has('WITH_LXC') } virt_install_dirs += [ - confdir / 'lxc', - confdir / 'lxc' / 'autostart', - localstatedir / 'lib' / 'libvirt' / 'lxc', - localstatedir / 'log' / 'libvirt' / 'lxc', - runstatedir / 'libvirt' / 'lxc', + install_prefix + confdir / 'lxc', + install_prefix + confdir / 'lxc' / 'autostart', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'lxc', + install_prefix + localstatedir / 'log' / 'libvirt' / 'lxc', + install_prefix + runstatedir / 'libvirt' / 'lxc', ] endif diff --git a/src/meson.build b/src/meson.build index dd2682ec19..b330d1159e 100644 --- a/src/meson.build +++ b/src/meson.build @@ -220,7 +220,7 @@ openrc_init_files = [] # virt_install_dirs: # list of directories to create during installation -virt_install_dirs = [ confdir ] +virt_install_dirs = [ install_prefix + confdir ] # driver_source_files: # driver source files to check @@ -697,7 +697,7 @@ endforeach virt_conf_files += 'libvirt.conf' -install_data(virt_conf_files, install_dir: confdir) +install_data(virt_conf_files, install_dir: install_prefix + confdir) install_data(virt_aug_files, install_dir: virt_aug_dir) # augeas_test_data: @@ -760,7 +760,7 @@ foreach data : virt_daemon_confs output: '@0@.conf'.format(data['name']), configuration: daemon_conf, install: true, - install_dir: confdir, + install_dir: install_prefix + confdir, ) if data.get('with_ip', false) @@ -910,7 +910,7 @@ if conf.has('WITH_LIBVIRTD') install_data( init_file, - install_dir: sysconfdir / 'init.d', + install_dir: install_prefix + sysconfdir / 'init.d', install_mode: 'rwxr-xr-x', rename: [ init['name'] ], ) @@ -918,7 +918,7 @@ if conf.has('WITH_LIBVIRTD') if init.has_key('confd') install_data( init['confd'], - install_dir: sysconfdir / 'conf.d', + install_dir: install_prefix + sysconfdir / 'conf.d', rename: [ init['name'] ], ) endif @@ -945,10 +945,10 @@ endif # Install empty directories virt_install_dirs += [ - localstatedir / 'cache' / 'libvirt', - localstatedir / 'lib' / 'libvirt' / 'images', - localstatedir / 'lib' / 'libvirt' / 'filesystems', - localstatedir / 'lib' / 'libvirt' / 'boot', + install_prefix + localstatedir / 'cache' / 'libvirt', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'images', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'filesystems', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'boot', ] meson.add_install_script( diff --git a/src/network/meson.build b/src/network/meson.build index 07cd5cda55..699309bb66 100644 --- a/src/network/meson.build +++ b/src/network/meson.build @@ -115,11 +115,11 @@ if conf.has('WITH_NETWORK') } virt_install_dirs += [ - confdir / 'qemu' / 'networks', - confdir / 'qemu' / 'networks' / 'autostart', - localstatedir / 'lib' / 'libvirt' / 'network', - localstatedir / 'lib' / 'libvirt' / 'dnsmasq', - runstatedir / 'libvirt' / 'network', + install_prefix + confdir / 'qemu' / 'networks', + install_prefix + confdir / 'qemu' / 'networks' / 'autostart', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'network', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'dnsmasq', + install_prefix + runstatedir / 'libvirt' / 'network', ] configure_file( @@ -127,12 +127,12 @@ if conf.has('WITH_NETWORK') output: '@BASENAME@', configuration: configmake_conf, install: true, - install_dir: confdir / 'qemu' / 'networks', + install_dir: install_prefix + confdir / 'qemu' / 'networks', ) meson.add_install_script( meson_python_prog.full_path(), python3_prog.full_path(), meson_install_symlink_prog.full_path(), - confdir / 'qemu' / 'networks' / 'autostart', + install_prefix + confdir / 'qemu' / 'networks' / 'autostart', '../default.xml', 'default.xml', ) diff --git a/src/node_device/meson.build b/src/node_device/meson.build index d66c02a0e2..f883b65431 100644 --- a/src/node_device/meson.build +++ b/src/node_device/meson.build @@ -67,6 +67,6 @@ if conf.has('WITH_NODE_DEVICES') } virt_install_dirs += [ - runstatedir / 'libvirt' / 'nodedev', + install_prefix + runstatedir / 'libvirt' / 'nodedev', ] endif diff --git a/src/nwfilter/meson.build b/src/nwfilter/meson.build index de3d202267..346c435ee7 100644 --- a/src/nwfilter/meson.build +++ b/src/nwfilter/meson.build @@ -65,9 +65,9 @@ if conf.has('WITH_NWFILTER') } virt_install_dirs += [ - confdir / 'nwfilter', - runstatedir / 'libvirt' / 'nwfilter-binding', - runstatedir / 'libvirt' / 'nwfilter', + install_prefix + confdir / 'nwfilter', + install_prefix + runstatedir / 'libvirt' / 'nwfilter-binding', + install_prefix + runstatedir / 'libvirt' / 'nwfilter', ] subdir('xml') diff --git a/src/nwfilter/xml/meson.build b/src/nwfilter/xml/meson.build index 0d96c54ebe..66c92a1016 100644 --- a/src/nwfilter/xml/meson.build +++ b/src/nwfilter/xml/meson.build @@ -25,4 +25,4 @@ nwfilter_xml_files = [ 'qemu-announce-self.xml', ] -install_data(nwfilter_xml_files, install_dir: sysconfdir / 'libvirt' / 'nwfilter') +install_data(nwfilter_xml_files, install_dir: install_prefix + sysconfdir / 'libvirt' / 'nwfilter') diff --git a/src/qemu/meson.build b/src/qemu/meson.build index 907893d431..99b62c8955 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -218,25 +218,25 @@ if conf.has('WITH_QEMU') endif virt_install_dirs += [ - confdir / 'qemu', - confdir / 'qemu' / 'autostart', - localstatedir / 'cache' / 'libvirt' / 'qemu', - localstatedir / 'lib' / 'libvirt' / 'qemu', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel' / 'target', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'checkpoint', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'dump', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'nvram', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'ram', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'save', - localstatedir / 'lib' / 'libvirt' / 'qemu' / 'snapshot', - localstatedir / 'lib' / 'libvirt' / 'swtpm', - localstatedir / 'log' / 'libvirt' / 'qemu', - localstatedir / 'log' / 'swtpm' / 'libvirt' / 'qemu', - runstatedir / 'libvirt' / 'qemu', - runstatedir / 'libvirt' / 'qemu' / 'dbus', - runstatedir / 'libvirt' / 'qemu' / 'passt', - runstatedir / 'libvirt' / 'qemu' / 'slirp', - runstatedir / 'libvirt' / 'qemu' / 'swtpm', + install_prefix + confdir / 'qemu', + install_prefix + confdir / 'qemu' / 'autostart', + install_prefix + localstatedir / 'cache' / 'libvirt' / 'qemu', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel' / 'target', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'checkpoint', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'dump', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'nvram', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'ram', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'save', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'snapshot', + install_prefix + localstatedir / 'lib' / 'libvirt' / 'swtpm', + install_prefix + localstatedir / 'log' / 'libvirt' / 'qemu', + install_prefix + localstatedir / 'log' / 'swtpm' / 'libvirt' / 'qemu', + install_prefix + runstatedir / 'libvirt' / 'qemu', + install_prefix + runstatedir / 'libvirt' / 'qemu' / 'dbus', + install_prefix + runstatedir / 'libvirt' / 'qemu' / 'passt', + install_prefix + runstatedir / 'libvirt' / 'qemu' / 'slirp', + install_prefix + runstatedir / 'libvirt' / 'qemu' / 'swtpm', ] endif diff --git a/src/remote/meson.build b/src/remote/meson.build index 831acaaa01..0ba34d3bad 100644 --- a/src/remote/meson.build +++ b/src/remote/meson.build @@ -261,9 +261,9 @@ if conf.has('WITH_REMOTE') } virt_install_dirs += [ - localstatedir / 'log' / 'libvirt', - runstatedir / 'libvirt', - runstatedir / 'libvirt' / 'common', + install_prefix + localstatedir / 'log' / 'libvirt', + install_prefix + runstatedir / 'libvirt', + install_prefix + runstatedir / 'libvirt' / 'common', ] logrotate_conf = configuration_data({ @@ -278,7 +278,7 @@ if conf.has('WITH_REMOTE') ) install_data( log_file, - install_dir: sysconfdir / 'logrotate.d', + install_dir: install_prefix + sysconfdir / 'logrotate.d', rename: [ name ], ) endforeach @@ -328,7 +328,7 @@ endif if conf.has('WITH_SASL') install_data( 'libvirtd.sasl', - install_dir: sysconfdir / 'sasl2', + install_dir: install_prefix + sysconfdir / 'sasl2', rename: [ 'libvirt.conf' ], ) endif diff --git a/src/secret/meson.build b/src/secret/meson.build index 3b859ea7b4..ccddb3e805 100644 --- a/src/secret/meson.build +++ b/src/secret/meson.build @@ -48,7 +48,7 @@ if conf.has('WITH_SECRETS') } virt_install_dirs += [ - confdir / 'secrets', - runstatedir / 'libvirt' / 'secrets', + install_prefix + confdir / 'secrets', + install_prefix + runstatedir / 'libvirt' / 'secrets', ] endif diff --git a/src/security/apparmor/meson.build b/src/security/apparmor/meson.build index b9257c816d..98701755d8 100644 --- a/src/security/apparmor/meson.build +++ b/src/security/apparmor/meson.build @@ -57,7 +57,7 @@ foreach name : apparmor_gen_profiles output: name, configuration: apparmor_gen_profiles_conf, install: true, - install_dir: apparmor_dir, + install_dir: install_prefix + apparmor_dir, ) endforeach @@ -68,13 +68,13 @@ foreach name : apparmor_gen_abstractions command: apparmor_gen_cmd, capture: true, install: true, - install_dir: apparmor_dir / 'abstractions', + install_dir: install_prefix + apparmor_dir / 'abstractions', ) endforeach install_data( [ 'TEMPLATE.qemu', 'TEMPLATE.lxc' ], - install_dir: apparmor_dir / 'libvirt', + install_dir: install_prefix + apparmor_dir / 'libvirt', ) if not conf.has('WITH_APPARMOR_3') @@ -83,7 +83,7 @@ if not conf.has('WITH_APPARMOR_3') # files in order to limit the amount of filesystem clutter. install_data( 'usr.lib.libvirt.virt-aa-helper.local', - install_dir: apparmor_dir / 'local', + install_dir: install_prefix + apparmor_dir / 'local', rename: 'usr.lib.libvirt.virt-aa-helper', ) endif diff --git a/src/storage/meson.build b/src/storage/meson.build index 404d6a6941..fb4e67a0a8 100644 --- a/src/storage/meson.build +++ b/src/storage/meson.build @@ -126,9 +126,9 @@ if conf.has('WITH_STORAGE') } virt_install_dirs += [ - confdir / 'storage', - confdir / 'storage' / 'autostart', - runstatedir / 'libvirt' / 'storage', + install_prefix + confdir / 'storage', + install_prefix + confdir / 'storage' / 'autostart', + install_prefix + runstatedir / 'libvirt' / 'storage', ] endif diff --git a/tools/meson.build b/tools/meson.build index 1bb84be0be..e04a4e986d 100644 --- a/tools/meson.build +++ b/tools/meson.build @@ -121,7 +121,7 @@ if conf.has('WITH_LOGIN_SHELL') install_rpath: libvirt_rpath, ) - install_data('virt-login-shell.conf', install_dir: sysconfdir / 'libvirt') + install_data('virt-login-shell.conf', install_dir: install_prefix + sysconfdir / 'libvirt') endif if host_machine.system() == 'windows' diff --git a/tools/ssh-proxy/meson.build b/tools/ssh-proxy/meson.build index e9f312fa25..95d5d8fe0b 100644 --- a/tools/ssh-proxy/meson.build +++ b/tools/ssh-proxy/meson.build @@ -20,6 +20,6 @@ if conf.has('WITH_SSH_PROXY') output: '@BASENAME@', configuration: tools_conf, install: true, - install_dir : sshconfdir, + install_dir : install_prefix + sshconfdir, ) endif -- 2.45.1