def test_flags_warning(self): self.assertEqual( self.compiler.flags(opts.option_list(opts.warning('disable'))), ['-w']) with self.assertRaises(ValueError): self.compiler.flags(opts.option_list(opts.warning('all')))
def test_empty(self): self.assertEqual( post_install(self.env, opts.option_list(), self.exe, self.install_db), None) self.assertEqual( post_install(self.env, opts.option_list(opts.debug()), self.exe, self.install_db), None)
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_flags_debug(self): self.assertEqual(self.compiler.flags(opts.option_list( opts.debug() )), ['/Zi', '/MDd']) self.assertEqual(self.compiler.flags(opts.option_list( opts.debug(), opts.static() )), ['/Zi', '/MTd'])
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_post_installed_macos(self): output = self._get_output_file() installed = installify(output).path deplib = SharedLibrary(self.Path('libfoo.so'), 'native') install_outputs = MockInstallOutputs(self.env) with mock.patch('bfg9000.shell.which', return_value=['command']): install_name_tool = self.env.tool('install_name_tool') # No runtime deps fn = self.linker.post_install(opts.option_list(), output, None) self.assertEqual(fn(install_outputs), [ install_name_tool, '-id', installed.cross(self.env), installed ] if self.shared else None) fn = self.linker.post_install(opts.option_list( opts.install_name_change('old.dylib', 'new.dylib') ), output, None) self.assertEqual(fn(install_outputs), ( [install_name_tool] + (['-id', installed.cross(self.env)] if self.shared else []) + ['-change', 'old.dylib', 'new.dylib', installed] )) # Dependent on local shared lib output.runtime_deps = [deplib] fn = self.linker.post_install( opts.option_list(opts.lib(deplib)), output, None ) self.assertEqual(fn(install_outputs), ( [install_name_tool] + (['-id', installed.cross(self.env)] if self.shared else []) + ['-change', deplib.path.string(self.env.base_dirs), installify(deplib, cross=self.env).path, installed] ))
def test_flags_lib_dir(self): libdir = self.Path('/path/to/lib') lib = self.Path('/path/to/lib/foo.so') # Lib dir self.assertEqual( self.linker.flags(opts.option_list(opts.lib_dir( Directory(libdir)))), ['/LIBPATH:' + libdir]) self.assertEqual( self.linker.flags(opts.option_list(opts.lib_dir( Directory(libdir))), mode='pkg-config'), ['-L' + libdir]) # Shared library self.assertEqual( self.linker.flags( opts.option_list(opts.lib(SharedLibrary(lib, 'native')))), []) # Static library self.assertEqual( self.linker.flags( opts.option_list(opts.lib(StaticLibrary(lib, 'native')))), []) # Mixed self.assertEqual( self.linker.flags( opts.option_list(opts.lib_dir(Directory(libdir)), opts.lib(SharedLibrary(lib, 'native')))), ['/LIBPATH:' + libdir])
def test_flags_define(self): self.assertEqual(self.compiler.flags(opts.option_list( opts.define('NAME') )), ['-DNAME']) self.assertEqual(self.compiler.flags(opts.option_list( opts.define('NAME', 'value') )), ['-DNAME=value'])
def test_lib_flags_lib(self): lib = self.Path('/path/to/lib/foo.lib') self.assertEqual( self.linker.lib_flags( opts.option_list(opts.lib(SharedLibrary(lib, 'native')))), [lib]) self.assertEqual( self.linker.lib_flags(opts.option_list( opts.lib(SharedLibrary(lib, 'native'))), mode='pkg-config'), ['-lfoo']) self.assertEqual( self.linker.lib_flags( opts.option_list( opts.lib(WholeArchive(SharedLibrary(lib, 'native'))))), ['/WHOLEARCHIVE:' + lib]) version = ('Microsoft (R) C/C++ Optimizing Compiler Version ' + '18.00.25831 for x86') with mock.patch('bfg9000.shell.which', mock_which): linker = MsvcBuilder(self.env, known_langs['c++'], ['cl'], version).linker('executable') with self.assertRaises(TypeError): linker.lib_flags( opts.option_list( opts.lib(WholeArchive(StaticLibrary(lib, 'native'))))) with self.assertRaises(TypeError): self.linker.lib_flags( opts.option_list(opts.lib(Framework('cocoa'))))
def test_extend(self): opts = options.option_list() opts.extend([options.pthread(), options.pic()]) self.assertEqual(list(opts), [options.pthread(), options.pic()]) opts = options.option_list(options.pthread()) opts.extend([options.pthread(), options.pic()]) self.assertEqual(list(opts), [options.pthread(), options.pic()])
def test_flags_entry_point(self): java_linker = self._get_linker('java') self.assertEqual( java_linker.flags(opts.option_list(opts.entry_point('Main'))), ['--main=Main']) with self.assertRaises(ValueError): self.linker.flags(opts.option_list(opts.entry_point('Main')))
def test_flags_include_dir(self): p = self.Path('/path/to/include') self.assertEqual(self.compiler.flags(opts.option_list( opts.include_dir(HeaderDirectory(p)) )), ['/I' + p, '/MD']) self.assertEqual(self.compiler.flags(opts.option_list( opts.include_dir(HeaderDirectory(p)) ), mode='pkg-config'), ['-I' + p])
def test_bool(self): opts = options.option_list() self.assertFalse(opts) opts = options.option_list(options.pthread()) self.assertTrue(opts) opts = options.option_list(options.pthread(), options.pic()) self.assertEqual(len(opts), 2)
def test_len(self): opts = options.option_list() self.assertEqual(len(opts), 0) opts = options.option_list(options.pthread()) self.assertEqual(len(opts), 1) opts = options.option_list(options.pthread(), options.pic()) self.assertEqual(len(opts), 2)
def test_add(self): opts1 = options.option_list(options.pthread()) opts2 = options.option_list(options.pthread()) opts3 = options.option_list(options.pic()) self.assertEqual(opts1 + opts2 + opts3, options.option_list(options.pthread(), options.pic())) with self.assertRaises(TypeError): opts1 + [options.pic()]
def test_filled(self): opts = options.option_list(options.pthread()) self.assertEqual(list(opts), [options.pthread()]) opts = options.option_list([options.pthread()]) self.assertEqual(list(opts), [options.pthread()]) opts = options.option_list(options.pthread(), [options.pic()]) self.assertEqual(list(opts), [options.pthread(), options.pic()])
def test_flags_entry_point(self): java_linker = self._get_linker('java') self.assertEqual(java_linker.flags(opts.option_list( opts.entry_point('symbol') )), ['--main=symbol']) self.assertEqual(self.linker.flags(opts.option_list( opts.entry_point('symbol') )), ['-Wl,-e,symbol'])
def test_iadd(self): opts = options.option_list(options.pthread()) opts += options.option_list(options.pthread()) opts += options.option_list(options.pic()) self.assertEqual(opts, options.option_list(options.pthread(), options.pic())) with self.assertRaises(TypeError): opts += [options.pic()]
def test_eq(self): opts1 = options.option_list(options.pthread()) opts2 = options.option_list(options.pthread()) opts3 = options.option_list(options.pic()) self.assertTrue(opts1 == opts2) self.assertFalse(opts1 != opts2) self.assertFalse(opts1 == opts3) self.assertTrue(opts1 != opts3)
def test_index(self): opts = options.option_list(options.pthread(), options.pic()) self.assertEqual(opts[0], options.pthread()) self.assertEqual(opts[0:1], options.option_list(options.pthread())) opts[0] = '-v' self.assertEqual(opts, options.option_list('-v', options.pic())) opts[0:] = [options.define('name')] self.assertEqual(opts, options.option_list(options.define('name')))
def test_flags_static(self): self.assertEqual(self.compiler.flags(opts.option_list(opts.static())), ['/MT']) self.assertEqual( self.compiler.flags( opts.option_list(), opts.option_list(opts.static()), ), ['/MT'])
def test_append(self): opts = options.option_list() opts.append(options.pthread()) opts.append(options.pthread()) self.assertEqual(list(opts), [options.pthread()]) opts = options.option_list() opts.append('-v') opts.append('-v') self.assertEqual(list(opts), ['-v', '-v'])
def check_package(self, pkg): self.assertEqual(pkg.name, 'foo') self.assertEqual(pkg.compile_options(self.compiler), option_list( '/DMACRO', opts.include_dir(HeaderDirectory(Path('/path'))) )) self.assertEqual(pkg.link_options(self.linker), option_list( '/DEBUG', opts.lib_dir(Directory(Path('/path'))), opts.lib_literal('foo.lib'), (opts.rpath_dir(Path('/path')) if self.platform_name == 'linux' else None) ))
def test_flags_lib(self): lib1 = self.Path('/path/to/lib/libfoo.jar') lib2 = self.Path('/path/to/lib/libbar.jar') self.assertEqual(self.compiler.flags(opts.option_list( opts.lib(file_types.StaticLibrary(lib1, 'jvm')) )), ['-cp', lib1]) self.assertEqual(self.compiler.flags(opts.option_list( opts.lib(file_types.StaticLibrary(lib1, 'jvm')), opts.lib(file_types.StaticLibrary(lib2, 'jvm')) )), ['-cp', lib1 + os.pathsep + lib2])
def test_flags_debug(self): self.assertEqual(self.compiler.flags(opts.option_list(opts.debug())), ['-g']) version = ('Scala code runner version 2.11.6 -- ' + 'Copyright 2002-2013, LAMP/EPFL') with mock.patch('bfg9000.shell.which', mock_which): scala_compiler = JvmBuilder(self.env, known_langs['scala'], ['scalac'], True, version).compiler self.assertEqual(scala_compiler.flags(opts.option_list(opts.debug())), ['-g:vars'])
def test_include_order(self): incdir = opts.include_dir( file_types.HeaderDirectory(Path('include', Root.srcdir))) pkg_incdir = opts.include_dir( file_types.HeaderDirectory(Path('/usr/include', Root.absolute))) pkg = CommonPackage('pkg', None, opts.option_list(pkg_incdir)) result = self.context['object_file'](file='main.cpp', includes='include', packages=pkg) self.assertEqual(result.creator.options, opts.option_list(incdir, pkg_incdir))
def test_flags_rpath(self): p1 = Path('path1') p2 = Path('path2') self.assertEqual( self.linker.flags(opts.option_list(opts.rpath_dir(p1))), ['-Wl,-rpath,' + p1]) self.assertEqual( self.linker.flags( opts.option_list(opts.rpath_dir(p1), opts.rpath_dir(p2))), ['-Wl,-rpath,' + p1 + ':' + p2])
def test_flags_rpath_link(self): p1 = self.Path('/path/to/lib') p2 = self.Path('/path/to/another/lib') self.assertEqual(self.linker.flags(opts.option_list( opts.rpath_link_dir(p1) )), ['-Wl,-rpath-link,' + p1]) self.assertEqual(self.linker.flags(opts.option_list( opts.rpath_link_dir(p1), opts.rpath_link_dir(p2) )), ['-Wl,-rpath-link,' + p1 + ':' + p2])
def test_default_name(self): src = SourceFile(Path('file.l', Root.srcdir), 'yacc') self.assertEqual(self.compiler.default_name(src, None), ['file.tab.c', 'file.tab.h']) self.assertEqual(self.compiler.default_name(src, AttrDict( user_options=opts.option_list(opts.lang('c++')) )), ['file.tab.cpp', 'file.tab.hpp']) with self.assertRaises(ValueError): self.compiler.default_name(src, AttrDict( user_options=opts.option_list(opts.lang('java')) ))
def test_lib_order(self): fmt = self.env.target_platform.object_format lib = opts.lib( file_types.SharedLibrary(Path('libfoo', Root.srcdir), fmt)) pkg_libdir = opts.lib_dir( file_types.Directory(Path('/usr/lib', Root.absolute))) pkg = CommonPackage('pkg', fmt, None, opts.option_list(pkg_libdir)) result = self.context['shared_library']('shared', ['main.cpp'], libs='libfoo', packages=pkg) self.assertEqual(result.creator.options, opts.option_list(lib, pkg_libdir))