14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Tests for distutils.ccompiler.""" 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import captured_stdout 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.ccompiler import (gen_lib_options, CCompiler, 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm get_default_compiler, customize_compiler) 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils import debug 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.tests import support 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass FakeCompiler(object): 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def library_dir_option(self, dir): 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return "-L" + dir 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def runtime_library_dir_option(self, dir): 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return ["-cool", "-R" + dir] 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def find_library_file(self, dirs, lib, debug=0): 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 'found' 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def library_option(self, lib): 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return "-l" + lib 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass CCompilerTestCase(support.EnvironGuard, unittest.TestCase): 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_gen_lib_options(self): 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm compiler = FakeCompiler() 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm libdirs = ['lib1', 'lib2'] 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runlibdirs = ['runlib1'] 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm libs = [os.path.join('dir', 'name'), 'name2'] 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm opts = gen_lib_options(compiler, libdirs, runlibdirs, libs) 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wanted = ['-Llib1', '-Llib2', '-cool', '-Rrunlib1', 'found', 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '-lname2'] 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(opts, wanted) 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_debug_print(self): 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class MyCCompiler(CCompiler): 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm executables = {} 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm compiler = MyCCompiler() 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with captured_stdout() as stdout: 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm compiler.debug_print('xxx') 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stdout.seek(0) 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(stdout.read(), '') 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm debug.DEBUG = True 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with captured_stdout() as stdout: 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm compiler.debug_print('xxx') 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stdout.seek(0) 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(stdout.read(), 'xxx\n') 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm debug.DEBUG = False 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_customize_compiler(self): 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # not testing if default compiler is not unix 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if get_default_compiler() != 'unix': 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm os.environ['AR'] = 'my_ar' 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm os.environ['ARFLAGS'] = '-arflags' 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # make sure AR gets caught 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class compiler: 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm compiler_type = 'unix' 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def set_executables(self, **kw): 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.exes = kw 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm comp = compiler() 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm customize_compiler(comp) 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(comp.exes['archiver'], 'my_ar -arflags') 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_suite(): 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return unittest.makeSuite(CCompilerTestCase) 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__": 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.main(defaultTest="test_suite") 82