From: "罗勇刚(Yonggang Luo)" <luoyonggang@gmail.com> To: Paolo Bonzini <pbonzini@redhat.com> Cc: qemu-level <qemu-devel@nongnu.org> Subject: Re: [PULL 18/22] meson: Move the detection logic for sphinx to meson Date: Fri, 16 Oct 2020 21:27:25 +0800 Message-ID: <CAE2XoE8cF3Bse9AE3zb9GGqmygqDx1=zxXHF6OE9an_ridWVsw@mail.gmail.com> (raw) In-Reply-To: <20201016114814.1564523-19-pbonzini@redhat.com> [-- Attachment #1: Type: text/plain, Size: 11024 bytes --] On Fri, Oct 16, 2020 at 7:48 PM Paolo Bonzini <pbonzini@redhat.com> wrote: > > From: Yonggang Luo <luoyonggang@gmail.com> > > Signed-off-by: Yonggang Luo <luoyonggang@gmail.com> > Message-Id: <20201015220626.418-4-luoyonggang@gmail.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > configure | 59 ++++------------------------------------------- > docs/meson.build | 46 ++++++++++++++++++++++++++++++++++++ > meson.build | 30 ++++++++---------------- > meson_options.txt | 4 ++++ > 4 files changed, 64 insertions(+), 75 deletions(-) > > diff --git a/configure b/configure > index 3edbdd2a24..68f097861d 100755 > --- a/configure > +++ b/configure > @@ -297,7 +297,7 @@ brlapi="" > curl="" > iconv="auto" > curses="auto" > -docs="" > +docs="auto" > fdt="auto" > netmap="no" > sdl="auto" > @@ -820,15 +820,6 @@ do > fi > done > > -sphinx_build= > -for binary in sphinx-build-3 sphinx-build > -do > - if has "$binary" > - then > - sphinx_build=$(command -v "$binary") > - break > - fi > -done > > # Check for ancillary tools used in testing > genisoimage= > @@ -1228,9 +1219,9 @@ for opt do > ;; > --disable-crypto-afalg) crypto_afalg="no" > ;; > - --disable-docs) docs="no" > + --disable-docs) docs="disabled" > ;; > - --enable-docs) docs="yes" > + --enable-docs) docs="enabled" > ;; > --disable-vhost-net) vhost_net="no" > ;; > @@ -4419,45 +4410,6 @@ if check_include linux/btrfs.h ; then > btrfs=yes > fi > > -# If we're making warnings fatal, apply this to Sphinx runs as well > -sphinx_werror="" > -if test "$werror" = "yes"; then > - sphinx_werror="-W" > -fi > - > -# Check we have a new enough version of sphinx-build > -has_sphinx_build() { > - # This is a bit awkward but works: create a trivial document and > - # try to run it with our configuration file (which enforces a > - # version requirement). This will fail if either > - # sphinx-build doesn't exist at all or if it is too old. > - mkdir -p "$TMPDIR1/sphinx" > - touch "$TMPDIR1/sphinx/index.rst" > - "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ > - -b html "$TMPDIR1/sphinx" \ > - "$TMPDIR1/sphinx/out" >> config.log 2>&1 > -} > - > -# Check if tools are available to build documentation. > -if test "$docs" != "no" ; then > - if has_sphinx_build; then > - sphinx_ok=yes > - else > - sphinx_ok=no > - fi > - if test "$sphinx_ok" = "yes"; then > - docs=yes > - else > - if test "$docs" = "yes" ; then > - if has $sphinx_build && test "$sphinx_ok" != "yes"; then > - echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 > - fi > - feature_not_found "docs" "Install a Python 3 version of python-sphinx" > - fi > - docs=no > - fi > -fi > - > # Search for bswap_32 function > byteswap_h=no > cat > $TMPC << EOF > @@ -6093,9 +6045,6 @@ qemu_version=$(head $source_path/VERSION) > echo "PKGVERSION=$pkgversion" >>$config_host_mak > echo "SRC_PATH=$source_path" >> $config_host_mak > echo "TARGET_DIRS=$target_list" >> $config_host_mak > -if [ "$docs" = "yes" ] ; then > - echo "BUILD_DOCS=yes" >> $config_host_mak > -fi > if test "$modules" = "yes"; then > # $shacmd can generate a hash started with digit, which the compiler doesn't > # like as an symbol. So prefix it with an underscore > @@ -6784,7 +6733,6 @@ fi > echo "ROMS=$roms" >> $config_host_mak > echo "MAKE=$make" >> $config_host_mak > echo "PYTHON=$python" >> $config_host_mak > -echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak > echo "GENISOIMAGE=$genisoimage" >> $config_host_mak > echo "MESON=$meson" >> $config_host_mak > echo "NINJA=$ninja" >> $config_host_mak > @@ -7066,6 +7014,7 @@ NINJA=$ninja $meson setup \ > -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f \ > -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \ > -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ > + -Ddocs=$docs -Dsphinx_build=$sphinx_build \ > $cross_arg \ > "$PWD" "$source_path" > > diff --git a/docs/meson.build b/docs/meson.build > index 0340d489ac..789dca8cc0 100644 > --- a/docs/meson.build > +++ b/docs/meson.build > @@ -1,4 +1,50 @@ > +if get_option('sphinx_build') == '' > + sphinx_build = find_program(['sphinx-build-3', 'sphinx-build'], > + required: get_option('docs')) > +else > + sphinx_build = find_program(get_option('sphinx_build'), > + required: get_option('docs')) > +endif > + > +# Check if tools are available to build documentation. > +build_docs = false > +if sphinx_build.found() > + SPHINX_ARGS = [sphinx_build] > + # If we're making warnings fatal, apply this to Sphinx runs as well > + if get_option('werror') > + SPHINX_ARGS += [ '-W' ] > + endif > + > + # This is a bit awkward but works: create a trivial document and > + # try to run it with our configuration file (which enforces a > + # version requirement). This will fail if sphinx-build is too old. > + run_command('mkdir', ['-p', tmpdir / 'sphinx']) > + run_command('touch', [tmpdir / 'sphinx/index.rst']) > + sphinx_build_test_out = run_command(SPHINX_ARGS + [ > + '-c', meson.current_source_dir(), > + '-b', 'html', tmpdir / 'sphinx', > + tmpdir / 'sphinx/out']) > + build_docs = (sphinx_build_test_out.returncode() == 0) > + > + if not build_docs > + warning('@0@ exists but it is either too old or uses too old a Python version'.format(sphinx_build_option)) Here need to be get_option('sphinx_build') > + if get_option('docs').enabled() > + error('Install a Python 3 version of python-sphinx') > + endif > + endif > +endif > + > if build_docs > + SPHINX_ARGS += ['-Dversion=' + meson.project_version(), '-Drelease=' + config_host['PKGVERSION']] > + > + sphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', > + meson.source_root() / 'docs/sphinx/hxtool.py', > + meson.source_root() / 'docs/sphinx/kerneldoc.py', > + meson.source_root() / 'docs/sphinx/kernellog.py', > + meson.source_root() / 'docs/sphinx/qapidoc.py', > + meson.source_root() / 'docs/sphinx/qmp_lexer.py', > + qapi_gen_depends ] > + > configure_file(output: 'index.html', > input: files('index.html.in'), > configuration: {'VERSION': meson.project_version()}, > diff --git a/meson.build b/meson.build > index 15732f4701..05fb59a00b 100644 > --- a/meson.build > +++ b/meson.build > @@ -17,7 +17,13 @@ cc = meson.get_compiler('c') > config_host = keyval.load(meson.current_build_dir() / 'config-host.mak') > enable_modules = 'CONFIG_MODULES' in config_host > enable_static = 'CONFIG_STATIC' in config_host > -build_docs = 'BUILD_DOCS' in config_host > + > +# Temporary directory used for files created while > +# configure runs. Since it is in the build directory > +# we can safely blow away any previous version of it > +# (and we need not jump through hoops to try to delete > +# it when configure exits.) > +tmpdir = meson.current_build_dir() / 'meson-private/temp' > > if get_option('qemu_suffix').startswith('/') > error('qemu_suffix cannot start with a /') > @@ -1266,22 +1272,6 @@ foreach d : hx_headers > endforeach > genh += hxdep > > -SPHINX_ARGS = [config_host['SPHINX_BUILD'], > - '-Dversion=' + meson.project_version(), > - '-Drelease=' + config_host['PKGVERSION']] > - > -if get_option('werror') > - SPHINX_ARGS += [ '-W' ] > -endif > - > -sphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', > - meson.source_root() / 'docs/sphinx/hxtool.py', > - meson.source_root() / 'docs/sphinx/kerneldoc.py', > - meson.source_root() / 'docs/sphinx/kernellog.py', > - meson.source_root() / 'docs/sphinx/qapidoc.py', > - meson.source_root() / 'docs/sphinx/qmp_lexer.py', > - qapi_gen_depends ] > - > ################### > # Collect sources # > ################### > @@ -1866,8 +1856,8 @@ endif > subdir('scripts') > subdir('tools') > subdir('pc-bios') > -subdir('tests') > subdir('docs') > +subdir('tests') > if 'CONFIG_GTK' in config_host > subdir('po') > endif > @@ -1949,7 +1939,7 @@ summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} > summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} > summary_info += {'make': config_host['MAKE']} > summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} > -summary_info += {'sphinx-build': config_host['SPHINX_BUILD']} > +summary_info += {'sphinx-build': sphinx_build.found()} > summary_info += {'genisoimage': config_host['GENISOIMAGE']} > # TODO: add back version > summary_info += {'slirp support': slirp_opt == 'disabled' ? false : slirp_opt} > @@ -2017,7 +2007,7 @@ if config_host.has_key('CONFIG_XEN_BACKEND') > summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} > endif > summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} > -summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} > +summary_info += {'Documentation': build_docs} > summary_info += {'PIE': get_option('b_pie')} > summary_info += {'vde support': config_host.has_key('CONFIG_VDE')} > summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} > diff --git a/meson_options.txt b/meson_options.txt > index 77b3fabd00..967229b66e 100644 > --- a/meson_options.txt > +++ b/meson_options.txt > @@ -2,7 +2,11 @@ option('qemu_suffix', type : 'string', value: 'qemu', > description: 'Suffix for QEMU data/modules/config directories (can be empty)') > option('docdir', type : 'string', value : 'doc', > description: 'Base directory for documentation installation (can be empty)') > +option('sphinx_build', type : 'string', value : '', > + description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)') > > +option('docs', type : 'feature', value : 'auto', > + description: 'Documentations build support') > option('gettext', type : 'boolean', value : true, > description: 'Localization of the GTK+ user interface') > option('sparse', type : 'feature', value : 'auto', > -- > 2.26.2 > > -- 此致 礼 罗勇刚 Yours sincerely, Yonggang Luo [-- Attachment #2: Type: text/html, Size: 14871 bytes --]
next prev parent reply index Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-16 11:47 [PULL 00/22] Build system + misc changes for 2020-10-16 Paolo Bonzini 2020-10-16 11:47 ` [PULL 01/22] submodules: bump meson to 0.55.3 Paolo Bonzini 2020-10-16 11:47 ` [PULL 02/22] Makefile: Ensure cscope.out/tags/TAGS are generated in the source tree Paolo Bonzini 2020-10-16 11:47 ` [PULL 03/22] tests/Makefile.include: unbreak non-tcg builds Paolo Bonzini 2020-10-16 11:47 ` [PULL 04/22] make: run shell with pipefail Paolo Bonzini 2020-10-16 11:47 ` [PULL 05/22] tests: add missing generated sources to testqapi Paolo Bonzini 2020-10-16 11:47 ` [PULL 06/22] configure: move QEMU_INCLUDES to meson Paolo Bonzini 2020-10-16 11:47 ` [PULL 07/22] dockerfiles: enable Centos 8 PowerTools Paolo Bonzini 2020-10-16 11:48 ` [PULL 08/22] add ninja to dockerfiles, CI configurations and test VMs Paolo Bonzini 2020-10-16 11:48 ` [PULL 09/22] build: cleanups to Makefile Paolo Bonzini 2020-10-16 11:48 ` [PULL 10/22] build: replace ninjatool with ninja Paolo Bonzini 2020-10-16 11:48 ` [PULL 11/22] build: add --enable/--disable-libudev Paolo Bonzini 2020-10-16 11:48 ` [PULL 12/22] meson.build: don't condition iconv detection on library detection Paolo Bonzini 2020-10-16 11:48 ` [PULL 13/22] meson: cleanup curses/iconv test Paolo Bonzini 2020-10-16 11:48 ` [PULL 14/22] configure: fix handling of --docdir parameter Paolo Bonzini 2020-10-16 11:48 ` [PULL 15/22] meson: Only install icons and qemu.desktop if have_system Paolo Bonzini 2020-10-16 11:48 ` [PULL 16/22] docs: Fix Sphinx configuration for msys2/mingw Paolo Bonzini 2020-10-16 11:48 ` [PULL 17/22] meson: move SPHINX_ARGS references within "if build_docs" Paolo Bonzini 2020-10-16 11:48 ` [PULL 18/22] meson: Move the detection logic for sphinx to meson Paolo Bonzini 2020-10-16 13:27 ` 罗勇刚(Yonggang Luo) [this message] 2020-10-19 19:40 ` Eric Blake 2020-10-16 11:48 ` [PULL 19/22] cirrus: Enable doc build on msys2/mingw Paolo Bonzini 2020-10-16 11:48 ` [PULL 20/22] fuzz: Disable QEMU's SIG{INT,HUP,TERM} handlers Paolo Bonzini 2020-10-16 11:48 ` [PULL 21/22] hax: unbreak accelerator cpu code after cpus.c split Paolo Bonzini 2020-10-16 11:48 ` [PULL 22/22] ci: include configure and meson logs in all jobs if configure fails Paolo Bonzini 2020-10-16 15:53 [PULL v2 00/22] Build system + misc changes for 2020-10-16 Paolo Bonzini 2020-10-16 15:53 ` [PULL 18/22] meson: Move the detection logic for sphinx to meson Paolo Bonzini
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAE2XoE8cF3Bse9AE3zb9GGqmygqDx1=zxXHF6OE9an_ridWVsw@mail.gmail.com' \ --to=luoyonggang@gmail.com \ --cc=pbonzini@redhat.com \ --cc=qemu-devel@nongnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
QEMU-Devel Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/qemu-devel/0 qemu-devel/git/0.git git clone --mirror https://lore.kernel.org/qemu-devel/1 qemu-devel/git/1.git git clone --mirror https://lore.kernel.org/qemu-devel/2 qemu-devel/git/2.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 qemu-devel qemu-devel/ https://lore.kernel.org/qemu-devel \ qemu-devel@nongnu.org public-inbox-index qemu-devel Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.nongnu.qemu-devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git