• [gentoo-dev] [PATCH 0/6] distutils-r1.eclass: Enable wheel reuse by def

    From =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?@21:1/5 to All on Fri Jul 19 17:10:02 2024
    Hello,

    Here's another batch of changes to distutils-r1. Its focused on two
    topics:

    1. Enabling the new wheel reuse code (added 2024-05-20) by default.
    This means that whenever possible, the eclass will invoke the PEP517
    build system just once and install the resulting wheel for all
    suitable implementations.

    This is NFC if you have only a single target enabled. If you enable
    multiple targets, this gives a major performance boost, as most
    of the time we don't need to spend significant time repeatedly
    invoking slowtools, I mean setuptools.

    It also means that for Python packages using the stable API, we don't
    build roughly identical C or Rust extensions multiple times.

    2. Adding `distutils_enable_tests import-check` option. This is meant
    as a "last resort" for packages that don't feature test suites
    at all. It uses dev-python/pytest-import-check plugin to verify
    that all installed modules (both .py and .so) are at least
    importable.

    I'm including three example uses of that. Since it's implemented
    on top of pytest, EPYTEST_DESELECT can be used to skip modules
    that don't meant to be importable.

    Pull request: https://github.com/gentoo/gentoo/pull/37187

    (note that it's failing because of keywords on pytest-import-check)


    Michał Górny (6):
    distutils-r1.eclass: Fix QA to ignore non-generic "pure" wheels
    distutils-r1.eclass: Allow wheel reuse by default
    distutils-r1.eclass: Add distutils_enable_tests import-check
    dev-python/ytmusicapi: Enable import-check testing (sample)
    dev-python/pymountboot: Enable import-check testing (sample)
    dev-python/miniupnpc: Enable import-check testing (sample)

    dev-python/miniupnpc/miniupnpc-2.2.8.ebuild | 1 +
    .../pymountboot/pymountboot-0.2.3-r1.ebuild | 2 ++
    dev-python/ytmusicapi/ytmusicapi-1.7.5.ebuild | 2 +-
    eclass/distutils-r1.eclass | 16 +++++++++++++---
    4 files changed, 17 insertions(+), 4 deletions(-)

    --
    2.45.2

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?@21:1/5 to All on Fri Jul 19 17:10:02 2024
    Add support for using the dev-python/pytest-import-check plugin to
    test if all modules installed by the package can be imported.

    Signed-off-by: Michał Górny <mgorny@gentoo.org>
    ---
    eclass/distutils-r1.eclass | 12 +++++++++++-
    1 file changed, 11 insertions(+), 1 deletion(-)

    diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
    index 645b5df5a6e5..fa8edb5cdfb7 100644
    --- a/eclass/distutils-r1.eclass
    +++ b/eclass/distutils-r1.eclass
    @@ -572,6 +572,9 @@ distutils_enable_sphinx() {
    # with the specified test runner. Also copies the current value
    # of RDEPEND to test?-BDEPEND. The test-runner argument must be one of:
    #
    +# - import-check: `pytest --import-check` fallback (for use when there are
    +# no tests to run)
    +#
    # - pytest: dev-python/pytest
    #
    # - setup.py: setup.py test (no deps included)
    @@ -597,9 +600,13 @@ distutils_enable_tests() {
    [[ ${#} -eq 1 ]] || die "${FUNCNAME} takes exactly one argument: test-runner"

    local test_deps=${RDEPEND}
    + local test_pkgs=
    case ${1} in
    + import-check)
    + test_pkgs+=' dev-python/pytest-import-check[${PYTHON_USEDEP}]'
    + ;&
    pytest)
    - local test_pkgs='>=dev-python/pytest-7.4.4[${PYTH
  • From =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?@21:1/5 to All on Fri Jul 19 17:10:02 2024
    Enable wheel reuse by default, since no issues were revealed during
    the testing so far. The option to disable them remains available, as it
    can be useful e.g. to verify that reproducible wheels are actually
    produced across implementation.

    Signed-off-by: Michał Górny <mgorny@gentoo.org>
    ---
    eclass/distutils-r1.eclass | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
    index 8227466b4d4c..645b5df5a6e5 100644
    --- a/eclass/distutils-r1.eclass
    +++ b/eclass/distutils-r1.eclass
    @@ -195,7 +195,6 @@ esac
    # @CODE

    # @ECLASS_VARIABLE: DISTUTILS_ALLOW_WHEEL_REUSE
    -# @DEFAULT_UNSET
    # @USER_VARIABLE
    # @DESCRIPTION:
    # If set to a non-empty value, the eclass is allowed to reuse a wheel
    @@ -205,6 +204,7 @@ esac
    # This is an optimization that can avoid the overhead of calling into
    # the build system in pure Python packages and packages using the stable
    # Python ABI.
    +DISTUTILS_ALLOW_WHEEL_REUSE=1

    # @ECLASS_VARIABLE: BUILD_DIR
    # @OUTPUT_VARIABLE
    --
    2.45.2

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?@21:1/5 to All on Fri Jul 19 17:10:02 2024
    Fix the QA check to match on `*py3-none-any.whl` to match the code
    matching reusable wheels. This avoids false positives over `dev-python/backrefs` that creates separate pure Python wheels for every
    Python version.

    Signed-off-by: Michał Górny <mgorny@gentoo.org>
    ---
    eclass/distutils-r1.eclass | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/eclass/distutils-r1.eclass b/eclass/distutils-r1.eclass
    index 61c0a80323ec..8227466b4d4c 100644
    --- a/eclass/distutils-r1.eclass
    +++ b/eclass/distutils-r1.eclass
    @@ -1933,7 +1933,7 @@ _distutils-r1_compare_installed_files() {
    # Perform the check only if at least one potentially reusable wheel
    # has been produced. Nonpure packages (e.g. NumPy) may install
    # interpreter configuration details into sitedir.
    - if [[ ${!DISTUTILS_WHEELS[*]} != *-none-any.whl* &&
    + if [[ ${!DISTUTILS_WHEELS[*]} != *py3-none-any.whl* &&
    ${!DISTUTILS_WHEELS[*]} != *-abi3-*.whl ]]; then
    return
    fi
    --
    2.45.2

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)