Olivia Crain
0e6b3435a1
In Meson, `install_subdir` is meant to be used with directories in the source
directory. When using it to install the HTML manual, we provide it with a path
under the build directory.
We should instead specify an install directory for the HTML manual as part of
the custom target that builds it.
What we do currently isn't broken, just semantically incorrect. Changing it does
get rid of the following deprecation warning, though:
``
Project [...] uses feature deprecated since '0.60.0': install_subdir with empty directory. It worked by accident and is buggy. Use install_emptydir instead.
``
Change-Id: I259583b7bdff8ecbb3b342653d70dc5f034c7fad
362 lines
8 KiB
Meson
362 lines
8 KiB
Meson
nix_env_for_docs = {
|
|
'HOME': '/dummy',
|
|
'NIX_CONF_DIR': '/dummy',
|
|
'NIX_SSL_CERT_FILE': '/dummy/no-ca-bundle.crt',
|
|
'NIX_STATE_DIR': '/dummy',
|
|
'NIX_CONFIG': 'cores = 0',
|
|
}
|
|
|
|
nix_for_docs = [ nix, '--experimental-features', 'nix-command' ]
|
|
nix_eval_for_docs_common = nix_for_docs + [
|
|
'eval',
|
|
'-I', 'nix/corepkgs=corepkgs',
|
|
'--store', 'dummy://',
|
|
'--impure',
|
|
]
|
|
nix_eval_for_docs = nix_eval_for_docs_common + '--raw'
|
|
|
|
conf_file_json = custom_target(
|
|
command : nix_for_docs + [ 'show-config', '--json' ],
|
|
capture : true,
|
|
output : 'conf-file.json',
|
|
env : nix_env_for_docs,
|
|
# FIXME: put the actual lib targets in here? meson have introspection challenge 2024 though.
|
|
build_always_stale : true,
|
|
)
|
|
|
|
nix_conf_file_md_body = custom_target(
|
|
command : nix_eval_for_docs + [
|
|
'--expr',
|
|
'(import @INPUT0@).showSettings { inlineHTML = true; } (builtins.fromJSON (builtins.readFile @INPUT1@))',
|
|
],
|
|
capture : true,
|
|
input : [
|
|
'utils.nix',
|
|
conf_file_json,
|
|
],
|
|
output : 'conf-file.md.body',
|
|
env : nix_env_for_docs,
|
|
)
|
|
|
|
nix_conf_file_md = custom_target(
|
|
command : [ 'cat', '@INPUT@' ],
|
|
capture : true,
|
|
input : [
|
|
'src/command-ref/conf-file.md',
|
|
nix_conf_file_md_body,
|
|
],
|
|
output : 'conf-file.md',
|
|
)
|
|
|
|
nix_exp_features_json = custom_target(
|
|
command : [ nix, '__dump-xp-features' ],
|
|
capture : true,
|
|
output : 'xp-features.json',
|
|
# FIXME: put the actual lib targets in here? meson have introspection challenge 2024 though.
|
|
build_always_stale : true,
|
|
)
|
|
|
|
language_json = custom_target(
|
|
command: [nix, '__dump-language'],
|
|
output : 'language.json',
|
|
capture : true,
|
|
env : nix_env_for_docs,
|
|
# FIXME: put the actual lib targets in here? meson have introspection challenge 2024 though.
|
|
build_always_stale : true,
|
|
)
|
|
|
|
nix3_cli_json = custom_target(
|
|
command : [ nix, '__dump-cli' ],
|
|
capture : true,
|
|
output : 'nix.json',
|
|
env : nix_env_for_docs,
|
|
# FIXME: put the actual lib targets in here? meson have introspection challenge 2024 though.
|
|
build_always_stale : true,
|
|
)
|
|
|
|
generate_manual_deps = files(
|
|
'generate-deps.py',
|
|
)
|
|
|
|
# Generates builtins.md and builtin-constants.md.
|
|
subdir('src/language')
|
|
# Generates new-cli pages, {experimental,deprecated}-features-shortlist.md, and conf-file.md.
|
|
subdir('src/command-ref')
|
|
# Generates {experimental,deprecated}-feature-descriptions.md.
|
|
subdir('src/contributing')
|
|
# Generates rl-next-generated.md.
|
|
subdir('src/release-notes')
|
|
|
|
manual = custom_target(
|
|
'manual',
|
|
command : [
|
|
bash,
|
|
'-euo', 'pipefail',
|
|
'-c',
|
|
'''
|
|
@0@ @INPUT0@ @CURRENT_SOURCE_DIR@ > @DEPFILE@
|
|
cd @SOURCE_ROOT@
|
|
@1@ build doc/manual -d @2@ | { grep -Fv "because fragment resolution isn't implemented" || :; }
|
|
rm -rf @2@/manual
|
|
mv @2@/html @2@/manual
|
|
find @2@/manual -iname meson.build -delete
|
|
'''.format(
|
|
python.full_path(),
|
|
mdbook.full_path(),
|
|
meson.current_build_dir(),
|
|
),
|
|
],
|
|
input : [
|
|
generate_manual_deps,
|
|
'book.toml',
|
|
'anchors.jq',
|
|
'custom.css',
|
|
nix3_cli_files,
|
|
experimental_features_shortlist_md,
|
|
experimental_feature_descriptions_md,
|
|
deprecated_features_shortlist_md,
|
|
deprecated_feature_descriptions_md,
|
|
conf_file_md,
|
|
builtins_md,
|
|
builtin_constants_md,
|
|
rl_next_generated,
|
|
nix,
|
|
],
|
|
output : [
|
|
'manual',
|
|
'markdown',
|
|
],
|
|
install_dir : [
|
|
datadir / 'doc/nix',
|
|
false,
|
|
],
|
|
depfile : 'manual.d',
|
|
env : {
|
|
'RUST_LOG': 'info',
|
|
'MDBOOK_SUBSTITUTE_SEARCH': meson.current_build_dir() / 'src',
|
|
},
|
|
)
|
|
manual_md = manual[1]
|
|
|
|
nix_nested_manpages = [
|
|
[ 'nix-env',
|
|
[
|
|
'delete-generations',
|
|
'install',
|
|
'list-generations',
|
|
'query',
|
|
'rollback',
|
|
'set-flag',
|
|
'set',
|
|
'switch-generation',
|
|
'switch-profile',
|
|
'uninstall',
|
|
'upgrade',
|
|
],
|
|
],
|
|
[ 'nix-store',
|
|
[
|
|
'add-fixed',
|
|
'add',
|
|
'delete',
|
|
'dump-db',
|
|
'dump',
|
|
'export',
|
|
'gc',
|
|
'generate-binary-cache-key',
|
|
'import',
|
|
'load-db',
|
|
'optimise',
|
|
'print-env',
|
|
'query',
|
|
'read-log',
|
|
'realise',
|
|
'repair-path',
|
|
'restore',
|
|
'serve',
|
|
'verify',
|
|
'verify-path',
|
|
],
|
|
],
|
|
]
|
|
|
|
foreach command : nix_nested_manpages
|
|
foreach page : command[1]
|
|
title = command[0] + ' --' + page
|
|
section = '1'
|
|
custom_target(
|
|
command : [
|
|
'./render-manpage.sh',
|
|
'--out-no-smarty',
|
|
title,
|
|
section,
|
|
'@INPUT0@/command-ref' / command[0] / (page + '.md'),
|
|
'@OUTPUT0@',
|
|
],
|
|
input : [
|
|
manual_md,
|
|
nix,
|
|
],
|
|
output : command[0] + '-' + page + '.1',
|
|
install : true,
|
|
install_dir : mandir / 'man1',
|
|
)
|
|
endforeach
|
|
endforeach
|
|
|
|
nix3_manpages = [
|
|
'nix3-build',
|
|
'nix3-bundle',
|
|
'nix3-config',
|
|
'nix3-config-show',
|
|
'nix3-copy',
|
|
'nix3-daemon',
|
|
'nix3-derivation-add',
|
|
'nix3-derivation',
|
|
'nix3-derivation-show',
|
|
'nix3-develop',
|
|
'nix3-doctor',
|
|
'nix3-edit',
|
|
'nix3-eval',
|
|
'nix3-flake-archive',
|
|
'nix3-flake-check',
|
|
'nix3-flake-clone',
|
|
'nix3-flake-info',
|
|
'nix3-flake-init',
|
|
'nix3-flake-lock',
|
|
'nix3-flake',
|
|
'nix3-flake-metadata',
|
|
'nix3-flake-new',
|
|
'nix3-flake-prefetch',
|
|
'nix3-flake-show',
|
|
'nix3-flake-update',
|
|
'nix3-fmt',
|
|
'nix3-hash-file',
|
|
'nix3-hash',
|
|
'nix3-hash-path',
|
|
'nix3-hash-to-base16',
|
|
'nix3-hash-to-base32',
|
|
'nix3-hash-to-base64',
|
|
'nix3-hash-to-sri',
|
|
'nix3-help',
|
|
'nix3-help-stores',
|
|
'nix3-key-convert-secret-to-public',
|
|
'nix3-key-generate-secret',
|
|
'nix3-key',
|
|
'nix3-log',
|
|
'nix3-nar-cat',
|
|
'nix3-nar-dump-path',
|
|
'nix3-nar-ls',
|
|
'nix3-nar',
|
|
'nix3-path-info',
|
|
'nix3-print-dev-env',
|
|
'nix3-profile-diff-closures',
|
|
'nix3-profile-history',
|
|
'nix3-profile-install',
|
|
'nix3-profile-list',
|
|
'nix3-profile',
|
|
'nix3-profile-remove',
|
|
'nix3-profile-rollback',
|
|
'nix3-profile-upgrade',
|
|
'nix3-profile-wipe-history',
|
|
'nix3-realisation-info',
|
|
'nix3-realisation',
|
|
'nix3-registry-add',
|
|
'nix3-registry-list',
|
|
'nix3-registry',
|
|
'nix3-registry-pin',
|
|
'nix3-registry-remove',
|
|
'nix3-repl',
|
|
'nix3-run',
|
|
'nix3-search',
|
|
'nix3-shell',
|
|
'nix3-store-add-file',
|
|
'nix3-store-add-path',
|
|
'nix3-store-cat',
|
|
'nix3-store-copy-log',
|
|
'nix3-store-copy-sigs',
|
|
'nix3-store-delete',
|
|
'nix3-store-diff-closures',
|
|
'nix3-store-dump-path',
|
|
'nix3-store-gc',
|
|
'nix3-store-ls',
|
|
'nix3-store-make-content-addressed',
|
|
'nix3-store',
|
|
'nix3-store-optimise',
|
|
'nix3-store-path-from-hash-part',
|
|
'nix3-store-ping',
|
|
'nix3-store-prefetch-file',
|
|
'nix3-store-repair',
|
|
'nix3-store-sign',
|
|
'nix3-store-verify',
|
|
'nix3-upgrade-nix',
|
|
'nix3-why-depends',
|
|
'nix',
|
|
]
|
|
|
|
foreach page : nix3_manpages
|
|
section = '1'
|
|
custom_target(
|
|
command : [
|
|
bash,
|
|
'@INPUT0@',
|
|
page,
|
|
section,
|
|
'@INPUT1@/command-ref/new-cli/@0@.md'.format(page),
|
|
'@OUTPUT@',
|
|
],
|
|
input : [
|
|
'render-manpage.sh',
|
|
manual_md,
|
|
nix,
|
|
],
|
|
output : page + '.1',
|
|
install : true,
|
|
install_dir : mandir / 'man1',
|
|
)
|
|
endforeach
|
|
|
|
nix_manpages = [
|
|
[ 'nix-env', 1 ],
|
|
[ 'nix-store', 1 ],
|
|
[ 'nix-build', 1 ],
|
|
[ 'nix-shell', 1 ],
|
|
[ 'nix-instantiate', 1 ],
|
|
[ 'nix-collect-garbage', 1 ],
|
|
[ 'nix-prefetch-url', 1 ],
|
|
[ 'nix-channel', 1 ],
|
|
[ 'nix-hash', 1 ],
|
|
[ 'nix-copy-closure', 1 ],
|
|
[ 'nix.conf', 5, 'conf-file.md' ],
|
|
[ 'nix-daemon', 8 ],
|
|
[ 'nix-profiles', 5, 'files/profiles.md' ],
|
|
]
|
|
|
|
foreach entry : nix_manpages
|
|
title = entry[0]
|
|
# nix.conf.5 and nix-profiles.5 are based off of conf-file.md and files/profiles.md,
|
|
# rather than a stem identical to its mdbook source.
|
|
# Therefore we use an optional third element of this array to override the name pattern
|
|
md_file = entry.get(2, title + '.md')
|
|
section = entry[1].to_string()
|
|
custom_target(
|
|
command : [
|
|
bash,
|
|
'@INPUT0@',
|
|
title,
|
|
section,
|
|
'@INPUT1@/command-ref/@0@'.format(md_file),
|
|
'@OUTPUT@',
|
|
],
|
|
input : [
|
|
'render-manpage.sh',
|
|
manual_md,
|
|
entry.get(3, []),
|
|
nix,
|
|
],
|
|
output : '@0@.@1@'.format(entry[0], entry[1]),
|
|
install : true,
|
|
install_dir : mandir / 'man@0@'.format(entry[1]),
|
|
)
|
|
endforeach
|