def test_output_file(self): self.assertEqual(self.linker.output_file('file', None), file_types.Library(Path('file.jar'), 'jvm', 'java')) self.assertEqual( self.linker.output_file( 'file', AttrDict(options=opts.option_list(opts.entry_point('foo')))), file_types.ExecutableLibrary(Path('file.jar'), 'jvm', 'java'))
def test_lib_flags_lib(self): lib = Path('/path/to/lib/libfoo.a') # Shared library self.assertEqual( self.linker.lib_flags( opts.option_list( opts.lib(file_types.SharedLibrary(lib, 'native')))), ['-lfoo']) self.assertEqual( self.linker.lib_flags(opts.option_list( opts.lib(file_types.SharedLibrary(lib, 'native'))), mode='pkg-config'), ['-lfoo']) # Static library self.assertEqual( self.linker.lib_flags( opts.option_list( opts.lib(file_types.StaticLibrary(lib, 'native')))), [lib]) self.assertEqual( self.linker.lib_flags(opts.option_list( opts.lib(file_types.StaticLibrary(lib, 'native'))), mode='pkg-config'), ['-lfoo']) # Whole archive flags = self.linker.lib_flags( opts.option_list( opts.lib( file_types.WholeArchive( file_types.StaticLibrary(lib, 'native'))))) if self.env.target_platform.name == 'darwin': self.assertEqual(flags, ['-Wl,-force_load', lib]) else: self.assertEqual( flags, ['-Wl,--whole-archive', lib, '-Wl,--no-whole-archive']) # Generic library self.assertEqual( self.linker.lib_flags( opts.option_list(opts.lib(file_types.Library(lib, 'native')))), ['-lfoo']) mingw_lib = Path('/path/to/lib/foo.lib') self.assertEqual( self.linker.lib_flags( opts.option_list( opts.lib(file_types.Library(mingw_lib, 'native')))), [mingw_lib]) with self.assertRaises(ValueError): self.linker.lib_flags(opts.option_list( opts.lib(file_types.Library(mingw_lib, 'native'))), mode='pkg-config') # Framework fw = opts.lib(Framework('cocoa')) if self.env.target_platform.name == 'darwin': self.assertEqual(self.linker.lib_flags(opts.option_list(fw)), ['-framework', 'cocoa']) else: with self.assertRaises(TypeError): self.linker.lib_flags(opts.option_list(fw)) # String self.assertEqual( self.linker.lib_flags(opts.option_list(opts.lib('foo'))), ['-lfoo'])
def test_flags_lib_dir(self): libdir = Path('/path/to/lib') lib = Path('/path/to/lib/libfoo.a') output = file_types.Executable(Path('exe'), 'native') if self.env.target_platform.name == 'linux': rpath = rpath_with_output = ['-Wl,-rpath,' + libdir] elif self.env.target_platform.name == 'darwin': rpath = [] rpath_with_output = [jbos('-Wl,-rpath,', '@loader_path')] else: rpath = rpath_with_output = [] # Lib dir self.assertEqual( self.linker.flags( opts.option_list(opts.lib_dir(file_types.Directory(libdir)))), ['-L' + libdir]) # Shared library self.assertEqual( self.linker.flags( opts.option_list( opts.lib(file_types.SharedLibrary(lib, 'native')))), ['-L' + libdir] + rpath) self.assertEqual( self.linker.flags( opts.option_list( opts.lib(file_types.SharedLibrary(lib, 'native'))), output), ['-L' + libdir] + rpath_with_output) if self.env.target_platform.name == 'linux': libdir2 = Path('foo') lib2 = Path('foo/libbar.a') with self.assertRaises(ValueError): self.linker.flags( opts.option_list( opts.lib(file_types.SharedLibrary(lib2, 'native')))) self.assertEqual( self.linker.flags( opts.option_list( opts.lib(file_types.SharedLibrary(lib2, 'native'))), output), ['-L' + libdir2, jbos('-Wl,-rpath,', '$ORIGIN/foo')]) # Static library self.assertEqual( self.linker.flags( opts.option_list( opts.lib(file_types.StaticLibrary(lib, 'native')))), []) self.assertEqual( self.linker.flags(opts.option_list( opts.lib(file_types.StaticLibrary(lib, 'native'))), mode='pkg-config'), ['-L' + libdir]) # Generic library self.assertEqual( self.linker.flags( opts.option_list(opts.lib(file_types.Library(lib, 'native')))), ['-L' + libdir]) mingw_lib = Path('/path/to/lib/foo.lib') self.assertEqual( self.linker.flags( opts.option_list( opts.lib(file_types.Library(mingw_lib, 'native')))), []) with self.assertRaises(ValueError): self.linker.flags(opts.option_list( opts.lib(file_types.Library(mingw_lib, 'native'))), mode='pkg-config') # Framework self.assertEqual( self.linker.flags(opts.option_list(opts.lib(Framework('cocoa')))), []) # Mixed self.assertEqual( self.linker.flags( opts.option_list( opts.lib_dir(file_types.Directory(libdir)), opts.lib(file_types.SharedLibrary(lib, 'native')))), ['-L' + libdir] + rpath) self.assertEqual( self.linker.flags( opts.option_list( opts.lib_dir(file_types.Directory(libdir)), opts.lib(file_types.SharedLibrary(lib, 'native'))), output), ['-L' + libdir] + rpath_with_output)