コード例 #1
0
 def test_frameworks(self):
     conanfile = ConanFile(Mock(), None)
     conanfile.initialize(Settings({}), EnvValues())
     framework_path = os.getcwd(
     )  # must exist, otherwise filtered by framework_paths
     cpp_info = CppInfo("MyPkg", "/rootpath")
     cpp_info.frameworks = ["HelloFramework"]
     cpp_info.frameworkdirs = [framework_path]
     conanfile.deps_cpp_info.add("MyPkg", DepCppInfo(cpp_info))
     generator = QmakeGenerator(conanfile)
     content = generator.content
     qmake_lines = content.splitlines()
     self.assertIn('CONAN_FRAMEWORKS += -framework HelloFramework',
                   qmake_lines)
     self.assertIn('CONAN_FRAMEWORK_PATHS += -F%s' % framework_path,
                   qmake_lines)
コード例 #2
0
ファイル: test_abs_paths.py プロジェクト: Imerso3D/conan
    def test_abs_path_unix(self):
        conanfile = ConanFile(Mock(), None)
        conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("pkg/0.1")
        cpp_info = CppInfo(ref.name, "/rootdir")
        cpp_info.includedirs = ["/an/absolute/dir"]
        cpp_info.filter_empty = False
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        master_content = TXTGenerator(conanfile).content
        after_cpp_info, _, _, _ = TXTGenerator.loads(master_content,
                                                     filter_empty=False)
        self.assertListEqual(after_cpp_info[ref.name].includedirs,
                             ["../an/absolute/dir"])
        self.assertListEqual(after_cpp_info[ref.name].include_paths,
                             ["/rootdir/../an/absolute/dir"])
コード例 #3
0
ファイル: test_abs_paths.py プロジェクト: Imerso3D/conan
    def test_absolute_directory(self):
        conanfile = ConanFile(Mock(), None)
        conanfile.initialize(Settings({}), EnvValues())
        ref = ConanFileReference.loads("pkg/0.1")
        cpp_info = CppInfo(ref.name, "C:/my/root/path")
        cpp_info.includedirs = ["D:/my/path/to/something"]
        cpp_info.filter_empty = False
        conanfile.deps_cpp_info.add(ref.name, cpp_info)

        master_content = TXTGenerator(conanfile).content
        after_cpp_info, _, _, _ = TXTGenerator.loads(master_content,
                                                     filter_empty=False)
        self.assertListEqual(after_cpp_info[ref.name].includedirs,
                             ["D:/my/path/to/something"])
        self.assertListEqual(after_cpp_info[ref.name].include_paths,
                             ["D:/my/path/to/something"])
コード例 #4
0
 def validate_additional_dependencies(lib, additional_dep):
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(Settings({}), EnvValues())
     ref = ConanFileReference.loads("MyPkg/0.1@user/testing")
     cpp_info = CppInfo(ref.name, "dummy_root_folder1")
     cpp_info.libs = [lib]
     conanfile.deps_cpp_info.add(ref.name, cpp_info)
     generator = VisualStudioGenerator(conanfile)
     content = generator.content
     self.assertIn(
         "<ConanLibraries>%s;</ConanLibraries>" % additional_dep,
         content)
     self.assertIn(
         "<AdditionalDependencies>"
         "$(ConanLibraries)%(AdditionalDependencies)"
         "</AdditionalDependencies>", content)
コード例 #5
0
    def _get_graph(self, reference, current_path, remote, options, settings, filename, update,
                   check_updates, manifest_manager, scopes, package_settings, env_values):

        loader = self._loader(current_path, settings, package_settings, options,
                              scopes, env_values, use_conaninfo=False)
        # Not check for updates for info command, it'll be checked when dep graph is built

        remote_proxy = ConanProxy(self._client_cache, self._user_io, self._remote_manager, remote,
                                  update=update, check_updates=check_updates,
                                  manifest_manager=manifest_manager)

        if isinstance(reference, ConanFileReference):
            project_reference = None
            conanfile = loader.load_virtual(reference, current_path)
            is_txt = True
        else:
            conanfile_path = reference
            project_reference = "PROJECT"
            output = ScopedOutput(project_reference, self._user_io.out)
            try:
                if filename and filename.endswith(".txt"):
                    raise NotFoundException("")
                conan_file_path = os.path.join(conanfile_path, filename or CONANFILE)
                conanfile = loader.load_conan(conan_file_path, output, consumer=True)
                is_txt = False
                if conanfile.name is not None and conanfile.version is not None:
                    project_reference = "%s/%s@" % (conanfile.name, conanfile.version)
                    project_reference += "PROJECT"
            except NotFoundException:  # Load conanfile.txt
                conan_path = os.path.join(conanfile_path, filename or CONANFILE_TXT)
                conanfile = loader.load_conan_txt(conan_path, output)
                is_txt = True
        # build deps graph and install it
        local_search = None if update else self._search_manager
        resolver = RequireResolver(self._user_io.out, local_search, remote_proxy)
        builder = DepsGraphBuilder(remote_proxy, self._user_io.out, loader, resolver)
        deps_graph = builder.load(None, conanfile)
        # These lines are so the conaninfo stores the correct complete info
        if is_txt:
            conanfile.info.settings = loader._settings.values
        conanfile.info.full_settings = loader._settings.values
        conanfile.info.scope = self._current_scopes
        conanfile.cpp_info = CppInfo(current_path)
        conanfile.env_info = EnvInfo(current_path)
        registry = RemoteRegistry(self._client_cache.registry, self._user_io.out)
        return (builder, deps_graph, project_reference, registry, conanfile,
                remote_proxy, loader)
コード例 #6
0
    def components_libs_order_test(self):
        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        dep_cpp_info = DepCppInfo(info)
        self.assertListEqual(["liba", "libb"], dep_cpp_info.libs)
        deps_cpp_info = DepsCppInfo()
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["liba", "libb"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["liba", "libb"], list(deps_cpp_info.libs))

        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        dep_cpp_info = DepCppInfo(info)
        info2 = CppInfo("dep2", "")
        info2.components["libc"].libs = ["libc"]
        dep_cpp_info2 = DepCppInfo(info2)
        deps_cpp_info = DepsCppInfo()
        # Update in reverse order
        deps_cpp_info.add("dep2", dep_cpp_info2)
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["liba", "libb"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["libc", "liba", "libb"],
                             list(deps_cpp_info.libs))

        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        info.components["libb"].requires = ["liba"]
        dep_cpp_info = DepCppInfo(info)
        self.assertListEqual(["libb", "liba"], dep_cpp_info.libs)
        deps_cpp_info = DepsCppInfo()
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["libb", "liba"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libb", "liba"], list(deps_cpp_info.libs))

        info = CppInfo("dep1", "")
        info.components["liba"].libs = ["liba"]
        info.components["libb"].libs = ["libb"]
        info.components["libb"].requires = ["liba"]
        dep_cpp_info = DepCppInfo(info)
        info2 = CppInfo("dep2", "")
        info2.components["libc"].libs = ["libc"]
        dep_cpp_info2 = DepCppInfo(info2)
        deps_cpp_info = DepsCppInfo()
        # Update in reverse order
        deps_cpp_info.add("dep2", dep_cpp_info2)
        deps_cpp_info.add("dep1", dep_cpp_info)
        self.assertListEqual(["libb", "liba"], deps_cpp_info["dep1"].libs)
        self.assertListEqual(["libc"], deps_cpp_info["dep2"].libs)
        self.assertListEqual(["libc", "libb", "liba"],
                             list(deps_cpp_info.libs))
コード例 #7
0
ファイル: test_dump_load.py プロジェクト: zhengweina/conan
    def test_names_per_generator(self):
        cpp_info = CppInfo("pkg_name", "root")
        cpp_info.name = "name"
        cpp_info.names["txt"] = "txt_name"
        cpp_info.names["cmake_find_package"] = "SpecialName"
        cpp_info.filenames["cmake_find_package"] = "SpecialFileName"
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(Settings({}), EnvValues())
        conanfile.deps_cpp_info.add("pkg_name", DepCppInfo(cpp_info))
        content = TXTGenerator(conanfile).content
        parsed_deps_cpp_info, _, _, _ = TXTGenerator.loads(content, filter_empty=False)

        parsed_cpp_info = parsed_deps_cpp_info["pkg_name"]
        self.assertEqual(parsed_cpp_info.get_name("txt"), "txt_name")
        self.assertEqual(parsed_cpp_info.get_name("cmake_find_package"), "SpecialName")
        self.assertEqual(parsed_cpp_info.get_filename("cmake_find_package"), "SpecialFileName")
        self.assertEqual(parsed_cpp_info.get_name("pkg_config"), "pkg_name")
コード例 #8
0
 def deps_cpp_info_components_test(self):
     folder = temp_folder()
     info = CppInfo("my_lib", folder)
     # Create file so path is not cleared
     save(os.path.join(folder, "include", "my_file.h"), "")
     info.components["Component"].libs = ["libcomp"]
     dep_info = DepCppInfo(info)
     deps_cpp_info = DepsCppInfo()
     deps_cpp_info.add("my_lib", dep_info)
     self.assertListEqual(["libcomp"], deps_cpp_info.libs)
     self.assertListEqual(
         ["libcomp"], deps_cpp_info["my_lib"].components["Component"].libs)
     self.assertListEqual([os.path.join(folder, "include")],
                          deps_cpp_info.include_paths)
     self.assertListEqual(
         [os.path.join(folder, "include")],
         deps_cpp_info["my_lib"].components["Component"].include_paths)
コード例 #9
0
def write_generators(conanfile, path, output):
    """ produces auxiliary files, required to build a project or a package.
    """

    from conans.model.build_info import CppInfo

    conanfile.cpp_info = CppInfo(path)
    conanfile.cpp_info.dependencies = []
    conanfile.package_info()

    for generator_name in conanfile.generators:
        if generator_name not in registered_generators:
            output.warn(
                "Invalid generator '%s'. Available types: %s" %
                (generator_name, ", ".join(registered_generators.available)))
        else:
            generator_class = registered_generators[generator_name]
            try:
                generator = generator_class(conanfile)
            except TypeError:
                # To allow old-style generator packages to work (e.g. premake)
                output.warn(
                    "Generator %s failed with new __init__(), trying old one")
                generator = generator_class(conanfile.deps_cpp_info,
                                            conanfile.cpp_info)

            try:
                content = generator.content
                if isinstance(content, dict):
                    if generator.filename:
                        output.warn(
                            "Generator %s is multifile. Property 'filename' not used"
                            % (generator_name, ))
                    for k, v in content.items():
                        v = normalize(v)
                        output.info("Generated %s created %s" %
                                    (generator_name, k))
                        save(join(path, k), v)
                else:
                    content = normalize(content)
                    output.info("Generated %s created %s" %
                                (generator_name, generator.filename))
                    save(join(path, generator.filename), content)
            except Exception as e:
                output.error("Generator %s(file:%s) failed\n%s" %
                             (generator_name, generator.filename, str(e)))
コード例 #10
0
 def cpp_info_test(self):
     folder = temp_folder()
     info = CppInfo(folder)
     info.includedirs.append("/usr/include")
     info.libdirs.append("/usr/lib")
     bin_abs_dir = "C:/usr/bin" if platform.system(
     ) == "Windows" else "/tmp"
     info.bindirs.append(bin_abs_dir)
     info.bindirs.append("local_bindir")
     self.assertEqual(info.include_paths,
                      [os.path.join(folder, "include"), "/usr/include"])
     self.assertEqual(info.lib_paths,
                      [os.path.join(folder, "lib"), "/usr/lib"])
     self.assertEqual(info.bin_paths, [
         os.path.join(folder, "bin"), bin_abs_dir,
         os.path.join(folder, "local_bindir")
     ])
コード例 #11
0
def test_component_name_same_package():
    """
    When the package and the component are the same the variables declared in data and linked
    to the target have to be the same.
    https://github.com/conan-io/conan/issues/9071"""
    conanfile = ConanFile(Mock(), None)
    conanfile._conan_node = Mock()
    conanfile._conan_node.context = "host"
    conanfile.settings = "os", "compiler", "build_type", "arch"
    conanfile.initialize(
        Settings({
            "os": ["Windows"],
            "compiler": ["gcc"],
            "build_type": ["Release"],
            "arch": ["x86"]
        }), EnvValues())
    conanfile.settings.build_type = "Release"
    conanfile.settings.arch = "x86"

    cpp_info = CppInfo("mypkg", "dummy_root_folder1")

    # We adjust the component with the same name as the package on purpose
    cpp_info.components["mypkg"].includedirs = ["includedirs1"]

    conanfile_dep = ConanFile(Mock(), None)
    conanfile_dep.cpp_info = cpp_info
    conanfile_dep._conan_node = Mock()
    conanfile_dep._conan_node.context = "host"
    conanfile_dep._conan_node.ref = ConanFileReference.loads("mypkg/1.0")
    conanfile_dep.folders.set_base_package("/path/to/folder_dep")

    with mock.patch('conans.ConanFile.dependencies',
                    new_callable=mock.PropertyMock) as mock_deps:
        req = Requirement(ConanFileReference.loads("mypkg/1.0"))
        mock_deps.return_value = ConanFileDependencies(
            {req: ConanFileInterface(conanfile_dep)})

        cmakedeps = CMakeDeps(conanfile)
        files = cmakedeps.content
        target_cmake = files["mypkg-Target-release.cmake"]
        assert "$<$<CONFIG:Release>:${mypkg_mypkg_mypkg_INCLUDE_DIRS_RELEASE}> APPEND)" \
               in target_cmake

        data_cmake = files["mypkg-release-x86-data.cmake"]
        assert 'set(mypkg_mypkg_mypkg_INCLUDE_DIRS_RELEASE ' \
               '"${mypkg_PACKAGE_FOLDER_RELEASE}/includedirs1")' in data_cmake
コード例 #12
0
ファイル: cmake_test.py プロジェクト: ttencate/conan
 def escaped_flags_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.includedirs.append("other_include_dir")
     cpp_info.cxxflags = ["-load", r"C:\foo\bar.dll"]
     cpp_info.cflags = ["-load", r"C:\foo\bar2.dll"]
     cpp_info.defines = ['MY_DEF=My string', 'MY_DEF2=My other string']
     conanfile.deps_cpp_info.add(ref.name, cpp_info)
     generator = CMakeGenerator(conanfile)
     content = generator.content
     cmake_lines = content.splitlines()
     self.assertIn(r'set(CONAN_C_FLAGS_MYPKG "-load C:\\foo\\bar2.dll")', cmake_lines)
     self.assertIn(r'set(CONAN_CXX_FLAGS_MYPKG "-load C:\\foo\\bar.dll")', cmake_lines)
     self.assertIn(r'set(CONAN_DEFINES_MYPKG "-DMY_DEF=My string"', cmake_lines)
     self.assertIn('\t\t\t"-DMY_DEF2=My other string")', cmake_lines)
コード例 #13
0
def test_cpp_info_name_cmakedeps(using_properties):
    conanfile = ConanFile(Mock(), None)
    conanfile.settings = "os", "compiler", "build_type", "arch"
    conanfile.initialize(
        Settings({
            "os": ["Windows"],
            "compiler": ["gcc"],
            "build_type": ["Release"],
            "arch": ["x86"]
        }), EnvValues())
    conanfile.settings.build_type = "Release"
    conanfile.settings.arch = "x86"

    cpp_info = CppInfo("mypkg", "dummy_root_folder1")
    if using_properties:
        cpp_info.set_property("cmake_target_name", "MySuperPkg1")
        cpp_info.set_property("cmake_file_name", "ComplexFileName1")
    else:
        cpp_info.names["cmake_find_package_multi"] = "MySuperPkg1"
        cpp_info.filenames["cmake_find_package_multi"] = "ComplexFileName1"

    conanfile_dep = ConanFile(Mock(), None)
    conanfile_dep.cpp_info = cpp_info

    with mock.patch('conans.ConanFile.ref',
                    new_callable=mock.PropertyMock) as mock_ref:
        with mock.patch('conans.ConanFile.dependencies',
                        new_callable=mock.PropertyMock) as mock_deps:
            mock_ref.return_value = ConanFileReference.loads(
                "OriginalDepName/1.0")
            mock_deps.return_value = Mock()

            conanfile_dep.package_folder = "/path/to/folder_dep"
            conanfile.dependencies.transitive_host_requires = [
                ConanFileInterface(conanfile_dep)
            ]
            conanfile.dependencies.host_requires = [
                ConanFileInterface(conanfile_dep)
            ]

            cmakedeps = CMakeDeps(conanfile)
            files = cmakedeps.content
            assert "TARGET MySuperPkg1::MySuperPkg1" in files[
                "ComplexFileName1Config.cmake"]
            assert 'set(MySuperPkg1_INCLUDE_DIRS_RELEASE "${MySuperPkg1_PACKAGE_FOLDER}/include")' \
                   in files["ComplexFileName1-release-x86-data.cmake"]
コード例 #14
0
ファイル: installer.py プロジェクト: tru/conan
def init_cpp_info(deps_graph, paths):
    """ Made external so it is independent of installer and can called
    in testing too
    """
    # Assign export root folders
    for node in deps_graph.nodes:
        conan_ref, conan_file = node
        if conan_ref:
            package_id = conan_file.info.package_id()
            package_reference = PackageReference(conan_ref, package_id)
            package_folder = paths.package(package_reference)
            conan_file.cpp_info = CppInfo(package_folder)
            try:
                conan_file.package_info()
            except Exception as e:
                raise ConanException("Error in %s\n\tpackage_info()\n\t%s" %
                                     (conan_ref, str(e)))
コード例 #15
0
def test_cpp_info_name_cmakedeps_components():
    conanfile = ConanFile(Mock(), None)
    conanfile._conan_node = Mock()
    conanfile._conan_node.context = "host"
    conanfile.settings = "os", "compiler", "build_type", "arch"
    conanfile.initialize(
        Settings({
            "os": ["Windows"],
            "compiler": ["gcc"],
            "build_type": ["Release", "Debug"],
            "arch": ["x86", "x64"]
        }), EnvValues())
    conanfile.settings.build_type = "Debug"
    conanfile.settings.arch = "x64"

    cpp_info = CppInfo("mypkg", "dummy_root_folder1")
    cpp_info.set_property("cmake_target_name",
                          "GlobakPkgName1::GlobakPkgName1")
    cpp_info.components["mycomp"].set_property("cmake_target_name",
                                               "GlobakPkgName1::MySuperPkg1")
    cpp_info.set_property("cmake_file_name", "ComplexFileName1")

    conanfile_dep = ConanFile(Mock(), None)
    conanfile_dep.cpp_info = cpp_info
    conanfile_dep._conan_node = Mock()
    conanfile_dep._conan_node.ref = ConanFileReference.loads(
        "OriginalDepName/1.0")
    conanfile_dep._conan_node.context = "host"
    conanfile_dep.folders.set_base_package("/path/to/folder_dep")

    with mock.patch('conans.ConanFile.dependencies',
                    new_callable=mock.PropertyMock) as mock_deps:
        req = Requirement(ConanFileReference.loads("OriginalDepName/1.0"))
        mock_deps.return_value = ConanFileDependencies(
            {req: ConanFileInterface(conanfile_dep)})

        cmakedeps = CMakeDeps(conanfile)
        files = cmakedeps.content
        assert "TARGET GlobakPkgName1::MySuperPkg1" in files[
            "ComplexFileName1-Target-debug.cmake"]
        assert 'set(OriginalDepName_INCLUDE_DIRS_DEBUG ' \
               '"${OriginalDepName_PACKAGE_FOLDER_DEBUG}/include")' \
               in files["ComplexFileName1-debug-x64-data.cmake"]
        assert 'set(OriginalDepName_GlobakPkgName1_MySuperPkg1_INCLUDE_DIRS_DEBUG ' \
               '"${OriginalDepName_PACKAGE_FOLDER_DEBUG}/include")' \
               in files["ComplexFileName1-debug-x64-data.cmake"]
コード例 #16
0
ファイル: cmake_test.py プロジェクト: ttencate/conan
 def paths_cmake_test(self):
     settings_mock = _MockSettings()
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(settings_mock, EnvValues())
     ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
     tmp_folder = temp_folder()
     save(os.path.join(tmp_folder, "lib", "mylib.lib"), "")
     save(os.path.join(tmp_folder, "include", "myheader.h"), "")
     cpp_info = CppInfo(ref.name, tmp_folder)
     cpp_info.release.libs = ["hello"]
     cpp_info.debug.libs = ["hello_D"]
     conanfile.deps_cpp_info.add(ref.name, cpp_info)
     generator = CMakeGenerator(conanfile)
     content = generator.content
     content = content.replace(tmp_folder.replace("\\", "/"), "root_folder")
     cmake_lines = content.splitlines()
     self.assertIn('set(CONAN_INCLUDE_DIRS_MYPKG_RELEASE "root_folder/include")', cmake_lines)
     self.assertIn('set(CONAN_LIB_DIRS_MYPKG_RELEASE "root_folder/lib")', cmake_lines)
コード例 #17
0
    def _loads_cpp_info(text):
        pattern = re.compile(r"^\[([a-zA-Z0-9._:-]+)\]([^\[]+)", re.MULTILINE)
        result = DepsCppInfo()

        try:
            for m in pattern.finditer(text):
                var_name = m.group(1)
                lines = []
                for line in m.group(2).splitlines():
                    line = line.strip()
                    if not line or line[0] == "#":
                        continue
                    lines.append(line)
                if not lines:
                    continue
                tokens = var_name.split(":")
                if len(tokens) == 2:  # has config
                    var_name, config = tokens
                else:
                    config = None
                tokens = var_name.split("_", 1)
                field = tokens[0]
                if len(tokens) == 2:
                    dep = tokens[1]
                    dep_cpp_info = result._dependencies.setdefault(
                        dep, CppInfo(root_folder=""))
                    if field in ["rootpath", "sysroot"]:
                        lines = lines[0]
                    item_to_apply = dep_cpp_info
                else:
                    if field == "sysroot":
                        lines = lines[0]
                    item_to_apply = result
                if config:
                    config_deps = getattr(item_to_apply, config)
                    setattr(config_deps, field, lines)
                else:
                    setattr(item_to_apply, field, lines)
        except Exception as e:
            logger.error(traceback.format_exc())
            raise ConanException(
                "There was an error parsing conanbuildinfo.txt: %s" % str(e))

        return result
コード例 #18
0
ファイル: cmake_test.py プロジェクト: efremovd/conan
 def paths_cmake_test(self):
     settings_mock = namedtuple("Settings", "build_type, os, os_build, constraint, items")
     conanfile = ConanFile(None, None)
     conanfile.initialize(settings_mock(None, None, None, lambda x, raise_undefined_field: x,
                                        lambda: {}), EnvValues())
     ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
     tmp_folder = temp_folder()
     save(os.path.join(tmp_folder, "lib", "mylib.lib"), "")
     save(os.path.join(tmp_folder, "include", "myheader.h"), "")
     cpp_info = CppInfo(tmp_folder)
     cpp_info.release.libs = ["hello"]
     cpp_info.debug.libs = ["hello_D"]
     conanfile.deps_cpp_info.update(cpp_info, ref.name)
     generator = CMakeGenerator(conanfile)
     content = generator.content
     content = content.replace(tmp_folder.replace("\\", "/"), "root_folder")
     cmake_lines = content.splitlines()
     self.assertIn('set(CONAN_INCLUDE_DIRS_MYPKG_RELEASE "root_folder/include")', cmake_lines)
     self.assertIn('set(CONAN_LIB_DIRS_MYPKG_RELEASE "root_folder/lib")', cmake_lines)
コード例 #19
0
ファイル: cmake_multi.py プロジェクト: mathieu/conan
def extend(cpp_info, config):
    """ adds the specific config configuration to the common one
    """
    config_info = cpp_info.configs.get(config)
    if config_info:
        result = CppInfo(config_info.rootpath)
        result.includedirs = cpp_info.includedirs + config_info.includedirs
        result.libdirs = cpp_info.libdirs + config_info.libdirs
        result.bindirs = cpp_info.bindirs + config_info.bindirs
        result.resdirs = cpp_info.resdirs + config_info.resdirs
        result.builddirs = cpp_info.builddirs + config_info.builddirs
        result.libs = cpp_info.libs + config_info.libs
        result.defines = cpp_info.defines + config_info.defines
        result.cflags = cpp_info.cflags + config_info.cflags
        result.cppflags = cpp_info.cppflags + config_info.cppflags
        result.sharedlinkflags = cpp_info.sharedlinkflags + config_info.sharedlinkflags
        result.exelinkflags = cpp_info.exelinkflags + config_info.exelinkflags
        return result
    return cpp_info
コード例 #20
0
ファイル: cmake_test.py プロジェクト: yiakwy/conan
 def paths_cmake_multi_user_vars_test(self):
     settings_mock = _MockSettings(build_type="Release")
     conanfile = ConanFile(TestBufferConanOutput(), None)
     conanfile.initialize(settings_mock, EnvValues())
     ref = ConanFileReference.loads("MyPkg/0.1@lasote/stables")
     tmp_folder = temp_folder()
     save(os.path.join(tmp_folder, "lib", "mylib.lib"), "")
     save(os.path.join(tmp_folder, "include", "myheader.h"), "")
     cpp_info = CppInfo(tmp_folder)
     cpp_info.name = ref.name
     cpp_info.release.libs = ["hello"]
     cpp_info.debug.libs = ["hello_D"]
     conanfile.deps_cpp_info.update(cpp_info, ref.name)
     generator = CMakeMultiGenerator(conanfile)
     release = generator.content["conanbuildinfo_release.cmake"]
     release = release.replace(tmp_folder.replace("\\", "/"), "root_folder")
     cmake_lines = release.splitlines()
     self.assertIn('set(CONAN_INCLUDE_DIRS_MYPKG_RELEASE "root_folder/include")', cmake_lines)
     self.assertIn('set(CONAN_LIB_DIRS_MYPKG_RELEASE "root_folder/lib")', cmake_lines)
コード例 #21
0
def test_cmake_deps_links_flags():
    # https://github.com/conan-io/conan/issues/8703
    conanfile = ConanFile(Mock(), None)
    conanfile.settings = "os", "compiler", "build_type", "arch"
    conanfile.initialize(
        Settings({
            "os": ["Windows"],
            "compiler": ["gcc"],
            "build_type": ["Release"],
            "arch": ["x86"]
        }), EnvValues())
    conanfile.settings.build_type = "Release"
    conanfile.settings.arch = "x86"

    cpp_info = CppInfo("mypkg", "dummy_root_folder1")
    # https://github.com/conan-io/conan/issues/8811 regression, fix with explicit - instead of /
    cpp_info.sharedlinkflags = ["-NODEFAULTLIB", "-OTHERFLAG"]
    cpp_info.exelinkflags = ["-OPT:NOICF"]
    conanfile_dep = ConanFile(Mock(), None)
    conanfile_dep.cpp_info = cpp_info

    with mock.patch('conans.ConanFile.ref',
                    new_callable=mock.PropertyMock) as mock_ref:
        with mock.patch('conans.ConanFile.dependencies',
                        new_callable=mock.PropertyMock) as mock_deps:
            mock_ref.return_value = ConanFileReference.loads("mypkg/1.0")
            mock_deps.return_value = Mock()

            conanfile.dependencies.transitive_host_requires = []
            conanfile.dependencies.host_requires = []
            conanfile_dep.package_folder = "/path/to/folder_dep"
            conanfile.dependencies.transitive_host_requires = [
                ConanFileInterface(conanfile_dep)
            ]
            conanfile.dependencies.host_requires = [
                ConanFileInterface(conanfile_dep)
            ]

            cmakedeps = CMakeDeps(conanfile)
            files = cmakedeps.content
            data_cmake = files["mypkg-release-x86-data.cmake"]
            assert "set(mypkg_SHARED_LINK_FLAGS_RELEASE -NODEFAULTLIB;-OTHERFLAG)" in data_cmake
            assert "set(mypkg_EXE_LINK_FLAGS_RELEASE -OPT:NOICF)" in data_cmake
コード例 #22
0
def call_package_info(conanfile, package_folder):
    conanfile.cpp_info = CppInfo(package_folder)
    conanfile.cpp_info.version = conanfile.version
    conanfile.cpp_info.description = conanfile.description
    conanfile.env_info = EnvInfo()
    conanfile.user_info = UserInfo()

    # Get deps_cpp_info from upstream nodes
    public_deps = [name for name, req in conanfile.requires.items() if not req.private]
    conanfile.cpp_info.public_deps = public_deps
    # Once the node is build, execute package info, so it has access to the
    # package folder and artifacts
    with tools.chdir(package_folder):
        with conanfile_exception_formatter(str(conanfile), "package_info"):
            conanfile.package_folder = package_folder
            conanfile.source_folder = None
            conanfile.build_folder = None
            conanfile.install_folder = None
            conanfile.package_info()
コード例 #23
0
    def test_types(self):
        deps_cpp_info = DepsCppInfo()
        cpp_info = CppInfo("pkg", "rootpath")
        cpp_info.version = "version"
        cpp_info.libs = ["lib1", "lib2"]
        cpp_info.includedirs = ["include1"]
        deps_cpp_info.add("pkg", DepCppInfo(cpp_info))

        info_for_package = deps_cpp_info["pkg"]

        # Documented as list for 'self.cpp_info' object
        self.assertIsInstance(info_for_package.includedirs, list)
        self.assertIsInstance(info_for_package.libdirs, list)
        self.assertIsInstance(info_for_package.resdirs, list)
        self.assertIsInstance(info_for_package.bindirs, list)
        self.assertIsInstance(info_for_package.builddirs, list)
        self.assertIsInstance(info_for_package.libs, list)
        self.assertIsInstance(info_for_package.defines, list)
        self.assertIsInstance(info_for_package.cflags, list)
        self.assertIsInstance(info_for_package.cppflags, list)
        self.assertIsInstance(info_for_package.cxxflags, list)
        self.assertIsInstance(info_for_package.sharedlinkflags, list)
        self.assertIsInstance(info_for_package.exelinkflags, list)
        self.assertIsInstance(info_for_package.frameworks, list)
        self.assertIsInstance(info_for_package.frameworkdirs, list)
        self.assertIsInstance(info_for_package.rootpath, six.string_types)
        self.assertIsInstance(info_for_package.name, six.string_types)
        self.assertIsInstance(info_for_package.system_libs, list)
        self.assertIsInstance(info_for_package.build_modules, list)
        self.assertIsInstance(info_for_package.components, dict)

        # Documented as list for `deps_cpp_info["pkg"]`
        self.assertIsInstance(info_for_package.include_paths, list)
        self.assertIsInstance(info_for_package.lib_paths, list)
        self.assertIsInstance(info_for_package.bin_paths, list)
        self.assertIsInstance(info_for_package.build_paths, list)
        self.assertIsInstance(info_for_package.res_paths, list)
        self.assertIsInstance(info_for_package.framework_paths, list)
        self.assertIsInstance(info_for_package.build_modules_paths, list)
        self.assertIsInstance(info_for_package.get_name("generator"),
                              six.string_types)
        self.assertIsInstance(info_for_package.version, six.string_types)
        self.assertIsInstance(info_for_package.components, dict)
コード例 #24
0
ファイル: installer.py プロジェクト: seagulltoad/conan
    def _call_package_info(self, conanfile, package_folder, ref):
        conanfile.cpp_info = CppInfo(package_folder)
        conanfile.cpp_info.name = conanfile.name
        conanfile.cpp_info.version = conanfile.version
        conanfile.cpp_info.description = conanfile.description
        conanfile.env_info = EnvInfo()
        conanfile.user_info = UserInfo()

        # Get deps_cpp_info from upstream nodes
        public_deps = [
            name for name, req in conanfile.requires.items()
            if not req.private and not req.override
        ]
        conanfile.cpp_info.public_deps = public_deps
        # Once the node is build, execute package info, so it has access to the
        # package folder and artifacts
        conan_v2 = get_env(CONAN_V2_MODE_ENVVAR, False)
        with pythonpath(conanfile) if not conan_v2 else no_op(
        ):  # Minimal pythonpath, not the whole context, make it 50% slower
            with tools.chdir(package_folder):
                with conanfile_exception_formatter(str(conanfile),
                                                   "package_info"):
                    conanfile.package_folder = package_folder
                    conanfile.source_folder = None
                    conanfile.build_folder = None
                    conanfile.install_folder = None
                    self._hook_manager.execute("pre_package_info",
                                               conanfile=conanfile,
                                               reference=ref)
                    conanfile.package_info()
                    if conanfile._conan_dep_cpp_info is None:
                        try:
                            conanfile.cpp_info._raise_incorrect_components_definition(
                                conanfile.name, conanfile.requires)
                        except ConanException as e:
                            raise ConanException("%s package_info(): %s" %
                                                 (str(conanfile), e))
                        conanfile._conan_dep_cpp_info = DepCppInfo(
                            conanfile.cpp_info)
                    self._hook_manager.execute("post_package_info",
                                               conanfile=conanfile,
                                               reference=ref)
コード例 #25
0
ファイル: installer.py プロジェクト: menuet/conan
def init_info_objects(deps_graph, paths):
    """ Made external so it is independent of installer and can called
    in testing too
    """
    # Assign export root folders
    for node in deps_graph.nodes:
        conan_ref, conan_file = node
        if conan_ref:
            package_id = conan_file.info.package_id()
            package_reference = PackageReference(conan_ref, package_id)
            package_folder = paths.package(package_reference)
            conan_file.package_folder = package_folder
            conan_file.cpp_info = CppInfo(package_folder)
            conan_file.env_info = EnvInfo(package_folder)
            try:
                conan_file.package_info()
            except Exception as e:
                msg = format_conanfile_exception(str(conan_ref),
                                                 "package_info", e)
                raise ConanException(msg)
コード例 #26
0
ファイル: cmake_paths_test.py プロジェクト: wjt2015/conan
    def cmake_vars_unit_test(self):
        settings = _MockSettings("Release")
        conanfile = ConanFile(TestBufferConanOutput(), None)
        conanfile.initialize(settings, EnvValues())
        tmp = temp_folder()
        cpp_info = CppInfo("MyLib", tmp)
        custom_dir = os.path.join(tmp, "custom_build_dir")
        os.mkdir(custom_dir)
        cpp_info.builddirs.append(os.path.join(tmp, "custom_build_dir"))
        conanfile.deps_cpp_info.add("MyLib", cpp_info)

        generator = CMakePathsGenerator(conanfile)
        path = tmp.replace('\\', '/')
        custom_dir = custom_dir.replace('\\', '/')
        cmake_lines = generator.content.replace('\\', '/').replace("\n\t\t\t", " ").splitlines()
        self.assertEqual('set(CONAN_MYLIB_ROOT "%s")' % path, cmake_lines[0])
        self.assertEqual('set(CMAKE_MODULE_PATH "%s/" "%s" ${CMAKE_MODULE_PATH} '
                         '${CMAKE_CURRENT_LIST_DIR})' % (path, custom_dir), cmake_lines[1])
        self.assertEqual('set(CMAKE_PREFIX_PATH "%s/" "%s" ${CMAKE_PREFIX_PATH} '
                         '${CMAKE_CURRENT_LIST_DIR})' % (path, custom_dir), cmake_lines[2])
コード例 #27
0
ファイル: build_info_test.py プロジェクト: wjt2015/conan
 def cpp_info_test(self):
     folder = temp_folder()
     mkdir(os.path.join(folder, "include"))
     mkdir(os.path.join(folder, "lib"))
     mkdir(os.path.join(folder, "local_bindir"))
     abs_folder = temp_folder()
     abs_include = os.path.join(abs_folder, "usr/include")
     abs_lib = os.path.join(abs_folder, "usr/lib")
     abs_bin = os.path.join(abs_folder, "usr/bin")
     mkdir(abs_include)
     mkdir(abs_lib)
     mkdir(abs_bin)
     info = CppInfo("", folder)
     info.includedirs.append(abs_include)
     info.libdirs.append(abs_lib)
     info.bindirs.append(abs_bin)
     info.bindirs.append("local_bindir")
     self.assertListEqual(list(info.include_paths), [os.path.join(folder, "include"), abs_include])
     self.assertListEqual(list(info.lib_paths), [os.path.join(folder, "lib"), abs_lib])
     self.assertListEqual(list(info.bin_paths), [abs_bin, os.path.join(folder, "local_bindir")])
コード例 #28
0
 def cppinfo_public_interface_test(self):
     folder = temp_folder()
     info = CppInfo("", folder)
     self.assertEqual([], info.libs)
     self.assertEqual([], info.system_libs)
     self.assertEqual(["include"], info.includedirs)
     self.assertEqual([], info.srcdirs)
     self.assertEqual(["res"], info.resdirs)
     self.assertEqual([""], info.builddirs)
     self.assertEqual(["bin"], info.bindirs)
     self.assertEqual(["lib"], info.libdirs)
     self.assertEqual(folder, info.rootpath)
     self.assertEqual([], info.defines)
     self.assertEqual("", info.sysroot)
     self.assertEqual([], info.cflags)
     self.assertEqual({}, info.configs)
     self.assertEqual([], info.cxxflags)
     self.assertEqual([], info.exelinkflags)
     self.assertEqual([], info.public_deps)
     self.assertEqual([], info.sharedlinkflags)
コード例 #29
0
    def _get_conanfile(self, settings):
        conan_file = ConanFileMock()
        conan_file.settings = settings
        conan_file.source_folder = "my_cache_source_folder"
        conan_file.build_folder = "my_cache_build_folder"
        conan_file.deps_env_info = DepsEnvInfo()
        conan_file.deps_user_info = DepsUserInfo()
        conan_file.deps_cpp_info = DepsCppInfo()
        cpp_info = CppInfo("/root")
        cpp_info.include_paths.append("path/to/include1")
        cpp_info.lib_paths.append("path/to/lib1")
        cpp_info.libs.append("mylib")
        cpp_info.bindirs = "path/to/bin1"
        cpp_info.cflags.append("c_flag1")
        cpp_info.cppflags.append("cxx_flag1")
        cpp_info.defines.append("mydefine1")

        conan_file.deps_cpp_info.update(cpp_info, "zlib")
        conan_file.env_info = EnvInfo()
        return conan_file
コード例 #30
0
ファイル: test_bazeldeps.py プロジェクト: blackliner/conan
def test_bazeldeps_dependency_buildfiles():
    conanfile = ConanFile(Mock(), None)

    cpp_info = CppInfo("mypkg", "dummy_root_folder1")

    conanfile_dep = ConanFile(Mock(), None)
    conanfile_dep.cpp_info = cpp_info
    conanfile_dep._conan_node = Mock()
    conanfile_dep._conan_node.ref = ConanFileReference.loads("OriginalDepName/1.0")
    conanfile_dep.package_folder = "/path/to/folder_dep"

    with mock.patch('conans.ConanFile.dependencies', new_callable=mock.PropertyMock) as mock_deps:
        req = Requirement(ConanFileReference.loads("OriginalDepName/1.0"))
        mock_deps.return_value = ConanFileDependencies({req: ConanFileInterface(conanfile_dep)})

        bazeldeps = BazelDeps(conanfile)

        for dependency in bazeldeps._conanfile.dependencies.host.values():
            dependency_content = bazeldeps._get_dependency_buildfile_content(dependency)
            assert 'cc_library(\n    name = "OriginalDepName",' in dependency_content