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.
>
> --------------------------------------------------------------------------------
>
>

Reply via email to