From 19407e8d7d3e95e94c631963da0e4528d9a7a57f Mon Sep 17 00:00:00 2001 From: Ivan Teterevkov Date: Thu, 13 Jan 2022 08:40:56 +0000 Subject: [PATCH] meson: Detect rst2html5 and rst2man only when needed Detect these commands in docs/meson.build, i.e. only when users enable documentation. Signed-off-by: Ivan Teterevkov Reviewed-by: Andrea Bolognani --- docs/meson.build | 41 +++++++++++++++++++++++++++++++++++++++++ meson.build | 31 ------------------------------- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/docs/meson.build b/docs/meson.build index 3e912f21ad..50c12cc3c2 100644 --- a/docs/meson.build +++ b/docs/meson.build @@ -171,6 +171,47 @@ docs_lxc_api_xml = docs_api_generated[1] docs_qemu_api_xml = docs_api_generated[2] docs_admin_api_xml = docs_api_generated[3] +docs_programs_groups = [ + { 'name': 'rst2html5', 'prog': [ 'rst2html5', 'rst2html5.py', 'rst2html5-3' ] }, + { 'name': 'rst2man', 'prog': [ 'rst2man', 'rst2man.py', 'rst2man-3' ] }, +] + +foreach item : docs_programs_groups + prog = find_program(item.get('prog'), dirs: libvirt_sbin_path) + varname = item.get('name').underscorify() + conf.set_quoted(varname.to_upper(), prog.path()) + set_variable('@0@_prog'.format(varname), prog) +endforeach + +# There are two versions of rst2html5 in the wild: one is the version +# coming from the docutils package, and the other is the one coming +# from the rst2html5 package. These versions are subtly different, +# and the libvirt documentation can only be successfully generated +# using the docutils version. Every now and then, users will report +# build failures that can be traced back to having the wrong version +# installed. +# +# The only reliable way to tell the two binaries apart seems to be +# looking look at their version information: the docutils version +# will report +# +# rst2html5 (Docutils ..., Python ..., on ...) +# +# whereas the rst2html5 version will report +# +# rst2html5 ... (Docutils ..., Python ..., on ...) +# +# with the additional bit of information being the version number for +# the rst2html5 package itself. +# +# Use this knowledge to detect the version that we know doesn't work +# for building libvirt and reject it +rst2html5_version = run_command(rst2html5_prog, '--version') +rst2html5_version = rst2html5_version.stdout().split(' ') +if rst2html5_version[1] != '(Docutils' + error('Please uninstall the rst2html5 package and install the docutils package') +endif + docs_rst2html5_gen = generator( rst2html5_prog, output: '@BASENAME@.html.in', diff --git a/meson.build b/meson.build index 27810535e8..c2e9619f1f 100644 --- a/meson.build +++ b/meson.build @@ -788,8 +788,6 @@ required_programs = [ required_programs_groups = [ { 'name': 'rpcgen', 'prog': [ 'rpcgen', 'portable-rpcgen' ] }, - { 'name': 'rst2html5', 'prog': [ 'rst2html5', 'rst2html5.py', 'rst2html5-3' ] }, - { 'name': 'rst2man', 'prog': [ 'rst2man', 'rst2man.py', 'rst2man-3' ] }, ] if host_machine.system() == 'freebsd' @@ -810,35 +808,6 @@ foreach item : required_programs_groups set_variable('@0@_prog'.format(varname), prog) endforeach -# There are two versions of rst2html5 in the wild: one is the version -# coming from the docutils package, and the other is the one coming -# from the rst2html5 package. These versions are subtly different, -# and the libvirt documentation can only be successfully generated -# using the docutils version. Every now and then, users will report -# build failures that can be traced back to having the wrong version -# installed. -# -# The only reliable way to tell the two binaries apart seems to be -# looking look at their version information: the docutils version -# will report -# -# rst2html5 (Docutils ..., Python ..., on ...) -# -# whereas the rst2html5 version will report -# -# rst2html5 ... (Docutils ..., Python ..., on ...) -# -# with the additional bit of information being the version number for -# the rst2html5 package itself. -# -# Use this knowledge to detect the version that we know doesn't work -# for building libvirt and reject it -rst2html5_version = run_command(rst2html5_prog, '--version') -rst2html5_version = rst2html5_version.stdout().split(' ') -if rst2html5_version[1] != '(Docutils' - error('Please uninstall the rst2html5 package and install the docutils package') -endif - # optional programs optional_programs = [