Exemple #1
0
    def test_mac_version_min(self):
        options = MockOptions({})
        settings = MockSettings({"os": "Macos"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertEqual("", expected)

        settings = MockSettings({"os": "Macos",
                                 "os.version": "10.13",
                                 "compiler.version": "12.0"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertIn("10.13", expected)

        with tools.environment_append({"CFLAGS": "-mmacosx-version-min=10.9"}):
            be = AutoToolsBuildEnvironment(conanfile)
            expected = be.vars["CFLAGS"]
            self.assertIn("10.9", expected)
            self.assertNotIn("10.13", expected)

        with tools.environment_append({"CXXFLAGS": "-mmacosx-version-min=10.9"}):
            be = AutoToolsBuildEnvironment(conanfile)
            expected = be.vars["CFLAGS"]
            self.assertNotIn("10.13", expected)
Exemple #2
0
    def test_toolchain_content(self):
        expected_content = textwrap.dedent('''\
            import qbs

            Project {
                Profile {
                    name: "conan_toolchain_profile"

                    /* detected via qbs-setup-toolchains */
                    cpp.cCompilerName: "gcc"
                    cpp.compilerName: "g++"
                    cpp.cxxCompilerName: "g++"
                    cpp.driverFlags: ["-march=armv7e-m", "-mtune=cortex-m4", "--specs=nosys.specs"]
                    cpp.platformCommonCompilerFlags: undefined
                    cpp.platformLinkerFlags: undefined
                    cpp.toolchainInstallPath: "/usr/bin"
                    cpp.toolchainPrefix: "arm-none-eabi-"
                    qbs.someBoolProp: true
                    qbs.someIntProp: 13
                    qbs.toolchain: ["gcc"]

                    /* deduced from environment */
                    qbs.sysroot: "/foo/bar/path"

                    /* conan settings */
                    qbs.buildVariant: "release"
                    qbs.architecture: "x86_64"
                    qbs.targetPlatform: "linux"
                    qbs.optimization: "small"
                    cpp.cxxLanguageVersion: "c++17"

                    /* package options */
                    cpp.positionIndependentCode: true
                }
            }''')

        conanfile = MockConanfileWithFolders(
            MockSettings({
                'compiler': 'gcc',
                'compiler.cppstd': 17,
                'os': 'Linux',
                'build_type': 'MinSizeRel',
                'arch': 'x86_64'
            }),
            options=MockOptions({
                'fPIC': True
            }),
            runner=RunnerMock(
                expectations=[
                    RunnerMock.Expectation(),
                    RunnerMock.Expectation(
                        output=self._generate_qbs_config_output()),
                ]))

        with tools.environment_append({'SYSROOT': '/foo/bar/path'}):
            qbs_toolchain = qbs.QbsProfile(conanfile)

        self.assertEqual(qbs_toolchain.content, expected_content)
Exemple #3
0
def test_fpic():
    conanfile = ConanFileMock()
    conanfile.settings = MockSettings({"os": "Linux"})
    conanfile.options = MockOptions({"fPIC": True})
    be = AutotoolsToolchain(conanfile)
    be.vars()
    assert be.fpic is True
    assert "-fPIC" in be.cxxflags

    conanfile.options = MockOptions({"fPIC": False})
    be = AutotoolsToolchain(conanfile)
    be.vars()
    assert be.fpic is False
    assert "-fPIC" not in be.cxxflags

    conanfile.options = MockOptions({"shared": False})
    be = AutotoolsToolchain(conanfile)
    be.vars()
    assert be.fpic is None
    assert "-fPIC" not in be.cxxflags
Exemple #4
0
    def test_detect_fpic_from_options(self):
        f_pic = {True: 'true', False: 'false', None: None}

        for option, value in f_pic.items():
            conanfile = MockConanfileWithFolders(
                MockSettings({
                    'os': 'Linux',
                    'compiler': 'gcc'
                }), MockOptions({'fPIC': option}))

            qbs_toolchain = qbs.QbsToolchain(conanfile)
            self.assertEqual(qbs_toolchain._position_independent_code, value)
Exemple #5
0
def test_is_msvc_static_runtime(compiler, shared, runtime, build_type,
                                expected):
    options = MockOptions({"shared": shared})
    settings = MockSettings({
        "build_type": build_type,
        "arch": "x86_64",
        "compiler": compiler,
        "compiler.runtime": runtime,
        "compiler.version": "17",
        "cppstd": "17"
    })
    conanfile = MockConanfile(settings, options)
    assert is_msvc_static_runtime(conanfile) == expected
    def test_toolchain_content_msvc(self):
        expected_content = textwrap.dedent('''\
            import qbs

            Project {
                Profile {
                    name: "conan_toolchain_profile"

                    /* detected via qbs-setup-toolchains */
                    cpp.compilerVersion: "19.28.29333"
                    cpp.toolchainInstallPath: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64"
                    qbs.architecture: "x86_64"
                    qbs.targetPlatform: "windows"
                    qbs.toolchainType: "msvc"
                    cpp.driverFlags: ["-march=armv7e-m", "-mtune=cortex-m4", "--specs=nosys.specs"]
                    qbs.someBoolProp: true
                    qbs.someIntProp: 13

                    /* deduced from environment */
                    qbs.sysroot: "/foo/bar/path"

                    /* conan settings */
                    qbs.buildVariant: "release"
                    qbs.optimization: "small"
                    cpp.runtimeLibrary: "dynamic"

                    /* package options */
                    cpp.positionIndependentCode: true
                }
            }''')

        conanfile = MockConanfileWithFolders(
            MockSettings({
                'compiler': 'Visual Studio',
                'compiler.version': 15,
                'compiler.runtime': 'MD',
                'os': 'Windows',
                'build_type': 'MinSizeRel',
                'arch': 'x86_64',
            }),
            options=MockOptions({'fPIC': True}),
            runner=RunnerMock(expectations=[
                RunnerMock.Expectation(),
                RunnerMock.Expectation(
                    output=self._generate_qbs_config_output_msvc()),
            ]))

        with tools.environment_append({'SYSROOT': '/foo/bar/path'}):
            qbs_toolchain = qbs.QbsProfile(conanfile)

        self.assertEqual(qbs_toolchain.content, expected_content)
Exemple #7
0
def test_bazeldeps_shared_library_interface_buildfiles():

    cpp_info = CppInfo("mypkg", "dummy_root_folder2")
    cpp_info.libs = ["lib1"]

    options = MockOptions({"shared": True})
    conanfile_dep = MockConanFileDeps(ConanFileDependencies({}), Mock(), None)
    conanfile_dep.options = options
    conanfile_dep.cpp_info = cpp_info
    conanfile_dep._conan_node = Mock()
    conanfile_dep.folders.set_base_package(temp_folder())
    conanfile_dep._conan_node.ref = ConanFileReference.loads(
        "OriginalDepName/1.0")

    package_folder = temp_folder()
    save(os.path.join(package_folder, "lib", "lib1.lib"), "")
    save(os.path.join(package_folder, "bin", "lib1.dll"), "")
    conanfile_dep.folders.set_base_package(package_folder)

    req = Requirement(ConanFileReference.loads("OriginalDepName/1.0"))
    mock_deps = ConanFileDependencies({req: ConanFileInterface(conanfile_dep)})
    conanfile = MockConanFileDeps(mock_deps, Mock(), None)

    bazeldeps = BazelDeps(conanfile)

    dependency = next(iter(bazeldeps._conanfile.dependencies.host.values()))
    dependency_content = re.sub(
        r"\s", "", bazeldeps._get_dependency_buildfile_content(dependency))
    expected_content = """
load("@rules_cc//cc:defs.bzl","cc_import","cc_library")

cc_import(
    name = "lib1_precompiled",
    interface_library = "lib/lib1.lib",
    shared_library = "bin/lib1.dll",
)

cc_library(
    name = "OriginalDepName",
    hdrs=glob(["include/**"]),
    includes=["include"],
    visibility=["//visibility:public"],
    deps = [
        ":lib1_precompiled",
    ],
)
"""
    assert (dependency_content == re.sub(r"\s", "", expected_content))
Exemple #8
0
    def test_autotools_fpic(self):
        runner = None
        settings = MockSettings({"os": "Linux"})
        options = MockOptions({"fPIC": True, "shared": False})
        conanfile = MockConanfile(settings, options, runner)
        ab = AutoToolsBuildEnvironment(conanfile)
        self.assertTrue(ab.fpic)

        options = MockOptions({"fPIC": True, "shared": True})
        conanfile = MockConanfile(settings, options, runner)
        ab = AutoToolsBuildEnvironment(conanfile)
        self.assertTrue(ab.fpic)

        options = MockOptions({"fPIC": False, "shared": True})
        conanfile = MockConanfile(settings, options, runner)
        ab = AutoToolsBuildEnvironment(conanfile)
        self.assertTrue(ab.fpic)

        options = MockOptions({"fPIC": False, "shared": False})
        conanfile = MockConanfile(settings, options, runner)
        ab = AutoToolsBuildEnvironment(conanfile)
        self.assertFalse(ab.fpic)

        settings = MockSettings({"os": "Windows"})
        options = MockOptions({"fPIC": True, "shared": True})
        conanfile = MockConanfile(settings, options, runner)
        ab = AutoToolsBuildEnvironment(conanfile)
        self.assertFalse(ab.fpic)

        settings = MockSettings({"os": "Macos", "compiler": "clang"})
        options = MockOptions({"fPIC": False, "shared": False})
        conanfile = MockConanfile(settings, options, runner)
        ab = AutoToolsBuildEnvironment(conanfile)
        self.assertFalse(ab.fpic)
        ab.fpic = True
        self.assertIn("-fPIC", ab.vars["CXXFLAGS"])
Exemple #9
0
    def test_cppstd(self):
        options = MockOptions({})
        # Valid one for GCC
        settings = MockSettings({"build_type": "Release",
                                 "arch": "x86",
                                 "compiler": "gcc",
                                 "compiler.libcxx": "libstdc++11",
                                 "compiler.version": "7.1",
                                 "cppstd": "17"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertIn("-std=c++17", expected)

        # Invalid one for GCC
        settings = MockSettings({"build_type": "Release",
                                 "arch": "x86",
                                 "compiler": "gcc",
                                 "compiler.libcxx": "libstdc++11",
                                 "compiler.version": "4.9",
                                 "cppstd": "17"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertNotIn("-std", expected)

        # Valid one for Clang
        settings = MockSettings({"build_type": "Release",
                                 "arch": "x86",
                                 "compiler": "clang",
                                 "compiler.libcxx": "libstdc++11",
                                 "compiler.version": "4.0",
                                 "cppstd": "17"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertIn("-std=c++1z", expected)

        # Invalid one for Clang
        settings = MockSettings({"build_type": "Release",
                                 "arch": "x86",
                                 "compiler": "clang",
                                 "compiler.libcxx": "libstdc++11",
                                 "compiler.version": "3.3",
                                 "cppstd": "17"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertNotIn("-std=", expected)

        # Visual Activate 11 is useless
        settings = MockSettings({"build_type": "Release",
                                 "arch": "x86",
                                 "compiler": "Visual Studio",
                                 "compiler.version": "15",
                                 "cppstd": "11"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertNotIn("-std=c++", expected)

        # Visual Activate 17 in VS 2017
        settings = MockSettings({"build_type": "Release",
                                 "arch": "x86",
                                 "compiler": "Visual Studio",
                                 "compiler.version": "15",
                                 "cppstd": "17"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertIn("/std:c++17", expected)

        # Visual Activate 17 in VS 2015
        settings = MockSettings({"build_type": "Release",
                                 "arch": "x86",
                                 "compiler": "Visual Studio",
                                 "compiler.version": "14",
                                 "cppstd": "17"})
        conanfile = MockConanfile(settings, options)
        be = AutoToolsBuildEnvironment(conanfile)
        expected = be.vars["CXXFLAGS"]
        self.assertIn("/std:c++latest", expected)