| 
									
										
										
										
											2009-05-10 12:02:35 +00:00
										 |  |  | """Tests for distutils.sysconfig.""" | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2010-11-20 19:35:27 +00:00
										 |  |  | import shutil | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  | import test | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-10 12:02:35 +00:00
										 |  |  | from distutils import sysconfig | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  | from distutils.ccompiler import get_default_compiler | 
					
						
							| 
									
										
										
										
											2009-05-10 12:02:35 +00:00
										 |  |  | from distutils.tests import support | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  | from test.support import TESTFN, run_unittest | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-10 12:02:35 +00:00
										 |  |  | class SysconfigTestCase(support.EnvironGuard, | 
					
						
							|  |  |  |                         unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  |     def setUp(self): | 
					
						
							|  |  |  |         super(SysconfigTestCase, self).setUp() | 
					
						
							|  |  |  |         self.makefile = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         if self.makefile is not None: | 
					
						
							|  |  |  |             os.unlink(self.makefile) | 
					
						
							| 
									
										
										
										
											2009-10-18 11:34:51 +00:00
										 |  |  |         self.cleanup_testfn() | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  |         super(SysconfigTestCase, self).tearDown() | 
					
						
							| 
									
										
										
										
											2009-02-06 01:18:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-18 11:34:51 +00:00
										 |  |  |     def cleanup_testfn(self): | 
					
						
							|  |  |  |         if os.path.isfile(TESTFN): | 
					
						
							|  |  |  |             os.remove(TESTFN) | 
					
						
							|  |  |  |         elif os.path.isdir(TESTFN): | 
					
						
							|  |  |  |             shutil.rmtree(TESTFN) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  |     def test_get_config_h_filename(self): | 
					
						
							|  |  |  |         config_h = sysconfig.get_config_h_filename() | 
					
						
							|  |  |  |         self.assertTrue(os.path.isfile(config_h), config_h) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  |     def test_get_python_lib(self): | 
					
						
							|  |  |  |         lib_dir = sysconfig.get_python_lib() | 
					
						
							| 
									
										
											  
											
												Merged revisions 59488-59511 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r59489 | christian.heimes | 2007-12-14 03:33:57 +0100 (Fri, 14 Dec 2007) | 1 line
  Silence a warning about an unsed variable in debug builds
........
  r59490 | christian.heimes | 2007-12-14 03:35:23 +0100 (Fri, 14 Dec 2007) | 2 lines
  Fixed bug #1620: New @spam.getter property syntax modifies the property in place.
  I added also the feature that a @prop.getter decorator does not overwrite the doc string of the property if it was given as an argument to property().
........
  r59491 | raymond.hettinger | 2007-12-14 03:49:47 +0100 (Fri, 14 Dec 2007) | 1 line
  Cleaner method naming convention
........
  r59492 | christian.heimes | 2007-12-14 04:02:34 +0100 (Fri, 14 Dec 2007) | 1 line
  Fixed a warning in _codecs_iso2022.c and some non C89 conform // comments.
........
  r59493 | christian.heimes | 2007-12-14 05:38:13 +0100 (Fri, 14 Dec 2007) | 1 line
  Fixed warning in ssl module
........
  r59500 | raymond.hettinger | 2007-12-14 19:08:20 +0100 (Fri, 14 Dec 2007) | 1 line
  Add line spacing for readability
........
  r59501 | raymond.hettinger | 2007-12-14 19:12:21 +0100 (Fri, 14 Dec 2007) | 3 lines
  Update method names for named tuples.
........
  r59503 | georg.brandl | 2007-12-14 20:03:36 +0100 (Fri, 14 Dec 2007) | 3 lines
  Add a section about nested listcomps to the tutorial.
  Thanks to Ian Bruntlett and Robert Lehmann.
........
  r59504 | raymond.hettinger | 2007-12-14 20:19:59 +0100 (Fri, 14 Dec 2007) | 1 line
  Faster and simpler _replace() method
........
  r59505 | raymond.hettinger | 2007-12-14 22:51:50 +0100 (Fri, 14 Dec 2007) | 1 line
  Add usage note
........
  r59507 | andrew.kuchling | 2007-12-14 23:41:18 +0100 (Fri, 14 Dec 2007) | 1 line
  Remove warning about URL
........
  r59510 | andrew.kuchling | 2007-12-14 23:52:36 +0100 (Fri, 14 Dec 2007) | 1 line
  Bump the version number, and make a few small edits
........
  r59511 | christian.heimes | 2007-12-15 00:42:36 +0100 (Sat, 15 Dec 2007) | 2 lines
  Fixed bug #1628
  The detection now works on Unix with Makefile, Makefile with VPATH and on Windows.
........
											
										 
											2007-12-15 01:27:15 +00:00
										 |  |  |         # XXX doesn't work on Linux when Python was never installed before | 
					
						
							| 
									
										
										
										
											2009-06-30 23:06:06 +00:00
										 |  |  |         #self.assertTrue(os.path.isdir(lib_dir), lib_dir) | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  |         # test for pythonxx.lib? | 
					
						
							| 
									
										
										
										
											2009-02-10 12:36:33 +00:00
										 |  |  |         self.assertNotEqual(sysconfig.get_python_lib(), | 
					
						
							|  |  |  |                             sysconfig.get_python_lib(prefix=TESTFN)) | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_get_python_inc(self): | 
					
						
							| 
									
										
										
										
											2009-02-05 16:35:04 +00:00
										 |  |  |         inc_dir = sysconfig.get_python_inc() | 
					
						
							|  |  |  |         # This is not much of a test.  We make sure Python.h exists | 
					
						
							|  |  |  |         # in the directory returned by get_python_inc() but we don't know | 
					
						
							|  |  |  |         # it is the correct file. | 
					
						
							| 
									
										
										
										
											2009-06-30 23:06:06 +00:00
										 |  |  |         self.assertTrue(os.path.isdir(inc_dir), inc_dir) | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  |         python_h = os.path.join(inc_dir, "Python.h") | 
					
						
							| 
									
										
										
										
											2009-06-30 23:06:06 +00:00
										 |  |  |         self.assertTrue(os.path.isfile(python_h), python_h) | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  |     def test_get_config_vars(self): | 
					
						
							|  |  |  |         cvars = sysconfig.get_config_vars() | 
					
						
							|  |  |  |         self.assertTrue(isinstance(cvars, dict)) | 
					
						
							|  |  |  |         self.assertTrue(cvars) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-27 12:06:55 +01:00
										 |  |  |     def test_srcdir(self): | 
					
						
							|  |  |  |         # See Issues #15322, #15364. | 
					
						
							|  |  |  |         srcdir = sysconfig.get_config_var('srcdir') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertTrue(os.path.isabs(srcdir), srcdir) | 
					
						
							|  |  |  |         self.assertTrue(os.path.isdir(srcdir), srcdir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if sysconfig.python_build: | 
					
						
							|  |  |  |             # The python executable has not been installed so srcdir | 
					
						
							|  |  |  |             # should be a full source checkout. | 
					
						
							|  |  |  |             Python_h = os.path.join(srcdir, 'Include', 'Python.h') | 
					
						
							|  |  |  |             self.assertTrue(os.path.exists(Python_h), Python_h) | 
					
						
							|  |  |  |             self.assertTrue(sysconfig._is_python_source_dir(srcdir)) | 
					
						
							|  |  |  |         elif os.name == 'posix': | 
					
						
							| 
									
										
										
										
											2012-07-27 23:37:04 -07:00
										 |  |  |             self.assertEqual(os.path.dirname(sysconfig.get_makefile_filename()), | 
					
						
							|  |  |  |                                  srcdir) | 
					
						
							| 
									
										
										
										
											2012-07-27 12:06:55 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_srcdir_independent_of_cwd(self): | 
					
						
							|  |  |  |         # srcdir should be independent of the current working directory | 
					
						
							|  |  |  |         # See Issues #15322, #15364. | 
					
						
							|  |  |  |         srcdir = sysconfig.get_config_var('srcdir') | 
					
						
							|  |  |  |         cwd = os.getcwd() | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             os.chdir('..') | 
					
						
							|  |  |  |             srcdir2 = sysconfig.get_config_var('srcdir') | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             os.chdir(cwd) | 
					
						
							|  |  |  |         self.assertEqual(srcdir, srcdir2) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  |     def test_customize_compiler(self): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # not testing if default compiler is not unix | 
					
						
							|  |  |  |         if get_default_compiler() != 'unix': | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         os.environ['AR'] = 'my_ar' | 
					
						
							|  |  |  |         os.environ['ARFLAGS'] = '-arflags' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # make sure AR gets caught | 
					
						
							|  |  |  |         class compiler: | 
					
						
							|  |  |  |             compiler_type = 'unix' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             def set_executables(self, **kw): | 
					
						
							|  |  |  |                 self.exes = kw | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         comp = compiler() | 
					
						
							|  |  |  |         sysconfig.customize_compiler(comp) | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(comp.exes['archiver'], 'my_ar -arflags') | 
					
						
							| 
									
										
										
										
											2010-07-22 12:50:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  |     def test_parse_makefile_base(self): | 
					
						
							|  |  |  |         self.makefile = TESTFN | 
					
						
							|  |  |  |         fd = open(self.makefile, 'w') | 
					
						
							| 
									
										
										
										
											2010-11-05 23:51:56 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             fd.write(r"CONFIG_ARGS=  '--arg1=optarg1' 'ENV=LIB'" '\n') | 
					
						
							|  |  |  |             fd.write('VAR=$OTHER\nOTHER=foo') | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             fd.close() | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  |         d = sysconfig.parse_makefile(self.makefile) | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(d, {'CONFIG_ARGS': "'--arg1=optarg1' 'ENV=LIB'", | 
					
						
							|  |  |  |                              'OTHER': 'foo'}) | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_parse_makefile_literal_dollar(self): | 
					
						
							|  |  |  |         self.makefile = TESTFN | 
					
						
							|  |  |  |         fd = open(self.makefile, 'w') | 
					
						
							| 
									
										
										
										
											2010-11-05 23:51:56 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             fd.write(r"CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'" '\n') | 
					
						
							|  |  |  |             fd.write('VAR=$OTHER\nOTHER=foo') | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             fd.close() | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  |         d = sysconfig.parse_makefile(self.makefile) | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(d, {'CONFIG_ARGS': r"'--arg1=optarg1' 'ENV=\$LIB'", | 
					
						
							|  |  |  |                              'OTHER': 'foo'}) | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-23 09:43:17 +00:00
										 |  |  |     def test_sysconfig_module(self): | 
					
						
							|  |  |  |         import sysconfig as global_sysconfig | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(global_sysconfig.get_config_var('CFLAGS'), sysconfig.get_config_var('CFLAGS')) | 
					
						
							|  |  |  |         self.assertEqual(global_sysconfig.get_config_var('LDFLAGS'), sysconfig.get_config_var('LDFLAGS')) | 
					
						
							| 
									
										
										
										
											2012-07-22 02:56:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @unittest.skipIf(sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'),'compiler flags customized') | 
					
						
							|  |  |  |     def test_sysconfig_compiler_vars(self): | 
					
						
							|  |  |  |         # On OS X, binary installers support extension module building on | 
					
						
							|  |  |  |         # various levels of the operating system with differing Xcode | 
					
						
							|  |  |  |         # configurations.  This requires customization of some of the | 
					
						
							|  |  |  |         # compiler configuration directives to suit the environment on | 
					
						
							|  |  |  |         # the installed machine.  Some of these customizations may require | 
					
						
							|  |  |  |         # running external programs and, so, are deferred until needed by | 
					
						
							|  |  |  |         # the first extension module build.  With Python 3.3, only | 
					
						
							|  |  |  |         # the Distutils version of sysconfig is used for extension module | 
					
						
							|  |  |  |         # builds, which happens earlier in the Distutils tests.  This may | 
					
						
							|  |  |  |         # cause the following tests to fail since no tests have caused | 
					
						
							|  |  |  |         # the global version of sysconfig to call the customization yet. | 
					
						
							|  |  |  |         # The solution for now is to simply skip this test in this case. | 
					
						
							|  |  |  |         # The longer-term solution is to only have one version of sysconfig. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         import sysconfig as global_sysconfig | 
					
						
							|  |  |  |         if sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'): | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), sysconfig.get_config_var('LDSHARED')) | 
					
						
							| 
									
										
										
										
											2010-11-20 19:04:17 +00:00
										 |  |  |         self.assertEqual(global_sysconfig.get_config_var('CC'), sysconfig.get_config_var('CC')) | 
					
						
							| 
									
										
										
										
											2010-07-23 09:43:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-08 15:34:59 +00:00
										 |  |  | def test_suite(): | 
					
						
							|  |  |  |     suite = unittest.TestSuite() | 
					
						
							|  |  |  |     suite.addTest(unittest.makeSuite(SysconfigTestCase)) | 
					
						
							|  |  |  |     return suite | 
					
						
							| 
									
										
										
										
											2009-06-11 08:31:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     run_unittest(test_suite()) |