From: Junio C Hamano Date: Tue, 04 Nov 2025 14:41:06 GMT Subject: Re: [PATCH] meson: make GIT_HTML_PATH configurable Message-ID: In-Reply-To: <385992f6020703558f0ba75a1be6c4f9dae08b83.1762264709.git.ben.knoble+github@gmail.com> "D. Ben Knoble" writes: > Makefile-based builds can configure Git's internal HTML_PATH by defining > htmldir, which is useful for packagers that put documentation in > different locations. Gentoo, for example, uses version-suffixed > directories like ${prefix}/share/doc/git-2.51 and puts the HTML > documentation in an 'html' subdirectory of the same. > > Propagate the same configuration knob to Meson-based builds so that > "git --html-path" on such systems can be configured to output the > correct directory. > > Signed-off-by: D. Ben Knoble > --- Makes sense (a more meson-minded person needs to double check my knee-jerk reaction, though). It is surprising that $ git grep "dir', " meson_options.txt meson_options.txt:option('perllibdir', type: 'string', value: '', has only a single hit (now two), though. I thought we have a lot more flexibility in our build process. I am also a bit surprised that these things are of type 'string'; I somehow was expecting that more modern build system would offer richer (relative to Makefile, that is) types like 'filename' or 'path'. > I've tested this with a modified live Gentoo ebuild [1] and had good results. Thanks. Will queue and wait for others to chime in. > > [1]: https://github.com/benknoble/gentoo-repo/commit/f2e6bbc8ec5e061a7f8151e56fa91a9d31b5b30b > > Documentation/howto/meson.build | 4 ++-- > Documentation/meson.build | 12 ++++++------ > Documentation/technical/meson.build | 4 ++-- > contrib/contacts/meson.build | 2 +- > contrib/subtree/meson.build | 2 +- > meson.build | 7 ++++++- > meson_options.txt | 2 ++ > 7 files changed, 20 insertions(+), 13 deletions(-) > > diff --git a/Documentation/howto/meson.build b/Documentation/howto/meson.build > index ece20244af..16b9056f24 100644 > --- a/Documentation/howto/meson.build > +++ b/Documentation/howto/meson.build > @@ -35,7 +35,7 @@ doc_targets += custom_target( > output: 'howto-index.html', > depends: documentation_deps, > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > > foreach howto : howto_sources > @@ -57,6 +57,6 @@ foreach howto : howto_sources > output: fs.stem(howto_stripped.full_path()) + '.html', > depends: documentation_deps, > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc/howto', > + install_dir: htmldir / 'howto', > ) > endforeach > diff --git a/Documentation/meson.build b/Documentation/meson.build > index 9d24f2da54..c00c9fe7f4 100644 > --- a/Documentation/meson.build > +++ b/Documentation/meson.build > @@ -412,7 +412,7 @@ foreach manpage, category : manpages > input: manpage, > output: fs.stem(manpage) + '.html', > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > endif > endforeach > @@ -423,7 +423,7 @@ if get_option('docs').contains('html') > output: 'docinfo.html', > copy: true, > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > > configure_file( > @@ -431,11 +431,11 @@ if get_option('docs').contains('html') > output: 'docbook-xsl.css', > copy: true, > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > > install_symlink('index.html', > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > pointing_to: 'git.html', > ) > > @@ -466,7 +466,7 @@ if get_option('docs').contains('html') > input: 'docbook.xsl', > output: 'user-manual.html', > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > > articles = [ > @@ -492,7 +492,7 @@ if get_option('docs').contains('html') > output: fs.stem(article) + '.html', > depends: documentation_deps, > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > endforeach > > diff --git a/Documentation/technical/meson.build b/Documentation/technical/meson.build > index be698ef22a..faff3964a9 100644 > --- a/Documentation/technical/meson.build > +++ b/Documentation/technical/meson.build > @@ -53,7 +53,7 @@ doc_targets += custom_target( > output: 'api-index.html', > depends: documentation_deps, > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc/technical', > + install_dir: htmldir / 'technical', > ) > > foreach article : api_docs + articles > @@ -63,6 +63,6 @@ foreach article : api_docs + articles > output: fs.stem(article) + '.html', > depends: documentation_deps, > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc/technical', > + install_dir: htmldir / 'technical', > ) > endforeach > diff --git a/contrib/contacts/meson.build b/contrib/contacts/meson.build > index c8fdb35ed9..4ae6b32a03 100644 > --- a/contrib/contacts/meson.build > +++ b/contrib/contacts/meson.build > @@ -50,6 +50,6 @@ if get_option('docs').contains('html') > input: 'git-contacts.adoc', > output: 'git-contacts.html', > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > endif > diff --git a/contrib/subtree/meson.build b/contrib/subtree/meson.build > index 46cdbcc30c..161435abeb 100644 > --- a/contrib/subtree/meson.build > +++ b/contrib/subtree/meson.build > @@ -68,6 +68,6 @@ if get_option('docs').contains('html') > input: 'git-subtree.adoc', > output: 'git-subtree.html', > install: true, > - install_dir: get_option('datadir') / 'doc/git-doc', > + install_dir: htmldir, > ) > endif > diff --git a/meson.build b/meson.build > index 2b763f7c53..1f95a06edb 100644 > --- a/meson.build > +++ b/meson.build > @@ -768,13 +768,18 @@ if test_output_directory == '' > test_output_directory = meson.project_build_root() / 'test-output' > endif > > +htmldir = get_option('htmldir') > +if htmldir == '' > + htmldir = get_option('datadir') / 'doc/git-doc' > +endif > + > # These variables are used for building libgit.a. > libgit_c_args = [ > '-DBINDIR="' + get_option('bindir') + '"', > '-DDEFAULT_GIT_TEMPLATE_DIR="' + get_option('datadir') / 'git-core/templates' + '"', > '-DFALLBACK_RUNTIME_PREFIX="' + get_option('prefix') + '"', > '-DGIT_HOST_CPU="' + host_machine.cpu_family() + '"', > - '-DGIT_HTML_PATH="' + get_option('datadir') / 'doc/git-doc"', > + '-DGIT_HTML_PATH="' + htmldir + '"', > '-DGIT_INFO_PATH="' + get_option('infodir') + '"', > '-DGIT_LOCALE_PATH="' + get_option('localedir') + '"', > '-DGIT_MAN_PATH="' + get_option('mandir') + '"', > diff --git a/meson_options.txt b/meson_options.txt > index 143dee9237..13d421c067 100644 > --- a/meson_options.txt > +++ b/meson_options.txt > @@ -1,6 +1,8 @@ > # Configuration for Git installation > option('perllibdir', type: 'string', value: '', > description: 'Directory to install perl lib to. Defaults to /perl5') > +option('htmldir', type: 'string', value: '', > + description: 'Directory to install HTML docs to. Defaults to /doc/git-doc') > > # Configuration for how Git behaves at runtime. > option('default_pager', type: 'string', value: 'less', > > base-commit: 7f278e958afbf9b7e0727631b4c26dcfa1c63d6e