From c4b53afce491142b80b228a21a05de5dcfd8d36f Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Fri, 9 Sep 2016 17:59:49 -0700 Subject: [PATCH] Issue #28046: Remove platform-specific directories from sys.path --- .gitignore | 1 - .hgignore | 1 - Lib/sysconfig.py | 13 +++++++++++-- Mac/BuildScript/build-installer.py | 3 ++- Makefile.pre.in | 18 +++++------------- Misc/NEWS | 2 ++ PC/getpathp.c | 4 ++-- Tools/msi/make_zip.py | 2 -- configure | 9 +-------- configure.ac | 8 +------- 10 files changed, 24 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index 69f7ac0ecc0..ed4ebfbbd9d 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ Doc/venv/ Lib/distutils/command/*.pdb Lib/lib2to3/*.pickle Lib/test/data/* -Lib/plat-mac/errors.rsrc.df.rsrc Makefile Makefile.pre Misc/python.pc diff --git a/.hgignore b/.hgignore index f5d1414c68c..92896b7bc21 100644 --- a/.hgignore +++ b/.hgignore @@ -26,7 +26,6 @@ python-config$ python-config.py$ reflog.txt$ tags$ -Lib/plat-mac/errors.rsrc.df.rsrc Misc/python.pc Misc/python-config.sh$ Modules/Setup$ diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index 7b78440ed3f..c2f28f54544 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -341,6 +341,15 @@ def get_makefile_filename(): config_dir_name += '-%s' % sys.implementation._multiarch return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') + +def _get_sysconfigdata_name(): + return '_sysconfigdata_{abi}_{platform}_{multiarch}'.format( + abi=sys.abiflags, + platform=sys.platform, + multiarch=getattr(sys.implementation, '_multiarch', ''), + ) + + def _generate_posix_vars(): """Generate the Python module containing build-time variables.""" import pprint @@ -381,7 +390,7 @@ def _generate_posix_vars(): # _sysconfigdata module manually and populate it with the build vars. # This is more than sufficient for ensuring the subsequent call to # get_platform() succeeds. - name = '_sysconfigdata_' + sys.abiflags + name = _get_sysconfigdata_name() if 'darwin' in sys.platform: import types module = types.ModuleType(name) @@ -407,7 +416,7 @@ def _generate_posix_vars(): def _init_posix(vars): """Initialize the module as appropriate for POSIX systems.""" # _sysconfigdata is generated at build time, see _generate_posix_vars() - name = '_sysconfigdata_' + sys.abiflags + name = _get_sysconfigdata_name() _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0) build_time_vars = _temp.build_time_vars vars.update(build_time_vars) diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index b0d4444d898..ef93a6edfed 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -1292,7 +1292,8 @@ def buildPython(): import pprint if getVersionMajorMinor() >= (3, 6): - path = os.path.join(path_to_lib, 'plat-darwin', '_sysconfigdata_m.py') + # XXX this is extra-fragile + path = os.path.join(path_to_lib, '_sysconfigdata_m_darwin_darwin.py') else: path = os.path.join(path_to_lib, '_sysconfigdata.py') fp = open(path, 'r') diff --git a/Makefile.pre.in b/Makefile.pre.in index 908ca52bb00..d7aea2625e6 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1178,8 +1178,6 @@ maninstall: altmaninstall (cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python$(VERSION).1 python3.1) # Install the library -PLATDIR= @PLATDIR@ -MACHDEPS= $(PLATDIR) XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ tkinter/test/test_ttk site-packages test \ @@ -1238,8 +1236,8 @@ LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ multiprocessing multiprocessing/dummy \ unittest unittest/test unittest/test/testmock \ venv venv/scripts venv/scripts/posix \ - curses pydoc_data $(MACHDEPS) -libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c + curses pydoc_data +libinstall: build_all $(srcdir)/Modules/xxmodule.c @for i in $(SCRIPTDIR) $(LIBDEST); \ do \ if test ! -d $(DESTDIR)$$i; then \ @@ -1294,10 +1292,10 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c esac; \ done; \ done - $(INSTALL_DATA) `cat pybuilddir.txt`/_sysconfigdata_$(ABIFLAGS).py \ - $(DESTDIR)$(LIBDEST)/$(PLATDIR); \ + $(INSTALL_DATA) `cat pybuilddir.txt`/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py \ + $(DESTDIR)$(LIBDEST); \ echo $(INSTALL_DATA) `cat pybuilddir.txt`/_sysconfigdata_$(ABIFLAGS).py \ - $(LIBDEST)/$(PLATDIR) + $(LIBDEST) $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt if test -d $(DESTDIR)$(LIBDEST)/distutils/tests; then \ $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \ @@ -1335,9 +1333,6 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt -$(srcdir)/Lib/$(PLATDIR): - mkdir $(srcdir)/Lib/$(PLATDIR) - python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh # Substitution happens here, as the completely-expanded BINDIR # is not available in configure @@ -1614,9 +1609,6 @@ clobber: clean profile-removal -rm -rf build platform -rm -rf $(PYTHONFRAMEWORKDIR) -rm -f python-config.py python-config - if [ -n "$(MULTIARCH)" ]; then \ - rm -rf $(srcdir)/Lib/$(PLATDIR); \ - fi # Make things extra clean, before making a distribution: # remove all generated files, even Makefile[.pre] diff --git a/Misc/NEWS b/Misc/NEWS index a6979dcb743..3a0ff1ef362 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,8 @@ What's New in Python 3.6.0 beta 1 Core and Builtins ----------------- +- Issue #28046: Remove platform-specific directories from sys.path. + - Issue #25758: Prevents zipimport from unnecessarily encoding a filename (patch by Eryk Sun) diff --git a/PC/getpathp.c b/PC/getpathp.c index 4d71fe7ddfc..5604d3dcafb 100644 --- a/PC/getpathp.c +++ b/PC/getpathp.c @@ -26,7 +26,7 @@ is set, we believe it. Otherwise, we use the path of our host .EXE's to try and locate on of our "landmarks" and deduce our home. - If we DO have a Python Home: The relevant sub-directories (Lib, - plat-win, etc) are based on the Python Home + DLLs, etc) are based on the Python Home - If we DO NOT have a Python Home, the core Python Path is loaded from the registry. This is the main PythonPath key, and both HKLM and HKCU are combined to form the path) @@ -34,7 +34,7 @@ * Iff - we can not locate the Python Home, have not had a PYTHONPATH specified, and can't locate any Registry entries (ie, we have _nothing_ we can assume is a good path), a default path with relative entries is - used (eg. .\Lib;.\plat-win, etc) + used (eg. .\Lib;.\DLLs, etc) If a sys.path file exists adjacent to python.exe, it must contain a diff --git a/Tools/msi/make_zip.py b/Tools/msi/make_zip.py index 6c43256662c..4e177406162 100644 --- a/Tools/msi/make_zip.py +++ b/Tools/msi/make_zip.py @@ -67,8 +67,6 @@ def include_in_lib(p): if p.is_dir(): if name in EXCLUDE_FROM_LIBRARY: return False - if name.startswith('plat-'): - return False if name == 'test' and p.parts[-2].lower() == 'lib': return False if name in {'test', 'tests'} and p.parts[-3].lower() == 'lib': diff --git a/configure b/configure index fae0791e6e4..165104888ae 100755 --- a/configure +++ b/configure @@ -712,7 +712,6 @@ EGREP NO_AS_NEEDED MULTIARCH_CPPFLAGS PLATFORM_TRIPLET -PLATDIR MULTIARCH ac_ct_CXX MAINCC @@ -2929,7 +2928,7 @@ $as_echo_n "checking for python interpreter for cross build... " >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $interp" >&5 $as_echo "$interp" >&6; } - PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp + PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib '$interp fi # Used to comment out stuff for rebuilding generated files GENERATED_COMMENT='#' @@ -5361,12 +5360,6 @@ if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then elif test x$PLATFORM_TRIPLET != x && test x$MULTIARCH = x; then MULTIARCH=$PLATFORM_TRIPLET fi -if test x$PLATFORM_TRIPLET = x; then - PLATDIR=plat-$MACHDEP -else - PLATDIR=plat-$PLATFORM_TRIPLET -fi - if test x$MULTIARCH != x; then MULTIARCH_CPPFLAGS="-DMULTIARCH=\\\"$MULTIARCH\\\"" diff --git a/configure.ac b/configure.ac index b1af05e43c7..328c6105e65 100644 --- a/configure.ac +++ b/configure.ac @@ -78,7 +78,7 @@ if test "$cross_compiling" = yes; then AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found]) fi AC_MSG_RESULT($interp) - PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp + PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib '$interp fi # Used to comment out stuff for rebuilding generated files GENERATED_COMMENT='#' @@ -910,12 +910,6 @@ if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then elif test x$PLATFORM_TRIPLET != x && test x$MULTIARCH = x; then MULTIARCH=$PLATFORM_TRIPLET fi -if test x$PLATFORM_TRIPLET = x; then - PLATDIR=plat-$MACHDEP -else - PLATDIR=plat-$PLATFORM_TRIPLET -fi -AC_SUBST(PLATDIR) AC_SUBST(PLATFORM_TRIPLET) if test x$MULTIARCH != x; then MULTIARCH_CPPFLAGS="-DMULTIARCH=\\\"$MULTIARCH\\\""