Merge pull request #11302 from obsidiansystems/meson-misc-2

Misc Meson progress
This commit is contained in:
Robert Hensing 2024-08-27 19:32:03 +02:00 committed by GitHub
commit 076b6f7bb1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 141 additions and 14 deletions

View file

@ -10,6 +10,7 @@ foreach dep : deps_public_subproject
endforeach endforeach
requires_public += deps_public requires_public += deps_public
extra_pkg_config_variables = get_variable('extra_pkg_config_variables', {})
import('pkgconfig').generate( import('pkgconfig').generate(
this_library, this_library,
filebase : meson.project_name(), filebase : meson.project_name(),
@ -20,6 +21,7 @@ import('pkgconfig').generate(
requires : requires_public, requires : requires_public,
requires_private : requires_private, requires_private : requires_private,
libraries_private : libraries_private, libraries_private : libraries_private,
variables : extra_pkg_config_variables,
) )
meson.override_dependency(meson.project_name(), declare_dependency( meson.override_dependency(meson.project_name(), declare_dependency(
@ -27,4 +29,5 @@ meson.override_dependency(meson.project_name(), declare_dependency(
link_with : this_library, link_with : this_library,
compile_args : ['-std=c++2a'], compile_args : ['-std=c++2a'],
dependencies : deps_public_subproject + deps_public, dependencies : deps_public_subproject + deps_public,
variables : extra_pkg_config_variables,
)) ))

View file

@ -295,6 +295,7 @@
devShells = let devShells = let
makeShell = pkgs: stdenv: (pkgs.nix.override { inherit stdenv; forDevShell = true; }).overrideAttrs (attrs: makeShell = pkgs: stdenv: (pkgs.nix.override { inherit stdenv; forDevShell = true; }).overrideAttrs (attrs:
let let
buildCanExecuteHost = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
modular = devFlake.getSystem stdenv.buildPlatform.system; modular = devFlake.getSystem stdenv.buildPlatform.system;
transformFlag = prefix: flag: transformFlag = prefix: flag:
assert builtins.isString flag; assert builtins.isString flag;
@ -352,7 +353,7 @@
++ pkgs.nixComponents.nix-external-api-docs.nativeBuildInputs ++ pkgs.nixComponents.nix-external-api-docs.nativeBuildInputs
++ pkgs.nixComponents.nix-functional-tests.baseNativeBuildInputs ++ pkgs.nixComponents.nix-functional-tests.baseNativeBuildInputs
++ lib.optional ++ lib.optional
(!stdenv.buildPlatform.canExecute stdenv.hostPlatform (!buildCanExecuteHost
# Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479 # Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479
&& !(stdenv.hostPlatform.isWindows && stdenv.buildPlatform.isDarwin) && !(stdenv.hostPlatform.isWindows && stdenv.buildPlatform.isDarwin)
&& stdenv.hostPlatform.emulatorAvailable pkgs.buildPackages && stdenv.hostPlatform.emulatorAvailable pkgs.buildPackages

View file

@ -3,7 +3,9 @@
project('nix-dev-shell', 'cpp', project('nix-dev-shell', 'cpp',
version : files('.version'), version : files('.version'),
subproject_dir : 'src', default_options : [
'localstatedir=/nix/var',
]
) )
# Internal Libraries # Internal Libraries

8
misc/bash/meson.build Normal file
View file

@ -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
misc/fish/meson.build Normal file
View file

@ -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
misc/meson.build Normal file
View file

@ -0,0 +1,5 @@
subdir('bash')
subdir('fish')
subdir('zsh')
subdir('systemd')

25
misc/systemd/meson.build Normal file
View file

@ -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'),
},
)
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
misc/zsh/meson.build Normal file
View file

@ -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
scripts/meson.build Normal file
View file

@ -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

View file

@ -7,6 +7,7 @@ project('nix-store', 'cpp',
'debug=true', 'debug=true',
'optimization=2', 'optimization=2',
'errorlogs=true', # Please print logs for tests that fail 'errorlogs=true', # Please print logs for tests that fail
'localstatedir=/nix/var',
], ],
meson_version : '>= 1.1', meson_version : '>= 1.1',
license : 'LGPL-2.1-or-later', license : 'LGPL-2.1-or-later',
@ -324,7 +325,7 @@ fs = import('fs')
prefix = get_option('prefix') prefix = get_option('prefix')
# For each of these paths, assume that it is relative to the prefix unless # 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 = [ path_opts = [
# Meson built-ins. # Meson built-ins.
'datadir', 'datadir',
@ -334,13 +335,13 @@ path_opts = [
'libexecdir', 'libexecdir',
# Homecooked Nix directories. # Homecooked Nix directories.
'store-dir', 'store-dir',
'state-dir', 'localstatedir',
'log-dir', 'log-dir',
] ]
# For your grepping pleasure, this loop sets the following variables that aren't mentioned # For your grepping pleasure, this loop sets the following variables that aren't mentioned
# literally above: # literally above:
# store_dir # store_dir
# state_dir # localstatedir
# log_dir # log_dir
# profile_dir # profile_dir
foreach optname : path_opts foreach optname : path_opts
@ -364,12 +365,12 @@ lsof = find_program('lsof', required : false)
# Aside from prefix itself, each of these was made into an absolute path # 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 # 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 = { cpp_str_defines = {
'NIX_PREFIX': prefix, 'NIX_PREFIX': prefix,
'NIX_STORE_DIR': store_dir, 'NIX_STORE_DIR': store_dir,
'NIX_DATA_DIR': datadir, 'NIX_DATA_DIR': datadir,
'NIX_STATE_DIR': state_dir / 'nix', 'NIX_STATE_DIR': localstatedir / 'nix',
'NIX_LOG_DIR': log_dir, 'NIX_LOG_DIR': log_dir,
'NIX_CONF_DIR': sysconfdir / 'nix', 'NIX_CONF_DIR': sysconfdir / 'nix',
'NIX_MAN_DIR': mandir, 'NIX_MAN_DIR': mandir,
@ -421,4 +422,15 @@ install_headers(headers, subdir : 'nix', preserve_path : true)
libraries_private = [] 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') subdir('build-utils-meson/export')

View file

@ -16,10 +16,6 @@ option('store-dir', type : 'string', value : '/nix/store',
description : 'path of the 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', option('log-dir', type : 'string', value : '/nix/var/log/nix',
description : 'path to store logs in for Nix', description : 'path to store logs in for Nix',
) )

View file

@ -129,7 +129,6 @@ sources = files(
'english.cc', 'english.cc',
'environment-variables.cc', 'environment-variables.cc',
'error.cc', 'error.cc',
'exec.hh',
'executable-path.cc', 'executable-path.cc',
'exit.cc', 'exit.cc',
'experimental-features.cc', 'experimental-features.cc',
@ -186,6 +185,7 @@ headers = [config_h] + files(
'english.hh', 'english.hh',
'environment-variables.hh', 'environment-variables.hh',
'error.hh', 'error.hh',
'exec.hh',
'executable-path.hh', 'executable-path.hh',
'exit.hh', 'exit.hh',
'experimental-features.hh', 'experimental-features.hh',

View file

@ -7,6 +7,7 @@ project('nix', 'cpp',
'debug=true', 'debug=true',
'optimization=2', 'optimization=2',
'errorlogs=true', # Please print logs for tests that fail 'errorlogs=true', # Please print logs for tests that fail
'localstatedir=/nix/var',
], ],
meson_version : '>= 1.1', meson_version : '>= 1.1',
license : 'LGPL-2.1-or-later', license : 'LGPL-2.1-or-later',
@ -16,9 +17,11 @@ cxx = meson.get_compiler('cpp')
subdir('build-utils-meson/deps-lists') subdir('build-utils-meson/deps-lists')
nix_store = dependency('nix-store')
deps_private_maybe_subproject = [ deps_private_maybe_subproject = [
dependency('nix-util'), dependency('nix-util'),
dependency('nix-store'), nix_store,
dependency('nix-expr'), dependency('nix-expr'),
dependency('nix-flake'), dependency('nix-flake'),
dependency('nix-fetchers'), dependency('nix-fetchers'),
@ -244,3 +247,12 @@ custom_target(
) )
# TODO(Ericson3214): Dosen't yet work # TODO(Ericson3214): Dosen't yet work
#meson.override_find_program(linkname, t) #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
src/nix/meson.options Normal file
View file

@ -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
src/nix/misc Symbolic link
View file

@ -0,0 +1 @@
../../misc

View file

@ -36,9 +36,10 @@ mkMesonDerivation (finalAttrs: {
../../.version ../../.version
./.version ./.version
./meson.build ./meson.build
# ./meson.options ./meson.options
# Symbolic links to other dirs # Symbolic links to other dirs
## exes
./build-remote ./build-remote
./doc ./doc
./nix-build ./nix-build
@ -48,6 +49,11 @@ mkMesonDerivation (finalAttrs: {
./nix-env ./nix-env
./nix-instantiate ./nix-instantiate
./nix-store ./nix-store
## dirs
./scripts
../../scripts
./misc
../../misc
# Doc nix files for --help # Doc nix files for --help
../../doc/manual/generate-manpage.nix ../../doc/manual/generate-manpage.nix

1
src/nix/scripts Symbolic link
View file

@ -0,0 +1 @@
../../scripts

1
subprojects Symbolic link
View file

@ -0,0 +1 @@
src

View file

@ -46,6 +46,7 @@ include_dirs = [include_directories('.')]
headers = files( headers = files(
'tests/characterization.hh', 'tests/characterization.hh',
'tests/gtest-with-params.hh',
'tests/hash.hh', 'tests/hash.hh',
'tests/nix_api_util.hh', 'tests/nix_api_util.hh',
'tests/string_callback.hh', 'tests/string_callback.hh',