Imported Upstream version 57.4.0 upstream/57.4.0
authorJinWang An <jinwang.an@samsung.com>
Mon, 27 Mar 2023 08:02:35 +0000 (17:02 +0900)
committerJinWang An <jinwang.an@samsung.com>
Mon, 27 Mar 2023 08:02:35 +0000 (17:02 +0900)
.bumpversion.cfg
CHANGES.rst
setup.cfg
setuptools/command/build_ext.py
setuptools/tests/test_build_ext.py

index 6c93847b58a614b014baaabf91f5ffcc3798fd0e..53c515232fc4091ee19de753099161e273746b78 100644 (file)
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 57.3.0
+current_version = 57.4.0
 commit = True
 tag = True
 
index fde2da1c08425777cbee229b69e4a63cdaf452c4..d9951381bb3bbac2b5da55a18e62136e8cf40761 100644 (file)
@@ -1,3 +1,12 @@
+v57.4.0
+-------
+
+
+Changes
+^^^^^^^
+* #2722: Added support for ``SETUPTOOLS_EXT_SUFFIX`` environment variable to override the suffix normally detected from the ``sysconfig`` module.
+
+
 v57.3.0
 -------
 
index ef6d7638a2cdf08c92e72d1c62d88ad6beacfefa..790b5c6928674f242a331de8d3c9aa70108416fa 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -2,7 +2,7 @@
 license_files =
        LICENSE
 name = setuptools
-version = 57.3.0
+version = 57.4.0
 author = Python Packaging Authority
 author_email = distutils-sig@python.org
 description = Easily download, build, install, upgrade, and uninstall Python packages
index 03a72b4fcea2b82071f4bc78bc18c4a2ee635f5a..c59eff8bbf7bf9f3ec79e9f2ffbc426e2233df5c 100644 (file)
@@ -104,14 +104,20 @@ class build_ext(_build_ext):
                 self.write_stub(package_dir or os.curdir, ext, True)
 
     def get_ext_filename(self, fullname):
-        filename = _build_ext.get_ext_filename(self, fullname)
+        so_ext = os.getenv('SETUPTOOLS_EXT_SUFFIX')
+        if so_ext:
+            filename = os.path.join(*fullname.split('.')) + so_ext
+        else:
+            filename = _build_ext.get_ext_filename(self, fullname)
+            so_ext = get_config_var('EXT_SUFFIX')
+
         if fullname in self.ext_map:
             ext = self.ext_map[fullname]
             use_abi3 = getattr(ext, 'py_limited_api') and get_abi3_suffix()
             if use_abi3:
-                so_ext = get_config_var('EXT_SUFFIX')
                 filename = filename[:-len(so_ext)]
-                filename = filename + get_abi3_suffix()
+                so_ext = get_abi3_suffix()
+                filename = filename + so_ext
             if isinstance(ext, Library):
                 fn, ext = os.path.splitext(filename)
                 return self.shlib_compiler.library_filename(fn, libtype)
index b6deebe4e21b1a6c394d76bb2cd7d8deb22d4118..3177a2cdd6bf5d82c6049e13e6611fa4fa148ec3 100644 (file)
@@ -1,3 +1,4 @@
+import os
 import sys
 import distutils.command.build_ext as orig
 from distutils.sysconfig import get_config_var
@@ -12,6 +13,9 @@ from . import environment
 from .textwrap import DALS
 
 
+IS_PYPY = '__pypy__' in sys.builtin_module_names
+
+
 class TestBuildExt:
     def test_get_ext_filename(self):
         """
@@ -47,6 +51,38 @@ class TestBuildExt:
         else:
             assert 'abi3' in res
 
+    def test_ext_suffix_override(self):
+        """
+        SETUPTOOLS_EXT_SUFFIX variable always overrides
+        default extension options.
+        """
+        dist = Distribution()
+        cmd = build_ext(dist)
+        cmd.ext_map['for_abi3'] = ext = Extension(
+            'for_abi3',
+            ['s.c'],
+            # Override shouldn't affect abi3 modules
+            py_limited_api=True,
+        )
+        # Mock value needed to pass tests
+        ext._links_to_dynamic = False
+
+        if not IS_PYPY:
+            expect = cmd.get_ext_filename('for_abi3')
+        else:
+            # PyPy builds do not use ABI3 tag, so they will
+            # also get the overridden suffix.
+            expect = 'for_abi3.test-suffix'
+
+        try:
+            os.environ['SETUPTOOLS_EXT_SUFFIX'] = '.test-suffix'
+            res = cmd.get_ext_filename('normal')
+            assert 'normal.test-suffix' == res
+            res = cmd.get_ext_filename('for_abi3')
+            assert expect == res
+        finally:
+            del os.environ['SETUPTOOLS_EXT_SUFFIX']
+
 
 def test_build_ext_config_handling(tmpdir_cwd):
     files = {