Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Misc Meson progress #11302

Merged
merged 1 commit into from
Aug 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions build-utils-meson/export/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ foreach dep : deps_public_subproject
endforeach
requires_public += deps_public

extra_pkg_config_variables = get_variable('extra_pkg_config_variables', {})
import('pkgconfig').generate(
this_library,
filebase : meson.project_name(),
Expand All @@ -20,11 +21,13 @@ import('pkgconfig').generate(
requires : requires_public,
requires_private : requires_private,
libraries_private : libraries_private,
variables : extra_pkg_config_variables,
)

meson.override_dependency(meson.project_name(), declare_dependency(
include_directories : include_dirs,
link_with : this_library,
compile_args : ['-std=c++2a'],
dependencies : deps_public_subproject + deps_public,
variables : extra_pkg_config_variables,
))
3 changes: 2 additions & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@
devShells = let
makeShell = pkgs: stdenv: (pkgs.nix.override { inherit stdenv; forDevShell = true; }).overrideAttrs (attrs:
let
buildCanExecuteHost = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
modular = devFlake.getSystem stdenv.buildPlatform.system;
transformFlag = prefix: flag:
assert builtins.isString flag;
Expand Down Expand Up @@ -352,7 +353,7 @@
++ pkgs.nixComponents.nix-external-api-docs.nativeBuildInputs
++ pkgs.nixComponents.nix-functional-tests.baseNativeBuildInputs
++ lib.optional
(!stdenv.buildPlatform.canExecute stdenv.hostPlatform
(!buildCanExecuteHost
# Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479
&& !(stdenv.hostPlatform.isWindows && stdenv.buildPlatform.isDarwin)
&& stdenv.hostPlatform.emulatorAvailable pkgs.buildPackages
Expand Down
4 changes: 3 additions & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

project('nix-dev-shell', 'cpp',
version : files('.version'),
subproject_dir : 'src',
default_options : [
'localstatedir=/nix/var',
]
)

# Internal Libraries
Expand Down
8 changes: 8 additions & 0 deletions misc/bash/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
configure_file(
input : 'completion.sh',
output : 'nix',
install : true,
install_dir : get_option('datadir') / 'bash-completion' / 'completions',
install_mode : 'rw-r--r--',
copy : true,
)
8 changes: 8 additions & 0 deletions misc/fish/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
configure_file(
input : 'completion.fish',
output : 'nix.fish',
install : true,
install_dir : get_option('datadir') / 'fish' / 'vendor_completions.d',
install_mode : 'rw-r--r--',
copy : true,
)
5 changes: 5 additions & 0 deletions misc/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
subdir('bash')
subdir('fish')
subdir('zsh')

subdir('systemd')
25 changes: 25 additions & 0 deletions misc/systemd/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
foreach config : [ 'nix-daemon.socket', 'nix-daemon.service' ]
configure_file(
input : config + '.in',
output : config,
install : true,
install_dir : get_option('prefix') / 'lib/systemd/system',
install_mode : 'rw-r--r--',
configuration : {
'storedir' : store_dir,
'localstatedir' : localstatedir,
'bindir' : get_option('datadir'),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This appears to produce a busted systemd unit.

$ cat result/lib/systemd/system/nix-daemon.service
[Unit]
Description=Nix Daemon
Documentation=man:nix-daemon https://nixos.org/manual
RequiresMountsFor=/nix/store
RequiresMountsFor=/nix/var
RequiresMountsFor=/nix/var/nix/db
ConditionPathIsReadWrite=/nix/var/nix/daemon-socket

[Service]
ExecStart=@share/nix-daemon nix-daemon --daemon
KillMode=process
LimitNOFILE=1048576
TasksMax=1048576

[Install]
WantedBy=multi-user.target

Notice how ExecStart is @share/nix-daemon, which is unlikely to exist on any machine.

Fixed in #11413.

},
)
endforeach

configure_file(
input : 'nix-daemon.conf.in',
output : 'nix-daemon.conf',
install : true,
install_dir : get_option('prefix') / 'lib/tmpfiles.d',
install_mode : 'rw-r--r--',
configuration : {
'localstatedir' : localstatedir,
},
)
10 changes: 10 additions & 0 deletions misc/zsh/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
foreach script : [ [ 'completion.zsh', '_nix' ], [ 'run-help-nix' ] ]
configure_file(
input : script[0],
output : script.get(1, script[0]),
install : true,
install_dir : get_option('datadir') / 'zsh/site-functions',
install_mode : 'rw-r--r--',
copy : true,
)
endforeach
29 changes: 29 additions & 0 deletions scripts/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# configures `scripts/nix-profile.sh.in` (and copies the original to the build directory).
# this is only needed for tests, but running it unconditionally does not hurt enough to care.
configure_file(
input : 'nix-profile.sh.in',
output : 'nix-profile.sh',
configuration : {
'localstatedir': localstatedir,
}
)

# https://github.com/mesonbuild/meson/issues/860
configure_file(
input : 'nix-profile.sh.in',
output : 'nix-profile.sh.in',
copy : true,
)

foreach rc : [ '.sh', '.fish', '-daemon.sh', '-daemon.fish' ]
configure_file(
input : 'nix-profile' + rc + '.in',
output : 'nix' + rc,
install : true,
install_dir : get_option('profile-dir'),
install_mode : 'rw-r--r--',
configuration : {
'localstatedir': localstatedir,
},
)
endforeach
22 changes: 17 additions & 5 deletions src/libstore/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ project('nix-store', 'cpp',
'debug=true',
'optimization=2',
'errorlogs=true', # Please print logs for tests that fail
'localstatedir=/nix/var',
],
meson_version : '>= 1.1',
license : 'LGPL-2.1-or-later',
Expand Down Expand Up @@ -324,7 +325,7 @@ fs = import('fs')

prefix = get_option('prefix')
# For each of these paths, assume that it is relative to the prefix unless
# it is already an absolute path (which is the default for store-dir, state-dir, and log-dir).
# it is already an absolute path (which is the default for store-dir, localstatedir, and log-dir).
path_opts = [
# Meson built-ins.
'datadir',
Expand All @@ -334,13 +335,13 @@ path_opts = [
'libexecdir',
# Homecooked Nix directories.
'store-dir',
'state-dir',
'localstatedir',
'log-dir',
]
# For your grepping pleasure, this loop sets the following variables that aren't mentioned
# literally above:
# store_dir
# state_dir
# localstatedir
# log_dir
# profile_dir
foreach optname : path_opts
Expand All @@ -364,12 +365,12 @@ lsof = find_program('lsof', required : false)

# Aside from prefix itself, each of these was made into an absolute path
# by joining it with prefix, unless it was already an absolute path
# (which is the default for store-dir, state-dir, and log-dir).
# (which is the default for store-dir, localstatedir, and log-dir).
cpp_str_defines = {
'NIX_PREFIX': prefix,
'NIX_STORE_DIR': store_dir,
'NIX_DATA_DIR': datadir,
'NIX_STATE_DIR': state_dir / 'nix',
'NIX_STATE_DIR': localstatedir / 'nix',
'NIX_LOG_DIR': log_dir,
'NIX_CONF_DIR': sysconfdir / 'nix',
'NIX_MAN_DIR': mandir,
Expand Down Expand Up @@ -421,4 +422,15 @@ install_headers(headers, subdir : 'nix', preserve_path : true)

libraries_private = []

extra_pkg_config_variables = {
'storedir' : get_option('store-dir'),
}

# Working around https://github.com/mesonbuild/meson/issues/13584
if host_machine.system() != 'macos'
extra_pkg_config_variables += {
'localstatedir' : get_option('localstatedir'),
}
endif

subdir('build-utils-meson/export')
4 changes: 0 additions & 4 deletions src/libstore/meson.options
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ option('store-dir', type : 'string', value : '/nix/store',
description : 'path of the Nix store',
)

option('state-dir', type : 'string', value : '/nix/var',
description : 'path to store state in for Nix',
)

option('log-dir', type : 'string', value : '/nix/var/log/nix',
description : 'path to store logs in for Nix',
)
2 changes: 1 addition & 1 deletion src/libutil/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ sources = files(
'english.cc',
'environment-variables.cc',
'error.cc',
'exec.hh',
'executable-path.cc',
'exit.cc',
'experimental-features.cc',
Expand Down Expand Up @@ -186,6 +185,7 @@ headers = [config_h] + files(
'english.hh',
'environment-variables.hh',
'error.hh',
'exec.hh',
'executable-path.hh',
'exit.hh',
'experimental-features.hh',
Expand Down
14 changes: 13 additions & 1 deletion src/nix/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ project('nix', 'cpp',
'debug=true',
'optimization=2',
'errorlogs=true', # Please print logs for tests that fail
'localstatedir=/nix/var',
],
meson_version : '>= 1.1',
license : 'LGPL-2.1-or-later',
Expand All @@ -16,9 +17,11 @@ cxx = meson.get_compiler('cpp')

subdir('build-utils-meson/deps-lists')

nix_store = dependency('nix-store')

deps_private_maybe_subproject = [
dependency('nix-util'),
dependency('nix-store'),
nix_store,
dependency('nix-expr'),
dependency('nix-flake'),
dependency('nix-fetchers'),
Expand Down Expand Up @@ -244,3 +247,12 @@ custom_target(
)
# TODO(Ericson3214): Dosen't yet work
#meson.override_find_program(linkname, t)

localstatedir = nix_store.get_variable(
'localstatedir',
default_value : get_option('localstatedir'),
)
assert(localstatedir == get_option('localstatedir'))
store_dir = nix_store.get_variable('storedir')
subdir('scripts')
subdir('misc')
6 changes: 6 additions & 0 deletions src/nix/meson.options
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# vim: filetype=meson

# A relative path means it gets appended to prefix.
option('profile-dir', type : 'string', value : 'etc/profile.d',
description : 'the path to install shell profile files',
)
1 change: 1 addition & 0 deletions src/nix/misc
8 changes: 7 additions & 1 deletion src/nix/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,10 @@ mkMesonDerivation (finalAttrs: {
../../.version
./.version
./meson.build
# ./meson.options
./meson.options

# Symbolic links to other dirs
## exes
./build-remote
./doc
./nix-build
Expand All @@ -48,6 +49,11 @@ mkMesonDerivation (finalAttrs: {
./nix-env
./nix-instantiate
./nix-store
## dirs
./scripts
../../scripts
./misc
../../misc

# Doc nix files for --help
../../doc/manual/generate-manpage.nix
Expand Down
1 change: 1 addition & 0 deletions src/nix/scripts
1 change: 1 addition & 0 deletions subprojects
1 change: 1 addition & 0 deletions tests/unit/libutil-support/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ include_dirs = [include_directories('.')]

headers = files(
'tests/characterization.hh',
'tests/gtest-with-params.hh',
'tests/hash.hh',
'tests/nix_api_util.hh',
'tests/string_callback.hh',
Expand Down
Loading