Message ID | 20201016114814.1564523-19-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | Build system + misc changes for 2020-10-16 | expand |
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 <div dir="ltr"><br><br>On Fri, Oct 16, 2020 at 7:48 PM Paolo Bonzini <<a href="mailto:pbonzini@redhat.com">pbonzini@redhat.com</a>> wrote:<br>><br>> From: Yonggang Luo <<a href="mailto:luoyonggang@gmail.com">luoyonggang@gmail.com</a>><br>><br>> Signed-off-by: Yonggang Luo <<a href="mailto:luoyonggang@gmail.com">luoyonggang@gmail.com</a>><br>> Message-Id: <<a href="mailto:20201015220626.418-4-luoyonggang@gmail.com">20201015220626.418-4-luoyonggang@gmail.com</a>><br>> Signed-off-by: Paolo Bonzini <<a href="mailto:pbonzini@redhat.com">pbonzini@redhat.com</a>><br>> ---<br>> configure | 59 ++++-------------------------------------------<br>> docs/meson.build | 46 ++++++++++++++++++++++++++++++++++++<br>> meson.build | 30 ++++++++----------------<br>> meson_options.txt | 4 ++++<br>> 4 files changed, 64 insertions(+), 75 deletions(-)<br>><br>> diff --git a/configure b/configure<br>> index 3edbdd2a24..68f097861d 100755<br>> --- a/configure<br>> +++ b/configure<br>> @@ -297,7 +297,7 @@ brlapi=""<br>> curl=""<br>> iconv="auto"<br>> curses="auto"<br>> -docs=""<br>> +docs="auto"<br>> fdt="auto"<br>> netmap="no"<br>> sdl="auto"<br>> @@ -820,15 +820,6 @@ do<br>> fi<br>> done<br>><br>> -sphinx_build=<br>> -for binary in sphinx-build-3 sphinx-build<br>> -do<br>> - if has "$binary"<br>> - then<br>> - sphinx_build=$(command -v "$binary")<br>> - break<br>> - fi<br>> -done<br>><br>> # Check for ancillary tools used in testing<br>> genisoimage=<br>> @@ -1228,9 +1219,9 @@ for opt do<br>> ;;<br>> --disable-crypto-afalg) crypto_afalg="no"<br>> ;;<br>> - --disable-docs) docs="no"<br>> + --disable-docs) docs="disabled"<br>> ;;<br>> - --enable-docs) docs="yes"<br>> + --enable-docs) docs="enabled"<br>> ;;<br>> --disable-vhost-net) vhost_net="no"<br>> ;;<br>> @@ -4419,45 +4410,6 @@ if check_include linux/btrfs.h ; then<br>> btrfs=yes<br>> fi<br>><br>> -# If we're making warnings fatal, apply this to Sphinx runs as well<br>> -sphinx_werror=""<br>> -if test "$werror" = "yes"; then<br>> - sphinx_werror="-W"<br>> -fi<br>> -<br>> -# Check we have a new enough version of sphinx-build<br>> -has_sphinx_build() {<br>> - # This is a bit awkward but works: create a trivial document and<br>> - # try to run it with our configuration file (which enforces a<br>> - # version requirement). This will fail if either<br>> - # sphinx-build doesn't exist at all or if it is too old.<br>> - mkdir -p "$TMPDIR1/sphinx"<br>> - touch "$TMPDIR1/sphinx/index.rst"<br>> - "$sphinx_build" $sphinx_werror -c "$source_path/docs" \<br>> - -b html "$TMPDIR1/sphinx" \<br>> - "$TMPDIR1/sphinx/out" >> config.log 2>&1<br>> -}<br>> -<br>> -# Check if tools are available to build documentation.<br>> -if test "$docs" != "no" ; then<br>> - if has_sphinx_build; then<br>> - sphinx_ok=yes<br>> - else<br>> - sphinx_ok=no<br>> - fi<br>> - if test "$sphinx_ok" = "yes"; then<br>> - docs=yes<br>> - else<br>> - if test "$docs" = "yes" ; then<br>> - if has $sphinx_build && test "$sphinx_ok" != "yes"; then<br>> - echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2<br>> - fi<br>> - feature_not_found "docs" "Install a Python 3 version of python-sphinx"<br>> - fi<br>> - docs=no<br>> - fi<br>> -fi<br>> -<br>> # Search for bswap_32 function<br>> byteswap_h=no<br>> cat > $TMPC << EOF<br>> @@ -6093,9 +6045,6 @@ qemu_version=$(head $source_path/VERSION)<br>> echo "PKGVERSION=$pkgversion" >>$config_host_mak<br>> echo "SRC_PATH=$source_path" >> $config_host_mak<br>> echo "TARGET_DIRS=$target_list" >> $config_host_mak<br>> -if [ "$docs" = "yes" ] ; then<br>> - echo "BUILD_DOCS=yes" >> $config_host_mak<br>> -fi<br>> if test "$modules" = "yes"; then<br>> # $shacmd can generate a hash started with digit, which the compiler doesn't<br>> # like as an symbol. So prefix it with an underscore<br>> @@ -6784,7 +6733,6 @@ fi<br>> echo "ROMS=$roms" >> $config_host_mak<br>> echo "MAKE=$make" >> $config_host_mak<br>> echo "PYTHON=$python" >> $config_host_mak<br>> -echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak<br>> echo "GENISOIMAGE=$genisoimage" >> $config_host_mak<br>> echo "MESON=$meson" >> $config_host_mak<br>> echo "NINJA=$ninja" >> $config_host_mak<br>> @@ -7066,6 +7014,7 @@ NINJA=$ninja $meson setup \<br>> -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f \<br>> -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \<br>> -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\<br>> + -Ddocs=$docs -Dsphinx_build=$sphinx_build \<br>> $cross_arg \<br>> "$PWD" "$source_path"<br>><br>> diff --git a/docs/meson.build b/docs/meson.build<br>> index 0340d489ac..789dca8cc0 100644<br>> --- a/docs/meson.build<br>> +++ b/docs/meson.build<br>> @@ -1,4 +1,50 @@<div><br>> +if get_option('sphinx_build') == ''<br>> + sphinx_build = find_program(['sphinx-build-3', 'sphinx-build'],<br>> + required: get_option('docs'))<br>> +else<br>> + sphinx_build = find_program(get_option('sphinx_build'),<br>> + required: get_option('docs'))<br>> +endif<br>> +<br>> +# Check if tools are available to build documentation.<br>> +build_docs = false<br>> +if sphinx_build.found()<br>> + SPHINX_ARGS = [sphinx_build]<br>> + # If we're making warnings fatal, apply this to Sphinx runs as well<br>> + if get_option('werror')<br>> + SPHINX_ARGS += [ '-W' ]<br>> + endif<br>> +<br>> + # This is a bit awkward but works: create a trivial document and<br>> + # try to run it with our configuration file (which enforces a<br>> + # version requirement). This will fail if sphinx-build is too old.<br>> + run_command('mkdir', ['-p', tmpdir / 'sphinx'])<br>> + run_command('touch', [tmpdir / 'sphinx/index.rst'])<br>> + sphinx_build_test_out = run_command(SPHINX_ARGS + [<br>> + '-c', meson.current_source_dir(),<br>> + '-b', 'html', tmpdir / 'sphinx',<br>> + tmpdir / 'sphinx/out'])<br>> + build_docs = (sphinx_build_test_out.returncode() == 0)<br>> +<br>> + if not build_docs<br>> + warning('@0@ exists but it is either too old or uses too old a Python version'.format(sphinx_build_option))<br>Here need to be get_option('sphinx_build') <br><br><br><br><br>> + if get_option('docs').enabled()<br>> + error('Install a Python 3 version of python-sphinx')<br>> + endif<br>> + endif<br>> +endif<br>> +<br>> if build_docs<br>> + SPHINX_ARGS += ['-Dversion=' + meson.project_version(), '-Drelease=' + config_host['PKGVERSION']]<br>> +<br>> + sphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py',<br>> + meson.source_root() / 'docs/sphinx/hxtool.py',<br>> + meson.source_root() / 'docs/sphinx/kerneldoc.py',<br>> + meson.source_root() / 'docs/sphinx/kernellog.py',<br>> + meson.source_root() / 'docs/sphinx/qapidoc.py',<br>> + meson.source_root() / 'docs/sphinx/qmp_lexer.py',<br>> + qapi_gen_depends ]<br>> +<br>> configure_file(output: 'index.html',<br>> input: files('<a href="http://index.html.in">index.html.in</a>'),<br>> configuration: {'VERSION': meson.project_version()},<br>> diff --git a/meson.build b/meson.build<br>> index 15732f4701..05fb59a00b 100644<br>> --- a/meson.build<br>> +++ b/meson.build<br>> @@ -17,7 +17,13 @@ cc = meson.get_compiler('c')<br>> config_host = keyval.load(meson.current_build_dir() / 'config-host.mak')<br>> enable_modules = 'CONFIG_MODULES' in config_host<br>> enable_static = 'CONFIG_STATIC' in config_host<br>> -build_docs = 'BUILD_DOCS' in config_host<br>> +<br>> +# Temporary directory used for files created while<br>> +# configure runs. Since it is in the build directory<br>> +# we can safely blow away any previous version of it<br>> +# (and we need not jump through hoops to try to delete<br>> +# it when configure exits.)<br>> +tmpdir = meson.current_build_dir() / 'meson-private/temp'<br>><br>> if get_option('qemu_suffix').startswith('/')<br>> error('qemu_suffix cannot start with a /')<br>> @@ -1266,22 +1272,6 @@ foreach d : hx_headers<br>> endforeach<br>> genh += hxdep<br>><br>> -SPHINX_ARGS = [config_host['SPHINX_BUILD'],<br>> - '-Dversion=' + meson.project_version(),<br>> - '-Drelease=' + config_host['PKGVERSION']]<br>> -<br>> -if get_option('werror')<br>> - SPHINX_ARGS += [ '-W' ]<br>> -endif<br>> -<br>> -sphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py',<br>> - meson.source_root() / 'docs/sphinx/hxtool.py',<br>> - meson.source_root() / 'docs/sphinx/kerneldoc.py',<br>> - meson.source_root() / 'docs/sphinx/kernellog.py',<br>> - meson.source_root() / 'docs/sphinx/qapidoc.py',<br>> - meson.source_root() / 'docs/sphinx/qmp_lexer.py',<br>> - qapi_gen_depends ]<br>> -<br>> ###################<br>> # Collect sources #<br>> ###################<br>> @@ -1866,8 +1856,8 @@ endif<br>> subdir('scripts')<br>> subdir('tools')<br>> subdir('pc-bios')<br>> -subdir('tests')<br>> subdir('docs')<br>> +subdir('tests')<br>> if 'CONFIG_GTK' in config_host<br>> subdir('po')<br>> endif<br>> @@ -1949,7 +1939,7 @@ summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}<br>> summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}<br>> summary_info += {'make': config_host['MAKE']}<br>> summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}<br>> -summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}<br>> +summary_info += {'sphinx-build': sphinx_build.found()}<br>> summary_info += {'genisoimage': config_host['GENISOIMAGE']}<br>> # TODO: add back version<br>> summary_info += {'slirp support': slirp_opt == 'disabled' ? false : slirp_opt}<br>> @@ -2017,7 +2007,7 @@ if config_host.has_key('CONFIG_XEN_BACKEND')<br>> summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}<br>> endif<br>> summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')}<br>> -summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')}<br>> +summary_info += {'Documentation': build_docs}<br>> summary_info += {'PIE': get_option('b_pie')}<br>> summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}<br>> summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}<br>> diff --git a/meson_options.txt b/meson_options.txt<br>> index 77b3fabd00..967229b66e 100644<br>> --- a/meson_options.txt<br>> +++ b/meson_options.txt<br>> @@ -2,7 +2,11 @@ option('qemu_suffix', type : 'string', value: 'qemu',<br>> description: 'Suffix for QEMU data/modules/config directories (can be empty)')<br>> option('docdir', type : 'string', value : 'doc',<br>> description: 'Base directory for documentation installation (can be empty)')<br>> +option('sphinx_build', type : 'string', value : '',<br>> + description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')<br>><br>> +option('docs', type : 'feature', value : 'auto',<br>> + description: 'Documentations build support')<br>> option('gettext', type : 'boolean', value : true,<br>> description: 'Localization of the GTK+ user interface')<br>> option('sparse', type : 'feature', value : 'auto',<br>> --<br>> 2.26.2<br>><br>><br><br><br>--<br> 此致<br>礼<br>罗勇刚<br>Yours<br> sincerely,<br>Yonggang Luo<br></div></div>
On 10/16/20 8:27 AM, 罗勇刚(Yonggang Luo) wrote: > On Fri, Oct 16, 2020 at 7:48 PM Paolo Bonzini <pbonzini@redhat.com> wrote: >> Meta-comment. Your quoting style leaves a lot to be desired: >> - 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 Here, your mailer wrapped lines but did not quote the wrapped portion, while... >> + 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') ...here you added new content without any newline separator, right after another case of a mailer wrapping a line. It makes it very difficult to decipher which text you are quoting and which text you are adding. You may want to consider using a better mail engine that does not split quoted lines incorrectly, as well as using a blank line both before and after every block of your inline replies, to call more visual attention to what you are adding to the conversation. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
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)) + 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',