def test_unknown_brand(self): version = 'unknown' with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute): # noqa cc = CcBuilder(self.env, known_langs['c++'], ['c++'], version) self.assertEqual(cc.brand, 'unknown') self.assertEqual(cc.compiler.brand, 'unknown') self.assertEqual(cc.pch_compiler.brand, 'unknown') self.assertEqual(cc.linker('executable').brand, 'unknown') self.assertEqual(cc.linker('shared_library').brand, 'unknown') self.assertEqual(cc.version, None) self.assertEqual(cc.compiler.version, None) self.assertEqual(cc.pch_compiler.version, None) self.assertEqual(cc.linker('executable').version, None) self.assertEqual(cc.linker('shared_library').version, None)
def test_clang(self): version = 'clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)' with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute): # noqa cc = CcBuilder(self.env, known_langs['c++'], ['clang++'], version) self.assertEqual(cc.brand, 'clang') self.assertEqual(cc.compiler.brand, 'clang') self.assertEqual(cc.pch_compiler.brand, 'clang') self.assertEqual(cc.linker('executable').brand, 'clang') self.assertEqual(cc.linker('shared_library').brand, 'clang') self.assertEqual(cc.version, Version('3.8.0')) self.assertEqual(cc.compiler.version, Version('3.8.0')) self.assertEqual(cc.pch_compiler.version, Version('3.8.0')) self.assertEqual(cc.linker('executable').version, Version('3.8.0')) self.assertEqual(cc.linker('shared_library').version, Version('3.8.0'))
def test_gcc(self): version = ('g++ (Ubuntu 5.4.0-6ubuntu1~16.04.6) 5.4.0 20160609\n' + 'Copyright (C) 2015 Free Software Foundation, Inc.') with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute): # noqa cc = CcBuilder(self.env, known_langs['c++'], ['g++'], version) self.assertEqual(cc.brand, 'gcc') self.assertEqual(cc.compiler.brand, 'gcc') self.assertEqual(cc.pch_compiler.brand, 'gcc') self.assertEqual(cc.linker('executable').brand, 'gcc') self.assertEqual(cc.linker('shared_library').brand, 'gcc') self.assertEqual(cc.version, Version('5.4.0')) self.assertEqual(cc.compiler.version, Version('5.4.0')) self.assertEqual(cc.pch_compiler.version, Version('5.4.0')) self.assertEqual(cc.linker('executable').version, Version('5.4.0')) self.assertEqual(cc.linker('shared_library').version, Version('5.4.0'))
def test_set_ld_unknown(self): version = ('g++ (Ubuntu 5.4.0-6ubuntu1~16.04.6) 5.4.0 20160609\n' + 'Copyright (C) 2015 Free Software Foundation, Inc.') self.env.variables['LD'] = '/usr/bin/ld.goofy' with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('logging.log'): # noqa cc = CcBuilder(self.env, known_langs['c++'], ['g++'], version) self.assertEqual(cc.linker('executable').command, ['g++'])
def test_properties(self): with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute): # noqa cc = CcBuilder(self.env, known_langs['c++'], ['c++'], 'version') self.assertEqual(cc.flavor, 'cc') self.assertEqual(cc.compiler.flavor, 'cc') self.assertEqual(cc.pch_compiler.flavor, 'cc') self.assertEqual(cc.linker('executable').flavor, 'cc') self.assertEqual(cc.linker('shared_library').flavor, 'cc') self.assertEqual(cc.linker('raw').flavor, 'ld') self.assertEqual(cc.family, 'native') self.assertEqual(cc.auto_link, False) self.assertEqual(cc.can_dual_link, True) self.assertEqual(cc.compiler.num_outputs, 'all') self.assertEqual(cc.pch_compiler.num_outputs, 'all') self.assertEqual(cc.linker('executable').num_outputs, 'all') num_out = 2 if self.env.target_platform.has_import_library else 'all' self.assertEqual(cc.linker('shared_library').num_outputs, num_out) self.assertEqual(cc.compiler.deps_flavor, 'gcc') self.assertEqual(cc.pch_compiler.deps_flavor, 'gcc') self.assertEqual(cc.compiler.needs_libs, False) self.assertEqual(cc.pch_compiler.needs_libs, False) self.assertEqual(cc.compiler.accepts_pch, True) self.assertEqual(cc.pch_compiler.accepts_pch, False) self.assertRaises(KeyError, lambda: cc.linker('unknown'))