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)
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)
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
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)
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)
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))
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"])
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)