From nobody Tue Feb 10 03:39:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1602849599; cv=none; d=zohomail.com; s=zohoarc; b=gQx4z+oX/TSzfpIuqPlSOP1b+39Wa29HwLdnJIFbmmNRK6wvzpc5JOWkBwIcfw9rCJ6AxV6Gwlf4yYkacxE3+hsIUKuf8UxIUTIYGsUJWQRk8hZF/RP0STzmkKPnXRj/AMtr5LCAl+ObpEzbnj2tPwxDsa63Ze1wilNe04V5bpk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1602849599; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YDLcRqmmja9I1U1CWg/0Flvk9BBKHARcZJCn1gbmXsQ=; b=jVcHb6Dr66fU65X3tbMBlIiZPkrtUCqEX1598FJ8GslzidX/yoag9v8XWlLHy9GB50lqwd0QBAbBIZWKqHI4IFBbZgBmDKOu6EYuCSR2d8CeBSyolJUEKvQOINUoEEjVfC6labYwJ7akUz0CCuEzL3LZcxG034TAoqyORqjMRiw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1602849599242643.6024915704198; Fri, 16 Oct 2020 04:59:59 -0700 (PDT) Received: from localhost ([::1]:48076 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kTOOr-0007ul-V1 for importer@patchew.org; Fri, 16 Oct 2020 07:59:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34532) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kTODm-0000fn-Ec for qemu-devel@nongnu.org; Fri, 16 Oct 2020 07:48:30 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:24746) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kTODj-0002q7-M8 for qemu-devel@nongnu.org; Fri, 16 Oct 2020 07:48:30 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-220-5syAc80zMiaclTSoRXfl8g-1; Fri, 16 Oct 2020 07:48:23 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 09FAC8018A4; Fri, 16 Oct 2020 11:48:22 +0000 (UTC) Received: from virtlab701.virt.lab.eng.bos.redhat.com (virtlab701.virt.lab.eng.bos.redhat.com [10.19.152.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id BA1475C1BD; Fri, 16 Oct 2020 11:48:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1602848906; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YDLcRqmmja9I1U1CWg/0Flvk9BBKHARcZJCn1gbmXsQ=; b=BZbJr66xmGL2p+g1DY//hhyUPRi7eAOwtU60EazzJV+VwlHELrvpuR9IrAWdNqvRdhv0nA 41xFxZULSqpVlDDK1l5BIdLAUTfaH7LWYr/4auhx35pP4LRLuTarE33wW1aQDBI3+818Pz UJYF275+4TzKKMkW9HlbWb0ZOFsjXgo= X-MC-Unique: 5syAc80zMiaclTSoRXfl8g-1 From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL 18/22] meson: Move the detection logic for sphinx to meson Date: Fri, 16 Oct 2020 07:48:10 -0400 Message-Id: <20201016114814.1564523-19-pbonzini@redhat.com> In-Reply-To: <20201016114814.1564523-1-pbonzini@redhat.com> References: <20201016114814.1564523-1-pbonzini@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pbonzini@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=63.128.21.124; envelope-from=pbonzini@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/16 03:57:19 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Yonggang Luo Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" From: Yonggang Luo Signed-off-by: Yonggang Luo Message-Id: <20201015220626.418-4-luoyonggang@gmail.com> Signed-off-by: Paolo Bonzini --- 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=3D"" curl=3D"" iconv=3D"auto" curses=3D"auto" -docs=3D"" +docs=3D"auto" fdt=3D"auto" netmap=3D"no" sdl=3D"auto" @@ -820,15 +820,6 @@ do fi done =20 -sphinx_build=3D -for binary in sphinx-build-3 sphinx-build -do - if has "$binary" - then - sphinx_build=3D$(command -v "$binary") - break - fi -done =20 # Check for ancillary tools used in testing genisoimage=3D @@ -1228,9 +1219,9 @@ for opt do ;; --disable-crypto-afalg) crypto_afalg=3D"no" ;; - --disable-docs) docs=3D"no" + --disable-docs) docs=3D"disabled" ;; - --enable-docs) docs=3D"yes" + --enable-docs) docs=3D"enabled" ;; --disable-vhost-net) vhost_net=3D"no" ;; @@ -4419,45 +4410,6 @@ if check_include linux/btrfs.h ; then btrfs=3Dyes fi =20 -# If we're making warnings fatal, apply this to Sphinx runs as well -sphinx_werror=3D"" -if test "$werror" =3D "yes"; then - sphinx_werror=3D"-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" !=3D "no" ; then - if has_sphinx_build; then - sphinx_ok=3Dyes - else - sphinx_ok=3Dno - fi - if test "$sphinx_ok" =3D "yes"; then - docs=3Dyes - else - if test "$docs" =3D "yes" ; then - if has $sphinx_build && test "$sphinx_ok" !=3D "yes"; then - echo "Warning: $sphinx_build exists but it is either too old or us= es too old a Python version" >&2 - fi - feature_not_found "docs" "Install a Python 3 version of python-sphin= x" - fi - docs=3Dno - fi -fi - # Search for bswap_32 function byteswap_h=3Dno cat > $TMPC << EOF @@ -6093,9 +6045,6 @@ qemu_version=3D$(head $source_path/VERSION) echo "PKGVERSION=3D$pkgversion" >>$config_host_mak echo "SRC_PATH=3D$source_path" >> $config_host_mak echo "TARGET_DIRS=3D$target_list" >> $config_host_mak -if [ "$docs" =3D "yes" ] ; then - echo "BUILD_DOCS=3Dyes" >> $config_host_mak -fi if test "$modules" =3D "yes"; then # $shacmd can generate a hash started with digit, which the compiler doe= sn't # like as an symbol. So prefix it with an underscore @@ -6784,7 +6733,6 @@ fi echo "ROMS=3D$roms" >> $config_host_mak echo "MAKE=3D$make" >> $config_host_mak echo "PYTHON=3D$python" >> $config_host_mak -echo "SPHINX_BUILD=3D$sphinx_build" >> $config_host_mak echo "GENISOIMAGE=3D$genisoimage" >> $config_host_mak echo "MESON=3D$meson" >> $config_host_mak echo "NINJA=3D$ninja" >> $config_host_mak @@ -7066,6 +7014,7 @@ NINJA=3D$ninja $meson setup \ -Dgettext=3D$gettext -Dxkbcommon=3D$xkbcommon -Du2f=3D$u2f \ -Dcapstone=3D$capstone -Dslirp=3D$slirp -Dfdt=3D$fdt \ -Diconv=3D$iconv -Dcurses=3D$curses -Dlibudev=3D$libudev\ + -Ddocs=3D$docs -Dsphinx_build=3D$sphinx_build \ $cross_arg \ "$PWD" "$source_path" =20 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') =3D=3D '' + sphinx_build =3D find_program(['sphinx-build-3', 'sphinx-build'], + required: get_option('docs')) +else + sphinx_build =3D find_program(get_option('sphinx_build'), + required: get_option('docs')) +endif + +# Check if tools are available to build documentation. +build_docs =3D false +if sphinx_build.found() + SPHINX_ARGS =3D [sphinx_build] + # If we're making warnings fatal, apply this to Sphinx runs as well + if get_option('werror') + SPHINX_ARGS +=3D [ '-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 =3D run_command(SPHINX_ARGS + [ + '-c', meson.current_source_dir(), + '-b', 'html', tmpdir / 'sphinx', + tmpdir / 'sphinx/out']) + build_docs =3D (sphinx_build_test_out.returncode() =3D=3D 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 +=3D ['-Dversion=3D' + meson.project_version(), '-Drelease= =3D' + config_host['PKGVERSION']] + + sphinx_extn_depends =3D [ 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 =3D meson.get_compiler('c') config_host =3D keyval.load(meson.current_build_dir() / 'config-host.mak') enable_modules =3D 'CONFIG_MODULES' in config_host enable_static =3D 'CONFIG_STATIC' in config_host -build_docs =3D '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 =3D meson.current_build_dir() / 'meson-private/temp' =20 if get_option('qemu_suffix').startswith('/') error('qemu_suffix cannot start with a /') @@ -1266,22 +1272,6 @@ foreach d : hx_headers endforeach genh +=3D hxdep =20 -SPHINX_ARGS =3D [config_host['SPHINX_BUILD'], - '-Dversion=3D' + meson.project_version(), - '-Drelease=3D' + config_host['PKGVERSION']] - -if get_option('werror') - SPHINX_ARGS +=3D [ '-W' ] -endif - -sphinx_extn_depends =3D [ 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 +=3D {'QEMU_CFLAGS': config_host['= QEMU_CFLAGS']} summary_info +=3D {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} summary_info +=3D {'make': config_host['MAKE']} summary_info +=3D {'python': '@0@ (version: @1@)'.format(python= .full_path(), python.language_version())} -summary_info +=3D {'sphinx-build': config_host['SPHINX_BUILD']} +summary_info +=3D {'sphinx-build': sphinx_build.found()} summary_info +=3D {'genisoimage': config_host['GENISOIMAGE']} # TODO: add back version summary_info +=3D {'slirp support': slirp_opt =3D=3D 'disabled' ? fals= e : slirp_opt} @@ -2017,7 +2007,7 @@ if config_host.has_key('CONFIG_XEN_BACKEND') summary_info +=3D {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INT= ERFACE_VERSION']} endif summary_info +=3D {'brlapi support': config_host.has_key('CONFIG_BRLAPI= ')} -summary_info +=3D {'Documentation': config_host.has_key('BUILD_DOCS')} +summary_info +=3D {'Documentation': build_docs} summary_info +=3D {'PIE': get_option('b_pie')} summary_info +=3D {'vde support': config_host.has_key('CONFIG_VDE')} summary_info +=3D {'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 buildi= ng document (default to be empty)') =20 +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', --=20 2.26.2