mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #28444: Fix missing extensions modules when cross compiling.
This commit is contained in:
parent
43ab355e0e
commit
84968b74c8
4 changed files with 27 additions and 22 deletions
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
# === Variables set by makesetup ===
|
# === Variables set by makesetup ===
|
||||||
|
|
||||||
|
MODNAMES= _MODNAMES_
|
||||||
MODOBJS= _MODOBJS_
|
MODOBJS= _MODOBJS_
|
||||||
MODLIBS= _MODLIBS_
|
MODLIBS= _MODLIBS_
|
||||||
|
|
||||||
|
|
|
@ -502,6 +502,8 @@ Windows
|
||||||
Build
|
Build
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #28444: Fix missing extensions modules when cross compiling.
|
||||||
|
|
||||||
- Issue #28248: Update Windows build to use OpenSSL 1.0.2j.
|
- Issue #28248: Update Windows build to use OpenSSL 1.0.2j.
|
||||||
|
|
||||||
- Issue #28258: Fixed build with Estonian locale (python-config and distclean
|
- Issue #28258: Fixed build with Estonian locale (python-config and distclean
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#
|
#
|
||||||
# Copying Makefile.pre to Makefile:
|
# Copying Makefile.pre to Makefile:
|
||||||
# - insert an identifying comment at the start
|
# - insert an identifying comment at the start
|
||||||
|
# - replace _MODNAMES_ by the list of modules from Setup
|
||||||
# - replace _MODOBJS_ by the list of objects from Setup (except for
|
# - replace _MODOBJS_ by the list of objects from Setup (except for
|
||||||
# Setup files after a -n option)
|
# Setup files after a -n option)
|
||||||
# - replace _MODLIBS_ by the list of libraries from Setup
|
# - replace _MODLIBS_ by the list of libraries from Setup
|
||||||
|
@ -110,6 +111,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
|
||||||
# Rules appended by makedepend
|
# Rules appended by makedepend
|
||||||
" >$rulesf
|
" >$rulesf
|
||||||
DEFS=
|
DEFS=
|
||||||
|
NAMES=
|
||||||
MODS=
|
MODS=
|
||||||
SHAREDMODS=
|
SHAREDMODS=
|
||||||
OBJS=
|
OBJS=
|
||||||
|
@ -181,7 +183,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
|
||||||
*.*) echo 1>&2 "bad word $arg in $line"
|
*.*) echo 1>&2 "bad word $arg in $line"
|
||||||
exit 1;;
|
exit 1;;
|
||||||
-u) skip=libs; libs="$libs -u";;
|
-u) skip=libs; libs="$libs -u";;
|
||||||
[a-zA-Z_]*) mods="$mods $arg";;
|
[a-zA-Z_]*) NAMES="$NAMES $arg"; mods="$mods $arg";;
|
||||||
*) echo 1>&2 "bad word $arg in $line"
|
*) echo 1>&2 "bad word $arg in $line"
|
||||||
exit 1;;
|
exit 1;;
|
||||||
esac
|
esac
|
||||||
|
@ -280,6 +282,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
|
||||||
echo "1i\\" >$sedf
|
echo "1i\\" >$sedf
|
||||||
str="# Generated automatically from $makepre by makesetup."
|
str="# Generated automatically from $makepre by makesetup."
|
||||||
echo "$str" >>$sedf
|
echo "$str" >>$sedf
|
||||||
|
echo "s%_MODNAMES_%$NAMES%" >>$sedf
|
||||||
echo "s%_MODOBJS_%$OBJS%" >>$sedf
|
echo "s%_MODOBJS_%$OBJS%" >>$sedf
|
||||||
echo "s%_MODLIBS_%$LIBS%" >>$sedf
|
echo "s%_MODLIBS_%$LIBS%" >>$sedf
|
||||||
echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf
|
echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf
|
||||||
|
|
41
setup.py
41
setup.py
|
@ -8,7 +8,6 @@ import importlib.util
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
|
||||||
from distutils import log
|
from distutils import log
|
||||||
from distutils import text_file
|
|
||||||
from distutils.errors import *
|
from distutils.errors import *
|
||||||
from distutils.core import Extension, setup
|
from distutils.core import Extension, setup
|
||||||
from distutils.command.build_ext import build_ext
|
from distutils.command.build_ext import build_ext
|
||||||
|
@ -230,7 +229,12 @@ class PyBuildExt(build_ext):
|
||||||
headers = [sysconfig.get_config_h_filename()]
|
headers = [sysconfig.get_config_h_filename()]
|
||||||
headers += glob(os.path.join(sysconfig.get_path('include'), "*.h"))
|
headers += glob(os.path.join(sysconfig.get_path('include'), "*.h"))
|
||||||
|
|
||||||
for ext in self.extensions[:]:
|
# The sysconfig variable built by makesetup, listing the already
|
||||||
|
# built modules as configured by the Setup files.
|
||||||
|
modnames = sysconfig.get_config_var('MODNAMES').split()
|
||||||
|
|
||||||
|
removed_modules = []
|
||||||
|
for ext in self.extensions:
|
||||||
ext.sources = [ find_module_file(filename, moddirlist)
|
ext.sources = [ find_module_file(filename, moddirlist)
|
||||||
for filename in ext.sources ]
|
for filename in ext.sources ]
|
||||||
if ext.depends is not None:
|
if ext.depends is not None:
|
||||||
|
@ -241,26 +245,14 @@ class PyBuildExt(build_ext):
|
||||||
# re-compile extensions if a header file has been changed
|
# re-compile extensions if a header file has been changed
|
||||||
ext.depends.extend(headers)
|
ext.depends.extend(headers)
|
||||||
|
|
||||||
# If a module has already been built statically,
|
# If a module has already been built by the Makefile,
|
||||||
# don't build it here
|
# don't build it here.
|
||||||
if ext.name in sys.builtin_module_names:
|
if ext.name in modnames:
|
||||||
self.extensions.remove(ext)
|
removed_modules.append(ext)
|
||||||
|
|
||||||
# Parse Modules/Setup and Modules/Setup.local to figure out which
|
if removed_modules:
|
||||||
# modules are turned on in the file.
|
self.extensions = [x for x in self.extensions if x not in
|
||||||
remove_modules = []
|
removed_modules]
|
||||||
for filename in ('Modules/Setup', 'Modules/Setup.local'):
|
|
||||||
input = text_file.TextFile(filename, join_lines=1)
|
|
||||||
while 1:
|
|
||||||
line = input.readline()
|
|
||||||
if not line: break
|
|
||||||
line = line.split()
|
|
||||||
remove_modules.append(line[0])
|
|
||||||
input.close()
|
|
||||||
|
|
||||||
for ext in self.extensions[:]:
|
|
||||||
if ext.name in remove_modules:
|
|
||||||
self.extensions.remove(ext)
|
|
||||||
|
|
||||||
# When you run "make CC=altcc" or something similar, you really want
|
# When you run "make CC=altcc" or something similar, you really want
|
||||||
# those environment variables passed into the setup.py phase. Here's
|
# those environment variables passed into the setup.py phase. Here's
|
||||||
|
@ -303,6 +295,13 @@ class PyBuildExt(build_ext):
|
||||||
" detect_modules() for the module's name.")
|
" detect_modules() for the module's name.")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
if removed_modules:
|
||||||
|
print("The following modules found by detect_modules() in"
|
||||||
|
" setup.py, have been")
|
||||||
|
print("built by the Makefile instead, as configured by the"
|
||||||
|
" Setup files:")
|
||||||
|
print_three_column([ext.name for ext in removed_modules])
|
||||||
|
|
||||||
if self.failed:
|
if self.failed:
|
||||||
failed = self.failed[:]
|
failed = self.failed[:]
|
||||||
print()
|
print()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue