From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6BCBAC77B7C for ; Mon, 1 May 2023 19:21:25 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ptZ4b-0002Ss-5C; Mon, 01 May 2023 15:20:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ptZ4a-0002Si-0x for qemu-devel@nongnu.org; Mon, 01 May 2023 15:20:32 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ptZ4X-0007ux-8p for qemu-devel@nongnu.org; Mon, 01 May 2023 15:20:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1682968827; 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: in-reply-to:in-reply-to:references:references; bh=LGGHV2/Vl/2tUE97rz9iRgneZ6Xyce0VOibIdUFlEp4=; b=BQHbv6ZaENlSugniAdFfUlgsPOubIs6piiqYDYO4g4yoGPCTG/R8USjUqDDOvrXRT1qhjV S+8AGBXRb1e6B7ofnLFan+rL0Bxw2XqJXedIwbxiyHsWkOdWTTrVif9fvDhBQkE/vFvaGo 1kRo05DrucZJL2TJhN529PxkiblWxGY= Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-593-J4XKr_GqOjOv4HvN-7c23g-1; Mon, 01 May 2023 15:20:26 -0400 X-MC-Unique: J4XKr_GqOjOv4HvN-7c23g-1 Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-24e116d1a05so876011a91.2 for ; Mon, 01 May 2023 12:20:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682968825; x=1685560825; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=LGGHV2/Vl/2tUE97rz9iRgneZ6Xyce0VOibIdUFlEp4=; b=Aa8+gjzwHowztDm9PjsIe4lBpuKF/cytw3cB+Ibc9c1vw3kEIU/YdhXEUBlr2LdK9j JCXb4xTZkqhhczra3DDJw1U93J8UYEMlkBAelgYmGk47h6PKhA6GeUnysu6ZQVZh7NDd t5HfEF6VBgSb/ebnQxKM+1d6rjcc4+m6q6Af6xoRLBu5oXwBlzLB2jieQND/vZBAa5MW Ba1eWUuDqIDQkEDf9QxN2ZZ8vaoU06WChYoNr0VYdu5ydLhEmleyzXhxAu56REWcBtoA 56UfVwYasczAnTiaOJRshFL2UbjwtYJdnKS4OAlEgxBR/mmN8w3RXTeFSe+SAayzDCOn VFtw== X-Gm-Message-State: AC+VfDwaWkHZyfLwhLBdxKeaVKVKMLzIs/Cm5iw0Mk90WhwahMZw9TIR oktUdCh447Ekq4iWRJtnvcoMr3x0mGlVrqObKFLjJh1VF8kTnfDOq8gKdvRD1DYBub8fQdtoxIJ BnTjw+8PAzfw9GRq/W665Kj1PRpyCHbENXqO0SgQ= X-Received: by 2002:a17:90a:a010:b0:249:6098:b068 with SMTP id q16-20020a17090aa01000b002496098b068mr15772771pjp.45.1682968824997; Mon, 01 May 2023 12:20:24 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6QGn0QJpLcqJCIYB+gjKWjafF44clMLrZFYSOaw7CpYalqzo7a/ywzzgfF0D/spTf1Mzb+Osmaoj2jami9gwg= X-Received: by 2002:a17:90a:a010:b0:249:6098:b068 with SMTP id q16-20020a17090aa01000b002496098b068mr15772736pjp.45.1682968824579; Mon, 01 May 2023 12:20:24 -0700 (PDT) MIME-Version: 1.0 References: <20230424200248.1183394-1-jsnow@redhat.com> In-Reply-To: <20230424200248.1183394-1-jsnow@redhat.com> From: John Snow Date: Mon, 1 May 2023 15:20:13 -0400 Message-ID: Subject: Re: [RFC PATCH v3 00/20] configure: create a python venv and ensure meson, sphinx To: qemu-devel Cc: Warner Losh , Beraldo Leal , Kyle Evans , Paolo Bonzini , Thomas Huth , Daniel Berrange , Reinoud Zandijk , Wainer dos Santos Moschetta , Cleber Rosa , Ryo ONODERA , =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= , Ani Sinha , "Michael S. Tsirkin" , =?UTF-8?B?QWxleCBCZW5uw6ll?= Content-Type: multipart/alternative; boundary="000000000000f52aaa05faa6b608" Received-SPF: pass client-ip=170.10.129.124; envelope-from=jsnow@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.171, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org --000000000000f52aaa05faa6b608 Content-Type: text/plain; charset="UTF-8" On Mon, Apr 24, 2023, 4:02 PM John Snow wrote: > GitLab CI: https://gitlab.com/jsnow/qemu/-/pipelines/846869409 > (All green, except Python self-tests, see below) > > This patch series creates a mandatory python virtual environment > ("venv") during configure time and uses it to ensure the availability of > meson and sphinx. > > See https://www.qemu.org/2023/03/24/python/ for details. The summary is > that the goal of this series is to ensure that the `python` used to run > meson is the same `python` used to run Sphinx, tests, and any build-time > python scripting we have. As it stands, meson and sphinx (and their > extensions) *may* run in a different python environment than the one > configured and chosen by the user at configure/build time. > > The effective change of this series is that QEMU will now > unconditionally create a venv at configure-time and will ensure that > meson (and sphinx, if docs are enabled) are available through that venv. > > Some important points as a pre-emptive "FAQ": > > - This venv is unconditionally created and lives at {build_dir}/pyvenv. > > - The python interpreter used by this venv is always the one identified > by configure. (Which in turn is always the one specified by --python > or $PYTHON) > > - *almost* all python scripts in qemu.git executed as part of the build > system, meson, sphinx, avocado tests, vm tests or CI are always > executed within this venv. > > (iotests are not yet integrated; I plan to tackle this separately as a > follow-up in order to have a more tightly focused scope on that > series.) > > - It remains possible to build and test fully offline. > (In most cases, you just need meson and sphinx from your distro's repo.) > > - Distribution packaged 'meson' and 'sphinx' are still utilized whenever > possible as the highest preference. > > - Vendored versions of e.g. 'meson' are always preferred to PyPI > versions for speed, repeatability and ensuring tarball builds work > as-is offline. > > (Sphinx will not be vendored, just like it already isn't.) > > - Missing dependencies, when possible, are fetched and installed > on-demand automatically to make developer environments "just work". > > - Works for Python 3.7 and up, on Fedora, OpenSuSE, Red Hat, CentOS, > Alpine, Debian, Ubuntu, NetBSD, OpenBSD, and hopefully everywhere > > - No new dependencies (...for most platforms. Debian and NetBSD get an > asterisk.) > > - The meson git submodule is unused after this series and can be removed. > > For reviewers, here's how the series is broken up: > > Patch 1 is a testing pre-req. Note that even with this patch, > 'check-python-minreqs' and 'check-python-tox' CI jobs will both still > fail on origin/master because this series requires 3.7+, but > origin/master is currently still 3.6+. > > - python: update pylint configuration > > Patches 2-8 add the mkvenv script. The first patch checks in the barest > essentials, and each subsequent patch adds a workaround or feature one > at a time. > > - python: add mkvenv.py > - mkvenv: add console script entry point generation > - mkvenv: Add better error message for missing pyexapt module > - mkvenv: generate console entry shims from inside the venv > - mkvenv: work around broken pip installations on Debian 10 > - mkvenv: add nested venv workaround > - mkvenv: add ensure subcommand > > Patches 9-11 modify our testing configuration to add new dependencies as > needed. > > - tests/docker: add python3-venv dependency > - tests/vm: Configure netbsd to use Python 3.10 > - tests/vm: add py310-expat to NetBSD > > Patch 12 changes how we package release tarballs. > > - scripts/make-release: download meson==0.61.5 .whl > > Patches 13-16 wire mkvenv into configure and tests. > > - configure: create a python venv unconditionally > - configure: use 'mkvenv ensure meson' to bootstrap meson > - configure: add --enable-pypi and --disable-pypi > - tests: Use configure-provided pyvenv for tests > > Patches 17-20 delegate Sphinx bootstrapping to mkvenv. Some of these > changes could be folded earlier in the series (like the diagnose() > patch), but I'm keeping it separate for review for now. > > - configure: move --enable-docs and --disable-docs back to configure > - mkvenv: add diagnose() method for ensure() failures > - configure: use --diagnose option with meson ensure > - configure: bootstrap sphinx with mkvenv > > That's all for now, seeya! > --js > > John Snow (20): > python: update pylint configuration > python: add mkvenv.py > mkvenv: add console script entry point generation > mkvenv: Add better error message for missing pyexpat module > mkvenv: generate console entry shims from inside the venv > mkvenv: work around broken pip installations on Debian 10 > mkvenv: add nested venv workaround > mkvenv: add ensure subcommand > tests/docker: add python3-venv dependency > tests/vm: Configure netbsd to use Python 3.10 > tests/vm: add py310-expat to NetBSD > scripts/make-release: download meson==0.61.5 .whl > configure: create a python venv unconditionally > configure: use 'mkvenv ensure meson' to bootstrap meson > configure: add --enable-pypi and --disable-pypi > tests: Use configure-provided pyvenv for tests > configure: move --enable-docs and --disable-docs back to configure > mkvenv: add diagnose() method for ensure() failures > configure: use --diagnose option with meson ensure > configure: bootstrap sphinx with mkvenv > > docs/devel/acpi-bits.rst | 6 +- > docs/devel/testing.rst | 14 +- > configure | 139 +-- > .gitlab-ci.d/buildtest-template.yml | 4 +- > .gitlab-ci.d/buildtest.yml | 6 +- > python/scripts/mkvenv.py | 871 ++++++++++++++++++ > python/setup.cfg | 10 + > python/tests/flake8.sh | 1 + > python/tests/isort.sh | 1 + > python/tests/mypy.sh | 1 + > python/tests/pylint.sh | 1 + > .../org.centos/stream/8/x86_64/test-avocado | 4 +- > scripts/device-crash-test | 2 +- > scripts/make-release | 11 + > tests/Makefile.include | 10 +- > .../dockerfiles/debian-all-test-cross.docker | 3 +- > .../dockerfiles/debian-hexagon-cross.docker | 3 +- > .../dockerfiles/debian-riscv64-cross.docker | 3 +- > .../dockerfiles/debian-tricore-cross.docker | 3 +- > tests/requirements.txt | 7 +- > tests/vm/netbsd | 2 + > 21 files changed, 1016 insertions(+), 86 deletions(-) > create mode 100644 python/scripts/mkvenv.py > > -- > 2.39.2 > Just a note to say I'm working on the respin here - Paolo suggested I remove the "--gen" arguments to mkvenv and generate the entry point scripts conditionally at ensure time instead. Good idea! I ran into some problems with msys2, though, where the entry point scripts native to the system are binary .exe files I don't know how to recreate. I have some research to do on windows perhaps to understand what's expected on that platform and how to achieve it. I'm hoping the fix is as easy as "You can still use console scripts, but you need to use the .py or .pyw suffix". I'll know shortly! If I don't smooth over all the issues before Wednesday, though, I'm going to be away from my desk for the rest of the week and may need to ask Paolo for help finishing up the polish so we can land this in a timely fashion so we have a lot of runway to fix build issues before 8.1 rc0. --js > --000000000000f52aaa05faa6b608 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Mon, Apr 24, 2023, 4:02 PM John Snow <jsnow@redhat.com> wrote:
GitLab CI: http= s://gitlab.com/jsnow/qemu/-/pipelines/846869409
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(All green, except Python self-tes= ts, see below)

This patch series creates a mandatory python virtual environment
("venv") during configure time and uses it to ensure the availabi= lity of
meson and sphinx.

See https://www.qemu.org/2023/03/24/python/ fo= r details. The summary is
that the goal of this series is to ensure that the `python` used to run
meson is the same `python` used to run Sphinx, tests, and any build-time python scripting we have. As it stands, meson and sphinx (and their
extensions) *may* run in a different python environment than the one
configured and chosen by the user at configure/build time.

The effective change of this series is that QEMU will now
unconditionally create a venv at configure-time and will ensure that
meson (and sphinx, if docs are enabled) are available through that venv.
Some important points as a pre-emptive "FAQ":

- This venv is unconditionally created and lives at {build_dir}/pyvenv.

- The python interpreter used by this venv is always the one identified
=C2=A0 by configure. (Which in turn is always the one specified by --python=
=C2=A0 or $PYTHON)

- *almost* all python scripts in qemu.git executed as part of the build
=C2=A0 system, meson, sphinx, avocado tests, vm tests or CI are always
=C2=A0 executed within this venv.

=C2=A0 (iotests are not yet integrated; I plan to tackle this separately as= a
=C2=A0 follow-up in order to have a more tightly focused scope on that
=C2=A0 series.)

- It remains possible to build and test fully offline.
=C2=A0 (In most cases, you just need meson and sphinx from your distro'= s repo.)

- Distribution packaged 'meson' and 'sphinx' are still util= ized whenever
=C2=A0 possible as the highest preference.

- Vendored versions of e.g. 'meson' are always preferred to PyPI =C2=A0 versions for speed, repeatability and ensuring tarball builds work =C2=A0 as-is offline.

=C2=A0 (Sphinx will not be vendored, just like it already isn't.)

- Missing dependencies, when possible, are fetched and installed
=C2=A0 on-demand automatically to make developer environments "just wo= rk".

- Works for Python 3.7 and up, on Fedora, OpenSuSE, Red Hat, CentOS,
=C2=A0 Alpine, Debian, Ubuntu, NetBSD, OpenBSD, and hopefully everywhere
- No new dependencies (...for most platforms. Debian and NetBSD get an
=C2=A0 asterisk.)

- The meson git submodule is unused after this series and can be removed.
For reviewers, here's how the series is broken up:

Patch 1 is a testing pre-req. Note that even with this patch,
'check-python-minreqs' and 'check-python-tox' CI jobs will = both still
fail on origin/master because this series requires 3.7+, but
origin/master is currently still 3.6+.

- python: update pylint configuration

Patches 2-8 add the mkvenv script. The first patch checks in the barest
essentials, and each subsequent patch adds a workaround or feature one
at a time.

- python: add mkvenv.py
- mkvenv: add console script entry point generation
- mkvenv: Add better error message for missing pyexapt module
- mkvenv: generate console entry shims from inside the venv
- mkvenv: work around broken pip installations on Debian 10
- mkvenv: add nested venv workaround
- mkvenv: add ensure subcommand

Patches 9-11 modify our testing configuration to add new dependencies as needed.

- tests/docker: add python3-venv dependency
- tests/vm: Configure netbsd to use Python 3.10
- tests/vm: add py310-expat to NetBSD

Patch 12 changes how we package release tarballs.

- scripts/make-release: download meson=3D=3D0.61.5 .whl

Patches 13-16 wire mkvenv into configure and tests.

- configure: create a python venv unconditionally
- configure: use 'mkvenv ensure meson' to bootstrap meson
- configure: add --enable-pypi and --disable-pypi
- tests: Use configure-provided pyvenv for tests

Patches 17-20 delegate Sphinx bootstrapping to mkvenv. Some of these
changes could be folded earlier in the series (like the diagnose()
patch), but I'm keeping it separate for review for now.

- configure: move --enable-docs and --disable-docs back to configure
- mkvenv: add diagnose() method for ensure() failures
- configure: use --diagnose option with meson ensure
- configure: bootstrap sphinx with mkvenv

That's all for now, seeya!
--js

John Snow (20):
=C2=A0 python: update pylint configuration
=C2=A0 python: add mkvenv.py
=C2=A0 mkvenv: add console script entry point generation
=C2=A0 mkvenv: Add better error message for missing pyexpat module
=C2=A0 mkvenv: generate console entry shims from inside the venv
=C2=A0 mkvenv: work around broken pip installations on Debian 10
=C2=A0 mkvenv: add nested venv workaround
=C2=A0 mkvenv: add ensure subcommand
=C2=A0 tests/docker: add python3-venv dependency
=C2=A0 tests/vm: Configure netbsd to use Python 3.10
=C2=A0 tests/vm: add py310-expat to NetBSD
=C2=A0 scripts/make-release: download meson=3D=3D0.61.5 .whl
=C2=A0 configure: create a python venv unconditionally
=C2=A0 configure: use 'mkvenv ensure meson' to bootstrap meson
=C2=A0 configure: add --enable-pypi and --disable-pypi
=C2=A0 tests: Use configure-provided pyvenv for tests
=C2=A0 configure: move --enable-docs and --disable-docs back to configure =C2=A0 mkvenv: add diagnose() method for ensure() failures
=C2=A0 configure: use --diagnose option with meson ensure
=C2=A0 configure: bootstrap sphinx with mkvenv

=C2=A0docs/devel/acpi-bits.rst=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A06 +-
=C2=A0docs/devel/testing.rst=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 14 +-
=C2=A0configure=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| = 139 +--
=C2=A0.gitlab-ci.d/buildtest-template.yml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0|=C2=A0 =C2=A04 +-
=C2=A0.gitlab-ci.d/buildtest.yml=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A06 +-
=C2=A0python/scripts/mkvenv.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 871 ++++++++++++++++++
=C2=A0python/setup.cfg=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 10 +
=C2=A0python/tests/flake8.sh=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A01 +
=C2=A0python/tests/isort.sh=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A01 +
=C2=A0python/tests/mypy.sh=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A01 +
=C2=A0python/tests/pylint.sh=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A01 +
=C2=A0.../org.centos/stream/8/x86_64/test-avocado=C2=A0 =C2=A0|=C2=A0 =C2= =A04 +-
=C2=A0scripts/device-crash-test=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A02 +-
=C2=A0scripts/make-release=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 11 +
=C2=A0tests/Makefile.include=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 10 +-
=C2=A0.../dockerfiles/debian-all-test-cross.docker=C2=A0 |=C2=A0 =C2=A03 +-=
=C2=A0.../dockerfiles/debian-hexagon-cross.docker=C2=A0 =C2=A0|=C2=A0 =C2= =A03 +-
=C2=A0.../dockerfiles/debian-riscv64-cross.docker=C2=A0 =C2=A0|=C2=A0 =C2= =A03 +-
=C2=A0.../dockerfiles/debian-tricore-cross.docker=C2=A0 =C2=A0|=C2=A0 =C2= =A03 +-
=C2=A0tests/requirements.txt=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A07 +-
=C2=A0tests/vm/netbsd=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A02 = +
=C2=A021 files changed, 1016 insertions(+), 86 deletions(-)
=C2=A0create mode 100644 python/scripts/mkvenv.py

--
2.39.2

Just a note to say I'm working on the respin here - Paolo suggest= ed I remove the "--gen" arguments to mkvenv and generate the entr= y point scripts conditionally at ensure time instead.

Good idea!

<= div dir=3D"auto">I ran into some problems with msys2, though, where the ent= ry point scripts native to the system are binary .exe files I don't kno= w how to recreate.

I hav= e some research to do on windows perhaps to understand what's expected = on that platform and how to achieve it.

I'm hoping the fix is as easy as "You can still us= e console scripts, but you need to use the .py or .pyw suffix". I'= ll know shortly!

If I do= n't smooth over all the issues before Wednesday, though, I'm going = to be away from my desk for the rest of the week and may need to ask Paolo = for help finishing up the polish so we can land this in a timely fashion so= we have a lot of runway to fix build issues before 8.1 rc0.

--js
<= /div> --000000000000f52aaa05faa6b608--