summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-10-18 17:52:24 +0200
committerAntoine Pitrou <solipsis@pitrou.net>2011-10-18 17:52:24 +0200
commitf65491b8365552dd7348768460f9fcc30ba79eda (patch)
tree41df97547be20f566f53a7530a042051370b7b6f
parent57bcc29a5629d91e6b6f7d9c2252bbaa3aa72577 (diff)
downloadcpython-f65491b8365552dd7348768460f9fcc30ba79eda.tar.gz
Issue #13150: sysconfig no longer parses the Makefile and config.h files
when imported, instead doing it at build time. This makes importing sysconfig faster and reduces Python startup time by 20%.
-rw-r--r--.hgignore1
-rw-r--r--Lib/sysconfig.py19
-rw-r--r--Makefile.pre.in11
-rw-r--r--Misc/NEWS4
4 files changed, 28 insertions, 7 deletions
diff --git a/.hgignore b/.hgignore
index 80ac2eda10..0fd8562633 100644
--- a/.hgignore
+++ b/.hgignore
@@ -49,6 +49,7 @@ libpython*.so*
*.pyd
*.cover
*~
+Lib/_sysconfigdata.py
Lib/lib2to3/*.pickle
Lib/test/data/*
Misc/*.wpu
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index 6594104e06..36c7aa49a5 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -319,9 +319,11 @@ def get_makefile_filename():
config_dir_name = 'config'
return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile')
-
-def _init_posix(vars):
- """Initialize the module as appropriate for POSIX systems."""
+def _generate_posix_vars():
+ """Generate the Python module containing build-time variables."""
+ import pprint
+ vars = {}
+ destfile = os.path.join(os.path.dirname(__file__), '_sysconfigdata.py')
# load the installed Makefile:
makefile = get_makefile_filename()
try:
@@ -346,7 +348,15 @@ def _init_posix(vars):
# the scripts are in another directory.
if _PYTHON_BUILD:
vars['LDSHARED'] = vars['BLDSHARED']
+ with open(destfile, 'w', encoding='utf8') as f:
+ f.write('build_time_vars = ')
+ pprint.pprint(vars, stream=f)
+def _init_posix(vars):
+ """Initialize the module as appropriate for POSIX systems."""
+ # _sysconfigdata is generated at build time, see _generate_posix_vars()
+ from _sysconfigdata import build_time_vars
+ vars.update(build_time_vars)
def _init_non_posix(vars):
"""Initialize the module as appropriate for NT"""
@@ -753,6 +763,9 @@ def _print_dict(title, data):
def _main():
"""Display all information sysconfig detains."""
+ if '--generate-posix-vars' in sys.argv:
+ _generate_posix_vars()
+ return
print('Platform: "%s"' % get_platform())
print('Python version: "%s"' % get_python_version())
print('Current installation scheme: "%s"' % _get_default_scheme())
diff --git a/Makefile.pre.in b/Makefile.pre.in
index d35a2fef9b..5c30eb39c5 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -396,7 +396,7 @@ LIBRARY_OBJS= \
# Default target
all: build_all
-build_all: $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks Modules/_testembed
+build_all: $(BUILDPYTHON) sysconfig oldsharedmods sharedmods gdbhooks Modules/_testembed
# Compile a binary with gcc profile guided optimization.
profile-opt:
@@ -429,12 +429,15 @@ coverage:
$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
-platform: $(BUILDPYTHON)
+platform: $(BUILDPYTHON) sysconfig
$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from sysconfig import get_platform ; print(get_platform()+"-"+sys.version[0:3])' >platform
+# Generate the sysconfig build-time data
+sysconfig: $(BUILDPYTHON)
+ $(RUNSHARED) ./$(BUILDPYTHON) -SE -m sysconfig --generate-posix-vars
# Build the shared modules
-sharedmods: $(BUILDPYTHON)
+sharedmods: $(BUILDPYTHON) sysconfig
@case $$MAKEFLAGS in \
*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
@@ -1379,7 +1382,7 @@ patchcheck:
Python/thread.o: @THREADHEADERS@
# Declare targets that aren't real files
-.PHONY: all build_all sharedmods oldsharedmods test quicktest
+.PHONY: all build_all sysconfig sharedmods oldsharedmods test quicktest
.PHONY: install altinstall oldsharedinstall bininstall altbininstall
.PHONY: maninstall libinstall inclinstall libainstall sharedinstall
.PHONY: frameworkinstall frameworkinstallframework frameworkinstallstructure
diff --git a/Misc/NEWS b/Misc/NEWS
index 24fadae6cc..3d77bbfee9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -315,6 +315,10 @@ Core and Builtins
Library
-------
+- Issue #13150: sysconfig no longer parses the Makefile and config.h files
+ when imported, instead doing it at build time. This makes importing
+ sysconfig faster and reduces Python startup time by 20%.
+
- Issue #12448: smtplib now flushes stdout while running ``python -m smtplib``
in order to display the prompt correctly.