Skip to content

Commit

Permalink
Issue #28444: Merge with 3.6.
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavier de Gaye committed Oct 29, 2016
2 parents 296ae2d + 18178ba commit c2c962b
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 23 deletions.
1 change: 1 addition & 0 deletions Makefile.pre.in
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

# === Variables set by makesetup ===

MODNAMES= _MODNAMES_
MODOBJS= _MODOBJS_
MODLIBS= _MODLIBS_

Expand Down
2 changes: 2 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,8 @@ C API
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.
Expand Down
5 changes: 4 additions & 1 deletion Modules/makesetup
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -110,6 +111,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
# Rules appended by makedepend
" >$rulesf
DEFS=
NAMES=
MODS=
SHAREDMODS=
OBJS=
Expand Down Expand Up @@ -181,7 +183,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
*.*) 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
Expand Down Expand Up @@ -280,6 +282,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
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
Expand Down
43 changes: 21 additions & 22 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -230,7 +229,12 @@ def build_extensions(self):
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:
Expand All @@ -241,26 +245,14 @@ def build_extensions(self):
# 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)

# 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 a module has already been built by the Makefile,
# don't build it here.
if ext.name in modnames:
removed_modules.append(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
Expand Down Expand Up @@ -303,6 +295,13 @@ def print_three_column(lst):
" 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()
Expand Down

0 comments on commit c2c962b

Please sign in to comment.