Esempio n. 1
0
    def variables_setup_test(self):
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())

        # Add some cpp_info for dependencies
        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.cflags.append("-Flag1=23")
        cpp_info.version = "1.3"
        cpp_info.description = "My cool description"
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder2")
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.version = "2.3"
        cpp_info.exelinkflags = ["-exelinkflag"]
        cpp_info.sharedlinkflags = ["-sharedlinkflag"]
        cpp_info.cxxflags = ["-cxxflag"]
        cpp_info.public_deps = ["MyPkg"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        # Add env_info
        env_info = EnvInfo()
        env_info.VAR1 = "env_info-value1"
        env_info.PATH.append("path-extended")
        conanfile.deps_env_info.update(env_info, "env_info_pkg")

        # Add user_info
        user_info = UserInfo()
        user_info.VAR1 = "user_info-value1"
        conanfile.deps_user_info["user_info_pkg"] = user_info

        # Add user_info_build
        conanfile.user_info_build = DepsUserInfo()
        user_info = UserInfo()
        user_info.VAR1 = "user_info_build-value1"
        conanfile.user_info_build["user_info_build_pkg"] = user_info

        generator = JsonGenerator(conanfile)
        json_out = generator.content
        parsed = json.loads(json_out)

        # Check dependencies
        dependencies = parsed["dependencies"]
        self.assertEqual(len(dependencies), 2)
        my_pkg = dependencies[0]
        self.assertEqual(my_pkg["name"], "MyPkg")
        self.assertEqual(my_pkg["description"], "My cool description")
        self.assertEqual(my_pkg["defines"], ["MYDEFINE1"])

        # Check env_info
        env_info = parsed["deps_env_info"]
        self.assertListEqual(sorted(env_info.keys()), sorted(["VAR1", "PATH"]))
        self.assertEqual(env_info["VAR1"], "env_info-value1")
        self.assertListEqual(env_info["PATH"], ["path-extended"])

        # Check user_info
        user_info = parsed["deps_user_info"]
        self.assertListEqual(list(user_info.keys()), ["user_info_pkg"])
        self.assertListEqual(list(user_info["user_info_pkg"].keys()), ["VAR1"])
        self.assertEqual(user_info["user_info_pkg"]["VAR1"],
                         "user_info-value1")

        # Check user_info_build
        user_info_build = parsed["user_info_build"]
        self.assertListEqual(list(user_info_build.keys()),
                             ["user_info_build_pkg"])
        self.assertListEqual(
            list(user_info_build["user_info_build_pkg"].keys()), ["VAR1"])
        self.assertEqual(user_info_build["user_info_build_pkg"]["VAR1"],
                         "user_info_build-value1")
Esempio n. 2
0
def test_make_generator():
    tmp_folder1 = temp_folder()
    tmp_folder2 = temp_folder()
    save(os.path.join(tmp_folder1, "include1", "file.h"), "")
    save(os.path.join(tmp_folder2, "include2", "file.h"), "")
    save(os.path.join(tmp_folder1, "lib1", "file.a"), "")
    save(os.path.join(tmp_folder2, "lib2", "file.a"), "")
    save(os.path.join(tmp_folder1, "bin1", "file.bin"), "")
    save(os.path.join(tmp_folder2, "bin2", "file.bin"), "")
    save(os.path.join(tmp_folder1, "SystemFrameworks", "file.bin"), "")

    conanfile = ConanFile(TestBufferConanOutput(), None)
    conanfile.initialize(Settings({}), EnvValues())
    ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables")
    cpp_info = CppInfo(ref.name, tmp_folder1)
    cpp_info.defines = ["MYDEFINE1"]
    cpp_info.includedirs = ['include1']
    cpp_info.libdirs = ['lib1']
    cpp_info.libs = ['libfoo']
    cpp_info.bindirs = ['bin1']
    cpp_info.version = "0.1"
    cpp_info.cflags = ['-fgimple']
    cpp_info.cxxflags = ['-fdollars-in-identifiers']
    cpp_info.sharedlinkflags = ['-framework Cocoa']
    cpp_info.exelinkflags = ['-framework QuartzCore']
    cpp_info.frameworks = ['AudioUnit']
    cpp_info.frameworkdirs = ['SystemFrameworks']
    cpp_info.system_libs = ["system_lib1"]
    conanfile.deps_cpp_info.add(ref.name, cpp_info)
    ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables")
    cpp_info = CppInfo(ref.name, tmp_folder2)
    cpp_info.defines = ["MYDEFINE2"]
    cpp_info.includedirs = ['include2']
    cpp_info.libdirs = ['lib2']
    cpp_info.libs = ['libbar']
    cpp_info.bindirs = ['bin2']
    cpp_info.version = "3.2.3"
    cpp_info.cflags = ['-fno-asm']
    cpp_info.cxxflags = ['-pthread']
    cpp_info.sharedlinkflags = ['-framework AudioFoundation']
    cpp_info.exelinkflags = ['-framework VideoToolbox']
    cpp_info.system_libs = ["system_lib2"]
    conanfile.deps_cpp_info.add(ref.name, cpp_info)
    generator = MakeGenerator(conanfile)
    content = generator.content

    content_template = """
CONAN_ROOT_MYPKG1 ?=  \\
{conan_root_mypkg1}

CONAN_SYSROOT_MYPKG1 ?=  \\


CONAN_INCLUDE_DIRS_MYPKG1 +=  \\
{conan_include_dirs_mypkg1}

CONAN_LIB_DIRS_MYPKG1 +=  \\
{conan_lib_dirs_mypkg1}

CONAN_BIN_DIRS_MYPKG1 +=  \\
{conan_bin_dirs_mypkg1}

CONAN_BUILD_DIRS_MYPKG1 +=  \\
{conan_build_dirs_mypkg1}/

CONAN_RES_DIRS_MYPKG1 +=

CONAN_LIBS_MYPKG1 +=  \\
libfoo

CONAN_SYSTEM_LIBS_MYPKG1 +=  \\
system_lib1

CONAN_DEFINES_MYPKG1 +=  \\
MYDEFINE1

CONAN_CFLAGS_MYPKG1 +=  \\
-fgimple

CONAN_CXXFLAGS_MYPKG1 +=  \\
-fdollars-in-identifiers

CONAN_SHAREDLINKFLAGS_MYPKG1 +=  \\
-framework Cocoa

CONAN_EXELINKFLAGS_MYPKG1 +=  \\
-framework QuartzCore

CONAN_FRAMEWORKS_MYPKG1 +=  \\
AudioUnit

CONAN_FRAMEWORK_PATHS_MYPKG1 +=  \\
{conan_framework_dirs_mypkg1}/SystemFrameworks

CONAN_ROOT_MYPKG2 ?=  \\
{conan_root_mypkg2}

CONAN_SYSROOT_MYPKG2 ?=  \\


CONAN_INCLUDE_DIRS_MYPKG2 +=  \\
{conan_include_dirs_mypkg2}

CONAN_LIB_DIRS_MYPKG2 +=  \\
{conan_lib_dirs_mypkg2}

CONAN_BIN_DIRS_MYPKG2 +=  \\
{conan_bin_dirs_mypkg2}

CONAN_BUILD_DIRS_MYPKG2 +=  \\
{conan_build_dirs_mypkg2}/

CONAN_RES_DIRS_MYPKG2 +=

CONAN_LIBS_MYPKG2 +=  \\
libbar

CONAN_SYSTEM_LIBS_MYPKG2 +=  \\
system_lib2

CONAN_DEFINES_MYPKG2 +=  \\
MYDEFINE2

CONAN_CFLAGS_MYPKG2 +=  \\
-fno-asm

CONAN_CXXFLAGS_MYPKG2 +=  \\
-pthread

CONAN_SHAREDLINKFLAGS_MYPKG2 +=  \\
-framework AudioFoundation

CONAN_EXELINKFLAGS_MYPKG2 +=  \\
-framework VideoToolbox

CONAN_FRAMEWORKS_MYPKG2 +=

CONAN_FRAMEWORK_PATHS_MYPKG2 +=

CONAN_ROOT +=  \\
$(CONAN_ROOT_MYPKG1) \\
$(CONAN_ROOT_MYPKG2)

CONAN_SYSROOT +=  \\
$(CONAN_SYSROOT_MYPKG1) \\
$(CONAN_SYSROOT_MYPKG2)

CONAN_INCLUDE_DIRS +=  \\
$(CONAN_INCLUDE_DIRS_MYPKG1) \\
$(CONAN_INCLUDE_DIRS_MYPKG2)

CONAN_LIB_DIRS +=  \\
$(CONAN_LIB_DIRS_MYPKG1) \\
$(CONAN_LIB_DIRS_MYPKG2)

CONAN_BIN_DIRS +=  \\
$(CONAN_BIN_DIRS_MYPKG1) \\
$(CONAN_BIN_DIRS_MYPKG2)

CONAN_BUILD_DIRS +=  \\
$(CONAN_BUILD_DIRS_MYPKG1) \\
$(CONAN_BUILD_DIRS_MYPKG2)

CONAN_RES_DIRS +=  \\
$(CONAN_RES_DIRS_MYPKG1) \\
$(CONAN_RES_DIRS_MYPKG2)

CONAN_LIBS +=  \\
$(CONAN_LIBS_MYPKG1) \\
$(CONAN_LIBS_MYPKG2)

CONAN_DEFINES +=  \\
$(CONAN_DEFINES_MYPKG1) \\
$(CONAN_DEFINES_MYPKG2)

CONAN_CFLAGS +=  \\
$(CONAN_CFLAGS_MYPKG1) \\
$(CONAN_CFLAGS_MYPKG2)

CONAN_CXXFLAGS +=  \\
$(CONAN_CXXFLAGS_MYPKG1) \\
$(CONAN_CXXFLAGS_MYPKG2)

CONAN_SHAREDLINKFLAGS +=  \\
$(CONAN_SHAREDLINKFLAGS_MYPKG1) \\
$(CONAN_SHAREDLINKFLAGS_MYPKG2)

CONAN_EXELINKFLAGS +=  \\
$(CONAN_EXELINKFLAGS_MYPKG1) \\
$(CONAN_EXELINKFLAGS_MYPKG2)

CONAN_FRAMEWORKS +=  \\
$(CONAN_FRAMEWORKS_MYPKG1) \\
$(CONAN_FRAMEWORKS_MYPKG2)

CONAN_FRAMEWORK_PATHS +=  \\
$(CONAN_FRAMEWORK_PATHS_MYPKG1) \\
$(CONAN_FRAMEWORK_PATHS_MYPKG2)
"""
    root1 = tmp_folder1.replace('\\', '/')
    root2 = tmp_folder2.replace('\\', '/')

    inc1 = os.path.join(tmp_folder1, 'include1').replace('\\', '/')
    inc2 = os.path.join(tmp_folder2, 'include2').replace('\\', '/')

    lib1 = os.path.join(tmp_folder1, 'lib1').replace('\\', '/')
    lib2 = os.path.join(tmp_folder2, 'lib2').replace('\\', '/')

    bin1 = os.path.join(tmp_folder1, 'bin1').replace('\\', '/')
    bin2 = os.path.join(tmp_folder2, 'bin2').replace('\\', '/')

    expected_content = content_template.format(
        conan_root_mypkg1=root1,
        conan_include_dirs_mypkg1=inc1,
        conan_lib_dirs_mypkg1=lib1,
        conan_bin_dirs_mypkg1=bin1,
        conan_build_dirs_mypkg1=root1,
        conan_root_mypkg2=root2,
        conan_include_dirs_mypkg2=inc2,
        conan_lib_dirs_mypkg2=lib2,
        conan_bin_dirs_mypkg2=bin2,
        conan_build_dirs_mypkg2=root2,
        conan_framework_dirs_mypkg1=root1)

    content = "\n".join(line.strip()
                        for line in content.splitlines())  # Trailing spaces
    assert expected_content in content
Esempio n. 3
0
    def pkg_config_custom_names_test(self):
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())

        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.name = "my_pkg"
        cpp_info.names["pkg_config"] = "my_pkg_custom_name"
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.cflags.append("-Flag1=23")
        cpp_info.version = "1.3"
        cpp_info.description = "My cool description"
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.name = "MYPKG1"
        cpp_info.names["pkg_config"] = "my_pkg1_custom_name"
        cpp_info.defines = ["MYDEFINE11"]
        cpp_info.cflags.append("-Flag1=21")
        cpp_info.version = "1.7"
        cpp_info.description = "My other cool description"
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder2")
        cpp_info.names["pkg_config"] = "my_pkg2_custom_name"
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.version = "2.3"
        cpp_info.exelinkflags = ["-exelinkflag"]
        cpp_info.sharedlinkflags = ["-sharedlinkflag"]
        cpp_info.cxxflags = ["-cxxflag"]
        cpp_info.public_deps = ["MyPkg", "MyPkg1"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("zlib/1.2.11@lasote/stable")
        cpp_info = CppInfo(ref.name, "dummy_root_folder_zlib")
        cpp_info.name = "ZLIB"
        cpp_info.defines = ["MYZLIBDEFINE2"]
        cpp_info.version = "1.2.11"
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("bzip2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder2")
        cpp_info.name = "BZip2"
        cpp_info.names["pkg_config"] = "BZip2"
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.version = "2.3"
        cpp_info.exelinkflags = ["-exelinkflag"]
        cpp_info.sharedlinkflags = ["-sharedlinkflag"]
        cpp_info.cxxflags = ["-cxxflag"]
        cpp_info.public_deps = ["MyPkg", "MyPkg1", "zlib"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)
        generator = PkgConfigGenerator(conanfile)
        files = generator.content

        self.assertEqual(
            files["my_pkg2_custom_name.pc"], """prefix=dummy_root_folder2
libdir=${prefix}/lib
includedir=${prefix}/include

Name: my_pkg2_custom_name
Description: Conan package: my_pkg2_custom_name
Version: 2.3
Libs: -L${libdir} -sharedlinkflag -exelinkflag
Cflags: -I${includedir} -cxxflag -DMYDEFINE2
Requires: my_pkg_custom_name my_pkg1_custom_name
""")
        self.assertEqual(
            files["my_pkg1_custom_name.pc"], """prefix=dummy_root_folder1
libdir=${prefix}/lib
includedir=${prefix}/include

Name: my_pkg1_custom_name
Description: My other cool description
Version: 1.7
Libs: -L${libdir}
Cflags: -I${includedir} -Flag1=21 -DMYDEFINE11
""")
        self.assertEqual(
            files["my_pkg_custom_name.pc"], """prefix=dummy_root_folder1
libdir=${prefix}/lib
includedir=${prefix}/include

Name: my_pkg_custom_name
Description: My cool description
Version: 1.3
Libs: -L${libdir}
Cflags: -I${includedir} -Flag1=23 -DMYDEFINE1
""")
        self.assertEqual(
            files["BZip2.pc"], """prefix=dummy_root_folder2
libdir=${prefix}/lib
includedir=${prefix}/include

Name: BZip2
Description: Conan package: BZip2
Version: 2.3
Libs: -L${libdir} -sharedlinkflag -exelinkflag
Cflags: -I${includedir} -cxxflag -DMYDEFINE2
Requires: my_pkg_custom_name my_pkg1_custom_name zlib
""")
Esempio n. 4
0
class CMakeBuildModulesTest(unittest.TestCase):

    def setUp(self):
        settings_mock = _MockSettings(build_type="Release")
        self.conanfile = ConanFile(TestBufferConanOutput(), None)
        self.conanfile.initialize(settings_mock, EnvValues())
        ref = ConanFileReference.loads("my_pkg/0.1@lasote/stables")
        cpp_info = CppInfo("dummy_root_folder1")
        cpp_info.filter_empty = False  # For testing purposes only
        cpp_info.name = ref.name
        cpp_info.build_modules = ["my-module.cmake"]
        self.conanfile.deps_cpp_info.update(cpp_info, ref.name)
        ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables")
        cpp_info = CppInfo("dummy_root_folder2")
        cpp_info.filter_empty = False  # For testing purposes only
        cpp_info.name = ref.name
        cpp_info.build_modules = ["other-mod.cmake", "not-a-cmake-module.pc"]
        cpp_info.release.build_modules = ["release-mod.cmake"]
        cpp_info.release.filter_empty = False  # For testing purposes only
        self.conanfile.deps_cpp_info.update(cpp_info, ref.name)

    def cmake_test(self):
        generator = CMakeGenerator(self.conanfile)
        content = generator.content
        self.assertNotIn("not-a-cmake-module.pc", content)
        self.assertIn('set(CONAN_BUILD_MODULES_PATHS "dummy_root_folder1/my-module.cmake"'
                      '\n\t\t\t"dummy_root_folder2/other-mod.cmake" ${CONAN_BUILD_MODULES_PATHS})',
                      content)
        self.assertIn('set(CONAN_BUILD_MODULES_PATHS_MY_PKG "dummy_root_folder1/my-module.cmake")',
                      content)
        self.assertIn('set(CONAN_BUILD_MODULES_PATHS_MY_PKG2 "dummy_root_folder2/other-mod.cmake")',
                      content)
        self.assertIn("macro(conan_include_build_modules)", content)
        self.assertIn("conan_include_build_modules()", content)

    def cmake_multi_test(self):
        generator = CMakeMultiGenerator(self.conanfile)
        content = generator.content
        self.assertNotIn("not-a-cmake-module.pc", content["conanbuildinfo_release.cmake"])
        self.assertIn('set(CONAN_BUILD_MODULES_PATHS_RELEASE '
                      '"dummy_root_folder1/my-module.cmake"\n\t\t\t'
                      '"dummy_root_folder2/other-mod.cmake"\n\t\t\t'
                      '"dummy_root_folder2/release-mod.cmake" '
                      '${CONAN_BUILD_MODULES_PATHS_RELEASE})',
                      content["conanbuildinfo_release.cmake"])
        self.assertIn('set(CONAN_BUILD_MODULES_PATHS_MY_PKG_RELEASE '
                      '"dummy_root_folder1/my-module.cmake")',
                      content["conanbuildinfo_release.cmake"])
        self.assertIn('set(CONAN_BUILD_MODULES_PATHS_MY_PKG2_RELEASE '
                      '"dummy_root_folder2/other-mod.cmake"\n\t\t\t'
                      '"dummy_root_folder2/release-mod.cmake")',
                      content["conanbuildinfo_release.cmake"])
        self.assertIn("macro(conan_include_build_modules)", content["conanbuildinfo_multi.cmake"])
        self.assertIn("conan_include_build_modules()", content["conanbuildinfo_multi.cmake"])

    def cmake_find_package_test(self):
        generator = CMakeFindPackageGenerator(self.conanfile)
        content = generator.content
        self.assertIn("Findmy_pkg.cmake", content.keys())
        self.assertIn("Findmy_pkg2.cmake", content.keys())
        self.assertNotIn("not-a-cmake-module.pc", content["Findmy_pkg2.cmake"])
        self.assertIn('set(CMAKE_MODULE_PATH "dummy_root_folder1/" ${CMAKE_MODULE_PATH})',
                      content["Findmy_pkg.cmake"])
        self.assertIn('set(CMAKE_PREFIX_PATH "dummy_root_folder1/" ${CMAKE_PREFIX_PATH})',
                      content["Findmy_pkg.cmake"])
        self.assertIn('set(CMAKE_MODULE_PATH "dummy_root_folder2/" ${CMAKE_MODULE_PATH})',
                      content["Findmy_pkg2.cmake"])
        self.assertIn('set(CMAKE_PREFIX_PATH "dummy_root_folder2/" ${CMAKE_PREFIX_PATH})',
                      content["Findmy_pkg2.cmake"])
        self.assertIn('set(my_pkg_BUILD_MODULES_PATHS "dummy_root_folder1/my-module.cmake")',
                      content["Findmy_pkg.cmake"])
        self.assertIn('set(my_pkg2_BUILD_MODULES_PATHS "dummy_root_folder2/other-mod.cmake")',
                      content["Findmy_pkg2.cmake"])

    def cmake_find_package_multi_test(self):
        generator = CMakeFindPackageMultiGenerator(self.conanfile)
        content = generator.content
        self.assertNotIn("not-a-cmake-module.pc", content["my_pkg2Target-release.cmake"])
        self.assertIn('set(my_pkg_BUILD_MODULES_PATHS_RELEASE "dummy_root_folder1/my-module.cmake")',
                      content["my_pkgTarget-release.cmake"])
        self.assertIn('set(my_pkg2_BUILD_MODULES_PATHS_RELEASE "dummy_root_folder2/other-mod.cmake")',
                      content["my_pkg2Target-release.cmake"])
Esempio n. 5
0
    def test_variables_setup(self):
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "/dummy_root_folder1")
        cpp_info.filter_empty = False
        cpp_info.name = "my_pkg"
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.cflags.append("-Flag1=23")
        cpp_info.version = "1.3"
        cpp_info.description = "My cool description"
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "/dummy_root_folder1")
        cpp_info.filter_empty = False
        cpp_info.name = "MYPKG1"
        cpp_info.defines = ["MYDEFINE11"]
        cpp_info.cflags.append("-Flag1=21")
        cpp_info.version = "1.7"
        cpp_info.description = "My other cool description"
        cpp_info.public_deps = ["MyPkg"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "/dummy_root_folder2")
        cpp_info.filter_empty = False
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.version = "2.3"
        cpp_info.exelinkflags = ["-exelinkflag"]
        cpp_info.sharedlinkflags = ["-sharedlinkflag"]
        cpp_info.cxxflags = ["-cxxflag"]
        cpp_info.public_deps = ["MyPkg"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)
        generator = PkgConfigGenerator(conanfile)
        files = generator.content

        self.assertEqual(
            files["MyPkg2.pc"], """prefix=/dummy_root_folder2
libdir=${prefix}/lib
includedir=${prefix}/include

Name: MyPkg2
Description: Conan package: MyPkg2
Version: 2.3
Libs: -L"${libdir}" -sharedlinkflag -exelinkflag
Cflags: -I"${includedir}" -cxxflag -DMYDEFINE2
Requires: my_pkg
""")

        self.assertEqual(
            files["mypkg1.pc"], """prefix=/dummy_root_folder1
libdir=${prefix}/lib
includedir=${prefix}/include

Name: mypkg1
Description: My other cool description
Version: 1.7
Libs: -L"${libdir}"
Cflags: -I"${includedir}" -Flag1=21 -DMYDEFINE11
Requires: my_pkg
""")

        self.assertEqual(
            files["my_pkg.pc"], """prefix=/dummy_root_folder1
libdir=${prefix}/lib
includedir=${prefix}/include

Name: my_pkg
Description: My cool description
Version: 1.3
Libs: -L"${libdir}"
Cflags: -I"${includedir}" -Flag1=23 -DMYDEFINE1
""")
Esempio n. 6
0
    def aux_cmake_test_setup_test(self):
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())
        generator = CMakeGenerator(conanfile)
        aux_cmake_test_setup = generator.content

        # extract the conan_basic_setup macro
        macro = self._extract_macro("conan_basic_setup", aux_cmake_test_setup)
        self.assertEqual("""macro(conan_basic_setup)
    set(options TARGETS NO_OUTPUT_DIRS SKIP_RPATH KEEP_RPATHS SKIP_STD SKIP_FPIC)
    cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )

    if(CONAN_EXPORTED)
        conan_message(STATUS "Conan: called by CMake conan helper")
    endif()

    if(CONAN_IN_LOCAL_CACHE)
        conan_message(STATUS "Conan: called inside local cache")
    endif()

    if(NOT ARGUMENTS_NO_OUTPUT_DIRS)
        conan_message(STATUS "Conan: Adjusting output directories")
        conan_output_dirs_setup()
    endif()

    if(NOT ARGUMENTS_TARGETS)
        conan_message(STATUS "Conan: Using cmake global configuration")
        conan_global_flags()
    else()
        conan_message(STATUS "Conan: Using cmake targets configuration")
        conan_define_targets()
    endif()

    if(ARGUMENTS_SKIP_RPATH)
        # Change by "DEPRECATION" or "SEND_ERROR" when we are ready
        conan_message(WARNING "Conan: SKIP_RPATH is deprecated, it has been renamed to KEEP_RPATHS")
    endif()

    if(NOT ARGUMENTS_SKIP_RPATH AND NOT ARGUMENTS_KEEP_RPATHS)
        # Parameter has renamed, but we keep the compatibility with old SKIP_RPATH
        conan_message(STATUS "Conan: Adjusting default RPATHs Conan policies")
        conan_set_rpath()
    endif()

    if(NOT ARGUMENTS_SKIP_STD)
        conan_message(STATUS "Conan: Adjusting language standard")
        conan_set_std()
    endif()

    if(NOT ARGUMENTS_SKIP_FPIC)
        conan_set_fpic()
    endif()

    conan_check_compiler()
    conan_set_libcxx()
    conan_set_vs_runtime()
    conan_set_find_paths()
    conan_include_build_modules()
    conan_set_find_library_paths()
endmacro()""", macro)

        # extract the conan_set_find_paths macro
        macro = self._extract_macro("conan_set_find_paths", aux_cmake_test_setup)
        self.assertEqual("""macro(conan_set_find_paths)
    # CMAKE_MODULE_PATH does not have Debug/Release config, but there are variables
    # CONAN_CMAKE_MODULE_PATH_DEBUG to be used by the consumer
    # CMake can find findXXX.cmake files in the root of packages
    set(CMAKE_MODULE_PATH ${CONAN_CMAKE_MODULE_PATH} ${CMAKE_MODULE_PATH})

    # Make find_package() to work
    set(CMAKE_PREFIX_PATH ${CONAN_CMAKE_MODULE_PATH} ${CMAKE_PREFIX_PATH})

    # Set the find root path (cross build)
    set(CMAKE_FIND_ROOT_PATH ${CONAN_CMAKE_FIND_ROOT_PATH} ${CMAKE_FIND_ROOT_PATH})
    if(CONAN_CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
        set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ${CONAN_CMAKE_FIND_ROOT_PATH_MODE_PROGRAM})
    endif()
    if(CONAN_CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
        set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ${CONAN_CMAKE_FIND_ROOT_PATH_MODE_LIBRARY})
    endif()
    if(CONAN_CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
        set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ${CONAN_CMAKE_FIND_ROOT_PATH_MODE_INCLUDE})
    endif()
endmacro()""", macro)
Esempio n. 7
0
class CMakeCppInfoNamesTest(unittest.TestCase):
    """
    Test cpp_info.names["generator"] values are applied in generators instead of the cpp_info.name
    """

    def setUp(self):
        self.conanfile = ConanFile(TestBufferConanOutput(), None)
        settings = _MockSettings()
        settings.build_type = "Debug"
        self.conanfile.initialize(settings, EnvValues())
        ref = ConanFileReference.loads("my_pkg/0.1@lasote/stables")
        cpp_info = CppInfo("dummy_root_folder1")
        cpp_info.name = "MyPkG"
        cpp_info.names["cmake"] = "MyCMakeName"
        cpp_info.names["cmake_multi"] = "MyCMakeMultiName"
        cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName"
        cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName"
        self.conanfile.deps_cpp_info.update(cpp_info, ref.name)
        ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables")
        cpp_info = CppInfo("dummy_root_folder2")
        cpp_info.name = "MyPkG2"
        cpp_info.names["cmake"] = "MyCMakeName2"
        cpp_info.names["cmake_multi"] = "MyCMakeMultiName2"
        cpp_info.names["cmake_find_package"] = "MyCMakeFindPackageName2"
        cpp_info.names["cmake_find_package_multi"] = "MyCMakeFindPackageMultiName2"
        cpp_info.public_deps = ["my_pkg"]
        self.conanfile.deps_cpp_info.update(cpp_info, ref.name)

    def cmake_test(self):
        generator = CMakeGenerator(self.conanfile)
        content = generator.content
        self.assertNotIn("MyPkG", content)
        self.assertNotIn("MyPkG2", content)
        self.assertIn('add_library(CONAN_PKG::MyCMakeName INTERFACE IMPORTED)', content)
        self.assertIn('add_library(CONAN_PKG::MyCMakeName2 INTERFACE IMPORTED)', content)

    def cmake_multi_test(self):
        generator = CMakeMultiGenerator(self.conanfile)
        content = generator.content
        self.assertNotIn("MyPkG", content["conanbuildinfo_multi.cmake"])
        self.assertNotIn("MyPkG2", content["conanbuildinfo_multi.cmake"])
        self.assertIn('add_library(CONAN_PKG::MyCMakeMultiName INTERFACE IMPORTED)',
                      content["conanbuildinfo_multi.cmake"])
        self.assertIn('add_library(CONAN_PKG::MyCMakeMultiName2 INTERFACE IMPORTED)',
                      content["conanbuildinfo_multi.cmake"])

    def cmake_find_package_test(self):
        generator = CMakeFindPackageGenerator(self.conanfile)
        content = generator.content
        self.assertIn("FindMyCMakeFindPackageName.cmake", content.keys())
        self.assertIn("FindMyCMakeFindPackageName2.cmake", content.keys())
        self.assertNotIn("MyPkG", content["FindMyCMakeFindPackageName.cmake"])
        self.assertNotIn("MyPkG2", content["FindMyCMakeFindPackageName2.cmake"])
        self.assertIn("add_library(MyCMakeFindPackageName::MyCMakeFindPackageName INTERFACE IMPORTED)",
                      content["FindMyCMakeFindPackageName.cmake"])
        self.assertIn("add_library(MyCMakeFindPackageName2::MyCMakeFindPackageName2 INTERFACE IMPORTED)",
                      content["FindMyCMakeFindPackageName2.cmake"])
        self.assertIn("find_dependency(MyCMakeFindPackageName REQUIRED)",
                      content["FindMyCMakeFindPackageName2.cmake"])

    def cmake_find_package_multi_test(self):
        generator = CMakeFindPackageMultiGenerator(self.conanfile)
        content = generator.content
        six.assertCountEqual(self, ['MyCMakeFindPackageMultiName2Targets.cmake',
                                    'MyCMakeFindPackageMultiNameConfig.cmake',
                                    'MyCMakeFindPackageMultiName2Config.cmake',
                                    'MyCMakeFindPackageMultiNameTargets.cmake',
                                    'MyCMakeFindPackageMultiNameTarget-debug.cmake',
                                    'MyCMakeFindPackageMultiName2Target-debug.cmake',
                                    'MyCMakeFindPackageMultiNameConfigVersion.cmake',
                                    'MyCMakeFindPackageMultiName2ConfigVersion.cmake'],
                             content.keys())
        self.assertNotIn("MyPkG", content["MyCMakeFindPackageMultiNameConfig.cmake"])
        self.assertNotIn("MyPkG", content["MyCMakeFindPackageMultiName2Config.cmake"])
        self.assertIn(
            "add_library(MyCMakeFindPackageMultiName::MyCMakeFindPackageMultiName INTERFACE IMPORTED)",
            content["MyCMakeFindPackageMultiNameTargets.cmake"])
        self.assertIn(
            "add_library(MyCMakeFindPackageMultiName2::MyCMakeFindPackageMultiName2 INTERFACE IMPORTED)",
            content["MyCMakeFindPackageMultiName2Targets.cmake"])
        self.assertIn("find_dependency(MyCMakeFindPackageMultiName REQUIRED NO_MODULE)",
                      content["MyCMakeFindPackageMultiName2Config.cmake"])
Esempio n. 8
0
    def b2_test(self):
        settings = Settings.loads(default_settings_yml)
        settings.os = "Linux"
        settings.compiler = "gcc"
        settings.compiler.version = "6.3"
        settings.arch = "x86"
        settings.build_type = "Release"
        settings.cppstd = "gnu17"

        conanfile = ConanFile(None, None)
        conanfile.initialize(Settings({}), EnvValues())
        conanfile.settings = settings

        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo("dummy_root_folder1")
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.cflags.append("-Flag1=23")
        cpp_info.version = "1.3"
        cpp_info.description = "My cool description"
        cpp_info.libs = ["MyLib1"]

        conanfile.deps_cpp_info.update(cpp_info, ref.name)
        ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
        cpp_info = CppInfo("dummy_root_folder2")
        cpp_info.libs = ["MyLib2"]
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.version = "2.3"
        cpp_info.exelinkflags = ["-exelinkflag"]
        cpp_info.sharedlinkflags = ["-sharedlinkflag"]
        cpp_info.cppflags = ["-cppflag"]
        cpp_info.public_deps = ["MyPkg"]
        cpp_info.lib_paths.extend(
            ["Path\\with\\slashes", "regular/path/to/dir"])
        cpp_info.include_paths.extend(
            ["other\\Path\\with\\slashes", "other/regular/path/to/dir"])
        conanfile.deps_cpp_info.update(cpp_info, ref.name)
        generator = B2Generator(conanfile)

        content = {
            'conanbuildinfo.jam':
            '''#|
    B2 definitions for Conan packages. This is a generated file.
    Edit the corresponding conanfile.txt instead.
|#

import path ;
import project ;
import modules ;
import feature ;

local base-project = [ project.current ] ;
local base-project-mod = [ $(base-project).project-module ] ;
local base-project-location = [ project.attribute $(base-project-mod) location ] ;

rule project-define ( id )
{
    id = $(id:L) ;
    local saved-project = [ modules.peek project : .base-project ] ;
    local id-location = [ path.join $(base-project-location) $(id) ] ;
    local id-mod = [ project.load $(id-location) : synthesize ] ;
    project.initialize $(id-mod) : $(id-location) ;
    project.inherit-attributes $(id-mod) : $(base-project-mod) ;
    local attributes = [ project.attributes $(id-mod) ] ;
    $(attributes).set parent-module : $(base-project-mod) : exact ;
    modules.poke $(base-project-mod) : $(id)-mod : $(id-mod) ;
    modules.poke [ CALLER_MODULE ] : $(id)-mod : $(id-mod) ;
    modules.poke project : .base-project : $(saved-project) ;
    IMPORT $(__name__)
        : constant-if call-in-project
        : $(id-mod)
        : constant-if call-in-project ;
    return $(id-mod) ;
}

rule constant-if ( name : value * )
{
    if $(__define_constants__) && $(value)
    {
        call-in-project : constant $(name) : $(value) ;
        modules.poke $(__name__) : $(name) : [ modules.peek $(base-project-mod) : $(name) ] ;
    }
}

rule call-in-project ( project-mod ? : rule-name args * : * )
{
    project-mod ?= $(base-project-mod) ;
    project.push-current [ project.target $(project-mod) ] ;
    local result = [ modules.call-in $(project-mod) :
        $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) : $(10) :
        $(11) : $(12) : $(13) : $(14) : $(15) : $(16) : $(17) : $(18) :
        $(19) ] ;
    project.pop-current ;
    return $(result) ;
}

rule include-conanbuildinfo ( cbi )
{
    include $(cbi) ;
}

IMPORT $(__name__)
    : project-define constant-if call-in-project include-conanbuildinfo
    : $(base-project-mod)
    : project-define constant-if call-in-project include-conanbuildinfo ;

if ! ( relwithdebinfo in [ feature.values variant ] )
{
    variant relwithdebinfo : : <optimization>speed <debug-symbols>on <inlining>full <runtime-debugging>off ;
}
if ! ( minsizerel in [ feature.values variant ] )
{
    variant minsizerel : : <optimization>space <debug-symbols>off <inlining>full <runtime-debugging>off ;
}

local __conanbuildinfo__ = [ GLOB $(__file__:D) : conanbuildinfo-*.jam : downcase ] ;
{
    local __define_constants__ = yes ;
    for local __cbi__ in $(__conanbuildinfo__)
    {
        call-in-project : include-conanbuildinfo $(__cbi__) ;
    }
}


# mypkg
# mypkg
project-define mypkg ;


# mypkg2
# mypkg2
project-define mypkg2 ;

{
    local __define_targets__ = yes ;
    for local __cbi__ in $(__conanbuildinfo__)
    {
        call-in-project : include-conanbuildinfo $(__cbi__) ;
    }
}
''',
            'conanbuildinfo-316f2f0b155dc874a672d40d98d93f95.jam':
            '''#|
    B2 definitions for Conan packages. This is a generated file.
    Edit the corresponding conanfile.txt instead.
|#

# global
constant-if rootpath(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    ""
    ;

constant-if includedirs(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    "other/Path/with/slashes"
    "other/regular/path/to/dir"
    ;

constant-if libdirs(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    "Path/with/slashes"
    "regular/path/to/dir"
    ;

constant-if defines(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    "MYDEFINE2"
    "MYDEFINE1"
    ;

constant-if cppflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-cppflag"
    ;

constant-if cflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-Flag1=23"
    ;

constant-if sharedlinkflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-sharedlinkflag"
    ;

constant-if exelinkflags(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-exelinkflag"
    ;

constant-if requirements(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    <address-model>32
    <architecture>x86
    <cxxstd>17
    <cxxstd:dialect>gnu
    <target-os>linux
    <toolset>gcc-6.3
    <variant>release
    ;

constant-if usage-requirements(conan,32,x86,17,gnu,linux,gcc-6.3,release) :
    <include>$(includedirs(conan,32,x86,17,gnu,linux,gcc-6.3,release))
    <define>$(defines(conan,32,x86,17,gnu,linux,gcc-6.3,release))
    <cflags>$(cflags(conan,32,x86,17,gnu,linux,gcc-6.3,release))
    <cxxflags>$(cppflags(conan,32,x86,17,gnu,linux,gcc-6.3,release))
    <link>shared:<linkflags>$(sharedlinkflags(conan,32,x86,17,gnu,linux,gcc-6.3,release))
    ;

# mypkg
constant-if rootpath(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) :
    "dummy_root_folder1"
    ;

constant-if defines(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) :
    "MYDEFINE1"
    ;

constant-if cflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-Flag1=23"
    ;

constant-if requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) :
    <address-model>32
    <architecture>x86
    <cxxstd>17
    <cxxstd:dialect>gnu
    <target-os>linux
    <toolset>gcc-6.3
    <variant>release
    ;

constant-if usage-requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release) :
    <include>$(includedirs(mypkg,32,x86,17,gnu,linux,gcc-6.3,release))
    <define>$(defines(mypkg,32,x86,17,gnu,linux,gcc-6.3,release))
    <cflags>$(cflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release))
    <cxxflags>$(cppflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release))
    <link>shared:<linkflags>$(sharedlinkflags(mypkg,32,x86,17,gnu,linux,gcc-6.3,release))
    ;

# mypkg2
constant-if rootpath(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    "dummy_root_folder2"
    ;

constant-if includedirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    "other/Path/with/slashes"
    "other/regular/path/to/dir"
    ;

constant-if libdirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    "Path/with/slashes"
    "regular/path/to/dir"
    ;

constant-if defines(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    "MYDEFINE2"
    ;

constant-if cppflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-cppflag"
    ;

constant-if sharedlinkflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-sharedlinkflag"
    ;

constant-if exelinkflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    "-exelinkflag"
    ;

constant-if requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    <address-model>32
    <architecture>x86
    <cxxstd>17
    <cxxstd:dialect>gnu
    <target-os>linux
    <toolset>gcc-6.3
    <variant>release
    ;

constant-if usage-requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release) :
    <include>$(includedirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release))
    <define>$(defines(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release))
    <cflags>$(cflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release))
    <cxxflags>$(cppflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release))
    <link>shared:<linkflags>$(sharedlinkflags(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release))
    ;

# mypkg
if $(__define_targets__) {
    call-in-project $(mypkg-mod) : lib MyLib1
        :
        : <name>MyLib1 <search>$(libdirs(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) $(requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release))
        :
        : $(usage-requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) ;
    call-in-project $(mypkg-mod) : explicit MyLib1 ; }

if $(__define_targets__) {
    call-in-project $(mypkg-mod) : alias libs
        : MyLib1
        : $(requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release))
        :
        : $(usage-requirements(mypkg,32,x86,17,gnu,linux,gcc-6.3,release)) ;
    call-in-project $(mypkg-mod) : explicit libs ; }

# mypkg2
if $(__define_targets__) {
    call-in-project $(mypkg2-mod) : lib MyLib2
        :
        : <name>MyLib2 <search>$(libdirs(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) $(requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release))
        :
        : $(usage-requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) ;
    call-in-project $(mypkg2-mod) : explicit MyLib2 ; }

if $(__define_targets__) {
    call-in-project $(mypkg2-mod) : alias libs
        : MyLib2
        : $(requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release))
        :
        : $(usage-requirements(mypkg2,32,x86,17,gnu,linux,gcc-6.3,release)) ;
    call-in-project $(mypkg2-mod) : explicit libs ; }
''',
        }

        for ck, cv in generator.content.items():
            self.assertEquals(cv, content[ck])
Esempio n. 9
0
    def valid_xml_test(self, use_toolset):
        tempdir = temp_folder()
        with chdir(tempdir):
            settings = Settings.loads(default_settings_yml)
            settings.os = "Windows"
            settings.compiler = "Visual Studio"
            settings.compiler.version = "11"
            settings.compiler.runtime = "MD"
            if use_toolset:
                settings.compiler.toolset = "v110"
            conanfile = ConanFile(None, None)
            conanfile.initialize(Settings({}), EnvValues())

            ref = ConanFileReference.loads("MyPkg/0.1@user/testing")
            cpp_info = CppInfo("dummy_root_folder1")
            conanfile.deps_cpp_info.update(cpp_info, ref.name)
            ref = ConanFileReference.loads("My.Fancy-Pkg_2/0.1@user/testing")
            cpp_info = CppInfo("dummy_root_folder2")
            conanfile.deps_cpp_info.update(cpp_info, ref.name)

            settings.arch = "x86"
            settings.build_type = "Debug"
            conanfile.settings = settings

            generator = VisualStudioMultiGenerator(conanfile)
            generator.output_path = ""
            content = generator.content

            self.assertEqual(2, len(content))
            self.assertIn('conanbuildinfo_multi.props', content.keys())
            self.assertIn('conanbuildinfo_debug_win32_v110.props',
                          content.keys())

            content_multi = content['conanbuildinfo_multi.props']
            self.assertIn(
                "<Import Condition=\"'$(Configuration)' == 'Debug' "
                "And '$(Platform)' == 'Win32' "
                "And '$(PlatformToolset)' == 'v110'\" "
                "Project=\"conanbuildinfo_debug_win32_v110.props\"/>",
                content_multi)

            with open('conanbuildinfo_multi.props', 'w') as f:
                f.write(content_multi)

            settings.arch = "x86_64"
            settings.build_type = "Release"
            settings.compiler.version = "15"
            settings.compiler.toolset = "v141"
            conanfile.settings = settings

            generator = VisualStudioMultiGenerator(conanfile)
            generator.output_path = ""
            content = generator.content

            self.assertEqual(2, len(content))
            self.assertIn('conanbuildinfo_multi.props', content.keys())
            self.assertIn('conanbuildinfo_release_x64_v141.props',
                          content.keys())

            content_multi = content['conanbuildinfo_multi.props']
            self.assertIn(
                "<Import Condition=\"'$(Configuration)' == 'Debug' "
                "And '$(Platform)' == 'Win32' "
                "And '$(PlatformToolset)' == 'v110'\" "
                "Project=\"conanbuildinfo_debug_win32_v110.props\"/>",
                content_multi)
            self.assertIn(
                "<Import Condition=\"'$(Configuration)' == 'Release' "
                "And '$(Platform)' == 'x64' "
                "And '$(PlatformToolset)' == 'v141'\" "
                "Project=\"conanbuildinfo_release_x64_v141.props\"/>",
                content_multi)

            os.unlink('conanbuildinfo_multi.props')
Esempio n. 10
0
    def variables_setup_test(self):
        tmp_folder1 = temp_folder()
        tmp_folder2 = temp_folder()
        save(os.path.join(tmp_folder1, "include1", "file.h"), "")
        save(os.path.join(tmp_folder2, "include2", "file.h"), "")
        save(os.path.join(tmp_folder1, "lib1", "file.a"), "")
        save(os.path.join(tmp_folder2, "lib2", "file.a"), "")
        save(os.path.join(tmp_folder1, "bin1", "file.bin"), "")
        save(os.path.join(tmp_folder2, "bin2", "file.bin"), "")

        conanfile = ConanFile(None, None)
        conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables")
        cpp_info = CppInfo(tmp_folder1)
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.includedirs = ['include1']
        cpp_info.libdirs = ['lib1']
        cpp_info.libs = ['libfoo']
        cpp_info.bindirs = ['bin1']
        cpp_info.version = "0.1"
        cpp_info.cflags = ['-fgimple']
        cpp_info.cppflags = ['-fdollars-in-identifiers']
        cpp_info.sharedlinkflags = ['-framework Cocoa']
        cpp_info.exelinkflags = ['-framework QuartzCore']
        conanfile.deps_cpp_info.update(cpp_info, ref.name)
        ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables")
        cpp_info = CppInfo(tmp_folder2)
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.includedirs = ['include2']
        cpp_info.libdirs = ['lib2']
        cpp_info.libs = ['libbar']
        cpp_info.bindirs = ['bin2']
        cpp_info.version = "3.2.3"
        cpp_info.cflags = ['-fno-asm']
        cpp_info.cppflags = ['-pthread']
        cpp_info.sharedlinkflags = ['-framework AudioFoundation']
        cpp_info.exelinkflags = ['-framework VideoToolbox']
        conanfile.deps_cpp_info.update(cpp_info, ref.name)
        generator = MakeGenerator(conanfile)
        content = generator.content

        content_template = """
CONAN_ROOT_MYPKG1 ?=  \\
{conan_root_mypkg1}

CONAN_SYSROOT_MYPKG1 ?=  \\


CONAN_INCLUDE_PATHS_MYPKG1 +=  \\
{conan_include_paths_mypkg1}

CONAN_LIB_PATHS_MYPKG1 +=  \\
{conan_lib_paths_mypkg1}

CONAN_BIN_PATHS_MYPKG1 +=  \\
{conan_bin_paths_mypkg1}

CONAN_BUILD_PATHS_MYPKG1 +=  \\
{conan_build_paths_mypkg1}

CONAN_RES_PATHS_MYPKG1 +=  \\


CONAN_LIBS_MYPKG1 +=  \\
libfoo

CONAN_DEFINES_MYPKG1 +=  \\
MYDEFINE1

CONAN_CFLAGS_MYPKG1 +=  \\
-fgimple

CONAN_CPPFLAGS_MYPKG1 +=  \\
-fdollars-in-identifiers

CONAN_SHAREDLINKFLAGS_MYPKG1 +=  \\
-framework Cocoa

CONAN_EXELINKFLAGS_MYPKG1 +=  \\
-framework QuartzCore

CONAN_ROOT_MYPKG2 ?=  \\
{conan_root_mypkg2}

CONAN_SYSROOT_MYPKG2 ?=  \\


CONAN_INCLUDE_PATHS_MYPKG2 +=  \\
{conan_include_paths_mypkg2}

CONAN_LIB_PATHS_MYPKG2 +=  \\
{conan_lib_paths_mypkg2}

CONAN_BIN_PATHS_MYPKG2 +=  \\
{conan_bin_paths_mypkg2}

CONAN_BUILD_PATHS_MYPKG2 +=  \\
{conan_build_paths_mypkg2}

CONAN_RES_PATHS_MYPKG2 +=  \\


CONAN_LIBS_MYPKG2 +=  \\
libbar

CONAN_DEFINES_MYPKG2 +=  \\
MYDEFINE2

CONAN_CFLAGS_MYPKG2 +=  \\
-fno-asm

CONAN_CPPFLAGS_MYPKG2 +=  \\
-pthread

CONAN_SHAREDLINKFLAGS_MYPKG2 +=  \\
-framework AudioFoundation

CONAN_EXELINKFLAGS_MYPKG2 +=  \\
-framework VideoToolbox

CONAN_ROOTPATH +=  \\
$(CONAN_ROOTPATH_MYPKG1) \\
$(CONAN_ROOTPATH_MYPKG2)

CONAN_SYSROOT +=  \\
$(CONAN_SYSROOT_MYPKG1) \\
$(CONAN_SYSROOT_MYPKG2)

CONAN_INCLUDE_PATHS +=  \\
$(CONAN_INCLUDE_PATHS_MYPKG1) \\
$(CONAN_INCLUDE_PATHS_MYPKG2)

CONAN_LIB_PATHS +=  \\
$(CONAN_LIB_PATHS_MYPKG1) \\
$(CONAN_LIB_PATHS_MYPKG2)

CONAN_BIN_PATHS +=  \\
$(CONAN_BIN_PATHS_MYPKG1) \\
$(CONAN_BIN_PATHS_MYPKG2)

CONAN_BUILD_PATHS +=  \\
$(CONAN_BUILD_PATHS_MYPKG1) \\
$(CONAN_BUILD_PATHS_MYPKG2)

CONAN_RES_PATHS +=  \\
$(CONAN_RES_PATHS_MYPKG1) \\
$(CONAN_RES_PATHS_MYPKG2)

CONAN_LIBS +=  \\
$(CONAN_LIBS_MYPKG1) \\
$(CONAN_LIBS_MYPKG2)

CONAN_DEFINES +=  \\
$(CONAN_DEFINES_MYPKG1) \\
$(CONAN_DEFINES_MYPKG2)

CONAN_CFLAGS +=  \\
$(CONAN_CFLAGS_MYPKG1) \\
$(CONAN_CFLAGS_MYPKG2)

CONAN_CPPFLAGS +=  \\
$(CONAN_CPPFLAGS_MYPKG1) \\
$(CONAN_CPPFLAGS_MYPKG2)

CONAN_SHAREDLINKFLAGS +=  \\
$(CONAN_SHAREDLINKFLAGS_MYPKG1) \\
$(CONAN_SHAREDLINKFLAGS_MYPKG2)

CONAN_EXELINKFLAGS +=  \\
$(CONAN_EXELINKFLAGS_MYPKG1) \\
$(CONAN_EXELINKFLAGS_MYPKG2)
"""
        root1 = tmp_folder1.replace('\\', '/')
        root2 = tmp_folder2.replace('\\', '/')

        inc1 = os.path.join(tmp_folder1, 'include1').replace('\\', '/')
        inc2 = os.path.join(tmp_folder2, 'include2').replace('\\', '/')

        lib1 = os.path.join(tmp_folder1, 'lib1').replace('\\', '/')
        lib2 = os.path.join(tmp_folder2, 'lib2').replace('\\', '/')

        bin1 = os.path.join(tmp_folder1, 'bin1').replace('\\', '/')
        bin2 = os.path.join(tmp_folder2, 'bin2').replace('\\', '/')

        expected_content = content_template.format(
            conan_root_mypkg1=root1,
            conan_include_paths_mypkg1=inc1,
            conan_lib_paths_mypkg1=lib1,
            conan_bin_paths_mypkg1=bin1,
            conan_build_paths_mypkg1=root1 + "/",
            conan_root_mypkg2=root2,
            conan_include_paths_mypkg2=inc2,
            conan_lib_paths_mypkg2=lib2,
            conan_bin_paths_mypkg2=bin2,
            conan_build_paths_mypkg2=root2 + "/")
        self.assertIn(expected_content, content)
Esempio n. 11
0
class CMakeCppInfoNameTest(unittest.TestCase):
    """
    Test cpp_info.name values are applied in generators instead of the reference name
    """
    def setUp(self):
        self.conanfile = ConanFile(Mock(), None)
        settings = _MockSettings(build_type="Debug")
        self.conanfile.initialize(settings, EnvValues())
        ref = ConanFileReference.loads("my_pkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.name = "MyPkG"
        self.conanfile.deps_cpp_info.add(ref.name, cpp_info)
        ref = ConanFileReference.loads("my_pkg2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder2")
        cpp_info.name = "MyPkG2"
        cpp_info.public_deps = ["my_pkg"]
        self.conanfile.deps_cpp_info.add(ref.name, cpp_info)

    def test_cmake(self):
        generator = CMakeGenerator(self.conanfile)
        content = generator.content
        self.assertIn("set(CONAN_DEPENDENCIES my_pkg my_pkg2)", content)
        content = content.replace("set(CONAN_DEPENDENCIES my_pkg my_pkg2)", "")
        self.assertNotIn("my_pkg", content)
        self.assertNotIn("MY_PKG", content)
        self.assertIn('add_library(CONAN_PKG::MyPkG INTERFACE IMPORTED)',
                      content)
        self.assertIn('add_library(CONAN_PKG::MyPkG2 INTERFACE IMPORTED)',
                      content)
        self.assertNotIn('CONAN_PKG::my_pkg', content)
        self.assertNotIn('CONAN_PKG::my_pkg2', content)

    def test_cmake_multi(self):
        generator = CMakeMultiGenerator(self.conanfile)
        content = generator.content
        self.assertIn("set(CONAN_DEPENDENCIES_DEBUG my_pkg my_pkg2)",
                      content["conanbuildinfo_debug.cmake"])
        self.assertNotIn("my_pkg", content["conanbuildinfo_multi.cmake"])
        self.assertNotIn("MY_PKG", content["conanbuildinfo_multi.cmake"])
        self.assertIn('add_library(CONAN_PKG::MyPkG INTERFACE IMPORTED)',
                      content["conanbuildinfo_multi.cmake"])
        self.assertIn('add_library(CONAN_PKG::MyPkG2 INTERFACE IMPORTED)',
                      content["conanbuildinfo_multi.cmake"])
        self.assertNotIn('CONAN_PKG::my_pkg',
                         content["conanbuildinfo_multi.cmake"])
        self.assertNotIn('CONAN_PKG::my_pkg2',
                         content["conanbuildinfo_multi.cmake"])

    def test_cmake_find_package(self):
        generator = CMakeFindPackageGenerator(self.conanfile)
        content = generator.content
        self.assertIn("FindMyPkG.cmake", content.keys())
        self.assertIn("FindMyPkG2.cmake", content.keys())
        self.assertNotIn("my_pkg", content["FindMyPkG.cmake"])
        self.assertNotIn("MY_PKG", content["FindMyPkG.cmake"])
        self.assertNotIn("my_pkg", content["FindMyPkG2.cmake"])
        self.assertNotIn("MY_PKG", content["FindMyPkG2.cmake"])
        self.assertIn("add_library(MyPkG::MyPkG INTERFACE IMPORTED)",
                      content["FindMyPkG.cmake"])
        self.assertIn("add_library(MyPkG2::MyPkG2 INTERFACE IMPORTED)",
                      content["FindMyPkG2.cmake"])
        self.assertIn("find_dependency(MyPkG REQUIRED)",
                      content["FindMyPkG2.cmake"])

    def test_cmake_find_package_multi(self):
        generator = CMakeFindPackageMultiGenerator(self.conanfile)
        content = generator.content
        six.assertCountEqual(self, [
            'MyPkG2Targets.cmake', 'MyPkGConfig.cmake', 'MyPkG2Config.cmake',
            'MyPkGTargets.cmake', 'MyPkGTarget-debug.cmake',
            'MyPkG2Target-debug.cmake', 'MyPkGConfigVersion.cmake',
            'MyPkG2ConfigVersion.cmake'
        ], content.keys())
        self.assertNotIn("my_pkg", content["MyPkGConfig.cmake"])
        self.assertNotIn("MY_PKG", content["MyPkGConfig.cmake"])
        self.assertNotIn("my_pkg", content["MyPkG2Config.cmake"])
        self.assertNotIn("MY_PKG", content["MyPkG2Config.cmake"])
        self.assertIn("add_library(MyPkG::MyPkG INTERFACE IMPORTED)",
                      content["MyPkGTargets.cmake"])
        self.assertIn("add_library(MyPkG2::MyPkG2 INTERFACE IMPORTED)",
                      content["MyPkG2Targets.cmake"])
        self.assertIn("find_dependency(MyPkG REQUIRED NO_MODULE)",
                      content["MyPkG2Config.cmake"])
Esempio n. 12
0
class PremakeGeneratorTest(unittest.TestCase):
    content_template = textwrap.dedent("""\
    #!lua
    conan_build_type = "None"
    conan_arch = "None"

    conan_includedirs = {{"{include1}",
    "{include2}"}}
    conan_libdirs = {{"{lib1}",
    "{lib2}"}}
    conan_bindirs = {{"{bin1}",
    "{bin2}"}}
    conan_libs = {{"libfoo", "libbar"}}
    conan_system_libs = {{"syslib1", "syslib2"}}
    conan_defines = {{"MYDEFINE2", "MYDEFINE1"}}
    conan_cxxflags = {{"-march=native", "-fPIE"}}
    conan_cflags = {{"-mtune=native", "-fPIC"}}
    conan_sharedlinkflags = {{"-framework AudioFoundation", "-framework \\\"Some Spaced Framework\\\"", "-framework Cocoa"}}
    conan_exelinkflags = {{"-framework VideoToolbox", "-framework \\\"Other Spaced Framework\\\"", "-framework QuartzCore"}}

    conan_includedirs_MyPkg1 = {{"{include1}"}}
    conan_libdirs_MyPkg1 = {{"{lib1}"}}
    conan_bindirs_MyPkg1 = {{"{bin1}"}}
    conan_libs_MyPkg1 = {{"libfoo"}}
    conan_system_libs_MyPkg1 = {{"syslib1"}}
    conan_defines_MyPkg1 = {{"MYDEFINE1"}}
    conan_cxxflags_MyPkg1 = {{"-fPIE"}}
    conan_cflags_MyPkg1 = {{"-fPIC"}}
    conan_sharedlinkflags_MyPkg1 = {{"-framework Cocoa"}}
    conan_exelinkflags_MyPkg1 = {{"-framework QuartzCore"}}
    conan_rootpath_MyPkg1 = "{root1}"

    conan_includedirs_MyPkg2 = {{"{include2}"}}
    conan_libdirs_MyPkg2 = {{"{lib2}"}}
    conan_bindirs_MyPkg2 = {{"{bin2}"}}
    conan_libs_MyPkg2 = {{"libbar"}}
    conan_system_libs_MyPkg2 = {{"syslib2"}}
    conan_defines_MyPkg2 = {{"MYDEFINE2"}}
    conan_cxxflags_MyPkg2 = {{"-march=native"}}
    conan_cflags_MyPkg2 = {{"-mtune=native"}}
    conan_sharedlinkflags_MyPkg2 = {{"-framework AudioFoundation", "-framework \\\"Some Spaced Framework\\\""}}
    conan_exelinkflags_MyPkg2 = {{"-framework VideoToolbox", "-framework \\\"Other Spaced Framework\\\""}}
    conan_rootpath_MyPkg2 = "{root2}"

    function conan_basic_setup()
        configurations{{conan_build_type}}
        architecture(conan_arch)
        includedirs{{conan_includedirs}}
        libdirs{{conan_libdirs}}
        links{{conan_libs}}
        links{{conan_system_libs}}
        defines{{conan_defines}}
        bindirs{{conan_bindirs}}
    end
    """)

    def setUp(self):
        self.tmp_folder1 = temp_folder()
        self.tmp_folder2 = temp_folder()
        save(os.path.join(self.tmp_folder1, "include1", "file.h"), "")
        save(os.path.join(self.tmp_folder2, "include2", "file.h"), "")
        save(os.path.join(self.tmp_folder1, "lib1", "file.a"), "")
        save(os.path.join(self.tmp_folder2, "lib2", "file.a"), "")
        save(os.path.join(self.tmp_folder1, "bin1", "file.bin"), "")
        save(os.path.join(self.tmp_folder2, "bin2", "file.bin"), "")

        self.conanfile = ConanFile(TestBufferConanOutput(), None)
        self.conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables")
        cpp_info = CppInfo(self.tmp_folder1)
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.includedirs = ['include1']
        cpp_info.libdirs = ['lib1']
        cpp_info.libs = ['libfoo']
        cpp_info.system_libs = ['syslib1']
        cpp_info.bindirs = ['bin1']
        cpp_info.version = "0.1"
        cpp_info.cflags = ['-fPIC']
        cpp_info.cxxflags = ['-fPIE']
        cpp_info.sharedlinkflags = ['-framework Cocoa']
        cpp_info.exelinkflags = ['-framework QuartzCore']
        self.conanfile.deps_cpp_info.update(cpp_info, ref.name)
        ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables")
        cpp_info = CppInfo(self.tmp_folder2)
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.includedirs = ['include2']
        cpp_info.libdirs = ['lib2']
        cpp_info.libs = ['libbar']
        cpp_info.system_libs = ['syslib2']
        cpp_info.bindirs = ['bin2']
        cpp_info.version = "3.2.3"
        cpp_info.cflags = ['-mtune=native']
        cpp_info.cxxflags = ['-march=native']
        cpp_info.sharedlinkflags = [
            '-framework AudioFoundation', '-framework "Some Spaced Framework"'
        ]
        cpp_info.exelinkflags = [
            '-framework VideoToolbox', '-framework "Other Spaced Framework"'
        ]
        self.conanfile.deps_cpp_info.update(cpp_info, ref.name)

    def test_variables_content(self):
        generator = PremakeGenerator(self.conanfile)
        content = generator.content

        inc1 = os.path.join(self.tmp_folder1, 'include1').replace('\\', '/')
        inc2 = os.path.join(self.tmp_folder2, 'include2').replace('\\', '/')

        lib1 = os.path.join(self.tmp_folder1, 'lib1').replace('\\', '/')
        lib2 = os.path.join(self.tmp_folder2, 'lib2').replace('\\', '/')

        bin1 = os.path.join(self.tmp_folder1, 'bin1').replace('\\', '/')
        bin2 = os.path.join(self.tmp_folder2, 'bin2').replace('\\', '/')

        root1 = self.tmp_folder1.replace('\\', '/')
        root2 = self.tmp_folder2.replace('\\', '/')

        expected_content = self.content_template.format(include1=inc1,
                                                        include2=inc2,
                                                        lib1=lib1,
                                                        lib2=lib2,
                                                        bin1=bin1,
                                                        bin2=bin2,
                                                        root1=root1,
                                                        root2=root2)
        self.assertEqual(expected_content, content)
Esempio n. 13
0
    def test_idempotent(self):
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())

        # Add some cpp_info
        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.names["txt"] = "mypkg1-txt"
        cpp_info.version = ref.version
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.cxxflags = ["-cxxflag_parent"]
        cpp_info.includedirs = ["mypkg1/include"]
        cpp_info.filter_empty = False
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder2")
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.cxxflags = ["-cxxflag_dep"]
        cpp_info.filter_empty = False
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        # Add env_info
        env_info = EnvInfo()
        env_info.VAR1 = "value1"
        env_info.PATH.append("path-extended")
        conanfile.deps_env_info.update(env_info, "my_pkg")

        env_info = EnvInfo()
        env_info.VAR1 = "other-value1"
        env_info.PATH.append("other-path-extended")
        conanfile.deps_env_info.update(env_info, "other-pkg")

        # Add user_info for HOST
        user_info = UserInfo()
        user_info.VAR1 = "value1"
        conanfile.deps_user_info["my_pkg"] = user_info

        user_info = UserInfo()
        user_info.VAR1 = "other-value1"
        conanfile.deps_user_info["other-pkg"] = user_info

        # Add user_info for BUILD
        conanfile.user_info_build = DepsUserInfo()
        user_info = UserInfo()
        user_info.VAR1 = "value1"
        conanfile.user_info_build["build_pkg"] = user_info

        user_info = UserInfo()
        user_info.VAR1 = "other-value1"
        conanfile.user_info_build["other-build-pkg"] = user_info

        master_content = TXTGenerator(conanfile).content
        after_cpp_info, after_user_info, after_env_info, after_user_info_build = \
            TXTGenerator.loads(master_content, filter_empty=False)
        # Assign them to a different conanfile
        other_conanfile = ConanFile(TestBufferConanOutput(), None)
        other_conanfile.initialize(Settings({}), EnvValues())
        other_conanfile.deps_cpp_info = after_cpp_info
        other_conanfile.deps_env_info = after_env_info
        other_conanfile.deps_user_info = after_user_info
        other_conanfile.user_info_build = after_user_info_build
        after_content = TXTGenerator(other_conanfile).content

        self.assertListEqual(master_content.splitlines(),
                             after_content.splitlines())
Esempio n. 14
0
    def variables_setup_test(self):
        tmp_folder1 = temp_folder()
        tmp_folder2 = temp_folder()
        save(os.path.join(tmp_folder1, "include1", "file.h"), "")
        save(os.path.join(tmp_folder2, "include2", "file.h"), "")
        save(os.path.join(tmp_folder1, "lib1", "file.a"), "")
        save(os.path.join(tmp_folder2, "lib2", "file.a"), "")
        save(os.path.join(tmp_folder1, "bin1", "file.bin"), "")
        save(os.path.join(tmp_folder2, "bin2", "file.bin"), "")

        conanfile = ConanFile(None, None)
        conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("MyPkg1/0.1@lasote/stables")
        cpp_info = CppInfo(tmp_folder1)
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.includedirs = ['include1']
        cpp_info.libdirs = ['lib1']
        cpp_info.libs = ['libfoo']
        cpp_info.bindirs = ['bin1']
        cpp_info.version = "0.1"
        cpp_info.cflags = ['-fPIC']
        cpp_info.cppflags = ['-fPIE']
        cpp_info.sharedlinkflags = ['-framework Cocoa']
        cpp_info.exelinkflags = ['-framework QuartzCore']
        conanfile.deps_cpp_info.update(cpp_info, ref.name)
        ref = ConanFileReference.loads("MyPkg2/3.2.3@lasote/stables")
        cpp_info = CppInfo(tmp_folder2)
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.includedirs = ['include2']
        cpp_info.libdirs = ['lib2']
        cpp_info.libs = ['libbar']
        cpp_info.bindirs = ['bin2']
        cpp_info.version = "3.2.3"
        cpp_info.cflags = ['-mtune=native']
        cpp_info.cppflags = ['-march=native']
        cpp_info.sharedlinkflags = ['-framework AudioFoundation']
        cpp_info.exelinkflags = ['-framework VideoToolbox']
        conanfile.deps_cpp_info.update(cpp_info, ref.name)
        generator = PremakeGenerator(conanfile)
        content = generator.content

        self.assertIn('conan_cppdefines = {"MYDEFINE2", "MYDEFINE1"}', content)
        self.assertIn('conan_cppdefines_MyPkg1 = {"MYDEFINE1"}', content)
        self.assertIn('conan_cppdefines_MyPkg2 = {"MYDEFINE2"}', content)

        inc1 = os.path.join(tmp_folder1, 'include1').replace('\\', '/')
        inc2 = os.path.join(tmp_folder2, 'include2').replace('\\', '/')
        self.assertIn('conan_includedirs = {"%s",\n"%s"}' % (inc1, inc2),
                      content)
        self.assertIn('conan_includedirs_MyPkg1 = {"%s"}' % inc1, content)
        self.assertIn('conan_includedirs_MyPkg2 = {"%s"}' % inc2, content)

        lib1 = os.path.join(tmp_folder1, 'lib1').replace('\\', '/')
        lib2 = os.path.join(tmp_folder2, 'lib2').replace('\\', '/')
        self.assertIn('conan_libdirs = {"%s",\n"%s"}' % (lib1, lib2), content)
        self.assertIn('conan_libdirs_MyPkg1 = {"%s"}' % lib1, content)
        self.assertIn('conan_libdirs_MyPkg2 = {"%s"}' % lib2, content)

        bin1 = os.path.join(tmp_folder1, 'bin1').replace('\\', '/')
        bin2 = os.path.join(tmp_folder2, 'bin2').replace('\\', '/')
        self.assertIn('conan_bindirs = {"%s",\n"%s"}' % (bin1, bin2), content)
        self.assertIn('conan_bindirs_MyPkg1 = {"%s"}' % bin1, content)
        self.assertIn('conan_bindirs_MyPkg2 = {"%s"}' % bin2, content)

        self.assertIn('conan_libs = {"libfoo", "libbar"}', content)
        self.assertIn('conan_libs_MyPkg1 = {"libfoo"}', content)
        self.assertIn('conan_libs_MyPkg2 = {"libbar"}', content)

        self.assertIn('conan_cflags = {"-mtune=native", "-fPIC"}', content)
        self.assertIn('conan_cflags_MyPkg1 = {"-fPIC"}', content)
        self.assertIn('conan_cflags_MyPkg2 = {"-mtune=native"}', content)

        self.assertIn('conan_cppflags = {"-march=native", "-fPIE"}', content)
        self.assertIn('conan_cppflags_MyPkg1 = {"-fPIE"}', content)
        self.assertIn('conan_cppflags_MyPkg2 = {"-march=native"}', content)

        self.assertIn(
            'conan_sharedlinkflags = {"-framework AudioFoundation", "-framework Cocoa"}',
            content)
        self.assertIn('conan_sharedlinkflags_MyPkg1 = {"-framework Cocoa"}',
                      content)
        self.assertIn(
            'conan_sharedlinkflags_MyPkg2 = {"-framework AudioFoundation"}',
            content)

        self.assertIn(
            'conan_exelinkflags = {"-framework VideoToolbox", "-framework QuartzCore"}',
            content)
        self.assertIn('conan_exelinkflags_MyPkg1 = {"-framework QuartzCore"}',
                      content)
        self.assertIn(
            'conan_exelinkflags_MyPkg2 = {"-framework VideoToolbox"}', content)
Esempio n. 15
0
    def test_toolchain_linux(self, build_type, arch, cppstd, libcxx, shared,
                             fpic):
        settings_mock = _MockSettings(build_type, arch, cppstd, libcxx)
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.options = {"shared": [True, False], "fPIC": [True, False]}
        conanfile.default_options = {"shared": shared, "fPIC": fpic}
        conanfile.initialize(settings_mock, EnvValues())
        toolchain = MakeToolchain(conanfile)
        content = toolchain.content

        expected_template = Template(
            textwrap.dedent("""
            # Conan generated toolchain file
            ifndef CONAN_TOOLCHAIN_INCLUDED
                CONAN_TOOLCHAIN_INCLUDED = TRUE
                CONAN_TC_BUILD_TYPE = {{build_type}}
                CONAN_TC_OS_HOST = None
                CONAN_TC_ARCH_HOST = {{arch_host}}
                CONAN_TC_TRIPLET_HOST = False
                CONAN_TC_OS_BUILD = Linux
                CONAN_TC_ARCH_BUILD = {{arch_build}}
                CONAN_TC_TRIPLET_BUILD = False
                CONAN_TC_OS_TARGET = None
                CONAN_TC_ARCH_TARGET = None
                CONAN_TC_TRIPLET_TARGET = None
                CONAN_TC_COMPILER = {{compiler}}
                CONAN_TC_COMPILER_VERSION = {{compiler_version}}
                CONAN_TC_COMPILER_RUNTIME = None
                CONAN_TC_LIBCXX = {{libcxx}}
                CONAN_TC_CPPSTD_FLAG = {{cppstd_flag}}
                CONAN_TC_ARCH_FLAG = {{arch_flag}}
                CONAN_TC_BUILD_TYPE_FLAGS = {{build_type_flags}}
                CONAN_TC_DEFINES ={{preserved_space}}

                CONAN_TC_SET_LIBCXX = True
                CONAN_TC_SET_CPPSTD = True
                CONAN_TC_SET_ARCH = True
                CONAN_TC_SET_FPIC = {{set_fpic}}
                CONAN_TC_SET_SHARED = {{set_shared}}

                CONAN_TC_CFLAGS += $(CONAN_TC_BUILD_TYPE_FLAGS)
                CONAN_TC_CXXFLAGS += $(CONAN_TC_BUILD_TYPE_FLAGS)

                ifeq ($(CONAN_TC_BUILD_TYPE),Release)
                    CONAN_TC_DEFINES += NDEBUG
                endif

                ifeq ($(CONAN_TC_SET_LIBCXX),True)
                    CONAN_TC_CLANG_BASED := $(if $(filter $(CONAN_TC_COMPILER),clang apple-clang),true)
                    ifeq ($(CONAN_TC_CLANG_BASED),True)
                        CONAN_TC_LIBSTDCXX_BASED := $(if $(filter $(CONAN_TC_LIBCXX),libstdc++ libstdc++11),true)
                        ifeq ($(CONAN_TC_LIBSTDCXX_BASED),True)
                            CONAN_TC_CXXFLAGS += -stdlib=libstdc++
                        else ifeq ($(CONAN_TC_LIBCXX),libc++)
                            CONAN_TC_CXXFLAGS += -stdlib=libc++
                        endif
                    else ifeq ($(CONAN_TC_COMPILER),sun-cc)
                        ifeq ($(CONAN_TC_LIBCXX),libCstd)
                            CONAN_TC_CXXFLAGS += -library=Cstd++
                        else ifeq ($(CONAN_TC_LIBCXX),libstdcxx)
                            CONAN_TC_CXXFLAGS += -library=stdcxx4
                        else ifeq ($(CONAN_TC_LIBCXX),libstlport)
                            CONAN_TC_CXXFLAGS += -library=stlport4
                        else ifeq ($(CONAN_TC_LIBCXX),libstdc++)
                            CONAN_TC_CXXFLAGS += -library=stdcpp
                        endif
                    endif
                    ifeq ($(CONAN_TC_LIBCXX),libstdc++11)
                        CONAN_TC_DEFINES += GLIBCXX_USE_CXX11_ABI=1
                    else ifeq ($(CONAN_TC_LIBCXX),libstdc++)
                        CONAN_TC_DEFINES += GLIBCXX_USE_CXX11_ABI=0
                    endif
                endif
                ifeq ($(CONAN_TC_SET_CPPSTD),True)
                    CONAN_TC_CXXFLAGS += $(CONAN_TC_CPPSTD_FLAG)
                endif
                ifeq ($(CONAN_TC_SET_ARCH),True)
                    CONAN_TC_CFLAGS += $(CONAN_TC_ARCH_FLAG)
                    CONAN_TC_CXXFLAGS += $(CONAN_TC_ARCH_FLAG)
                    CONAN_TC_SHARED_LINKER_FLAGS += $(CONAN_TC_ARCH_FLAG)
                    CONAN_TC_EXE_LINKER_FLAGS += $(CONAN_TC_ARCH_FLAG)
                endif
                ifeq ($(CONAN_TC_SET_FPIC),True)
                    CONAN_TC_CFLAGS += -fPIC
                    CONAN_TC_CXXFLAGS += -fPIC
                    CONAN_TC_SHARED_LINKER_FLAGS += -fPIC
                    CONAN_TC_EXE_LINKER_FLAGS += -pie
                endif
                ifeq ($(CONAN_TC_SET_SHARED),True)
                    CONAN_TC_LDFLAGS += -shared
                    CONAN_TC_LDFLAGS += $(CONAN_TC_SHARED_LINKER_FLAGS)
                else
                    CONAN_TC_LDFLAGS += $(CONAN_TC_EXE_LINKER_FLAGS)
                endif
            endif

            CONAN_TC_CPPFLAGS += $(addprefix -D,$(CONAN_TC_DEFINES))

            # Call this function in your Makefile to have Conan variables added to the standard variables
            # Example:  $(call CONAN_TC_SETUP)

            CONAN_TC_SETUP =  \\
                $(eval CFLAGS += $(CONAN_TC_CFLAGS)) ; \\
                $(eval CXXFLAGS += $(CONAN_TC_CXXFLAGS)) ; \\
                $(eval CPPFLAGS += $(CONAN_TC_CPPFLAGS)) ; \\
                $(eval LDFLAGS += $(CONAN_TC_LDFLAGS)) ;
        """))

        context = {
            "arch_host": conanfile.settings.get_safe("arch"),
            "arch_build": detected_architecture(),
            "compiler": conanfile.settings.get_safe("compiler"),
            "compiler_version":
            conanfile.settings.get_safe("compiler.version"),
            "arch_flag": architecture_flag(settings_mock),
            "cppstd_flag": cppstd_flag_new(conanfile.settings),
            "build_type_flags": " ".join(build_type_flags(conanfile.settings)),
            "build_type": build_type,
            "libcxx": libcxx,
            "set_shared": shared,
            "set_fpic": fpic,
            "preserved_space": " ",
        }
        #
        expected_content = expected_template.render(context)

        self.maxDiff = None
        self.assertIn(expected_content, content)
Esempio n. 16
0
    def test_variables_setup(self):

        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())

        ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder1")
        cpp_info.defines = ["MYDEFINE1"]
        cpp_info.cflags.append("-Flag1=23")
        cpp_info.version = "1.3"
        cpp_info.description = "My cool description"
        cpp_info.libs = ["MyLib1"]
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        ref = ConanFileReference.loads("MyPkg2/0.1@lasote/stables")
        cpp_info = CppInfo(ref.name, "dummy_root_folder2")
        cpp_info.libs = ["MyLib2"]
        cpp_info.defines = ["MYDEFINE2"]
        cpp_info.version = "2.3"
        cpp_info.exelinkflags = ["-exelinkflag"]
        cpp_info.sharedlinkflags = ["-sharedlinkflag"]
        cpp_info.cxxflags = ["-cxxflag"]
        cpp_info.public_deps = ["MyPkg"]
        cpp_info.libdirs.extend(["Path\\with\\slashes", "regular/path/to/dir"])
        cpp_info.includedirs.extend(
            ["other\\Path\\with\\slashes", "other/regular/path/to/dir"])
        cpp_info.filter_empty = False
        conanfile.deps_cpp_info.add(ref.name, cpp_info)
        generator = BoostBuildGenerator(conanfile)

        self.assertEqual(
            generator.content, """lib MyLib1 :
	: # requirements
	<name>MyLib1
	: # default-build
	: # usage-requirements
	<define>MYDEFINE1
	<cflags>-Flag1=23
	;

lib MyLib2 :
	: # requirements
	<name>MyLib2
	<search>dummy_root_folder2/lib
	<search>dummy_root_folder2/Path/with/slashes
	<search>dummy_root_folder2/regular/path/to/dir
	: # default-build
	: # usage-requirements
	<define>MYDEFINE2
	<include>dummy_root_folder2/include
	<include>dummy_root_folder2/other/Path/with/slashes
	<include>dummy_root_folder2/other/regular/path/to/dir
	<cxxflags>-cxxflag
	<ldflags>-sharedlinkflag
	;

alias conan-deps :
	MyLib1
	MyLib2
;
""")