git/Documentation/meson.build
Patrick Steinhardt 3ee3a6eb52 meson: fix overwritten git variable
We're assigning the `git` variable in three places:

  - In "meson.build" to store the external Git executable.

  - In "meson.build" to store the compiled Git executable.

  - In "Documentation/meson.build" to store the external Git executable,
    a second time.

The last case is only needed because we overwrite the original variable
with the built version. Rename the variable used for the built Git
executable so that we don't have to resolve the external Git executable
multiple times.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-02-26 09:09:37 -08:00

504 lines
13 KiB
Meson

manpages = {
# Category 1.
'git-add.txt' : 1,
'git-am.txt' : 1,
'git-annotate.txt' : 1,
'git-apply.txt' : 1,
'git-archimport.txt' : 1,
'git-archive.txt' : 1,
'git-bisect.txt' : 1,
'git-blame.txt' : 1,
'git-branch.txt' : 1,
'git-bugreport.txt' : 1,
'git-bundle.txt' : 1,
'git-cat-file.txt' : 1,
'git-check-attr.txt' : 1,
'git-check-ignore.txt' : 1,
'git-check-mailmap.txt' : 1,
'git-checkout-index.txt' : 1,
'git-checkout.txt' : 1,
'git-check-ref-format.txt' : 1,
'git-cherry-pick.txt' : 1,
'git-cherry.txt' : 1,
'git-citool.txt' : 1,
'git-clean.txt' : 1,
'git-clone.txt' : 1,
'git-column.txt' : 1,
'git-commit-graph.txt' : 1,
'git-commit-tree.txt' : 1,
'git-commit.txt' : 1,
'git-config.txt' : 1,
'git-count-objects.txt' : 1,
'git-credential-cache--daemon.txt' : 1,
'git-credential-cache.txt' : 1,
'git-credential-store.txt' : 1,
'git-credential.txt' : 1,
'git-cvsexportcommit.txt' : 1,
'git-cvsimport.txt' : 1,
'git-cvsserver.txt' : 1,
'git-daemon.txt' : 1,
'git-describe.txt' : 1,
'git-diagnose.txt' : 1,
'git-diff-files.txt' : 1,
'git-diff-index.txt' : 1,
'git-difftool.txt' : 1,
'git-diff-tree.txt' : 1,
'git-diff.txt' : 1,
'git-fast-export.txt' : 1,
'git-fast-import.txt' : 1,
'git-fetch-pack.txt' : 1,
'git-fetch.txt' : 1,
'git-filter-branch.txt' : 1,
'git-fmt-merge-msg.txt' : 1,
'git-for-each-ref.txt' : 1,
'git-for-each-repo.txt' : 1,
'git-format-patch.txt' : 1,
'git-fsck-objects.txt' : 1,
'git-fsck.txt' : 1,
'git-fsmonitor--daemon.txt' : 1,
'git-gc.txt' : 1,
'git-get-tar-commit-id.txt' : 1,
'git-grep.txt' : 1,
'git-gui.txt' : 1,
'git-hash-object.txt' : 1,
'git-help.txt' : 1,
'git-hook.txt' : 1,
'git-http-backend.txt' : 1,
'git-http-fetch.txt' : 1,
'git-http-push.txt' : 1,
'git-imap-send.txt' : 1,
'git-index-pack.txt' : 1,
'git-init-db.txt' : 1,
'git-init.txt' : 1,
'git-instaweb.txt' : 1,
'git-interpret-trailers.txt' : 1,
'git-log.txt' : 1,
'git-ls-files.txt' : 1,
'git-ls-remote.txt' : 1,
'git-ls-tree.txt' : 1,
'git-mailinfo.txt' : 1,
'git-mailsplit.txt' : 1,
'git-maintenance.txt' : 1,
'git-merge-base.txt' : 1,
'git-merge-file.txt' : 1,
'git-merge-index.txt' : 1,
'git-merge-one-file.txt' : 1,
'git-mergetool--lib.txt' : 1,
'git-mergetool.txt' : 1,
'git-merge-tree.txt' : 1,
'git-merge.txt' : 1,
'git-mktag.txt' : 1,
'git-mktree.txt' : 1,
'git-multi-pack-index.txt' : 1,
'git-mv.txt' : 1,
'git-name-rev.txt' : 1,
'git-notes.txt' : 1,
'git-p4.txt' : 1,
'git-pack-objects.txt' : 1,
'git-pack-redundant.txt' : 1,
'git-pack-refs.txt' : 1,
'git-patch-id.txt' : 1,
'git-prune-packed.txt' : 1,
'git-prune.txt' : 1,
'git-pull.txt' : 1,
'git-push.txt' : 1,
'git-quiltimport.txt' : 1,
'git-range-diff.txt' : 1,
'git-read-tree.txt' : 1,
'git-rebase.txt' : 1,
'git-receive-pack.txt' : 1,
'git-reflog.txt' : 1,
'git-refs.txt' : 1,
'git-remote-ext.txt' : 1,
'git-remote-fd.txt' : 1,
'git-remote.txt' : 1,
'git-repack.txt' : 1,
'git-replace.txt' : 1,
'git-replay.txt' : 1,
'git-request-pull.txt' : 1,
'git-rerere.txt' : 1,
'git-reset.txt' : 1,
'git-restore.txt' : 1,
'git-revert.txt' : 1,
'git-rev-list.txt' : 1,
'git-rev-parse.txt' : 1,
'git-rm.txt' : 1,
'git-send-email.txt' : 1,
'git-send-pack.txt' : 1,
'git-shell.txt' : 1,
'git-sh-i18n--envsubst.txt' : 1,
'git-sh-i18n.txt' : 1,
'git-shortlog.txt' : 1,
'git-show-branch.txt' : 1,
'git-show-index.txt' : 1,
'git-show-ref.txt' : 1,
'git-show.txt' : 1,
'git-sh-setup.txt' : 1,
'git-sparse-checkout.txt' : 1,
'git-stage.txt' : 1,
'git-stash.txt' : 1,
'git-status.txt' : 1,
'git-stripspace.txt' : 1,
'git-submodule.txt' : 1,
'git-svn.txt' : 1,
'git-switch.txt' : 1,
'git-symbolic-ref.txt' : 1,
'git-tag.txt' : 1,
'git-unpack-file.txt' : 1,
'git-unpack-objects.txt' : 1,
'git-update-index.txt' : 1,
'git-update-ref.txt' : 1,
'git-update-server-info.txt' : 1,
'git-upload-archive.txt' : 1,
'git-upload-pack.txt' : 1,
'git-var.txt' : 1,
'git-verify-commit.txt' : 1,
'git-verify-pack.txt' : 1,
'git-verify-tag.txt' : 1,
'git-version.txt' : 1,
'git-web--browse.txt' : 1,
'git-whatchanged.txt' : 1,
'git-worktree.txt' : 1,
'git-write-tree.txt' : 1,
'git.txt' : 1,
'gitk.txt' : 1,
'gitweb.txt' : 1,
'scalar.txt' : 1,
# Category 5.
'gitattributes.txt' : 5,
'gitformat-bundle.txt' : 5,
'gitformat-chunk.txt' : 5,
'gitformat-commit-graph.txt' : 5,
'gitformat-index.txt' : 5,
'gitformat-pack.txt' : 5,
'gitformat-signature.txt' : 5,
'githooks.txt' : 5,
'gitignore.txt' : 5,
'gitmailmap.txt' : 5,
'gitmodules.txt' : 5,
'gitprotocol-capabilities.txt' : 5,
'gitprotocol-common.txt' : 5,
'gitprotocol-http.txt' : 5,
'gitprotocol-pack.txt' : 5,
'gitprotocol-v2.txt' : 5,
'gitrepository-layout.txt' : 5,
'gitweb.conf.txt' : 5,
# Category 7.
'gitcli.txt' : 7,
'gitcore-tutorial.txt' : 7,
'gitcredentials.txt' : 7,
'gitcvs-migration.txt' : 7,
'gitdiffcore.txt' : 7,
'giteveryday.txt' : 7,
'gitfaq.txt' : 7,
'gitglossary.txt' : 7,
'gitpacking.txt' : 7,
'gitnamespaces.txt' : 7,
'gitremote-helpers.txt' : 7,
'gitrevisions.txt' : 7,
'gitsubmodules.txt' : 7,
'gittutorial-2.txt' : 7,
'gittutorial.txt' : 7,
'gitworkflows.txt' : 7,
}
docs_backend = get_option('docs_backend')
if docs_backend == 'auto'
if find_program('asciidoc', required: false).found()
docs_backend = 'asciidoc'
elif find_program('asciidoctor', required: false).found()
docs_backend = 'asciidoctor'
else
error('Neither asciidoc nor asciidoctor were found.')
endif
endif
if docs_backend == 'asciidoc'
asciidoc = find_program('asciidoc', required: true)
asciidoc_html = 'xhtml11'
asciidoc_docbook = 'docbook'
xmlto_extra = [ ]
asciidoc_conf = custom_target(
command: [
shell,
meson.project_source_root() / 'GIT-VERSION-GEN',
meson.project_source_root(),
'@INPUT@',
'@OUTPUT@',
],
input: 'asciidoc.conf.in',
output: 'asciidoc.conf',
depends: [git_version_file],
env: version_gen_environment,
)
asciidoc_common_options = [
asciidoc,
'--conf-file=' + asciidoc_conf.full_path(),
'--attribute=build_dir=' + meson.current_build_dir(),
]
documentation_deps = [
asciidoc_conf,
]
elif docs_backend == 'asciidoctor'
asciidoctor = find_program('asciidoctor', required: true)
asciidoc_html = 'xhtml5'
asciidoc_docbook = 'docbook5'
xmlto_extra = [
'--skip-validation',
'-x', meson.current_source_dir() / 'manpage.xsl',
]
asciidoctor_extensions = custom_target(
command: [
shell,
meson.project_source_root() / 'GIT-VERSION-GEN',
meson.project_source_root(),
'@INPUT@',
'@OUTPUT@',
],
input: 'asciidoctor-extensions.rb.in',
output: 'asciidoctor-extensions.rb',
depends: [git_version_file],
env: version_gen_environment,
)
asciidoc_common_options = [
asciidoctor,
'--attribute', 'compat-mode',
'--attribute', 'tabsize=8',
'--attribute', 'litdd=&#x2d;&#x2d;',
'--attribute', 'docinfo=shared',
'--attribute', 'build_dir=' + meson.current_build_dir(),
'--load-path', meson.current_build_dir(),
'--require', 'asciidoctor-extensions',
]
documentation_deps = [
asciidoctor_extensions,
]
endif
xmlto = find_program('xmlto')
cmd_lists = [
'cmds-ancillaryinterrogators.txt',
'cmds-ancillarymanipulators.txt',
'cmds-mainporcelain.txt',
'cmds-plumbinginterrogators.txt',
'cmds-plumbingmanipulators.txt',
'cmds-synchingrepositories.txt',
'cmds-synchelpers.txt',
'cmds-guide.txt',
'cmds-developerinterfaces.txt',
'cmds-userinterfaces.txt',
'cmds-purehelpers.txt',
'cmds-foreignscminterface.txt',
]
documentation_deps += custom_target(
command: [
perl,
'@INPUT@',
meson.project_source_root(),
meson.current_build_dir(),
] + cmd_lists,
input: 'cmd-list.perl',
output: cmd_lists
)
foreach mode : [ 'diff', 'merge' ]
documentation_deps += custom_target(
command: [
shell,
'@INPUT@',
'..',
mode,
'@OUTPUT@'
],
env: [
'MERGE_TOOLS_DIR=' + meson.project_source_root() / 'mergetools',
],
input: 'generate-mergetool-list.sh',
output: 'mergetools-' + mode + '.txt',
)
endforeach
foreach manpage, category : manpages
if get_option('docs').contains('man')
manpage_xml_target = custom_target(
command: asciidoc_common_options + [
'--backend=' + asciidoc_docbook,
'--doctype=manpage',
'--out-file=@OUTPUT@',
'@INPUT@',
],
depends: documentation_deps,
input: manpage,
output: fs.stem(manpage) + '.xml',
)
manpage_path = fs.stem(manpage) + '.' + category.to_string()
manpage_target = custom_target(
command: [
xmlto,
'-m', '@INPUT0@',
'-m', '@INPUT1@',
'--stringparam',
'man.base.url.for.relative.links=' + get_option('prefix') / get_option('mandir'),
'man',
manpage_xml_target,
'-o',
meson.current_build_dir(),
] + xmlto_extra,
input: [
'manpage-normal.xsl',
'manpage-bold-literal.xsl',
],
output: manpage_path,
install: true,
install_dir: get_option('mandir') / 'man' + category.to_string(),
)
endif
if get_option('docs').contains('html')
custom_target(
command: asciidoc_common_options + [
'--backend=' + asciidoc_html,
'--doctype=manpage',
'--out-file=@OUTPUT@',
'@INPUT@',
],
depends: documentation_deps,
input: manpage,
output: fs.stem(manpage) + '.html',
install: true,
install_dir: get_option('datadir') / 'doc/git-doc',
)
endif
endforeach
if get_option('docs').contains('html')
configure_file(
input: 'docinfo-html.in',
output: 'docinfo.html',
copy: true,
install: true,
install_dir: get_option('datadir') / 'doc/git-doc',
)
configure_file(
input: 'docbook-xsl.css',
output: 'docbook-xsl.css',
copy: true,
install: true,
install_dir: get_option('datadir') / 'doc/git-doc',
)
install_symlink('index.html',
install_dir: get_option('datadir') / 'doc/git-doc',
pointing_to: 'git.html',
)
xsltproc = find_program('xsltproc')
user_manual_xml = custom_target(
command: asciidoc_common_options + [
'--backend=' + asciidoc_docbook,
'--doctype=book',
'--out-file=@OUTPUT@',
'@INPUT@',
],
input: 'user-manual.txt',
output: 'user-manual.xml',
depends: documentation_deps,
)
custom_target(
command: [
xsltproc,
'--xinclude',
'--stringparam', 'html.stylesheet', 'docbook-xsl.css',
'--param', 'generate.consistent.ids', '1',
'--output', '@OUTPUT@',
'@INPUT@',
user_manual_xml,
],
input: 'docbook.xsl',
output: 'user-manual.html',
install: true,
install_dir: get_option('datadir') / 'doc/git-doc',
)
articles = [
'DecisionMaking.txt',
'MyFirstContribution.txt',
'MyFirstObjectWalk.txt',
'ReviewingGuidelines.txt',
'SubmittingPatches',
'ToolsForGit.txt',
'git-bisect-lk2009.txt',
'git-tools.txt',
]
foreach article : articles
custom_target(
command: asciidoc_common_options + [
'--backend=' + asciidoc_html,
'--out-file=@OUTPUT@',
'@INPUT@',
],
input: article,
output: fs.stem(article) + '.html',
depends: documentation_deps,
install: true,
install_dir: get_option('datadir') / 'doc/git-doc',
)
endforeach
asciidoc_html_options = asciidoc_common_options + [
'--backend=' + asciidoc_html,
'--out-file=@OUTPUT@',
'--attribute', 'git-relative-html-prefix=../',
'@INPUT@',
]
subdir('howto')
subdir('technical')
endif
# Sanity check that we are not missing any tests present in 't/'. This check
# only runs once at configure time and is thus best-effort, only. Furthermore,
# it only verifies man pages for the sake of simplicity.
configured_manpages = manpages.keys() + [ 'git-bisect-lk2009.txt', 'git-tools.txt' ]
actual_manpages = run_command(shell, '-c', 'ls git*.txt scalar.txt',
check: true,
env: script_environment,
).stdout().strip().split('\n')
if configured_manpages != actual_manpages
missing_manpage = [ ]
foreach actual_manpage : actual_manpages
if actual_manpage not in configured_manpages
missing_manpage += actual_manpage
endif
endforeach
if missing_manpage.length() > 0
error('Man page found, but not configured:\n\n - ' + '\n - '.join(missing_manpage))
endif
superfluous_manpage = [ ]
foreach configured_manpage : configured_manpages
if configured_manpage not in actual_manpages
superfluous_manpage += configured_manpage
endif
endforeach
if superfluous_manpage.length() > 0
error('Man page configured, but not found:\n\n - ' + '\n - '.join(superfluous_manpage))
endif
endif