| | |
| | | This patch ensures that 64-bit shared objects are in a subdirectory named |
| | | "64". Note that changes to the Lib/distutils/tests/test_build.py and |
| | | Lib/distutils/tests/test_install.py avoid running tests that fail due to |
| | | this patch. As this is Solaris-specific, it is not suitable for upstream. |
| | | This patch ensures that 64-bit shared objects are put in and found in a |
| | | subdirectory named "64". Note that the changes to the |
| | | Lib/distutils/tests/test_build_ext.py and .../test_sysconfig.py avoid running |
| | | tests that fail due to this patch. As the patch is Solaris-specific, it is |
| | | not suitable for upstream. |
| | | |
| | | --- Python-3.4.0/Lib/distutils/command/build_ext.py.~1~ 2014-03-16 19:31:29.000000000 -0700 |
| | | +++ Python-3.4.0/Lib/distutils/command/build_ext.py 2014-03-17 13:18:10.057787061 -0700 |
| | | @@ -668,7 +668,12 @@ |
| | | --- Python-3.4.2/Lib/distutils/command/build_ext.py.~1~ 2014-09-22 05:56:59.000000000 -0700 |
| | | +++ Python-3.4.2/Lib/distutils/command/build_ext.py 2014-09-22 14:05:09.231795935 -0700 |
| | | @@ -659,6 +659,9 @@ |
| | | ext_suffix = get_config_var('EXT_SUFFIX') |
| | | if os.name == 'nt' and self.debug: |
| | | return os.path.join(*ext_path) + '_d' + ext_suffix |
| | | - return os.path.join(*ext_path) + ext_suffix |
| | | + #return os.path.join(*ext_path) + ext_suffix |
| | | + path = os.path.join (ext_path) |
| | | + if sys.maxsize == 2147483647: |
| | | + if sys.maxsize == 2 ** 31 - 1: |
| | | + return os.path.join(*ext_path) + ext_suffix |
| | | + (dirname, basename) = os.path.split(os.path.join(*ext_path)); |
| | | + return os.path.join(dirname, "64", basename + ext_suffix) |
| | | + ext_path[-1:-1] = ["64"] |
| | | return os.path.join(*ext_path) + ext_suffix |
| | | |
| | | def get_export_symbols(self, ext): |
| | | """Return the list of symbols that a shared extension has to |
| | | --- Python-3.4.0/Lib/distutils/tests/test_build_ext.py.~1~ 2014-03-16 19:31:29.000000000 -0700 |
| | | +++ Python-3.4.0/Lib/distutils/tests/test_build_ext.py 2014-03-17 13:18:10.098081226 -0700 |
| | | @@ -317,7 +317,7 @@ |
| | | --- Python-3.4.2/Lib/distutils/tests/test_build_ext.py.~1~ 2014-09-22 05:56:59.000000000 -0700 |
| | | +++ Python-3.4.2/Lib/distutils/tests/test_build_ext.py 2014-09-22 14:08:54.798141164 -0700 |
| | | @@ -315,7 +315,8 @@ |
| | | ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') |
| | | self.assertTrue(so_file.endswith(ext_suffix)) |
| | | so_dir = os.path.dirname(so_file) |
| | | - self.assertEqual(so_dir, other_tmp_dir) |
| | | + #self.assertEqual(so_dir, other_tmp_dir) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(so_dir, other_tmp_dir) |
| | | |
| | | cmd.inplace = 0 |
| | | cmd.compiler = None |
| | | @@ -364,7 +364,7 @@ |
| | | @@ -324,7 +325,8 @@ |
| | | self.assertTrue(os.path.exists(so_file)) |
| | | self.assertTrue(so_file.endswith(ext_suffix)) |
| | | so_dir = os.path.dirname(so_file) |
| | | - self.assertEqual(so_dir, cmd.build_lib) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(so_dir, cmd.build_lib) |
| | | |
| | | # inplace = 0, cmd.package = 'bar' |
| | | build_py = cmd.get_finalized_command('build_py') |
| | | @@ -332,7 +334,8 @@ |
| | | path = cmd.get_ext_fullpath('foo') |
| | | # checking that the last directory is the build_dir |
| | | path = os.path.split(path)[0] |
| | | - self.assertEqual(path, cmd.build_lib) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(path, cmd.build_lib) |
| | | |
| | | # inplace = 1, cmd.package = 'bar' |
| | | cmd.inplace = 1 |
| | | @@ -346,7 +349,8 @@ |
| | | # checking that the last directory is bar |
| | | path = os.path.split(path)[0] |
| | | lastdir = os.path.split(path)[-1] |
| | | - self.assertEqual(lastdir, 'bar') |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(lastdir, 'bar') |
| | | |
| | | def test_ext_fullpath(self): |
| | | ext = sysconfig.get_config_var('EXT_SUFFIX') |
| | | @@ -362,14 +366,16 @@ |
| | | curdir = os.getcwd() |
| | | wanted = os.path.join(curdir, 'src', 'lxml', 'etree' + ext) |
| | | path = cmd.get_ext_fullpath('lxml.etree') |
| | | - self.assertEqual(wanted, path) |
| | | + #self.assertEqual(wanted, path) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(wanted, path) |
| | | |
| | | # building lxml.etree not inplace |
| | | cmd.inplace = 0 |
| | | cmd.build_lib = os.path.join(curdir, 'tmpdir') |
| | | wanted = os.path.join(curdir, 'tmpdir', 'lxml', 'etree' + ext) |
| | | path = cmd.get_ext_fullpath('lxml.etree') |
| | | - self.assertEqual(wanted, path) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(wanted, path) |
| | | |
| | | # building twisted.runner.portmap not inplace |
| | | build_py = cmd.get_finalized_command('build_py') |
| | | @@ -378,13 +384,15 @@ |
| | | path = cmd.get_ext_fullpath('twisted.runner.portmap') |
| | | wanted = os.path.join(curdir, 'tmpdir', 'twisted', 'runner', |
| | | 'portmap' + ext) |
| | | - self.assertEqual(wanted, path) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(wanted, path) |
| | | |
| | | # building twisted.runner.portmap inplace |
| | | cmd.inplace = 1 |
| | | path = cmd.get_ext_fullpath('twisted.runner.portmap') |
| | | wanted = os.path.join(curdir, 'twisted', 'runner', 'portmap' + ext) |
| | | - self.assertEqual(wanted, path) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(wanted, path) |
| | | |
| | | |
| | | @unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for MacOSX') |
| | | --- Python-3.4.2/Lib/distutils/tests/test_sysconfig.py.~1~ 2014-09-22 05:56:59.000000000 -0700 |
| | | +++ Python-3.4.2/Lib/distutils/tests/test_sysconfig.py 2014-09-22 14:10:18.427824361 -0700 |
| | | @@ -1,4 +1,5 @@ |
| | | """Tests for distutils.sysconfig.""" |
| | | +import sys |
| | | import os |
| | | import shutil |
| | | import subprocess |
| | | @@ -127,6 +128,8 @@ |
| | | |
| | | def test_sysconfig_module(self): |
| | | import sysconfig as global_sysconfig |
| | | + if sys.platform == 'sunos5': |
| | | + return |
| | | self.assertEqual(global_sysconfig.get_config_var('CFLAGS'), |
| | | sysconfig.get_config_var('CFLAGS')) |
| | | self.assertEqual(global_sysconfig.get_config_var('LDFLAGS'), |
| | | @@ -152,8 +155,9 @@ |
| | | import sysconfig as global_sysconfig |
| | | if sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'): |
| | | self.skipTest('compiler flags customized') |
| | | - self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), |
| | | - sysconfig.get_config_var('LDSHARED')) |
| | | + if sys.platform != 'sunos5': |
| | | + self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), |
| | | + sysconfig.get_config_var('LDSHARED')) |
| | | self.assertEqual(global_sysconfig.get_config_var('CC'), |
| | | sysconfig.get_config_var('CC')) |
| | | |
| | | --- Python-3.4.1/Lib/importlib/_bootstrap.py.~1~ 2014-05-18 22:19:38.000000000 -0700 |
| | | +++ Python-3.4.1/Lib/importlib/_bootstrap.py 2014-08-27 08:46:00.145242823 -0700 |
| | | @@ -2046,6 +2046,14 @@ |
| | | is_namespace = _path_isdir(base_path) |
| | | # Check for a file w/ a proper suffix exists. |
| | | for suffix, loader_class in self._loaders: |
| | | + message = 'checking {!r}: {!r}'.format(self.path, suffix) |
| | | + _verbose_message(message, verbosity=2) |
| | | + # If in 64-bit mode, append /64 to the path for .so files. |
| | | + if suffix.endswith('.so') and sys.maxsize != 2 ** 31 - 1: |
| | | + full_path = _path_join(self.path, '64', tail_module + suffix) |
| | | + _verbose_message('trying {}'.format(full_path), verbosity=2) |
| | | + if _path_isfile(full_path): |
| | | + return self._get_spec(loader_class, fullname, full_path, None, target) |
| | | full_path = _path_join(self.path, tail_module + suffix) |
| | | _verbose_message('trying {}'.format(full_path), verbosity=2) |
| | | if cache_module + suffix in cache: |
| | | --- Python-3.4.0/Lib/sysconfig.py.~1~ 2014-03-16 19:31:30.000000000 -0700 |
| | | +++ Python-3.4.0/Lib/sysconfig.py 2014-03-17 13:18:10.099539252 -0700 |
| | | @@ -392,7 +392,11 @@ |
| | |
| | | |
| | | with open(destfile, 'w', encoding='utf8') as f: |
| | | f.write('# system configuration generated and used by' |
| | | --- Python-3.4.0/Modules/getpath.c.~1~ 2014-03-16 19:31:31.000000000 -0700 |
| | | +++ Python-3.4.0/Modules/getpath.c 2014-04-25 15:02:02.837613851 -0700 |
| | | --- Python-3.4.0/Modules/getpath.c.~1~ 2014-03-16 19:31:31.000000000 -0700 |
| | | +++ Python-3.4.0/Modules/getpath.c 2014-04-25 15:02:02.837613851 -0700 |
| | | @@ -697,6 +697,10 @@ |
| | | wcsncpy(exec_prefix, _exec_prefix, MAXPATHLEN); |
| | | joinpath(exec_prefix, L"lib/lib-dynload"); |
| | |
| | | /* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */ |
| | | |
| | | if ((!pfound || !efound) && !Py_FrozenFlag) |
| | | @@ -710,8 +714,30 @@ |
| | | if (_rtpypath && _rtpypath[0] != '\0') { |
| | | size_t rtpypath_len; |
| | | rtpypath = _Py_char2wchar(_rtpypath, &rtpypath_len); |
| | | - if (rtpypath != NULL) |
| | | - bufsz += rtpypath_len + 1; |
| | | + if (rtpypath != NULL) { |
| | | + wchar_t *orig_rtpypath = rtpypath; |
| | | + |
| | | + /* |
| | | + * Split the path; for each component, add that component + "/64" |
| | | + * (if in 64-bit mode) and the component unadorned (regardless). |
| | | + */ |
| | | + while (1) { |
| | | + wchar_t *delim = wcschr(rtpypath, DELIM); |
| | | + if (delim) { |
| | | + /* once for usual, another for usual + "/64" */ |
| | | + bufsz += delim - rtpypath + 1; |
| | | + if (sizeof(void *) == 8) |
| | | + bufsz += delim - rtpypath + 1 + 3; |
| | | + } else { |
| | | + bufsz += wcslen(rtpypath) + 1; |
| | | + if (sizeof(void *) == 8) |
| | | + bufsz += wcslen(rtpypath) + 1 + 3; |
| | | + break; |
| | | + } |
| | | + rtpypath = delim + 1; |
| | | + } |
| | | + rtpypath = orig_rtpypath; |
| | | + } |
| | | } |
| | | |
| | | defpath = _pythonpath; |
| | | @@ -723,9 +749,19 @@ |
| | | /* Paths are relative to prefix */ |
| | | bufsz += prefixsz; |
| | | |
| | | - if (delim) |
| | | + if (delim) { |
| | | + if (sizeof(void *) == 8) { |
| | | + bufsz += delim - defpath + 1 + 3; |
| | | + if (defpath[0] != SEP) |
| | | + bufsz += prefixsz; |
| | | + } |
| | | bufsz += delim - defpath + 1; |
| | | - else { |
| | | + } else { |
| | | + if (sizeof(void *) == 8) { |
| | | + bufsz += wcslen(defpath) + 1 + 3; |
| | | + if (defpath[0] != SEP) |
| | | + bufsz += prefixsz; |
| | | + } |
| | | bufsz += wcslen(defpath) + 1; |
| | | break; |
| | | } |
| | | @@ -741,13 +777,38 @@ |
| | | "Not enough memory for dynamic PYTHONPATH"); |
| | | } |
| | | |
| | | + buf[0] = '\0'; |
| | | /* Run-time value of $PYTHONPATH goes first */ |
| | | if (rtpypath) { |
| | | - wcscpy(buf, rtpypath); |
| | | - wcscat(buf, delimiter); |
| | | + wchar_t *orig_rtpypath = rtpypath; |
| | | + |
| | | + while (1) { |
| | | + wchar_t *delim = wcschr(rtpypath, DELIM); |
| | | + |
| | | + if (delim) { |
| | | + *delim = '\0'; |
| | | + if (sizeof(void *) == 8) { |
| | | + wcscat(buf, rtpypath); |
| | | + wcscat(buf, L"/64"); |
| | | + wcscat(buf, delimiter); |
| | | + } |
| | | + wcscat(buf, rtpypath); |
| | | + wcscat(buf, delimiter); |
| | | + *delim = DELIM; |
| | | + } else { |
| | | + if (sizeof(void *) == 8) { |
| | | + wcscat(buf, rtpypath); |
| | | + wcscat(buf, L"/64"); |
| | | + wcscat(buf, delimiter); |
| | | + } |
| | | + wcscat(buf, rtpypath); |
| | | + wcscat(buf, delimiter); |
| | | + break; |
| | | + } |
| | | + rtpypath = delim + 1; |
| | | + } |
| | | + rtpypath = orig_rtpypath; |
| | | } |
| | | - else |
| | | - buf[0] = '\0'; |
| | | |
| | | /* Next is the default zip path */ |
| | | wcscat(buf, zip_path); |
| | | @@ -766,18 +827,35 @@ |
| | | } |
| | | |
| | | if (delim) { |
| | | - size_t len = delim - defpath + 1; |
| | | - size_t end = wcslen(buf) + len; |
| | | - wcsncat(buf, defpath, len); |
| | | - *(buf + end) = '\0'; |
| | | - } |
| | | - else { |
| | | + *delim = '\0'; |
| | | + if (sizeof(void *) == 8) { |
| | | + wcscat(buf, defpath); |
| | | + wcscat(buf, L"/64"); |
| | | + wcscat(buf, delimiter); |
| | | + if (defpath[0] != SEP) { |
| | | + wcscat(buf, prefix); |
| | | + wcscat(buf, separator); |
| | | + } |
| | | + } |
| | | wcscat(buf, defpath); |
| | | + wcscat(buf, delimiter); |
| | | + *delim = DELIM; |
| | | + } else { |
| | | + if (sizeof(void *) == 8) { |
| | | + wcscat(buf, defpath); |
| | | + wcscat(buf, L"/64"); |
| | | + wcscat(buf, delimiter); |
| | | + if (defpath[0] != SEP) { |
| | | + wcscat(buf, prefix); |
| | | + wcscat(buf, separator); |
| | | + } |
| | | + } |
| | | + wcscat(buf, defpath); |
| | | + wcscat(buf, delimiter); |
| | | break; |
| | | } |
| | | defpath = delim + 1; |
| | | } |
| | | - wcscat(buf, delimiter); |
| | | |
| | | /* Finally, on goes the directory for dynamic-load modules */ |
| | | wcscat(buf, exec_prefix); |