[Python-checkins] cpython (merge 3.5 -> 3.6): Issue #28444: Merge with 3.5.

xavier.degaye python-checkins at python.org
Sat Oct 29 11:01:47 EDT 2016


https://hg.python.org/cpython/rev/cddb7b2aba34
changeset: 104791:cddb7b2aba34
branch: 3.6
parent: 104788:6b88dfc7b25d
parent: 104790:4b2679a06ace
user: Xavier de Gaye <xdegaye at users.sourceforge.net>
date: Sat Oct 29 16:59:32 2016 +0200
summary:
 Issue #28444: Merge with 3.5.
files:
 Makefile.pre.in | 1 +
 Misc/NEWS | 2 +
 Modules/makesetup | 5 +++-
 setup.py | 41 +++++++++++++++++-----------------
 4 files changed, 27 insertions(+), 22 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -20,6 +20,7 @@
 
 # === Variables set by makesetup ===
 
+MODNAMES= _MODNAMES_
 MODOBJS= _MODOBJS_
 MODLIBS= _MODLIBS_
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -95,6 +95,8 @@
 Build
 -----
 
+- Issue #28444: Fix missing extensions modules when cross compiling.
+
 - Issue #28208: Update Windows build to use SQLite 3.14.2.0.
 
 - Issue #28248: Update Windows build to use OpenSSL 1.0.2j.
diff --git a/Modules/makesetup b/Modules/makesetup
--- a/Modules/makesetup
+++ b/Modules/makesetup
@@ -29,6 +29,7 @@
 #
 # Copying Makefile.pre to Makefile:
 # - 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
 # Setup files after a -n option)
 # - replace _MODLIBS_ by the list of libraries from Setup
@@ -110,6 +111,7 @@
 # Rules appended by makedepend
 " >$rulesf
 	DEFS=
+	NAMES=
 	MODS=
 	SHAREDMODS=
 	OBJS=
@@ -181,7 +183,7 @@
 			*.*)		echo 1>&2 "bad word $arg in $line"
 					exit 1;;
 			-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"
 					exit 1;;
 			esac
@@ -280,6 +282,7 @@
 		echo "1i\\" >$sedf
 		str="# Generated automatically from $makepre by makesetup."
 		echo "$str" >>$sedf
+		echo "s%_MODNAMES_%$NAMES%" >>$sedf
 		echo "s%_MODOBJS_%$OBJS%" >>$sedf
 		echo "s%_MODLIBS_%$LIBS%" >>$sedf
 		echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -8,7 +8,6 @@
 import sysconfig
 
 from distutils import log
-from distutils import text_file
 from distutils.errors import *
 from distutils.core import Extension, setup
 from distutils.command.build_ext import build_ext
@@ -230,7 +229,12 @@
 headers = [sysconfig.get_config_h_filename()]
 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)
 for filename in ext.sources ]
 if ext.depends is not None:
@@ -241,26 +245,14 @@
 # re-compile extensions if a header file has been changed
 ext.depends.extend(headers)
 
- # If a module has already been built statically,
- # don't build it here
- if ext.name in sys.builtin_module_names:
- self.extensions.remove(ext)
+ # If a module has already been built by the Makefile,
+ # don't build it here.
+ if ext.name in modnames:
+ removed_modules.append(ext)
 
- # Parse Modules/Setup and Modules/Setup.local to figure out which
- # modules are turned on in the file.
- remove_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)
+ if removed_modules:
+ self.extensions = [x for x in self.extensions if x not in
+ removed_modules]
 
 # When you run "make CC=altcc" or something similar, you really want
 # those environment variables passed into the setup.py phase. Here's
@@ -303,6 +295,13 @@
 " detect_modules() for the module's name.")
 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:
 failed = self.failed[:]
 print()
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /