def test_windows_default_location(self): env = make_env('winnt', clear_variables=True) boost_incdir = r'C:\Boost\include\boost-1.23' def mock_walk(top): yield (top, ) + ([('boost-1.23', ntpath.join(top, 'boost-1.23')) ], []) def mock_execute(*args, **kwargs): if args[0][1] == '/?': return 'cl.exe' raise ValueError() def mock_exists(x): if re.search(r'[/\\]boost[/\\]version.hpp$', x): return True return False with mock.patch('bfg9000.builtins.find._walk_flat', mock_walk), \ mock.patch('bfg9000.builtins.packages._boost_version', return_value=Version('1.23')), \ mock.patch('bfg9000.shell.which', return_value=['command']), \ mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('os.path.exists', mock_exists): # noqa pkg = packages.boost_package(env, 'thread') self.assertEqual(pkg.name, 'boost(thread)') self.assertEqual(pkg.version, Version('1.23')) self.assertEqual( pkg._compile_options, opts.option_list( opts.include_dir(HeaderDirectory(abspath(boost_incdir))))) self.assertEqual( pkg._link_options, opts.option_list( opts.lib_dir(Directory(abspath(r'C:\Boost\lib')))))
def test_windows_default_location(self): env = make_env('winnt', clear_variables=True) context = self._make_context(env) boost_incdir = r'C:\Boost\include\boost-1.23' def mock_walk(top, variables=None): yield top, [top.append('boost-1.23/')], [] def mock_execute(*args, **kwargs): if args[0][1] == '/?': return 'cl.exe' raise ValueError() def mock_exists(x): return bool(re.search(r'[/\\]boost[/\\]version.hpp$', x.string())) with mock.patch('bfg9000.builtins.find.walk', mock_walk), \ mock.patch('bfg9000.builtins.packages._boost_version', return_value=Version('1.23')), \ mock.patch('bfg9000.shell.which', return_value=['command']), \ mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('bfg9000.tools.msvc.exists', mock_exists): # noqa pkg = context['boost_package']('thread') self.assertEqual(pkg.name, 'boost(thread)') self.assertEqual(pkg.version, Version('1.23')) self.assertEqual( pkg._compile_options, opts.option_list( opts.include_dir(HeaderDirectory(abspath(boost_incdir))))) self.assertEqual( pkg._link_options, opts.option_list( opts.lib_dir(Directory(abspath(r'C:\Boost\lib')))))
def test_clang(self): def mock_execute(args, **kwargs): if '--version' in args: return 'clang version 10.0.0' version = 'OVERVIEW: clang LLVM compiler' with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute): cc = MsvcBuilder(self.env, known_langs['c++'], ['cl'], True, 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('10.0.0')) self.assertEqual(cc.compiler.version, Version('10.0.0')) self.assertEqual(cc.pch_compiler.version, Version('10.0.0')) self.assertEqual(cc.linker('executable').version, Version('10.0.0')) self.assertEqual(cc.linker('shared_library').version, Version('10.0.0'))
def test_msvc(self): version = ('Microsoft (R) Windows (R) Resource Compiler Version ' + '10.0.10011.16384\n') with mock.patch('bfg9000.shell.which', mock_which): rc = MsvcRcBuilder(self.env, known_langs['rc'], ['rc'], version) self.assertEqual(rc.brand, 'msvc') self.assertEqual(rc.compiler.brand, 'msvc') self.assertEqual(rc.version, Version('10.0.10011.16384')) self.assertEqual(rc.compiler.version, Version('10.0.10011.16384'))
def test_gcc(self): version = ('GNU windres (GNU Binutils) 2.30\n' + 'Copyright (C) 2018 Free Software Foundation, Inc.') with mock.patch('bfg9000.shell.which', mock_which): rc = CcRcBuilder(self.env, known_langs['rc'], ['windres'], version) self.assertEqual(rc.brand, 'gcc') self.assertEqual(rc.compiler.brand, 'gcc') self.assertEqual(rc.version, Version('2.30')) self.assertEqual(rc.compiler.version, Version('2.30'))
def test_gnu_ar(self): def mock_execute(*args, **kwargs): return 'GNU ar (binutils) 2.26.1' with mock.patch('bfg9000.shell.execute', mock_execute): self.assertEqual(self.ar.brand, 'gnu') self.assertEqual(self.ar.version, Version('2.26.1'))
def test_lang(self): with mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('bfg9000.shell.which', mock_which): # noqa pkg = self.builtin_dict['package']('name', lang='c++') self.assertEqual(pkg.name, 'name') self.assertEqual(pkg.version, Version('1.2.3')) self.assertEqual(pkg.specifier, SpecifierSet()) self.assertEqual(pkg.static, False)
def test_scala(self): version = ('Scala code runner version 2.11.6 -- ' + 'Copyright 2002-2013, LAMP/EPFL') with mock.patch('bfg9000.shell.which', mock_which): # noqa jvm = JvmBuilder(self.env, known_langs['scala'], ['scalac'], version) self.assertEqual(jvm.brand, 'epfl') self.assertEqual(jvm.compiler.brand, 'epfl') self.assertEqual(jvm.linker('executable').brand, 'epfl') self.assertEqual(jvm.linker('shared_library').brand, 'epfl') self.assertEqual(jvm.version, Version('2.11.6')) self.assertEqual(jvm.compiler.version, Version('2.11.6')) self.assertEqual(jvm.linker('executable').version, Version('2.11.6')) self.assertEqual(jvm.linker('shared_library').version, Version('2.11.6'))
def test_kind(self): with mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('bfg9000.shell.which', mock_which): # noqa pkg = packages.package(self.env, 'name', kind='static') self.assertEqual(pkg.name, 'name') self.assertEqual(pkg.version, Version('1.2.3')) self.assertEqual(pkg.specifier, SpecifierSet()) self.assertEqual(pkg.static, True)
def test_posix(self): env = make_env('linux', clear_variables=True) def mock_exists(x): if (re.search(r'[/\\]boost[/\\]version.hpp$', x) or re.search(r'[/\\]libboost_thread', x) or x in ['/usr/include', '/usr/lib']): return True return False with mock.patch('bfg9000.builtins.packages._boost_version', return_value=Version('1.23')), \ mock.patch('bfg9000.shell.which', return_value=['command']), \ mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('os.path.exists', mock_exists): # noqa pkg = packages.boost_package(env, 'thread') self.assertEqual(pkg.name, 'boost(thread)') self.assertEqual(pkg.version, Version('1.23'))
def test_version(self): with mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('logging.log'): # noqa pkg = self.context['package']('name', version='>1.0') self.assertEqual(pkg.name, 'name') self.assertEqual(pkg.version, Version('1.2.3')) self.assertEqual(pkg.specifier, SpecifierSet('>1.0')) self.assertEqual(pkg.static, False)
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_boost_package(self): def mock_exists(x): x = x.string() return bool( re.search(r'[/\\]boost[/\\]version.hpp$', x) or re.search(r'[/\\]libboost_thread', x) or x in ['/usr/include', '/usr/lib']) with mock.patch('bfg9000.shell.execute', self.mock_execute), \ mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('logging.log'): pkg = self.context['package']('boost', 'thread') self.assertEqual(pkg.name, 'boost[thread]') self.assertEqual(pkg.version, Version('1.2.3')) with mock.patch('warnings.warn'): pkg = self.context['boost_package']('thread') self.assertEqual(pkg.name, 'boost[thread]') self.assertEqual(pkg.version, Version('1.2.3'))
def test_submodules_and_version(self): with mock.patch('bfg9000.shell.execute', self.mock_execute), \ mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('logging.log'): pkg = self.context['package']('name', 'submodule', '>1.0') self.assertEqual(pkg.name, 'name[submodule]') self.assertEqual(pkg.version, Version('1.2.3')) self.assertEqual(pkg.specifier, SpecifierSet('>1.0')) self.assertEqual(pkg.static, False) self.assertEqual(pkg.system, True)
def test_posix(self): env = make_env('linux', clear_variables=True) context = self._make_context(env) def mock_exists(x): x = x.string() return bool( re.search(r'[/\\]boost[/\\]version.hpp$', x) or re.search(r'[/\\]libboost_thread', x) or x in ['/usr/include', '/usr/lib']) with mock.patch('bfg9000.builtins.packages._boost_version', return_value=Version('1.23')), \ mock.patch('bfg9000.shell.which', return_value=['command']), \ mock.patch('bfg9000.shell.execute', mock_execute), \ mock.patch('bfg9000.tools.cc.exists', mock_exists): # noqa pkg = context['boost_package']('thread') self.assertEqual(pkg.name, 'boost(thread)') self.assertEqual(pkg.version, Version('1.23'))
def test_create(self): specifier = SpecifierSet('') with mock.patch('bfg9000.shell.execute', mock_execute): pkg = PkgConfigPackage('foo', 'elf', specifier, PackageKind.shared, self.tool) self.assertEqual(pkg.name, 'foo') self.assertEqual(pkg.format, 'elf') self.assertEqual(pkg.version, Version('1.0')) self.assertEqual(pkg.specifier, specifier) self.assertEqual(pkg.static, False)
def test_kind(self): with mock.patch('bfg9000.shell.execute', self.mock_execute), \ mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('logging.log'): pkg = self.context['package']('name', kind='static') self.assertEqual(pkg.name, 'name') self.assertEqual(pkg.version, Version('1.2.3')) self.assertEqual(pkg.specifier, SpecifierSet()) self.assertEqual(pkg.static, True) self.assertEqual(pkg.system, True)
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_msvc(self): version = ('Microsoft (R) C/C++ Optimizing Compiler Version ' + '19.12.25831 for x86') with mock.patch('bfg9000.shell.which', mock_which): cc = MsvcBuilder(self.env, known_langs['c++'], ['cl'], version) self.assertEqual(cc.brand, 'msvc') self.assertEqual(cc.compiler.brand, 'msvc') self.assertEqual(cc.pch_compiler.brand, 'msvc') self.assertEqual(cc.linker('executable').brand, 'msvc') self.assertEqual(cc.linker('shared_library').brand, 'msvc') self.assertEqual(cc.version, Version('19.12.25831')) self.assertEqual(cc.compiler.version, Version('19.12.25831')) self.assertEqual(cc.pch_compiler.version, Version('19.12.25831')) self.assertEqual( cc.linker('executable').version, Version('19.12.25831')) self.assertEqual( cc.linker('shared_library').version, Version('19.12.25831'))
def test_oracle(self): def mock_execute(*args, **kwargs): return ('java version "1.7.0_55"\n' + 'Java(TM) SE Runtime Environment (build 1.7.0_55-b13)') version = 'javac 1.7.0_55' with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute): # noqa jvm = JvmBuilder(self.env, known_langs['java'], ['javac'], version) self.assertEqual(jvm.brand, 'oracle') self.assertEqual(jvm.compiler.brand, 'oracle') self.assertEqual(jvm.linker('executable').brand, 'oracle') self.assertEqual(jvm.linker('shared_library').brand, 'oracle') self.assertEqual(jvm.version, Version('1.7.0')) self.assertEqual(jvm.compiler.version, Version('1.7.0')) self.assertEqual(jvm.linker('executable').version, Version('1.7.0')) self.assertEqual(jvm.linker('shared_library').version, Version('1.7.0'))
def test_openjdk(self): def mock_execute(*args, **kwargs): return ('openjdk version "1.8.0_151"\n' + 'OpenJDK Runtime Environment (build ' + '1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)') version = 'javac 1.8.0_151' with mock.patch('bfg9000.shell.which', mock_which), \ mock.patch('bfg9000.shell.execute', mock_execute): # noqa jvm = JvmBuilder(self.env, known_langs['java'], ['javac'], version) self.assertEqual(jvm.brand, 'openjdk') self.assertEqual(jvm.compiler.brand, 'openjdk') self.assertEqual(jvm.linker('executable').brand, 'openjdk') self.assertEqual(jvm.linker('shared_library').brand, 'openjdk') self.assertEqual(jvm.version, Version('1.8.0')) self.assertEqual(jvm.compiler.version, Version('1.8.0')) self.assertEqual(jvm.linker('executable').version, Version('1.8.0')) self.assertEqual(jvm.linker('shared_library').version, Version('1.8.0'))
def test_good(self): with mock.patch('bfg9000.shell.which', return_value=['command']), \ mock.patch('bfg9000.shell.execute', return_value='1.23'): self.assertEqual(version({}), Version('1.23'))
def test_boost_version(self): data = '#define BOOST_LIB_VERSION "1_23_4"\n' with mock.patch(mock_open_name, mock_open(read_data=data)): hdr = HeaderDirectory(abspath('path')) self.assertEqual(packages._boost_version(hdr, SpecifierSet('')), Version('1.23.4'))
def test_gnu_gold(self): version = 'GNU gold (GNU Binutils for Ubuntu 2.26.1) 1.11' ld = LdLinker(None, self.env, ['ld'], version) self.assertEqual(ld.brand, 'gold') self.assertEqual(ld.version, Version('1.11'))
def test_gnu_ld(self): version = 'GNU ld (GNU Binutils for Ubuntu) 2.26.1' ld = LdLinker(None, self.env, ['ld'], version) self.assertEqual(ld.brand, 'bfd') self.assertEqual(ld.version, Version('2.26.1'))