Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-extension-helpers for
openSUSE:Factory checked in at 2022-04-06 21:51:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-extension-helpers (Old)
and /work/SRC/openSUSE:Factory/.python-extension-helpers.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-extension-helpers"
Wed Apr 6 21:51:37 2022 rev:3 rq:967131 version:1.0.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-extension-helpers/python-extension-helpers.changes
2021-02-21 22:14:24.530105495 +0100
+++
/work/SRC/openSUSE:Factory/.python-extension-helpers.new.1900/python-extension-helpers.changes
2022-04-06 21:51:59.391225882 +0200
@@ -1,0 +2,12 @@
+Tue Apr 5 15:57:58 UTC 2022 - Ben Greiner <[email protected]>
+
+- Update to 1.0
+ * Added support for coverage>=5 for the extension-helpers test
+ suite. [#24]
+ * Removed any direct usage of distutils. [#34]
+ * Remove support for the undocumented --compiler argument to
+ setup.py. [#36]
+ * Added support for enabling extension-helpers from setup.cfg.
+ [#33]
+
+-------------------------------------------------------------------
Old:
----
extension-helpers-0.1.tar.gz
New:
----
extension-helpers-1.0.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-extension-helpers.spec ++++++
--- /var/tmp/diff_new_pack.a8isIL/_old 2022-04-06 21:52:00.071218123 +0200
+++ /var/tmp/diff_new_pack.a8isIL/_new 2022-04-06 21:52:00.075218077 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-extension-helpers
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,23 +19,26 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-extension-helpers
-Version: 0.1
+Version: 1.0.0
Release: 0
Summary: Utilities for building and installing packages in the Astropy
ecosystem
License: BSD-3-Clause
URL: https://github.com/astropy/extension-helpers
Source:
https://files.pythonhosted.org/packages/source/e/extension-helpers/extension-helpers-%{version}.tar.gz
Source100: python-extension-helpers-rpmlintrc
-BuildRequires: %{python_module setuptools_scm}
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module pip}
+BuildRequires: %{python_module setuptools >= 43}
+BuildRequires: %{python_module setuptools_scm >= 6.2}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
# SECTION test requirements
BuildRequires: %{python_module devel}
+BuildRequires: %{python_module numpy-devel}
BuildRequires: %{python_module pytest}
-BuildRequires: %{python_module numpy-devel if (%python-base without
python36-base)}
+BuildRequires: %{python_module wheel}
# /SECTION
-Requires: python-setuptools
+Requires: python-setuptools >= 40.2
BuildArch: noarch
%python_subpackages
@@ -53,10 +56,10 @@
%setup -q -n extension-helpers-%{version}
%build
-%python_build
+%pyproject_wheel
%install
-%python_install
+%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
@@ -67,6 +70,6 @@
%doc CHANGES.rst README.rst
%license LICENSE.rst licenses/LICENSE_ASTROSCRAPPY.rst
%{python_sitelib}/extension_helpers
-%{python_sitelib}/extension_helpers-%{version}-py*.egg-info
+%{python_sitelib}/extension_helpers-%{version}*-info
%changelog
++++++ extension-helpers-0.1.tar.gz -> extension-helpers-1.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/.circleci/config.yml
new/extension-helpers-1.0.0/.circleci/config.yml
--- old/extension-helpers-0.1/.circleci/config.yml 2019-12-16
21:50:17.000000000 +0100
+++ new/extension-helpers-1.0.0/.circleci/config.yml 1970-01-01
01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-version: 2
-
-jobs:
- html-docs:
- docker:
- - image: circleci/python:3.6
- steps:
- - checkout
- - run:
- name: Install Python dependencies
- command: |
- python3 -m venv venv
- . venv/bin/activate
- pip install .[docs]
- - run:
- name: Build Documentation
- command: |
- . venv/bin/activate
- cd docs
- make html
- make linkcheck
-
- - store_artifacts:
- path: docs/_build/html
-
- - run:
- name: "Built documentation is available at:"
- command:
DOCS_URL="${CIRCLE_BUILD_URL}/artifacts/${CIRCLE_NODE_INDEX}/${CIRCLE_WORKING_DIRECTORY/#\~/$HOME}/docs/_build/html/index.html";
echo $DOCS_URL
-
-
-workflows:
- version: 2
- tests_and_docs:
- jobs:
- - html-docs
-
-notify:
- webhooks:
- - url: https://giles.cadair.com/circleci
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/.coveragerc
new/extension-helpers-1.0.0/.coveragerc
--- old/extension-helpers-0.1/.coveragerc 2019-12-16 21:50:17.000000000
+0100
+++ new/extension-helpers-1.0.0/.coveragerc 1970-01-01 01:00:00.000000000
+0100
@@ -1,32 +0,0 @@
-[run]
-
-source = extension_helpers
-
-omit =
- extension_helpers/*/setup_package.py
- extension_helpers/tests/*
- extension_helpers/conftest.py
-
-[report]
-
-omit =
- extension_helpers/*/setup_package.py
- extension_helpers/tests/*
- extension_helpers/conftest.py
-
-exclude_lines =
- # Have to re-enable the standard pragma
- pragma: no cover
-
- # Don't complain about packages we have installed
- except ImportError
-
- # Don't complain if tests don't hit assertions
- raise AssertionError
- raise NotImplementedError
-
- # Don't complain about script hooks
- def main\(.*\):
-
- # Ignore branches that don't pertain to this version of Python
- pragma: py{ignore_python_version}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/.github/workflows/main.yml
new/extension-helpers-1.0.0/.github/workflows/main.yml
--- old/extension-helpers-0.1/.github/workflows/main.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/extension-helpers-1.0.0/.github/workflows/main.yml 2022-03-16
22:44:31.000000000 +0100
@@ -0,0 +1,41 @@
+name: CI
+
+on:
+ push:
+ pull_request:
+
+jobs:
+ tests:
+ uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@v1
+ with:
+ posargs: --openmp-expected=True
+ coverage: codecov
+ envs: |
+ # Code style
+ - linux: style
+ # Docs
+ - linux: build_docs
+ # Standard tests
+ - linux: py36-test-oldestdeps
+ - linux: py37-test
+ - linux: py38-test
+ - linux: py38-test-dev
+ - macos: py38-test-dev
+ posargs: --openmp-expected=False
+ - windows: py36-test
+ runs-on: windows-2019
+ - windows: py38-test-dev
+ runs-on: windows-2019
+ # Test with more compilers, for the OpenMP helpers
+ - macos: py38-test-osxclang-conda
+ - linux: py38-test-linuxgcc-conda
+ # Test downstream packages
+ - linux: py39-downstream
+ publish:
+ needs: tests
+ uses:
OpenAstronomy/github-actions-workflows/.github/workflows/publish_pure_python.yml@v1
+ with:
+ test_extras: test
+ test_command: pytest --pyargs extension_helpers
+ secrets:
+ pypi_token: ${{ secrets.PYPI_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/.gitignore
new/extension-helpers-1.0.0/.gitignore
--- old/extension-helpers-0.1/.gitignore 2019-12-16 21:50:17.000000000
+0100
+++ new/extension-helpers-1.0.0/.gitignore 2022-03-16 22:44:31.000000000
+0100
@@ -53,3 +53,6 @@
# PyCharm
.idea
+
+# Hypothesis
+.hypothesis
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/CHANGES.rst
new/extension-helpers-1.0.0/CHANGES.rst
--- old/extension-helpers-0.1/CHANGES.rst 2019-12-18 13:28:02.000000000
+0100
+++ new/extension-helpers-1.0.0/CHANGES.rst 2022-03-16 22:44:31.000000000
+0100
@@ -1,4 +1,15 @@
+1.0.0 (2022-03-16)
+------------------
+
+* Added support for coverage>=5 for the extension-helpers test suite. [#24]
+
+* Removed any direct usage of distutils. [#34]
+
+* Remove support for the undocumented --compiler argument to setup.py. [#36]
+
+* Added support for enabling extension-helpers from setup.cfg. [#33]
+
0.1 (2019-12-18)
----------------
-Initial release of extension-helpers, which was forked from astropy-helpers
4.0.
+* Initial release of extension-helpers, which was forked from astropy-helpers
4.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/CONTRIBUTING.md
new/extension-helpers-1.0.0/CONTRIBUTING.md
--- old/extension-helpers-0.1/CONTRIBUTING.md 2019-12-16 21:50:17.000000000
+0100
+++ new/extension-helpers-1.0.0/CONTRIBUTING.md 2022-03-16 22:44:31.000000000
+0100
@@ -3,18 +3,7 @@
The guidelines for contributing to ``extension-helpers`` are generally the same
as the [contributing guidelines for the astropy core
-package](http://github.com/astropy/astropy/blob/master/CONTRIBUTING.md).
+package](http://github.com/astropy/astropy/blob/main/CONTRIBUTING.md).
Basically, report relevant issues in the ``extension-helpers`` issue tracker,
and
we welcome pull requests that broadly follow the [Astropy coding
guidelines](http://docs.astropy.org/en/latest/development/codeguide.html).
-
-The key subtlety lies in understanding the relationship between ``astropy`` and
-``extension-helpers``. This package contains the build, installation, and
-documentation tools used by astropy. It also includes support for the
-``setup.py test`` command, though Astropy is still required for this to
-function (it does not currently include the full Astropy test runner). So
-issues or improvements to that functionality should be addressed in this
-package. Any other aspect of the [astropy core
-package](http://github.com/astropy/astropy) (or any other package that uses
-``extension-helpers``) should be addressed in the github repository for that
-package.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/PKG-INFO
new/extension-helpers-1.0.0/PKG-INFO
--- old/extension-helpers-0.1/PKG-INFO 2019-12-18 13:29:05.164452600 +0100
+++ new/extension-helpers-1.0.0/PKG-INFO 2022-03-16 22:44:51.766397000
+0100
@@ -1,27 +1,11 @@
Metadata-Version: 2.1
Name: extension-helpers
-Version: 0.1
-Summary: Utilities for building and installing packages in the Astropy
ecosystem
-Home-page: https://github.com/astropy/astropy-helpers
+Version: 1.0.0
+Summary: Utilities for building and installing packages with compiled
extensions
+Home-page: https://github.com/astropy/extension-helpers
Author: The Astropy Developers
Author-email: [email protected]
License: BSD 3-Clause License
-Description: extension-helpers
- =================
-
- .. image::
https://dev.azure.com/astropy-project/extension-helpers/_apis/build/status/astropy.extension-helpers?branchName=master
- :target:
https://dev.azure.com/astropy-project/extension-helpers/_build/latest?definitionId=4&branchName=master
-
- .. image::
https://codecov.io/gh/astropy/extension-helpers/branch/master/graph/badge.svg
- :target: https://codecov.io/gh/astropy/extension-helpers
-
- The **extension-helpers** package includes convenience helpers to
assist with
- building Python packages with compiled C/Cython extensions. It is
developed by
- the Astropy project but is intended to be general and usable by any
Python
- package.
-
- For more information, see the documentation at
http://extension-helpers.readthedocs.io
-
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
@@ -37,3 +21,26 @@
Requires-Python: >=3.6
Provides-Extra: test
Provides-Extra: docs
+License-File: LICENSE.rst
+
+extension-helpers
+=================
+
+.. image::
https://github.com/astropy/extension-helpers/actions/workflows/main.yml/badge.svg
+ :target:
https://github.com/astropy/extension-helpers/actions/workflows/main.yml
+
+.. image::
https://codecov.io/gh/astropy/extension-helpers/branch/main/graph/badge.svg
+ :target: https://codecov.io/gh/astropy/extension-helpers
+
+.. image::
https://readthedocs.org/projects/extension-helpers/badge/?version=latest
+ :target: https://extension-helpers.readthedocs.io/en/latest/?badge=latest
+ :alt: Documentation Status
+
+The **extension-helpers** package includes convenience helpers to assist with
+building Python packages with compiled C/Cython extensions. It is developed by
+the Astropy project but is intended to be general and usable by any Python
+package.
+
+For more information, see the documentation at
http://extension-helpers.readthedocs.io
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/README.rst
new/extension-helpers-1.0.0/README.rst
--- old/extension-helpers-0.1/README.rst 2019-12-18 13:27:20.000000000
+0100
+++ new/extension-helpers-1.0.0/README.rst 2022-03-16 22:44:31.000000000
+0100
@@ -1,12 +1,16 @@
extension-helpers
=================
-.. image::
https://dev.azure.com/astropy-project/extension-helpers/_apis/build/status/astropy.extension-helpers?branchName=master
- :target:
https://dev.azure.com/astropy-project/extension-helpers/_build/latest?definitionId=4&branchName=master
+.. image::
https://github.com/astropy/extension-helpers/actions/workflows/main.yml/badge.svg
+ :target:
https://github.com/astropy/extension-helpers/actions/workflows/main.yml
-.. image::
https://codecov.io/gh/astropy/extension-helpers/branch/master/graph/badge.svg
+.. image::
https://codecov.io/gh/astropy/extension-helpers/branch/main/graph/badge.svg
:target: https://codecov.io/gh/astropy/extension-helpers
+.. image::
https://readthedocs.org/projects/extension-helpers/badge/?version=latest
+ :target: https://extension-helpers.readthedocs.io/en/latest/?badge=latest
+ :alt: Documentation Status
+
The **extension-helpers** package includes convenience helpers to assist with
building Python packages with compiled C/Cython extensions. It is developed by
the Astropy project but is intended to be general and usable by any Python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/azure-pipelines.yml
new/extension-helpers-1.0.0/azure-pipelines.yml
--- old/extension-helpers-0.1/azure-pipelines.yml 2019-12-18
13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/azure-pipelines.yml 1970-01-01
01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-resources:
- repositories:
- - repository: OpenAstronomy
- type: github
- endpoint: astropy
- name: OpenAstronomy/azure-pipelines-templates
- ref: master
-
-jobs:
-- template: run-tox-env.yml@OpenAstronomy
- parameters:
- posargs: --openmp-expected=True
- coverage: codecov
- envs:
- # Code style
- - linux: style
- # Docs
- - linux: build_docs
- # Standard tests
- - linux: py36-test
- - linux: py37-test
- - linux: py38-test
- - linux: py38-test-dev
- - macos: py36-test
- posargs: --openmp-expected=False
- - macos: py38-test-dev
- posargs: --openmp-expected=False
- - windows: py36-test
- - windows: py38-test-dev
- # Test with more compilers, for the OpenMP helpers
- - macos: py38-test-osxgcc-conda
- - macos: py38-test-osxclang-conda
- - linux: py38-test-linuxgcc-conda
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/docs/using.rst
new/extension-helpers-1.0.0/docs/using.rst
--- old/extension-helpers-0.1/docs/using.rst 2019-12-18 13:27:20.000000000
+0100
+++ new/extension-helpers-1.0.0/docs/using.rst 2022-03-16 22:44:31.000000000
+0100
@@ -39,3 +39,9 @@
Note that if you use this, extension-helpers will also we create a
``packagename.compiler_version`` submodule that contain information about the
compilers used.
+
+It is also possible to enable extension-helpers in ``setup.cfg`` instead of
+``setup.py`` by adding the following configuration to the ``setup.cfg`` file::
+
+ [extension-helpers]
+ use_extension_helpers = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/extension_helpers/__init__.py
new/extension-helpers-1.0.0/extension_helpers/__init__.py
--- old/extension-helpers-0.1/extension_helpers/__init__.py 2019-12-18
13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/__init__.py 2022-03-16
22:44:31.000000000 +0100
@@ -1,5 +1,21 @@
-from ._distutils_helpers import get_compiler
+from configparser import ConfigParser
+
from ._openmp_helpers import add_openmp_flags_if_available
-from ._setup_helpers import get_extensions, pkg_config
+from ._setup_helpers import get_compiler, get_extensions, pkg_config
from ._utils import import_file, write_if_different
from .version import version as __version__
+
+
+def _finalize_distribution_hook(distribution):
+ """
+ Entry point for setuptools which allows extension-helpers to be enabled
+ from setup.cfg without the need for setup.py.
+ """
+ config_files = distribution.find_config_files()
+ if len(config_files) == 0:
+ return
+ cfg = ConfigParser()
+ cfg.read(config_files[0])
+ if (cfg.has_option("extension-helpers", "use_extension_helpers") and
+ cfg.get("extension-helpers", "use_extension_helpers").lower() ==
'true'):
+ distribution.ext_modules = get_extensions()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers/_distutils_helpers.py
new/extension-helpers-1.0.0/extension_helpers/_distutils_helpers.py
--- old/extension-helpers-0.1/extension_helpers/_distutils_helpers.py
2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/_distutils_helpers.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,115 +0,0 @@
-"""
-This module contains various utilities for introspecting the distutils
-module and the setup process.
-
-Some of these utilities require the
-`extension_helpers.setup_helpers.register_commands` function to be called
first,
-as it will affect introspection of setuptools command-line arguments. Other
-utilities in this module do not have that restriction.
-"""
-
-import os
-import sys
-from distutils import ccompiler
-from distutils.dist import Distribution
-from distutils.errors import DistutilsError
-
-from ._utils import silence
-
-__all__ = ['get_compiler']
-
-
-def get_dummy_distribution():
- """
- Returns a distutils Distribution object used to instrument the setup
- environment before calling the actual setup() function.
- """
-
- # Pre-parse the Distutils command-line options and config files to if
- # the option is set.
- dist = Distribution({'script_name': os.path.basename(sys.argv[0]),
- 'script_args': sys.argv[1:]})
-
- with silence():
- try:
- dist.parse_config_files()
- dist.parse_command_line()
- except (DistutilsError, AttributeError, SystemExit):
- # Let distutils handle DistutilsErrors itself AttributeErrors can
- # get raise for ./setup.py --help SystemExit can be raised if a
- # display option was used, for example
- pass
-
- return dist
-
-
-def get_main_package_directory(distribution):
- """
- Given a Distribution object, return the main package directory.
- """
- return min(distribution.packages, key=len).replace('.', os.sep)
-
-
-def get_distutils_option(option, commands):
- """ Returns the value of the given distutils option.
-
- Parameters
- ----------
- option : str
- The name of the option
-
- commands : list of str
- The list of commands on which this option is available
-
- Returns
- -------
- val : str or None
- the value of the given distutils option. If the option is not set,
- returns None.
- """
-
- dist = get_dummy_distribution()
-
- for cmd in commands:
- cmd_opts = dist.command_options.get(cmd)
- if cmd_opts is not None and option in cmd_opts:
- return cmd_opts[option][1]
- else:
- return None
-
-
-def get_distutils_build_option(option):
- """ Returns the value of the given distutils build option.
-
- Parameters
- ----------
- option : str
- The name of the option
-
- Returns
- -------
- val : str or None
- The value of the given distutils build option. If the option
- is not set, returns None.
- """
- return get_distutils_option(option, ['build', 'build_ext', 'build_clib'])
-
-
-def get_compiler():
- """
- Determines the compiler that will be used to build extension modules.
-
- Returns
- -------
- compiler : str
- The compiler option specified for the build, build_ext, or build_clib
- command; or the default compiler for the platform if none was
- specified.
-
- """
-
- compiler = get_distutils_build_option('compiler')
- if compiler is None:
- return ccompiler.get_default_compiler()
-
- return compiler
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers/_openmp_helpers.py
new/extension-helpers-1.0.0/extension_helpers/_openmp_helpers.py
--- old/extension-helpers-0.1/extension_helpers/_openmp_helpers.py
2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/_openmp_helpers.py
2022-03-16 22:44:31.000000000 +0100
@@ -15,25 +15,27 @@
import sys
import glob
import time
+import logging
import datetime
import tempfile
import subprocess
-from distutils import log
-from distutils.errors import LinkError, CompileError
-from distutils.ccompiler import new_compiler
-from distutils.sysconfig import get_config_var, customize_compiler
-from ._distutils_helpers import get_compiler
+from setuptools.command.build_ext import customize_compiler, get_config_var,
new_compiler
+
+from ._setup_helpers import get_compiler
__all__ = ['add_openmp_flags_if_available']
try:
# Check if this has already been instantiated, only set the default once.
- _ASTROPY_DISABLE_SETUP_WITH_OPENMP_
+ _EXTENSION_HELPERS_DISABLE_OPENMP_SETUP_
except NameError:
import builtins
+
# It hasn't, so do so.
- builtins._ASTROPY_DISABLE_SETUP_WITH_OPENMP_ = False
+ builtins._EXTENSION_HELPERS_DISABLE_OPENMP_SETUP_ = False
+
+log = logging.getLogger(__name__)
CCODE = """
#include <omp.h>
@@ -173,48 +175,48 @@
compile_flags = openmp_flags.get('compiler_flags')
link_flags = openmp_flags.get('linker_flags')
- tmp_dir = tempfile.mkdtemp()
- start_dir = os.path.abspath('.')
+ with tempfile.TemporaryDirectory() as tmp_dir:
+ start_dir = os.path.abspath('.')
- try:
- os.chdir(tmp_dir)
+ try:
+ os.chdir(tmp_dir)
- # Write test program
- with open('test_openmp.c', 'w') as f:
- f.write(CCODE)
-
- os.mkdir('objects')
-
- # Compile, test program
- ccompiler.compile(['test_openmp.c'], output_dir='objects',
- extra_postargs=compile_flags)
-
- # Link test program
- objects = glob.glob(os.path.join('objects', '*' +
ccompiler.obj_extension))
- ccompiler.link_executable(objects, 'test_openmp',
- extra_postargs=link_flags)
-
- # Run test program
- output = subprocess.check_output('./test_openmp')
- output = output.decode(sys.stdout.encoding or 'utf-8').splitlines()
-
- if 'nthreads=' in output[0]:
- nthreads = int(output[0].strip().split('=')[1])
- if len(output) == nthreads:
- is_openmp_supported = True
+ # Write test program
+ with open('test_openmp.c', 'w') as f:
+ f.write(CCODE)
+
+ os.mkdir('objects')
+
+ # Compile, test program
+ ccompiler.compile(['test_openmp.c'], output_dir='objects',
+ extra_postargs=compile_flags)
+
+ # Link test program
+ objects = glob.glob(os.path.join('objects', '*' +
ccompiler.obj_extension))
+ ccompiler.link_executable(objects, 'test_openmp',
+ extra_postargs=link_flags)
+
+ # Run test program
+ output = subprocess.check_output('./test_openmp')
+ output = output.decode(sys.stdout.encoding or 'utf-8').splitlines()
+
+ if 'nthreads=' in output[0]:
+ nthreads = int(output[0].strip().split('=')[1])
+ if len(output) == nthreads:
+ is_openmp_supported = True
+ else:
+ log.warn("Unexpected number of lines from output of test
OpenMP "
+ "program (output was {0})".format(output))
+ is_openmp_supported = False
else:
- log.warn("Unexpected number of lines from output of test
OpenMP "
+ log.warn("Unexpected output from test OpenMP "
"program (output was {0})".format(output))
is_openmp_supported = False
- else:
- log.warn("Unexpected output from test OpenMP "
- "program (output was {0})".format(output))
+ except Exception:
is_openmp_supported = False
- except (CompileError, LinkError, subprocess.CalledProcessError):
- is_openmp_supported = False
- finally:
- os.chdir(start_dir)
+ finally:
+ os.chdir(start_dir)
return is_openmp_supported
@@ -223,9 +225,10 @@
"""
Determine whether the build compiler has OpenMP support.
"""
- log_threshold = log.set_threshold(log.FATAL)
+ log_threshold = log.level
+ log.setLevel('CRITICAL')
ret = check_openmp_support()
- log.set_threshold(log_threshold)
+ log.setLevel(log_threshold)
return ret
@@ -237,7 +240,7 @@
Returns `True` if the flags were added, `False` otherwise.
"""
- if _ASTROPY_DISABLE_SETUP_WITH_OPENMP_:
+ if _EXTENSION_HELPERS_DISABLE_OPENMP_SETUP_:
log.info("OpenMP support has been explicitly disabled.")
return False
@@ -258,7 +261,7 @@
_IS_OPENMP_ENABLED_SRC = """
-# Autogenerated by {packagetitle}'s setup.py on {timestamp!s}
+# Autogenerated by {packagename}'s setup.py on {timestamp!s}
def is_openmp_enabled():
\"\"\"
@@ -275,22 +278,17 @@
OpenMP support.
"""
- if packagename.lower() == 'astropy':
- packagetitle = 'Astropy'
- else:
- packagetitle = packagename
-
epoch = int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
timestamp = datetime.datetime.utcfromtimestamp(epoch)
if disable_openmp is not None:
import builtins
- builtins._ASTROPY_DISABLE_SETUP_WITH_OPENMP_ = disable_openmp
- if _ASTROPY_DISABLE_SETUP_WITH_OPENMP_:
+ builtins._EXTENSION_HELPERS_DISABLE_OPENMP_SETUP_ = disable_openmp
+ if _EXTENSION_HELPERS_DISABLE_OPENMP_SETUP_:
log.info("OpenMP support has been explicitly disabled.")
- openmp_support = False if _ASTROPY_DISABLE_SETUP_WITH_OPENMP_ else
is_openmp_supported()
+ openmp_support = False if _EXTENSION_HELPERS_DISABLE_OPENMP_SETUP_ else
is_openmp_supported()
- src = _IS_OPENMP_ENABLED_SRC.format(packagetitle=packagetitle,
+ src = _IS_OPENMP_ENABLED_SRC.format(packagename=packagename,
timestamp=timestamp,
return_bool=openmp_support)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers/_setup_helpers.py
new/extension-helpers-1.0.0/extension_helpers/_setup_helpers.py
--- old/extension-helpers-0.1/extension_helpers/_setup_helpers.py
2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/_setup_helpers.py
2022-03-16 22:44:31.000000000 +0100
@@ -7,18 +7,33 @@
import os
import sys
import shutil
+import logging
import subprocess
-from distutils import log
from collections import defaultdict
-from distutils.core import Extension
-from setuptools import find_packages
-from setuptools.config import read_configuration
+from setuptools import Extension, find_packages
+from setuptools.command.build_ext import new_compiler
-from ._distutils_helpers import get_compiler
from ._utils import import_file, walk_skip_hidden
-__all__ = ['get_extensions', 'pkg_config']
+__all__ = ['get_compiler', 'get_extensions', 'pkg_config']
+
+log = logging.getLogger(__name__)
+
+
+def get_compiler():
+ """
+ Determines the compiler that will be used to build extension modules.
+
+ Returns
+ -------
+ compiler : str
+ The compiler option specified for the build, build_ext, or build_clib
+ command; or the default compiler for the platform if none was
+ specified.
+
+ """
+ return new_compiler().compiler_type
def get_extensions(srcdir='.'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/extension_helpers/_utils.py
new/extension-helpers-1.0.0/extension_helpers/_utils.py
--- old/extension-helpers-0.1/extension_helpers/_utils.py 2019-12-18
13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/_utils.py 2022-03-16
22:44:31.000000000 +0100
@@ -9,64 +9,6 @@
__all__ = ['write_if_different', 'import_file']
-# Note: The following Warning subclasses are simply copies of the Warnings in
-# Astropy of the same names.
-class AstropyWarning(Warning):
- """
- The base warning class from which all Astropy warnings should inherit.
-
- Any warning inheriting from this class is handled by the Astropy logger.
- """
-
-
-class AstropyDeprecationWarning(AstropyWarning):
- """
- A warning class to indicate a deprecated feature.
- """
-
-
-class AstropyPendingDeprecationWarning(PendingDeprecationWarning,
- AstropyWarning):
- """
- A warning class to indicate a soon-to-be deprecated feature.
- """
-
-
-class _DummyFile(object):
- """A noop writeable object."""
-
- errors = ''
-
- def write(self, s):
- pass
-
- def flush(self):
- pass
-
-
[email protected]
-def silence():
- """A context manager that silences sys.stdout and sys.stderr."""
-
- old_stdout = sys.stdout
- old_stderr = sys.stderr
- sys.stdout = _DummyFile()
- sys.stderr = _DummyFile()
- exception_occurred = False
- try:
- yield
- except: # noqa
- exception_occurred = True
- # Go ahead and clean up so that exception handling can work normally
- sys.stdout = old_stdout
- sys.stderr = old_stderr
- raise
-
- if not exception_occurred:
- sys.stdout = old_stdout
- sys.stderr = old_stderr
-
-
if sys.platform == 'win32':
import ctypes
@@ -175,7 +117,7 @@
generated from the filename.
"""
# Specifying a traditional dot-separated fully qualified name here
- # results in a number of "Parent module 'astropy' not found while
+ # results in a number of "Parent module '...' not found while
# handling absolute import" warnings. Using the same name, the
# namespaces of the modules get merged together. So, this
# generates an underscore-separated name which is more likely to
@@ -185,7 +127,7 @@
if name is None:
basename = os.path.splitext(filename)[0]
- name = '_'.join(os.path.relpath(basename).split(os.sep)[1:])
+ name = '_'.join(os.path.abspath(basename).split(os.sep)[1:])
if not os.path.exists(filename):
raise ImportError('Could not import file {0}'.format(filename))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/extension_helpers/conftest.py
new/extension-helpers-1.0.0/extension_helpers/conftest.py
--- old/extension-helpers-0.1/extension_helpers/conftest.py 2019-12-16
21:50:17.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/conftest.py 2022-03-16
22:44:31.000000000 +0100
@@ -9,13 +9,16 @@
try:
from coverage import CoverageData
+ from coverage import __version__ as coverage_version
except ImportError:
HAS_COVERAGE = False
+ CoverageData = None
else:
- HAS_COVERAGE = True
+ # Set to the major version number
+ HAS_COVERAGE = int(coverage_version.split('.')[0])
-if HAS_COVERAGE:
- SUBPROCESS_COVERAGE = []
+
+SUBPROCESS_COVERAGE = []
def pytest_configure(config):
@@ -27,9 +30,6 @@
if HAS_COVERAGE:
- # We create an empty coverage data object
- combined_cdata = CoverageData()
-
# Add all files from extension_helpers to make sure we compute the
total
# coverage, not just the coverage of the files that have non-zero
# coverage.
@@ -52,6 +52,14 @@
if os.path.exists(short_filename):
lines[os.path.abspath(short_filename)].extend(cdata.lines(filename))
- combined_cdata.add_lines(lines)
-
- combined_cdata.write_file('.coverage.subprocess')
+ if HAS_COVERAGE >= 5:
+ # Support coverage<5 and >=5; see
+ # https://github.com/astropy/extension-helpers/issues/24
+ # We create an empty coverage data object
+ combined_cdata = CoverageData(suffix='subprocess')
+ combined_cdata.add_lines(lines)
+ combined_cdata.write()
+ else:
+ combined_cdata = CoverageData()
+ combined_cdata.add_lines(lines)
+ combined_cdata.write_file('.coverage.subprocess')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers/tests/__init__.py
new/extension-helpers-1.0.0/extension_helpers/tests/__init__.py
--- old/extension-helpers-0.1/extension_helpers/tests/__init__.py
2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/tests/__init__.py
2022-03-16 22:44:31.000000000 +0100
@@ -4,13 +4,7 @@
import pytest
-try:
- from coverage import CoverageData
-except ImportError:
- HAS_COVERAGE = False
-else:
- HAS_COVERAGE = True
- from ..conftest import SUBPROCESS_COVERAGE
+from ..conftest import HAS_COVERAGE, SUBPROCESS_COVERAGE, CoverageData
PACKAGE_DIR = os.path.dirname(__file__)
@@ -65,7 +59,13 @@
stdout, stderr = p.communicate()
cdata = CoverageData()
- cdata.read_file(os.path.join(path, '.coverage'))
+ if HAS_COVERAGE >= 5:
+ # Support coverage<5 and >=5; see
+ # https://github.com/astropy/extension-helpers/issues/24
+ cdata.read()
+ else:
+ cdata.read_file(os.path.join(path, '.coverage'))
+
SUBPROCESS_COVERAGE.append(cdata)
else:
@@ -83,18 +83,6 @@
raise SystemExit(p.returncode)
[email protected](scope='function', autouse=True)
-def reset_distutils_log():
- """
- This is a setup/teardown fixture that ensures the log-level of the
- distutils log is always set to a default of WARN, since different
- settings could affect tests that check the contents of stdout.
- """
-
- from distutils import log
- log.set_threshold(log.WARN)
-
-
TEST_PACKAGE_SETUP_PY = """\
#!/usr/bin/env python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers/tests/test_openmp_helpers.py
new/extension-helpers-1.0.0/extension_helpers/tests/test_openmp_helpers.py
--- old/extension-helpers-0.1/extension_helpers/tests/test_openmp_helpers.py
2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/tests/test_openmp_helpers.py
2022-03-16 22:44:31.000000000 +0100
@@ -1,20 +1,24 @@
+
import os
import sys
import types
from copy import deepcopy
from importlib import machinery
-from distutils.core import Extension
import pytest
+from setuptools import Extension
from .._openmp_helpers import add_openmp_flags_if_available,
generate_openmp_enabled_py
@pytest.fixture
def openmp_expected(request):
- openmp_expected = request.config.getoption("--openmp-expected")
- if openmp_expected is not None:
- return openmp_expected.lower() == 'true'
+ try:
+ openmp_expected = request.config.getoption("--openmp-expected")
+ if openmp_expected is not None:
+ return openmp_expected.lower() == 'true'
+ except ValueError:
+ return None
def test_add_openmp_flags_if_available(openmp_expected):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers/tests/test_setup_helpers.py
new/extension-helpers-1.0.0/extension_helpers/tests/test_setup_helpers.py
--- old/extension-helpers-0.1/extension_helpers/tests/test_setup_helpers.py
2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/tests/test_setup_helpers.py
2022-03-16 22:44:31.000000000 +0100
@@ -1,12 +1,13 @@
import os
import sys
+import uuid
import importlib
+import subprocess
from textwrap import dedent
import pytest
-from .._setup_helpers import get_extensions
-from . import reset_distutils_log # noqa
+from .._setup_helpers import get_compiler, get_extensions
from . import cleanup_import, run_setup
extension_helpers_PATH =
os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) # noqa
@@ -20,19 +21,26 @@
os.remove(tmpfile)
+POSSIBLE_COMPILERS = ['unix', 'msvc', 'bcpp', 'cygwin', 'mingw32']
+
+
+def test_get_compiler():
+ assert get_compiler() in POSSIBLE_COMPILERS
+
+
def _extension_test_package(tmpdir, request, extension_type='c',
include_numpy=False):
"""Creates a simple test package with an extension module."""
test_pkg = tmpdir.mkdir('test_pkg')
- test_pkg.mkdir('apyhtest_eva').ensure('__init__.py')
+ test_pkg.mkdir('helpers_test_package').ensure('__init__.py')
# TODO: It might be later worth making this particular test package into a
# reusable fixture for other build_ext tests
if extension_type in ('c', 'both'):
# A minimal C extension for testing
- test_pkg.join('apyhtest_eva', 'unit01.c').write(dedent("""\
+ test_pkg.join('helpers_test_package', 'unit01.c').write(dedent("""\
#include <Python.h>
static struct PyModuleDef moduledef = {
@@ -50,7 +58,7 @@
if extension_type in ('pyx', 'both'):
# A minimal Cython extension for testing
- test_pkg.join('apyhtest_eva', 'unit02.pyx').write(dedent("""\
+ test_pkg.join('helpers_test_package', 'unit02.pyx').write(dedent("""\
print("Hello cruel angel.")
"""))
@@ -64,11 +72,13 @@
include_dirs = ['numpy'] if include_numpy else []
extensions_list = [
- "Extension('apyhtest_eva.{0}', [join('apyhtest_eva', '{1}')],
include_dirs={2})".format(
+ "Extension('helpers_test_package.{0}', "
+ "[join('helpers_test_package', '{1}')], "
+ "include_dirs={2})".format(
os.path.splitext(extension)[0], extension, include_dirs)
for extension in extensions]
- test_pkg.join('apyhtest_eva', 'setup_package.py').write(dedent("""\
+ test_pkg.join('helpers_test_package', 'setup_package.py').write(dedent("""\
from setuptools import Extension
from os.path import join
def get_extensions():
@@ -83,7 +93,7 @@
from extension_helpers import get_extensions
setup(
- name='apyhtest_eva',
+ name='helpers_test_package',
version='0.1',
packages=find_packages(),
ext_modules=get_extensions()
@@ -96,7 +106,7 @@
sys.path.insert(0, '')
def finalize():
- cleanup_import('apyhtest_eva')
+ cleanup_import('helpers_test_package')
request.addfinalizer(finalize)
@@ -123,7 +133,7 @@
def test_cython_autoextensions(tmpdir):
"""
- Regression test for https://github.com/astropy/extension-helpers/pull/19
+ Regression test for https://github.com/astropy/astropy-helpers/pull/19
Ensures that Cython extensions in sub-packages are discovered and built
only once.
@@ -163,10 +173,107 @@
'--record={0}'.format(install_temp.join('record.txt'))])
with install_temp.as_cwd():
- import apyhtest_eva
- # Make sure we imported the apyhtest_eva package from the correct place
- dirname = os.path.abspath(os.path.dirname(apyhtest_eva.__file__))
- assert dirname == str(install_temp.join('apyhtest_eva'))
+ import helpers_test_package
+
+ # Make sure we imported the helpers_test_package package from the
correct place
+ dirname =
os.path.abspath(os.path.dirname(helpers_test_package.__file__))
+ assert dirname == str(install_temp.join('helpers_test_package'))
+
+ import helpers_test_package.compiler_version
+ assert helpers_test_package.compiler_version != 'unknown'
+
+
[email protected]('use_extension_helpers', [None, False, True])
+def test_no_setup_py(tmpdir, use_extension_helpers):
+ """
+ Test that makes sure that extension-helpers can be enabled without a
+ setup.py file.
+ """
+
+ package_name = 'helpers_test_package_' + str(uuid.uuid4()).replace('-',
'_')
+
+ test_pkg = tmpdir.mkdir('test_pkg')
+ test_pkg.mkdir(package_name).ensure('__init__.py')
+
+ simple_c = test_pkg.join(package_name, 'simple.c')
+
+ simple_c.write(dedent("""\
+ #include <Python.h>
+
+ static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "simple",
+ NULL,
+ -1,
+ NULL
+ };
+ PyMODINIT_FUNC
+ PyInit_simple(void) {
+ return PyModule_Create(&moduledef);
+ }
+ """))
+
+ test_pkg.join(package_name, 'setup_package.py').write(dedent(f"""\
+ from setuptools import Extension
+ from os.path import join
+ def get_extensions():
+ return [Extension('{package_name}.simple', [join('{package_name}',
'simple.c')])]
+ """))
+
+ if use_extension_helpers is None:
+ test_pkg.join('setup.cfg').write(dedent(f"""\
+ [metadata]
+ name = {package_name}
+ version = 0.1
+
+ [options]
+ packages = find:
+ """))
+ else:
+ test_pkg.join('setup.cfg').write(dedent(f"""\
+ [metadata]
+ name = {package_name}
+ version = 0.1
+
+ [options]
+ packages = find:
+
+ [extension-helpers]
+ use_extension_helpers = {str(use_extension_helpers).lower()}
+ """))
+
+ test_pkg.join('pyproject.toml').write(dedent("""\
+ [build-system]
+ requires = ["setuptools>=43.0.0",
+ "wheel"]
+ build-backend = 'setuptools.build_meta'
+ """))
+
+ install_temp = test_pkg.mkdir('install_temp')
+
+ with test_pkg.as_cwd():
+ # NOTE: we disable build isolation as we need to pick up the current
+ # developer version of extension-helpers
+ subprocess.call([sys.executable, '-m', 'pip', 'install', '.',
+ '--no-build-isolation',
+ f'--target={install_temp}'])
+
+ if '' in sys.path:
+ sys.path.remove('')
+
+ sys.path.insert(0, '')
+
+ with install_temp.as_cwd():
+
+ importlib.import_module(package_name)
- import apyhtest_eva.compiler_version
- assert apyhtest_eva.compiler_version != 'unknown'
+ if use_extension_helpers:
+ compiler_version_mod = importlib.import_module(package_name +
'.compiler_version')
+ assert compiler_version_mod.compiler != 'unknown'
+ else:
+ try:
+ importlib.import_module(package_name + '.compiler_version')
+ except ImportError:
+ pass
+ else:
+ raise AssertionError(package_name + '.compiler_version should
not exist')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers/tests/test_utils.py
new/extension-helpers-1.0.0/extension_helpers/tests/test_utils.py
--- old/extension-helpers-0.1/extension_helpers/tests/test_utils.py
1970-01-01 01:00:00.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/tests/test_utils.py
2022-03-16 22:44:31.000000000 +0100
@@ -0,0 +1,26 @@
+import os
+import time
+
+from .._utils import import_file, write_if_different
+
+
+def test_import_file(tmpdir):
+ filename = str(tmpdir / 'spam.py')
+ with open(filename, 'w') as f:
+ f.write('magic = 12345')
+ module = import_file(filename)
+ assert module.magic == 12345
+
+
+def test_write_if_different(tmpdir):
+ filename = str(tmpdir / 'test.txt')
+ write_if_different(filename, b'abc')
+ time1 = os.path.getmtime(filename)
+ time.sleep(0.01)
+ write_if_different(filename, b'abc')
+ time2 = os.path.getmtime(filename)
+ assert time2 == time1
+ time.sleep(0.01)
+ write_if_different(filename, b'abcd')
+ time3 = os.path.getmtime(filename)
+ assert time3 > time1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/extension_helpers/version.py
new/extension-helpers-1.0.0/extension_helpers/version.py
--- old/extension-helpers-0.1/extension_helpers/version.py 2019-12-18
13:29:04.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers/version.py 2022-03-16
22:44:50.000000000 +0100
@@ -1,4 +1,5 @@
# coding: utf-8
# file generated by setuptools_scm
# don't change, don't track in version control
-version = '0.1'
+version = '1.0.0'
+version_tuple = (1, 0, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers.egg-info/PKG-INFO
new/extension-helpers-1.0.0/extension_helpers.egg-info/PKG-INFO
--- old/extension-helpers-0.1/extension_helpers.egg-info/PKG-INFO
2019-12-18 13:29:04.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers.egg-info/PKG-INFO
2022-03-16 22:44:51.000000000 +0100
@@ -1,27 +1,11 @@
Metadata-Version: 2.1
Name: extension-helpers
-Version: 0.1
-Summary: Utilities for building and installing packages in the Astropy
ecosystem
-Home-page: https://github.com/astropy/astropy-helpers
+Version: 1.0.0
+Summary: Utilities for building and installing packages with compiled
extensions
+Home-page: https://github.com/astropy/extension-helpers
Author: The Astropy Developers
Author-email: [email protected]
License: BSD 3-Clause License
-Description: extension-helpers
- =================
-
- .. image::
https://dev.azure.com/astropy-project/extension-helpers/_apis/build/status/astropy.extension-helpers?branchName=master
- :target:
https://dev.azure.com/astropy-project/extension-helpers/_build/latest?definitionId=4&branchName=master
-
- .. image::
https://codecov.io/gh/astropy/extension-helpers/branch/master/graph/badge.svg
- :target: https://codecov.io/gh/astropy/extension-helpers
-
- The **extension-helpers** package includes convenience helpers to
assist with
- building Python packages with compiled C/Cython extensions. It is
developed by
- the Astropy project but is intended to be general and usable by any
Python
- package.
-
- For more information, see the documentation at
http://extension-helpers.readthedocs.io
-
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
@@ -37,3 +21,26 @@
Requires-Python: >=3.6
Provides-Extra: test
Provides-Extra: docs
+License-File: LICENSE.rst
+
+extension-helpers
+=================
+
+.. image::
https://github.com/astropy/extension-helpers/actions/workflows/main.yml/badge.svg
+ :target:
https://github.com/astropy/extension-helpers/actions/workflows/main.yml
+
+.. image::
https://codecov.io/gh/astropy/extension-helpers/branch/main/graph/badge.svg
+ :target: https://codecov.io/gh/astropy/extension-helpers
+
+.. image::
https://readthedocs.org/projects/extension-helpers/badge/?version=latest
+ :target: https://extension-helpers.readthedocs.io/en/latest/?badge=latest
+ :alt: Documentation Status
+
+The **extension-helpers** package includes convenience helpers to assist with
+building Python packages with compiled C/Cython extensions. It is developed by
+the Astropy project but is intended to be general and usable by any Python
+package.
+
+For more information, see the documentation at
http://extension-helpers.readthedocs.io
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers.egg-info/SOURCES.txt
new/extension-helpers-1.0.0/extension_helpers.egg-info/SOURCES.txt
--- old/extension-helpers-0.1/extension_helpers.egg-info/SOURCES.txt
2019-12-18 13:29:05.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers.egg-info/SOURCES.txt
2022-03-16 22:44:51.000000000 +0100
@@ -1,4 +1,3 @@
-.coveragerc
.gitignore
.readthedocs.yml
CHANGES.rst
@@ -6,13 +5,11 @@
LICENSE.rst
MANIFEST.in
README.rst
-azure-pipelines.yml
conftest.py
pyproject.toml
setup.cfg
-setup.py
tox.ini
-.circleci/config.yml
+.github/workflows/main.yml
docs/Makefile
docs/api.rst
docs/conf.py
@@ -21,7 +18,6 @@
docs/openmp.rst
docs/using.rst
extension_helpers/__init__.py
-extension_helpers/_distutils_helpers.py
extension_helpers/_openmp_helpers.py
extension_helpers/_setup_helpers.py
extension_helpers/_utils.py
@@ -30,6 +26,7 @@
extension_helpers.egg-info/PKG-INFO
extension_helpers.egg-info/SOURCES.txt
extension_helpers.egg-info/dependency_links.txt
+extension_helpers.egg-info/entry_points.txt
extension_helpers.egg-info/not-zip-safe
extension_helpers.egg-info/requires.txt
extension_helpers.egg-info/top_level.txt
@@ -37,4 +34,5 @@
extension_helpers/tests/__init__.py
extension_helpers/tests/test_openmp_helpers.py
extension_helpers/tests/test_setup_helpers.py
+extension_helpers/tests/test_utils.py
licenses/LICENSE_ASTROSCRAPPY.rst
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers.egg-info/entry_points.txt
new/extension-helpers-1.0.0/extension_helpers.egg-info/entry_points.txt
--- old/extension-helpers-0.1/extension_helpers.egg-info/entry_points.txt
1970-01-01 01:00:00.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers.egg-info/entry_points.txt
2022-03-16 22:44:51.000000000 +0100
@@ -0,0 +1,2 @@
+[setuptools.finalize_distribution_options]
+extension_helpers_get_extensions =
extension_helpers:_finalize_distribution_hook
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extension-helpers-0.1/extension_helpers.egg-info/requires.txt
new/extension-helpers-1.0.0/extension_helpers.egg-info/requires.txt
--- old/extension-helpers-0.1/extension_helpers.egg-info/requires.txt
2019-12-18 13:29:04.000000000 +0100
+++ new/extension-helpers-1.0.0/extension_helpers.egg-info/requires.txt
2022-03-16 22:44:51.000000000 +0100
@@ -1,8 +1,11 @@
+setuptools>=40.2
[docs]
-sphinx-astropy
+sphinx
+sphinx-automodapi
[test]
-pytest-astropy
+wheel
+pytest
pytest-cov
-coverage<5
+coverage>=4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/pyproject.toml
new/extension-helpers-1.0.0/pyproject.toml
--- old/extension-helpers-0.1/pyproject.toml 2019-12-18 13:27:20.000000000
+0100
+++ new/extension-helpers-1.0.0/pyproject.toml 2022-03-16 22:44:31.000000000
+0100
@@ -1,5 +1,8 @@
[build-system]
-requires = ["setuptools",
- "setuptools_scm",
+requires = ["setuptools>=43.0.0",
+ "setuptools_scm>=6.2",
"wheel"]
build-backend = 'setuptools.build_meta'
+
+[tool.setuptools_scm]
+write_to = "extension_helpers/version.py"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/setup.cfg
new/extension-helpers-1.0.0/setup.cfg
--- old/extension-helpers-0.1/setup.cfg 2019-12-18 13:29:05.166231600 +0100
+++ new/extension-helpers-1.0.0/setup.cfg 2022-03-16 22:44:51.766397000
+0100
@@ -5,8 +5,8 @@
author_email = [email protected]
license = BSD 3-Clause License
license_file = LICENSE.rst
-url = https://github.com/astropy/astropy-helpers
-description = Utilities for building and installing packages in the Astropy
ecosystem
+url = https://github.com/astropy/extension-helpers
+description = Utilities for building and installing packages with compiled
extensions
long_description = file: README.rst
classifiers =
Development Status :: 5 - Production/Stable
@@ -24,17 +24,25 @@
zip_safe = False
python_requires = >=3.6
packages = find:
+install_requires =
+ setuptools>=40.2
[options.package_data]
extension_helpers = src/compiler.c
+[options.entry_points]
+setuptools.finalize_distribution_options =
+ extension_helpers_get_extensions =
extension_helpers:_finalize_distribution_hook
+
[options.extras_require]
test =
- pytest-astropy
+ wheel
+ pytest
pytest-cov
- coverage<5
+ coverage>=4
docs =
- sphinx-astropy
+ sphinx
+ sphinx-automodapi
[tool:pytest]
norecursedirs =
@@ -51,7 +59,27 @@
multi_line_output = 0
balanced_wrapping = True
include_trailing_comma = false
-length_sort_stdlib = true
+length_sort = False
+length_sort_sections = stdlib
+
+[coverage:run]
+omit =
+ extension_helpers/*/setup_package.py
+ extension_helpers/tests/*
+ extension_helpers/conftest.py
+ */extension_helpers/*/setup_package.py
+ */extension_helpers/tests/*
+ */extension_helpers/conftest.py
+
+[coverage:report]
+exclude_lines =
+ pragma: no cover
+ except ImportError
+ raise AssertionError
+ raise NotImplementedError
+ def main\(.*\):
+ pragma: py{ignore_python_version}
+ def _ipython_key_completions_
[egg_info]
tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/setup.py
new/extension-helpers-1.0.0/setup.py
--- old/extension-helpers-0.1/setup.py 2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/setup.py 1970-01-01 01:00:00.000000000
+0100
@@ -1,18 +0,0 @@
-#!/usr/bin/env python
-# Licensed under a 3-clause BSD style license - see LICENSE.rst
-
-# NOTE: most of the configuration, including the version number,
-# is defined in setup.cfg
-
-import os
-import sys
-from distutils.version import LooseVersion
-
-import setuptools
-from setuptools import setup
-
-if LooseVersion(setuptools.__version__) < '30.3':
- sys.stderr.write("ERROR: setuptools 30.3 or later is required by
extension-helpers\n")
- sys.exit(1)
-
-setup(use_scm_version={'write_to': os.path.join('extension_helpers',
'version.py')})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extension-helpers-0.1/tox.ini
new/extension-helpers-1.0.0/tox.ini
--- old/extension-helpers-0.1/tox.ini 2019-12-18 13:27:20.000000000 +0100
+++ new/extension-helpers-1.0.0/tox.ini 2022-03-16 22:44:31.000000000 +0100
@@ -1,6 +1,6 @@
[tox]
envlist =
- py{36,37,38}-test{,-conda}
+ py{36,37,38,39,310}-test{,-conda}
build_docs
pycodestyle
requires =
@@ -9,10 +9,11 @@
isolated_build = true
[testenv]
+passenv =
+ CONDA_BUILD_SYSROOT
setenv =
- osxgcc: CC=gcc
- osxclang: CC=clang-4.0
- linuxgcc: CC=x86_64-conda_cos6-linux-gnu-gcc
+ osxclang: CC=clang-10
+ linuxgcc: CC=gcc_linux-64
changedir =
test: .tmp/{envname}
build_docs: docs
@@ -22,26 +23,36 @@
test: run tests with pytest
build_docs: invoke sphinx-build to build the HTML docs
all: run tests with all optional dependencies
- dev: run tests with numpy and astropy dev versions
+ dev: run tests with setuptools dev versions
+ oldestdeps: run tests with oldest supported version of setuptools
+deps =
+ oldestdeps: setuptools==42.0
conda_deps =
- osxgcc: gcc
- osxclang: clang_osx-64
+ osxclang: clang_osx-64==10
osxclang: llvm-openmp
linuxgcc: gcc_linux-64
conda_channels =
- osxgcc: conda-forge
+ linuxgcc: conda-forge
extras =
test: test
build_docs: docs
all: all
commands =
- dev: bash -ec "rm -rf setuptools_repo; git clone
https://github.com/pypa/setuptools.git setuptools_repo && cd setuptools_repo &&
python bootstrap.py"
- dev: pip install setuptools_repo/ --no-build-isolation
+ dev: pip install git+https://github.com/pypa/setuptools.git
pip freeze
test: python -c 'import setuptools; print(setuptools.__version__)'
- test: pytest --pyargs extension_helpers {toxinidir}/docs --cov
extension_helpers {posargs}
+ test: pytest --pyargs extension_helpers {toxinidir}/docs --cov
extension_helpers --cov-config={toxinidir}/setup.cfg {posargs}
build_docs: sphinx-build -W -b html . _build/html
+[testenv:py39-downstream]
+changedir = test: .tmp/downstream
+commands =
+ pip install setuptools setuptools_scm wheel cython numpy
+ pip install --no-build-isolation
"git+https://github.com/astropy/astropy#egg=astropy[test]"
+ pytest --pyargs astropy
+ pip install --no-build-isolation
"git+https://github.com/sunpy/sunpy#egg=sunpy[all,tests]"
+ pytest --pyargs sunpy
+
[testenv:style]
skip_install = true
description = invoke pycodestyle and isort on package code
@@ -50,4 +61,4 @@
isort
commands =
pycodestyle extension_helpers --max-line-length=100
- isort -c -rc extension_helpers
+ isort -c extension_helpers