Example #1
0
 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'))
Example #2
0
    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'])
Example #3
0
    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)