Ejemplo n.º 1
0
    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')))
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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')))))
Ejemplo n.º 4
0
 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'])
Ejemplo n.º 5
0
    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')))))
Ejemplo n.º 6
0
    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]
            ))
Ejemplo n.º 7
0
    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])
Ejemplo n.º 8
0
 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'])
Ejemplo n.º 9
0
    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'))))
Ejemplo n.º 10
0
    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()])
Ejemplo n.º 11
0
    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')))
Ejemplo n.º 12
0
 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])
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
    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()]
Ejemplo n.º 16
0
    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()])
Ejemplo n.º 17
0
    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'])
Ejemplo n.º 18
0
    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()]
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
    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')))
Ejemplo n.º 21
0
    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'])
Ejemplo n.º 22
0
    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'])
Ejemplo n.º 23
0
 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)
     ))
Ejemplo n.º 24
0
    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])
Ejemplo n.º 25
0
    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'])
Ejemplo n.º 26
0
    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))
Ejemplo n.º 27
0
    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])
Ejemplo n.º 28
0
    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])
Ejemplo n.º 29
0
    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'))
            ))
Ejemplo n.º 30
0
    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))