Пример #1
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')))))
Пример #2
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')))))
Пример #3
0
    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'))
Пример #4
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'))
Пример #5
0
    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'))
Пример #6
0
    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'))
Пример #7
0
 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)
Пример #8
0
    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'))
Пример #9
0
 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)
Пример #10
0
    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'))
Пример #11
0
 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)
Пример #12
0
    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'))
Пример #13
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'))
Пример #14
0
 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)
Пример #15
0
    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'))
Пример #16
0
 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)
Пример #17
0
 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)
Пример #18
0
    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'))
Пример #19
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'))
Пример #20
0
    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'))
Пример #21
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'))
Пример #22
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'))
Пример #23
0
 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'))
Пример #24
0
    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'))
Пример #25
0
    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'))