On Mon, Apr 24, 2023 at 2:41 PM John Snow <js...@redhat.com> wrote:
> On Mon, Apr 24, 2023 at 4:36 PM Warner Losh <i...@bsdimp.com> wrote: > > > > > > > > On Mon, Apr 24, 2023, 2:03 PM John Snow <js...@redhat.com> wrote: > >> > >> This commit changes how we detect and install meson. It notably removes > >> '--meson='. > >> > >> The previous patch creates a lightweight Python virtual environment > >> unconditionally using the user's configured $python that inherits system > >> packages. If Meson is installed there and meets our minimum version > >> requirements, we will use that Meson. > >> > >> In the event that Meson is installed but *not for the chosen Python > >> interpreter*, not found, or of insufficient version, we will attempt to > >> install Meson from vendored source into the newly created Python virtual > >> environment. This vendored installation is considered to replace the > >> mechanism from prior tarball distributions. > >> > >> This commit restores the ability to use a system meson, but in turn > >> temporarily removes the ability to use a meson as obtained from the > >> internet at configure-time (git submodules, as it stood prior to this > >> patch); that ability will be restored in the next commit. > >> > >> As a result of this patch, the Python interpreter we use for both our > >> own build scripts *and* Meson extensions are always known to be the > >> exact same Python. As a further benefit, there will also be a symlink > >> available in the build directory that points to the correct, configured > >> python and can be used by e.g. manual tests to invoke the correct, > >> configured Python unambiguously. > >> > >> Signed-off-by: John Snow <js...@redhat.com> > >> --- > >> configure | 72 ++++++++--------------------- > >> .gitlab-ci.d/buildtest-template.yml | 4 +- > >> 2 files changed, 21 insertions(+), 55 deletions(-) > >> > >> diff --git a/configure b/configure > >> index 462fe604d6..e9947369b2 100755 > >> --- a/configure > >> +++ b/configure > >> @@ -731,8 +731,6 @@ for opt do > >> ;; > >> --skip-meson) skip_meson=yes > >> ;; > >> - --meson=*) meson="$optarg" > >> - ;; > >> --ninja=*) ninja="$optarg" > >> ;; > >> --smbd=*) smbd="$optarg" > >> @@ -1016,7 +1014,6 @@ Advanced options (experts only): > >> --cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH > guest test cases > >> --make=MAKE use specified make [$make] > >> --python=PYTHON use specified python [$python] > >> - --meson=MESON use specified meson [$meson] > >> --ninja=NINJA use specified ninja [$ninja] > >> --smbd=SMBD use specified smbd [$smbd] > >> --with-git=GIT use specified git [$git] > >> @@ -1089,7 +1086,8 @@ fi > >> > >> # Resolve PATH > >> python="$(command -v "$python")" > >> -explicit_python=yes > >> +# This variable is intended to be used only for error messages: > >> +target_python=$python > >> > >> # Create a Python virtual environment using our configured python. > >> # The stdout of this script will be the location of a symlink that > >> @@ -1101,7 +1099,6 @@ explicit_python=yes > >> # - venv is cleared if it exists already; > >> # - venv is allowed to use system packages; > >> # - all setup is performed **offline**; > >> -# - No packages are installed by default; > >> # - pip is not installed into the venv when possible, > >> # but ensurepip is called as a fallback when necessary. > >> > >> @@ -1116,58 +1113,27 @@ fi > >> # Suppress writing compiled files > >> python="$python -B" > >> > >> -has_meson() { > >> - local python_dir=$(dirname "$python") > >> - # PEP405: pyvenv.cfg is either adjacent to the Python executable > >> - # or one directory above > >> - if test -f $python_dir/pyvenv.cfg || test -f > $python_dir/../pyvenv.cfg; then > >> - # Ensure that Meson and Python come from the same virtual > environment > >> - test -x "$python_dir/meson" && > >> - test "$(command -v meson)" -ef "$python_dir/meson" > >> - else > >> - has meson > >> - fi > >> -} > >> > >> -if test -z "$meson"; then > >> - if test "$explicit_python" = no && has_meson && version_ge > "$(meson --version)" 0.61.5; then > >> - meson=meson > >> - elif test "$git_submodules_action" != 'ignore' ; then > >> - meson=git > >> - elif test -e "${source_path}/meson/meson.py" ; then > >> - meson=internal > >> - else > >> - if test "$explicit_python" = yes; then > >> - error_exit "--python requires using QEMU's embedded Meson > distribution, but it was not found." > >> - else > >> - error_exit "Meson not found. Use --meson=/path/to/meson" > >> - fi > >> +if ! $python "${source_path}/python/scripts/mkvenv.py" ensure \ > >> + --dir "${source_path}/python/wheels" \ > >> + "meson>=0.61.5" ; > >> +then > >> + # We're very out of luck. Try to give a good diagnostic. > >> + if test -e pyvenv/bin/meson; then > >> + echo "Meson is too old: > > > > > > Does a minimum version still get printed? I've needed to know that in > the past when I got the error... > > > > Warner > > $(pyvenv/bin/meson --version)" > > At the end of the series, here's what happens if i change the meson > requirement to a fictionally too-high version that would be impossible > to fulfill: > > > -------------------------------------------------------------------------------- > jsnow@scv ~/s/q/b/git (python-configure-venv)> ../../configure > --enable-debug --disable-pypi; > python determined to be '/usr/bin/python3' > python version: Python 3.11.2 > MKVENV pyvenv > MKVENV ensure meson>=2.61.5 > ERROR: Could not find a version that satisfies the requirement > meson>=2.61.5 (from versions: none) > ERROR: No matching distribution found for meson>=2.61.5 > > *** Ouch! *** > Oh, that's enough :) :) thanks! I'd be happy with less... Warner > Could not ensure availability of 'meson>=2.61.5': > • Python package 'meson' version '1.0.1' was found, but isn't suitable. > • No suitable version found in, or failed to install from > '/home/jsnow/src/qemu/python/wheels'. > • mkvenv was configured to operate offline and did not check PyPI. > > -------------------------------------------------------------------------------- > >