]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Minor improvement to extensions section in setup.cfg.
authorÉric Araujo <merwok@netwok.org>
Thu, 1 Sep 2011 04:29:11 +0000 (06:29 +0200)
committerÉric Araujo <merwok@netwok.org>
Thu, 1 Sep 2011 04:29:11 +0000 (06:29 +0200)
The right-hand part in [extension: foo] is now used as the name of the
extension module.  (I changed the separator from = to : and allowed
whitespace to make the sections look nicer.)

Doc/packaging/setupcfg.rst
Lib/packaging/config.py
Lib/packaging/tests/test_config.py

index d5bc3e3e50feb05c4d730ea4c6c8bdd0edec529c..66a61ecc7ea45483e0d1b32ce9c1b63e4a1c70ee 100644 (file)
@@ -756,8 +756,7 @@ needs to have its options defined in a dedicated section.  Here's an example::
    [files]
    packages = coconut
 
-   [extension=_fastcoconut]
-   name = coconut._fastcoconut
+   [extension: coconut._fastcoconut]
    language = cxx
    sources = cxx_src/cononut_utils.cxx
              cxx_src/python_module.cxx
@@ -768,8 +767,10 @@ needs to have its options defined in a dedicated section.  Here's an example::
        -DGECODE_VERSION=$(./gecode_version) -- sys.platform != 'win32'
        /DGECODE_VERSION='win32' -- sys.platform == 'win32'
 
-The section name must start with ``extension=``; the righ-hand part is currently
-discarded.  Valid fields and their values are listed in the documentation of the
+The section name must start with ``extension:``; the right-hand part is used as
+the full name (including a parent package, if any) of the extension.  Whitespace
+around the extension name is allowed.
+Valid fields and their values are listed in the documentation of the
 :class:`packaging.compiler.extension.Extension` class; values documented as
 Python lists translate to multi-line values in the configuration file.  In
 addition, multi-line values accept environment markers on each line, after a
index 83e97a92a544c9af1ad24d611913889e15aa9a17..b138d082790f534bdec14ebd659525ddd9ea4e2b 100644 (file)
@@ -251,13 +251,16 @@ class Config:
 
         ext_modules = self.dist.ext_modules
         for section_key in content:
-            labels = section_key.split('=')
+            # no str.partition in 2.4 :(
+            labels = section_key.split(':')
             if len(labels) == 2 and labels[0] == 'extension':
-                # labels[1] not used from now but should be implemented
-                # for extension build dependency
                 values_dct = content[section_key]
+                if 'name' in values_dct:
+                    raise PackagingOptionError(
+                        'extension name should be given as [extension: name], '
+                        'not as key')
                 ext_modules.append(Extension(
-                    values_dct.pop('name'),
+                    labels[1].strip(),
                     _pop_values(values_dct, 'sources'),
                     _pop_values(values_dct, 'include_dirs'),
                     _pop_values(values_dct, 'define_macros'),
index 43ab2c85b4cc3e4b54fe4a7fd8646e1b8767449c..ce0162953d4f8eea0c7052bcf50b45399f1ad344 100644 (file)
@@ -6,7 +6,7 @@ from io import StringIO
 
 from packaging import command
 from packaging.dist import Distribution
-from packaging.errors import PackagingFileError
+from packaging.errors import PackagingFileError, PackagingOptionError
 from packaging.compiler import new_compiler, _COMPILERS
 from packaging.command.sdist import sdist
 
@@ -100,21 +100,20 @@ sub_commands = foo
 
 # Can not be merged with SETUP_CFG else install_dist
 # command will fail when trying to compile C sources
+# TODO use a DummyCommand to mock build_ext
 EXT_SETUP_CFG = """
 [files]
 packages = one
            two
 
-[extension=speed_coconuts]
-name = one.speed_coconuts
+[extension:one.speed_coconuts]
 sources = c_src/speed_coconuts.c
 extra_link_args = "`gcc -print-file-name=libgcc.a`" -shared
 define_macros = HAVE_CAIRO HAVE_GTK2
 libraries = gecodeint gecodekernel -- sys.platform != 'win32'
     GecodeInt GecodeKernel -- sys.platform == 'win32'
 
-[extension=fast_taunt]
-name = two.fast_taunt
+[extension: two.fast_taunt]
 sources = cxx_src/utils_taunt.cxx
           cxx_src/python_module.cxx
 include_dirs = /usr/include/gecode
@@ -123,7 +122,11 @@ extra_compile_args = -fPIC -O2
     -DGECODE_VERSION=$(./gecode_version) -- sys.platform != 'win32'
     /DGECODE_VERSION='win32' -- sys.platform == 'win32'
 language = cxx
+"""
 
+EXT_SETUP_CFG_BUGGY_1 = """
+[extension: realname]
+name = crash_here
 """
 
 HOOKS_MODULE = """
@@ -335,6 +338,9 @@ class ConfigTestCase(support.TempdirManager,
         self.assertEqual(ext.extra_compile_args, cargs)
         self.assertEqual(ext.language, 'cxx')
 
+        self.write_file('setup.cfg', EXT_SETUP_CFG_BUGGY_1)
+        self.assertRaises(PackagingOptionError, self.get_dist)
+
     def test_project_setup_hook_works(self):
         # Bug #11637: ensure the project directory is on sys.path to allow
         # project-specific hooks