summaryrefslogtreecommitdiffstats
path: root/Lib/distutils/command
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2020-02-04 15:24:30 (GMT)
committerGitHub <noreply@github.com>2020-02-04 15:24:30 (GMT)
commit9538bc9185e934bee2bd5ae2cda2b2e92a61906d (patch)
tree17b2427bb0f49b48e30d9d18d31736d14a9405a3 /Lib/distutils/command
parent850a4bd839ca11b59439e21dda2a3ebe917a9a16 (diff)
downloadcpython-9538bc9185e934bee2bd5ae2cda2b2e92a61906d.zip
cpython-9538bc9185e934bee2bd5ae2cda2b2e92a61906d.tar.gz
cpython-9538bc9185e934bee2bd5ae2cda2b2e92a61906d.tar.bz2
bpo-39432: Implement PEP-489 algorithm for non-ascii "PyInit_*" symbol names in distutils (GH-18150)
Make it export the correct init symbol also on Windows. https://bugs.python.org/issue39432
Diffstat (limited to 'Lib/distutils/command')
-rw-r--r--Lib/distutils/command/build_ext.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 38bb8fd..1a9bd12 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -689,7 +689,15 @@ class build_ext(Command):
provided, "PyInit_" + module_name. Only relevant on Windows, where
the .pyd file (DLL) must export the module "PyInit_" function.
"""
- initfunc_name = "PyInit_" + ext.name.split('.')[-1]
+ suffix = '_' + ext.name.split('.')[-1]
+ try:
+ # Unicode module name support as defined in PEP-489
+ # https://www.python.org/dev/peps/pep-0489/#export-hook-name
+ suffix.encode('ascii')
+ except UnicodeEncodeError:
+ suffix = 'U' + suffix.encode('punycode').replace(b'-', b'_').decode('ascii')
+
+ initfunc_name = "PyInit" + suffix
if initfunc_name not in ext.export_symbols:
ext.export_symbols.append(initfunc_name)
return ext.export_symbols