Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 1 | import unittest |
| 2 | import sys |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 3 | import os |
Florent Xicluna | a470738 | 2010-03-11 00:05:17 +0000 | [diff] [blame] | 4 | import subprocess |
Georg Brandl | 89fad14 | 2010-03-14 10:23:39 +0000 | [diff] [blame] | 5 | import shutil |
Éric Araujo | 6ebea15 | 2011-10-08 02:57:45 +0200 | [diff] [blame] | 6 | from copy import copy |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 7 | |
Zachary Ware | f7cc603 | 2016-09-17 01:57:28 -0500 | [diff] [blame] | 8 | from test.support import (import_module, TESTFN, unlink, check_warnings, |
Serhiy Storchaka | 2a23adf | 2015-09-06 14:13:25 +0300 | [diff] [blame] | 9 | captured_stdout, skip_unless_symlink, change_cwd) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 10 | |
| 11 | import sysconfig |
| 12 | from sysconfig import (get_paths, get_platform, get_config_vars, |
Éric Araujo | ec177c1 | 2012-06-24 03:27:43 -0400 | [diff] [blame] | 13 | get_path, get_path_names, _INSTALL_SCHEMES, |
Tarek Ziadé | bd79768 | 2010-02-02 23:16:13 +0000 | [diff] [blame] | 14 | _get_default_scheme, _expand_vars, |
Tarek Ziadé | a751499 | 2010-05-25 09:44:36 +0000 | [diff] [blame] | 15 | get_scheme_names, get_config_var, _main) |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 16 | import _osx_support |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 17 | |
| 18 | class TestSysConfig(unittest.TestCase): |
| 19 | |
| 20 | def setUp(self): |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 21 | super(TestSysConfig, self).setUp() |
| 22 | self.sys_path = sys.path[:] |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 23 | # patching os.uname |
| 24 | if hasattr(os, 'uname'): |
| 25 | self.uname = os.uname |
| 26 | self._uname = os.uname() |
| 27 | else: |
| 28 | self.uname = None |
Larry Hastings | 605a62d | 2012-06-24 04:33:36 -0700 | [diff] [blame] | 29 | self._set_uname(('',)*5) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 30 | os.uname = self._get_uname |
| 31 | # saving the environment |
| 32 | self.name = os.name |
| 33 | self.platform = sys.platform |
| 34 | self.version = sys.version |
| 35 | self.sep = os.sep |
| 36 | self.join = os.path.join |
| 37 | self.isabs = os.path.isabs |
| 38 | self.splitdrive = os.path.splitdrive |
Éric Araujo | ec177c1 | 2012-06-24 03:27:43 -0400 | [diff] [blame] | 39 | self._config_vars = sysconfig._CONFIG_VARS, copy(sysconfig._CONFIG_VARS) |
Tarek Ziade | 1231a4e | 2011-05-19 13:07:25 +0200 | [diff] [blame] | 40 | self._added_envvars = [] |
| 41 | self._changed_envvars = [] |
Éric Araujo | c1b7e7f | 2011-09-18 23:12:30 +0200 | [diff] [blame] | 42 | for var in ('MACOSX_DEPLOYMENT_TARGET', 'PATH'): |
Tarek Ziade | 1231a4e | 2011-05-19 13:07:25 +0200 | [diff] [blame] | 43 | if var in os.environ: |
| 44 | self._changed_envvars.append((var, os.environ[var])) |
| 45 | else: |
| 46 | self._added_envvars.append(var) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 47 | |
| 48 | def tearDown(self): |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 49 | sys.path[:] = self.sys_path |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 50 | self._cleanup_testfn() |
| 51 | if self.uname is not None: |
| 52 | os.uname = self.uname |
| 53 | else: |
| 54 | del os.uname |
| 55 | os.name = self.name |
| 56 | sys.platform = self.platform |
| 57 | sys.version = self.version |
| 58 | os.sep = self.sep |
| 59 | os.path.join = self.join |
| 60 | os.path.isabs = self.isabs |
| 61 | os.path.splitdrive = self.splitdrive |
Éric Araujo | ec177c1 | 2012-06-24 03:27:43 -0400 | [diff] [blame] | 62 | sysconfig._CONFIG_VARS = self._config_vars[0] |
| 63 | sysconfig._CONFIG_VARS.clear() |
| 64 | sysconfig._CONFIG_VARS.update(self._config_vars[1]) |
Tarek Ziade | 1231a4e | 2011-05-19 13:07:25 +0200 | [diff] [blame] | 65 | for var, value in self._changed_envvars: |
| 66 | os.environ[var] = value |
| 67 | for var in self._added_envvars: |
| 68 | os.environ.pop(var, None) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 69 | |
| 70 | super(TestSysConfig, self).tearDown() |
| 71 | |
| 72 | def _set_uname(self, uname): |
Larry Hastings | 605a62d | 2012-06-24 04:33:36 -0700 | [diff] [blame] | 73 | self._uname = os.uname_result(uname) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 74 | |
| 75 | def _get_uname(self): |
| 76 | return self._uname |
| 77 | |
| 78 | def _cleanup_testfn(self): |
| 79 | path = TESTFN |
| 80 | if os.path.isfile(path): |
| 81 | os.remove(path) |
| 82 | elif os.path.isdir(path): |
| 83 | shutil.rmtree(path) |
| 84 | |
| 85 | def test_get_path_names(self): |
Éric Araujo | ec177c1 | 2012-06-24 03:27:43 -0400 | [diff] [blame] | 86 | self.assertEqual(get_path_names(), sysconfig._SCHEME_KEYS) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 87 | |
| 88 | def test_get_paths(self): |
| 89 | scheme = get_paths() |
| 90 | default_scheme = _get_default_scheme() |
| 91 | wanted = _expand_vars(default_scheme, None) |
Éric Araujo | c1b7e7f | 2011-09-18 23:12:30 +0200 | [diff] [blame] | 92 | wanted = sorted(wanted.items()) |
| 93 | scheme = sorted(scheme.items()) |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 94 | self.assertEqual(scheme, wanted) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 95 | |
| 96 | def test_get_path(self): |
Éric Araujo | c1b7e7f | 2011-09-18 23:12:30 +0200 | [diff] [blame] | 97 | # XXX make real tests here |
Éric Araujo | ec177c1 | 2012-06-24 03:27:43 -0400 | [diff] [blame] | 98 | for scheme in _INSTALL_SCHEMES: |
| 99 | for name in _INSTALL_SCHEMES[scheme]: |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 100 | res = get_path(name, scheme) |
| 101 | |
| 102 | def test_get_config_vars(self): |
| 103 | cvars = get_config_vars() |
Éric Araujo | c1b7e7f | 2011-09-18 23:12:30 +0200 | [diff] [blame] | 104 | self.assertIsInstance(cvars, dict) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 105 | self.assertTrue(cvars) |
| 106 | |
| 107 | def test_get_platform(self): |
| 108 | # windows XP, 32bits |
| 109 | os.name = 'nt' |
| 110 | sys.version = ('2.4.4 (#71, Oct 18 2006, 08:34:43) ' |
| 111 | '[MSC v.1310 32 bit (Intel)]') |
| 112 | sys.platform = 'win32' |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 113 | self.assertEqual(get_platform(), 'win32') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 114 | |
| 115 | # windows XP, amd64 |
| 116 | os.name = 'nt' |
| 117 | sys.version = ('2.4.4 (#71, Oct 18 2006, 08:34:43) ' |
| 118 | '[MSC v.1310 32 bit (Amd64)]') |
| 119 | sys.platform = 'win32' |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 120 | self.assertEqual(get_platform(), 'win-amd64') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 121 | |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 122 | # macbook |
| 123 | os.name = 'posix' |
| 124 | sys.version = ('2.5 (r25:51918, Sep 19 2006, 08:49:13) ' |
| 125 | '\n[GCC 4.0.1 (Apple Computer, Inc. build 5341)]') |
| 126 | sys.platform = 'darwin' |
| 127 | self._set_uname(('Darwin', 'macziade', '8.11.1', |
| 128 | ('Darwin Kernel Version 8.11.1: ' |
| 129 | 'Wed Oct 10 18:23:28 PDT 2007; ' |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 130 | 'root:xnu-792.25.20~1/RELEASE_I386'), 'PowerPC')) |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 131 | _osx_support._remove_original_values(get_config_vars()) |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 132 | get_config_vars()['MACOSX_DEPLOYMENT_TARGET'] = '10.3' |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 133 | |
| 134 | get_config_vars()['CFLAGS'] = ('-fno-strict-aliasing -DNDEBUG -g ' |
| 135 | '-fwrapv -O3 -Wall -Wstrict-prototypes') |
| 136 | |
Benjamin Peterson | d69fe2a | 2010-02-03 02:59:43 +0000 | [diff] [blame] | 137 | maxint = sys.maxsize |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 138 | try: |
| 139 | sys.maxsize = 2147483647 |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 140 | self.assertEqual(get_platform(), 'macosx-10.3-ppc') |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 141 | sys.maxsize = 9223372036854775807 |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 142 | self.assertEqual(get_platform(), 'macosx-10.3-ppc64') |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 143 | finally: |
Benjamin Peterson | d69fe2a | 2010-02-03 02:59:43 +0000 | [diff] [blame] | 144 | sys.maxsize = maxint |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 145 | |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 146 | self._set_uname(('Darwin', 'macziade', '8.11.1', |
| 147 | ('Darwin Kernel Version 8.11.1: ' |
| 148 | 'Wed Oct 10 18:23:28 PDT 2007; ' |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 149 | 'root:xnu-792.25.20~1/RELEASE_I386'), 'i386')) |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 150 | _osx_support._remove_original_values(get_config_vars()) |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 151 | get_config_vars()['MACOSX_DEPLOYMENT_TARGET'] = '10.3' |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 152 | |
| 153 | get_config_vars()['CFLAGS'] = ('-fno-strict-aliasing -DNDEBUG -g ' |
| 154 | '-fwrapv -O3 -Wall -Wstrict-prototypes') |
Benjamin Peterson | d69fe2a | 2010-02-03 02:59:43 +0000 | [diff] [blame] | 155 | maxint = sys.maxsize |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 156 | try: |
| 157 | sys.maxsize = 2147483647 |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 158 | self.assertEqual(get_platform(), 'macosx-10.3-i386') |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 159 | sys.maxsize = 9223372036854775807 |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 160 | self.assertEqual(get_platform(), 'macosx-10.3-x86_64') |
Tarek Ziadé | 8b441d0 | 2010-01-29 11:46:31 +0000 | [diff] [blame] | 161 | finally: |
Benjamin Peterson | d69fe2a | 2010-02-03 02:59:43 +0000 | [diff] [blame] | 162 | sys.maxsize = maxint |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 163 | |
| 164 | # macbook with fat binaries (fat, universal or fat64) |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 165 | _osx_support._remove_original_values(get_config_vars()) |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 166 | get_config_vars()['MACOSX_DEPLOYMENT_TARGET'] = '10.4' |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 167 | get_config_vars()['CFLAGS'] = ('-arch ppc -arch i386 -isysroot ' |
| 168 | '/Developer/SDKs/MacOSX10.4u.sdk ' |
| 169 | '-fno-strict-aliasing -fno-common ' |
| 170 | '-dynamic -DNDEBUG -g -O3') |
| 171 | |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 172 | self.assertEqual(get_platform(), 'macosx-10.4-fat') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 173 | |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 174 | _osx_support._remove_original_values(get_config_vars()) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 175 | get_config_vars()['CFLAGS'] = ('-arch x86_64 -arch i386 -isysroot ' |
| 176 | '/Developer/SDKs/MacOSX10.4u.sdk ' |
| 177 | '-fno-strict-aliasing -fno-common ' |
| 178 | '-dynamic -DNDEBUG -g -O3') |
| 179 | |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 180 | self.assertEqual(get_platform(), 'macosx-10.4-intel') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 181 | |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 182 | _osx_support._remove_original_values(get_config_vars()) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 183 | get_config_vars()['CFLAGS'] = ('-arch x86_64 -arch ppc -arch i386 -isysroot ' |
| 184 | '/Developer/SDKs/MacOSX10.4u.sdk ' |
| 185 | '-fno-strict-aliasing -fno-common ' |
| 186 | '-dynamic -DNDEBUG -g -O3') |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 187 | self.assertEqual(get_platform(), 'macosx-10.4-fat3') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 188 | |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 189 | _osx_support._remove_original_values(get_config_vars()) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 190 | get_config_vars()['CFLAGS'] = ('-arch ppc64 -arch x86_64 -arch ppc -arch i386 -isysroot ' |
| 191 | '/Developer/SDKs/MacOSX10.4u.sdk ' |
| 192 | '-fno-strict-aliasing -fno-common ' |
| 193 | '-dynamic -DNDEBUG -g -O3') |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 194 | self.assertEqual(get_platform(), 'macosx-10.4-universal') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 195 | |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 196 | _osx_support._remove_original_values(get_config_vars()) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 197 | get_config_vars()['CFLAGS'] = ('-arch x86_64 -arch ppc64 -isysroot ' |
| 198 | '/Developer/SDKs/MacOSX10.4u.sdk ' |
| 199 | '-fno-strict-aliasing -fno-common ' |
| 200 | '-dynamic -DNDEBUG -g -O3') |
| 201 | |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 202 | self.assertEqual(get_platform(), 'macosx-10.4-fat64') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 203 | |
| 204 | for arch in ('ppc', 'i386', 'x86_64', 'ppc64'): |
Ned Deily | df8aa2b | 2012-07-21 05:36:30 -0700 | [diff] [blame] | 205 | _osx_support._remove_original_values(get_config_vars()) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 206 | get_config_vars()['CFLAGS'] = ('-arch %s -isysroot ' |
| 207 | '/Developer/SDKs/MacOSX10.4u.sdk ' |
| 208 | '-fno-strict-aliasing -fno-common ' |
Éric Araujo | f46676d | 2011-05-26 16:35:14 +0200 | [diff] [blame] | 209 | '-dynamic -DNDEBUG -g -O3' % arch) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 210 | |
Éric Araujo | f46676d | 2011-05-26 16:35:14 +0200 | [diff] [blame] | 211 | self.assertEqual(get_platform(), 'macosx-10.4-%s' % arch) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 212 | |
| 213 | # linux debian sarge |
| 214 | os.name = 'posix' |
| 215 | sys.version = ('2.3.5 (#1, Jul 4 2007, 17:28:59) ' |
| 216 | '\n[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)]') |
| 217 | sys.platform = 'linux2' |
| 218 | self._set_uname(('Linux', 'aglae', '2.6.21.1dedibox-r7', |
| 219 | '#1 Mon Apr 30 17:25:38 CEST 2007', 'i686')) |
| 220 | |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 221 | self.assertEqual(get_platform(), 'linux-i686') |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 222 | |
| 223 | # XXX more platforms to tests here |
| 224 | |
| 225 | def test_get_config_h_filename(self): |
| 226 | config_h = sysconfig.get_config_h_filename() |
| 227 | self.assertTrue(os.path.isfile(config_h), config_h) |
| 228 | |
Tarek Ziadé | bd79768 | 2010-02-02 23:16:13 +0000 | [diff] [blame] | 229 | def test_get_scheme_names(self): |
Jesus Cea | f01d695 | 2012-10-05 03:36:11 +0200 | [diff] [blame] | 230 | wanted = ('nt', 'nt_user', 'osx_framework_user', |
Benjamin Peterson | 3c451e6 | 2010-05-08 15:51:23 +0000 | [diff] [blame] | 231 | 'posix_home', 'posix_prefix', 'posix_user') |
Ezio Melotti | b3aedd4 | 2010-11-20 19:04:17 +0000 | [diff] [blame] | 232 | self.assertEqual(get_scheme_names(), wanted) |
Tarek Ziadé | bd79768 | 2010-02-02 23:16:13 +0000 | [diff] [blame] | 233 | |
Brian Curtin | 3b4499c | 2010-12-28 14:31:47 +0000 | [diff] [blame] | 234 | @skip_unless_symlink |
Florent Xicluna | a470738 | 2010-03-11 00:05:17 +0000 | [diff] [blame] | 235 | def test_symlink(self): |
Brian Curtin | d40e6f7 | 2010-07-08 21:39:08 +0000 | [diff] [blame] | 236 | # On Windows, the EXE needs to know where pythonXY.dll is at so we have |
| 237 | # to add the directory to the path. |
Steve Dower | f14c28f | 2018-09-20 13:38:34 -0700 | [diff] [blame] | 238 | env = None |
Brian Curtin | d40e6f7 | 2010-07-08 21:39:08 +0000 | [diff] [blame] | 239 | if sys.platform == "win32": |
Steve Dower | f14c28f | 2018-09-20 13:38:34 -0700 | [diff] [blame] | 240 | env = {k.upper(): os.environ[k] for k in os.environ} |
| 241 | env["PATH"] = "{};{}".format( |
| 242 | os.path.dirname(sys.executable), env.get("PATH", "")) |
| 243 | # Requires PYTHONHOME as well since we locate stdlib from the |
| 244 | # EXE path and not the DLL path (which should be fixed) |
| 245 | env["PYTHONHOME"] = os.path.dirname(sys.executable) |
| 246 | if sysconfig.is_python_build(True): |
| 247 | env["PYTHONPATH"] = os.path.dirname(os.__file__) |
Brian Curtin | d40e6f7 | 2010-07-08 21:39:08 +0000 | [diff] [blame] | 248 | |
Florent Xicluna | a470738 | 2010-03-11 00:05:17 +0000 | [diff] [blame] | 249 | # Issue 7880 |
Steve Dower | f14c28f | 2018-09-20 13:38:34 -0700 | [diff] [blame] | 250 | def get(python, env=None): |
Florent Xicluna | a470738 | 2010-03-11 00:05:17 +0000 | [diff] [blame] | 251 | cmd = [python, '-c', |
Florent Xicluna | 01fe610 | 2010-03-13 15:35:12 +0000 | [diff] [blame] | 252 | 'import sysconfig; print(sysconfig.get_platform())'] |
Steve Dower | f14c28f | 2018-09-20 13:38:34 -0700 | [diff] [blame] | 253 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
| 254 | stderr=subprocess.PIPE, env=env) |
| 255 | out, err = p.communicate() |
| 256 | if p.returncode: |
| 257 | print((out, err)) |
| 258 | self.fail('Non-zero return code {0} (0x{0:08X})' |
| 259 | .format(p.returncode)) |
| 260 | return out, err |
Florent Xicluna | a470738 | 2010-03-11 00:05:17 +0000 | [diff] [blame] | 261 | real = os.path.realpath(sys.executable) |
| 262 | link = os.path.abspath(TESTFN) |
Brian Curtin | d40e6f7 | 2010-07-08 21:39:08 +0000 | [diff] [blame] | 263 | os.symlink(real, link) |
Florent Xicluna | a470738 | 2010-03-11 00:05:17 +0000 | [diff] [blame] | 264 | try: |
Steve Dower | f14c28f | 2018-09-20 13:38:34 -0700 | [diff] [blame] | 265 | self.assertEqual(get(real), get(link, env)) |
Florent Xicluna | a470738 | 2010-03-11 00:05:17 +0000 | [diff] [blame] | 266 | finally: |
| 267 | unlink(link) |
| 268 | |
Tarek Ziadé | 06710a8 | 2010-05-19 22:25:00 +0000 | [diff] [blame] | 269 | def test_user_similar(self): |
Éric Araujo | 48e484f | 2011-08-31 16:48:17 +0200 | [diff] [blame] | 270 | # Issue #8759: make sure the posix scheme for the users |
Tarek Ziadé | 06710a8 | 2010-05-19 22:25:00 +0000 | [diff] [blame] | 271 | # is similar to the global posix_prefix one |
| 272 | base = get_config_var('base') |
| 273 | user = get_config_var('userbase') |
Éric Araujo | de50455 | 2011-10-08 01:55:07 +0200 | [diff] [blame] | 274 | # the global scheme mirrors the distinction between prefix and |
| 275 | # exec-prefix but not the user scheme, so we have to adapt the paths |
| 276 | # before comparing (issue #9100) |
Vinay Sajip | 7ded1f0 | 2012-05-26 03:45:29 +0100 | [diff] [blame] | 277 | adapt = sys.base_prefix != sys.base_exec_prefix |
Tarek Ziadé | 06710a8 | 2010-05-19 22:25:00 +0000 | [diff] [blame] | 278 | for name in ('stdlib', 'platstdlib', 'purelib', 'platlib'): |
| 279 | global_path = get_path(name, 'posix_prefix') |
Éric Araujo | de50455 | 2011-10-08 01:55:07 +0200 | [diff] [blame] | 280 | if adapt: |
Vinay Sajip | 7ded1f0 | 2012-05-26 03:45:29 +0100 | [diff] [blame] | 281 | global_path = global_path.replace(sys.exec_prefix, sys.base_prefix) |
| 282 | base = base.replace(sys.exec_prefix, sys.base_prefix) |
| 283 | elif sys.base_prefix != sys.prefix: |
| 284 | # virtual environment? Likewise, we have to adapt the paths |
| 285 | # before comparing |
| 286 | global_path = global_path.replace(sys.base_prefix, sys.prefix) |
| 287 | base = base.replace(sys.base_prefix, sys.prefix) |
Tarek Ziadé | 06710a8 | 2010-05-19 22:25:00 +0000 | [diff] [blame] | 288 | user_path = get_path(name, 'posix_user') |
Éric Araujo | 48e484f | 2011-08-31 16:48:17 +0200 | [diff] [blame] | 289 | self.assertEqual(user_path, global_path.replace(base, user, 1)) |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 290 | |
Tarek Ziadé | a751499 | 2010-05-25 09:44:36 +0000 | [diff] [blame] | 291 | def test_main(self): |
| 292 | # just making sure _main() runs and returns things in the stdout |
| 293 | with captured_stdout() as output: |
| 294 | _main() |
| 295 | self.assertTrue(len(output.getvalue().split('\n')) > 0) |
| 296 | |
Brian Curtin | db902ac | 2010-07-22 15:38:28 +0000 | [diff] [blame] | 297 | @unittest.skipIf(sys.platform == "win32", "Does not apply to Windows") |
Ronald Oussoren | f4ebe2e | 2010-07-19 13:00:36 +0000 | [diff] [blame] | 298 | def test_ldshared_value(self): |
| 299 | ldflags = sysconfig.get_config_var('LDFLAGS') |
| 300 | ldshared = sysconfig.get_config_var('LDSHARED') |
| 301 | |
| 302 | self.assertIn(ldflags, ldshared) |
| 303 | |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 304 | @unittest.skipUnless(sys.platform == "darwin", "test only relevant on MacOSX") |
| 305 | def test_platform_in_subprocess(self): |
| 306 | my_platform = sysconfig.get_platform() |
| 307 | |
| 308 | # Test without MACOSX_DEPLOYMENT_TARGET in the environment |
| 309 | |
| 310 | env = os.environ.copy() |
| 311 | if 'MACOSX_DEPLOYMENT_TARGET' in env: |
| 312 | del env['MACOSX_DEPLOYMENT_TARGET'] |
| 313 | |
Philip Jenvey | 075bbb1 | 2012-10-01 11:48:46 -0700 | [diff] [blame] | 314 | p = subprocess.Popen([ |
| 315 | sys.executable, '-c', |
| 316 | 'import sysconfig; print(sysconfig.get_platform())', |
| 317 | ], |
| 318 | stdout=subprocess.PIPE, |
| 319 | stderr=subprocess.DEVNULL, |
| 320 | env=env) |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 321 | test_platform = p.communicate()[0].strip() |
| 322 | test_platform = test_platform.decode('utf-8') |
| 323 | status = p.wait() |
| 324 | |
| 325 | self.assertEqual(status, 0) |
| 326 | self.assertEqual(my_platform, test_platform) |
| 327 | |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 328 | # Test with MACOSX_DEPLOYMENT_TARGET in the environment, and |
| 329 | # using a value that is unlikely to be the default one. |
| 330 | env = os.environ.copy() |
| 331 | env['MACOSX_DEPLOYMENT_TARGET'] = '10.1' |
| 332 | |
Philip Jenvey | 075bbb1 | 2012-10-01 11:48:46 -0700 | [diff] [blame] | 333 | p = subprocess.Popen([ |
| 334 | sys.executable, '-c', |
| 335 | 'import sysconfig; print(sysconfig.get_platform())', |
| 336 | ], |
| 337 | stdout=subprocess.PIPE, |
| 338 | stderr=subprocess.DEVNULL, |
| 339 | env=env) |
| 340 | test_platform = p.communicate()[0].strip() |
| 341 | test_platform = test_platform.decode('utf-8') |
| 342 | status = p.wait() |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 343 | |
Philip Jenvey | 075bbb1 | 2012-10-01 11:48:46 -0700 | [diff] [blame] | 344 | self.assertEqual(status, 0) |
| 345 | self.assertEqual(my_platform, test_platform) |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 346 | |
Richard Oudkerk | 46874ad | 2012-07-27 12:06:55 +0100 | [diff] [blame] | 347 | def test_srcdir(self): |
| 348 | # See Issues #15322, #15364. |
| 349 | srcdir = sysconfig.get_config_var('srcdir') |
| 350 | |
| 351 | self.assertTrue(os.path.isabs(srcdir), srcdir) |
| 352 | self.assertTrue(os.path.isdir(srcdir), srcdir) |
| 353 | |
| 354 | if sysconfig._PYTHON_BUILD: |
| 355 | # The python executable has not been installed so srcdir |
| 356 | # should be a full source checkout. |
| 357 | Python_h = os.path.join(srcdir, 'Include', 'Python.h') |
| 358 | self.assertTrue(os.path.exists(Python_h), Python_h) |
| 359 | self.assertTrue(sysconfig._is_python_source_dir(srcdir)) |
| 360 | elif os.name == 'posix': |
Antoine Pitrou | dde25c4 | 2013-10-23 19:07:40 +0200 | [diff] [blame] | 361 | makefile_dir = os.path.dirname(sysconfig.get_makefile_filename()) |
| 362 | # Issue #19340: srcdir has been realpath'ed already |
| 363 | makefile_dir = os.path.realpath(makefile_dir) |
| 364 | self.assertEqual(makefile_dir, srcdir) |
Richard Oudkerk | 46874ad | 2012-07-27 12:06:55 +0100 | [diff] [blame] | 365 | |
| 366 | def test_srcdir_independent_of_cwd(self): |
| 367 | # srcdir should be independent of the current working directory |
| 368 | # See Issues #15322, #15364. |
| 369 | srcdir = sysconfig.get_config_var('srcdir') |
Serhiy Storchaka | 2a23adf | 2015-09-06 14:13:25 +0300 | [diff] [blame] | 370 | with change_cwd(os.pardir): |
Richard Oudkerk | 46874ad | 2012-07-27 12:06:55 +0100 | [diff] [blame] | 371 | srcdir2 = sysconfig.get_config_var('srcdir') |
Richard Oudkerk | 46874ad | 2012-07-27 12:06:55 +0100 | [diff] [blame] | 372 | self.assertEqual(srcdir, srcdir2) |
| 373 | |
Barry Warsaw | 197a770 | 2013-11-21 18:57:14 -0500 | [diff] [blame] | 374 | @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, |
| 375 | 'EXT_SUFFIX required for this test') |
| 376 | def test_SO_deprecation(self): |
| 377 | self.assertWarns(DeprecationWarning, |
| 378 | sysconfig.get_config_var, 'SO') |
| 379 | |
| 380 | @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, |
| 381 | 'EXT_SUFFIX required for this test') |
| 382 | def test_SO_value(self): |
Serhiy Storchaka | eaec359 | 2013-11-26 17:08:24 +0200 | [diff] [blame] | 383 | with check_warnings(('', DeprecationWarning)): |
| 384 | self.assertEqual(sysconfig.get_config_var('SO'), |
| 385 | sysconfig.get_config_var('EXT_SUFFIX')) |
Barry Warsaw | 197a770 | 2013-11-21 18:57:14 -0500 | [diff] [blame] | 386 | |
| 387 | @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, |
| 388 | 'EXT_SUFFIX required for this test') |
| 389 | def test_SO_in_vars(self): |
| 390 | vars = sysconfig.get_config_vars() |
| 391 | self.assertIsNotNone(vars['SO']) |
| 392 | self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) |
| 393 | |
Xavier de Gaye | 471bc3c | 2016-12-14 20:37:10 +0100 | [diff] [blame] | 394 | @unittest.skipUnless(sys.platform == 'linux' and |
| 395 | hasattr(sys.implementation, '_multiarch'), |
Xavier de Gaye | 32cf1ac | 2016-12-10 17:31:28 +0100 | [diff] [blame] | 396 | 'multiarch-specific test') |
doko@ubuntu.com | d3899c1 | 2015-04-15 20:23:14 +0200 | [diff] [blame] | 397 | def test_triplet_in_ext_suffix(self): |
Zachary Ware | f7cc603 | 2016-09-17 01:57:28 -0500 | [diff] [blame] | 398 | ctypes = import_module('ctypes') |
| 399 | import platform, re |
doko@ubuntu.com | d3899c1 | 2015-04-15 20:23:14 +0200 | [diff] [blame] | 400 | machine = platform.machine() |
Antoine Pitrou | 5bd7bf5 | 2015-03-08 20:43:10 +0100 | [diff] [blame] | 401 | suffix = sysconfig.get_config_var('EXT_SUFFIX') |
doko@ubuntu.com | d3899c1 | 2015-04-15 20:23:14 +0200 | [diff] [blame] | 402 | if re.match('(aarch64|arm|mips|ppc|powerpc|s390|sparc)', machine): |
| 403 | self.assertTrue('linux' in suffix, suffix) |
doko@ubuntu.com | 807b80d | 2015-04-15 20:52:39 +0200 | [diff] [blame] | 404 | if re.match('(i[3-6]86|x86_64)$', machine): |
doko@ubuntu.com | d3899c1 | 2015-04-15 20:23:14 +0200 | [diff] [blame] | 405 | if ctypes.sizeof(ctypes.c_char_p()) == 4: |
Xavier de Gaye | fda8961 | 2016-09-11 21:39:17 +0200 | [diff] [blame] | 406 | self.assertTrue(suffix.endswith('i386-linux-gnu.so') or |
Xavier de Gaye | fda8961 | 2016-09-11 21:39:17 +0200 | [diff] [blame] | 407 | suffix.endswith('x86_64-linux-gnux32.so'), |
doko@ubuntu.com | d3899c1 | 2015-04-15 20:23:14 +0200 | [diff] [blame] | 408 | suffix) |
| 409 | else: # 8 byte pointer size |
| 410 | self.assertTrue(suffix.endswith('x86_64-linux-gnu.so'), suffix) |
Antoine Pitrou | 5bd7bf5 | 2015-03-08 20:43:10 +0100 | [diff] [blame] | 411 | |
Ned Deily | 3b81248 | 2015-04-15 17:11:47 -0700 | [diff] [blame] | 412 | @unittest.skipUnless(sys.platform == 'darwin', 'OS X-specific test') |
| 413 | def test_osx_ext_suffix(self): |
| 414 | suffix = sysconfig.get_config_var('EXT_SUFFIX') |
| 415 | self.assertTrue(suffix.endswith('-darwin.so'), suffix) |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 416 | |
Victor Stinner | 1273b7c | 2011-05-24 23:37:07 +0200 | [diff] [blame] | 417 | class MakefileTests(unittest.TestCase): |
Éric Araujo | f46676d | 2011-05-26 16:35:14 +0200 | [diff] [blame] | 418 | |
Victor Stinner | 1273b7c | 2011-05-24 23:37:07 +0200 | [diff] [blame] | 419 | @unittest.skipIf(sys.platform.startswith('win'), |
| 420 | 'Test is not Windows compatible') |
| 421 | def test_get_makefile_filename(self): |
| 422 | makefile = sysconfig.get_makefile_filename() |
| 423 | self.assertTrue(os.path.isfile(makefile), makefile) |
| 424 | |
| 425 | def test_parse_makefile(self): |
| 426 | self.addCleanup(unlink, TESTFN) |
| 427 | with open(TESTFN, "w") as makefile: |
| 428 | print("var1=a$(VAR2)", file=makefile) |
| 429 | print("VAR2=b$(var3)", file=makefile) |
| 430 | print("var3=42", file=makefile) |
| 431 | print("var4=$/invalid", file=makefile) |
| 432 | print("var5=dollar$$5", file=makefile) |
Berker Peksag | ad13edb | 2016-01-28 16:58:00 +0200 | [diff] [blame] | 433 | print("var6=${var3}/lib/python3.5/config-$(VAR2)$(var5)" |
| 434 | "-x86_64-linux-gnu", file=makefile) |
Victor Stinner | 1273b7c | 2011-05-24 23:37:07 +0200 | [diff] [blame] | 435 | vars = sysconfig._parse_makefile(TESTFN) |
| 436 | self.assertEqual(vars, { |
| 437 | 'var1': 'ab42', |
| 438 | 'VAR2': 'b42', |
| 439 | 'var3': 42, |
| 440 | 'var4': '$/invalid', |
| 441 | 'var5': 'dollar$5', |
Berker Peksag | ad13edb | 2016-01-28 16:58:00 +0200 | [diff] [blame] | 442 | 'var6': '42/lib/python3.5/config-b42dollar$5-x86_64-linux-gnu', |
Victor Stinner | 1273b7c | 2011-05-24 23:37:07 +0200 | [diff] [blame] | 443 | }) |
Ronald Oussoren | 222e89a | 2011-05-15 16:46:11 +0200 | [diff] [blame] | 444 | |
| 445 | |
Tarek Ziadé | edacea3 | 2010-01-29 11:41:03 +0000 | [diff] [blame] | 446 | if __name__ == "__main__": |
Zachary Ware | f7cc603 | 2016-09-17 01:57:28 -0500 | [diff] [blame] | 447 | unittest.main() |