def _find_for_dep(self, name, cpp_info): deps = DepsCppCmake(cpp_info) lines = [] if cpp_info.public_deps: # Here we are generating FindXXX, so find_modules=True public_deps_names = [ self.deps_build_info[dep].get_name("cmake_find_package") for dep in cpp_info.public_deps ] lines = find_dependency_lines(name, public_deps_names, find_modules=True) find_package_header_block = find_package_header.format( name=name, version=cpp_info.version) find_libraries_block = target_template.format(name=name, deps=deps, build_type_suffix="") target_props = assign_target_properties.format(name=name, deps=deps) tmp = self.template.format( name=name, deps=deps, version=cpp_info.version, find_dependencies_block="\n".join(lines), find_libraries_block=find_libraries_block, find_package_header_block=find_package_header_block, assign_target_properties_block=target_props) return tmp
def content(self): ret = {} build_type = str(self.conanfile.settings.build_type) build_type_suffix = "_{}".format( build_type.upper()) if build_type else "" for _, cpp_info in self.deps_build_info.dependencies: # If any config matches the build_type one, add it to the cpp_info dep_cpp_info = extend(cpp_info, build_type.lower()) depname = cpp_info.get_name("cmake_find_package_multi") ret["{}Config.cmake".format(depname)] = self._find_for_dep( depname, dep_cpp_info) ret["{}Targets.cmake".format(depname)] = self.targets_file.format( name=depname) deps = DepsCppCmake(dep_cpp_info) public_deps_names = [ self.deps_build_info[dep].get_name("cmake_find_package_multi") for dep in cpp_info.public_deps ] find_lib = target_template.format( name=depname, deps=deps, build_type_suffix=build_type_suffix, deps_names=";".join( ["{n}::{n}".format(n=n) for n in public_deps_names])) ret["{}Target-{}.cmake".format(depname, build_type.lower())] = find_lib ret["{}ConfigVersion.cmake".format(depname)] = self.version_template.\ format(version=dep_cpp_info.version) return ret
def _find_for_dep(self, name, cpp_info): # The common macros macros_and_functions = "\n".join([ CMakeFindPackageCommonMacros.conan_message, CMakeFindPackageCommonMacros.apple_frameworks_macro, CMakeFindPackageCommonMacros.conan_package_library_targets, ]) # compose the cpp_info with its "debug" or "release" specific config dep_cpp_info = cpp_info build_type = self.conanfile.settings.get_safe("build_type") if build_type: dep_cpp_info = extend(dep_cpp_info, build_type.lower()) # The find_libraries_block, all variables for the package, and creation of targets public_deps_names = [ self.deps_build_info[dep].get_name("cmake_find_package") for dep in dep_cpp_info.public_deps ] deps_names = ";".join( ["{n}::{n}".format(n=n) for n in public_deps_names]) deps = DepsCppCmake(dep_cpp_info) find_libraries_block = target_template.format(name=name, deps=deps, build_type_suffix="", deps_names=deps_names) # The find_transitive_dependencies block find_dependencies_block = "" if dep_cpp_info.public_deps: # Here we are generating FindXXX, so find_modules=True f = find_transitive_dependencies(public_deps_names, find_modules=True) # proper indentation find_dependencies_block = ''.join(" " + line if line.strip() else line for line in f.splitlines(True)) tmp = self.find_template.format( name=name, version=dep_cpp_info.version, find_libraries_block=find_libraries_block, find_dependencies_block=find_dependencies_block, macros_and_functions=macros_and_functions) return tmp
def content(self): ret = {} build_type = self.conanfile.settings.get_safe("build_type") build_type_suffix = "_{}".format( build_type.upper()) if build_type else "" for depname, cpp_info in self.deps_build_info.dependencies: deps = DepsCppCmake(cpp_info) ret["{}Config.cmake".format(depname)] = self._find_for_dep( depname, cpp_info) find_lib = target_template.format( name=depname, deps=deps, build_type_suffix=build_type_suffix) ret["{}Targets.cmake".format(depname)] = self.targets_file.format( name=depname) ret["{}Target-{}.cmake".format(depname, build_type.lower())] = find_lib return ret
def _find_for_dep(self, name, cpp_info): deps = DepsCppCmake(cpp_info) lines = [] if cpp_info.public_deps: lines = find_dependency_lines(name, cpp_info) find_package_header_block = find_package_header.format( name=name, version=cpp_info.version) find_libraries_block = target_template.format(name=name, deps=deps, build_type_suffix="") target_props = assign_target_properties.format(name=name, deps=deps) tmp = self.template.format( name=name, deps=deps, version=cpp_info.version, find_dependencies_block="\n".join(lines), find_libraries_block=find_libraries_block, find_package_header_block=find_package_header_block, assign_target_properties_block=target_props) return tmp
def _find_for_dep(self, name, cpp_info): dep_cpp_info = cpp_info build_type = self.conanfile.settings.get_safe("build_type") if build_type: dep_cpp_info = extend(dep_cpp_info, build_type.lower()) deps = DepsCppCmake(dep_cpp_info) lines = [] public_deps_names = [ self.deps_build_info[dep].get_name("cmake_find_package") for dep in dep_cpp_info.public_deps ] if dep_cpp_info.public_deps: # Here we are generating FindXXX, so find_modules=True lines = find_dependency_lines(public_deps_names, find_modules=True) find_package_header_block = find_package_header.format( name=name, version=dep_cpp_info.version) deps_names = ";".join( ["{n}::{n}".format(n=n) for n in public_deps_names]) find_libraries_block = target_template.format(name=name, deps=deps, build_type_suffix="", deps_names=deps_names) target_props = assign_target_properties.format(name=name, deps=deps, deps_names=deps_names) tmp = self.template.format( name=name, deps=deps, version=dep_cpp_info.version, find_dependencies_block="\n ".join(lines), find_libraries_block=find_libraries_block, find_package_header_block=find_package_header_block, assign_target_properties_block=target_props, macros_and_functions="\n".join([ CMakeFindPackageCommonMacros.conan_message, CMakeFindPackageCommonMacros.apple_frameworks_macro, CMakeFindPackageCommonMacros.conan_package_library_targets, ])) return tmp
def content(self): ret = {} build_type = str(self.conanfile.settings.build_type).upper() build_type_suffix = "_{}".format( self.configuration.upper()) if self.configuration else "" for pkg_name, cpp_info in self.deps_build_info.dependencies: self._validate_components(cpp_info) pkg_filename = self._get_filename(cpp_info) pkg_findname = self._get_name(cpp_info) pkg_namespace = pkg_findname pkg_version = cpp_info.version public_deps = self.get_public_deps(cpp_info) deps_names = [] for it in public_deps: name = "{}::{}".format(*self._get_require_name(*it)) if name not in deps_names: deps_names.append(name) deps_names = ';'.join(deps_names) pkg_public_deps_filenames = [ self._get_filename(self.deps_build_info[it[0]]) for it in public_deps ] config_version = self.config_version_template.format( version=pkg_version) ret[self._config_version_filename(pkg_filename)] = config_version if not cpp_info.components: ret[self._config_filename(pkg_filename)] = self._config( filename=pkg_filename, name=pkg_findname, namespace=pkg_namespace, version=cpp_info.version, public_deps_names=pkg_public_deps_filenames) ret["{}Targets.cmake".format( pkg_filename)] = self.targets_template.format( filename=pkg_filename, name=pkg_findname, namespace=pkg_namespace) # If any config matches the build_type one, add it to the cpp_info dep_cpp_info = extend(cpp_info, build_type.lower()) deps = DepsCppCmake(dep_cpp_info, self.name) find_lib = target_template.format( name=pkg_findname, deps=deps, build_type_suffix=build_type_suffix, deps_names=deps_names) ret["{}Target-{}.cmake".format( pkg_filename, self.configuration.lower())] = find_lib else: cpp_info = extend(cpp_info, build_type.lower()) pkg_info = DepsCppCmake(cpp_info, self.name) components = self._get_components(pkg_name, cpp_info) # Note these are in reversed order, from more dependent to less dependent pkg_components = " ".join([ "{p}::{c}".format(p=pkg_namespace, c=comp_findname) for comp_findname, _ in reversed(components) ]) global_target_variables = target_template.format( name=pkg_findname, deps=pkg_info, build_type_suffix=build_type_suffix, deps_names=deps_names) variables = self.components_target_build_type_tpl.render( pkg_name=pkg_findname, global_target_variables=global_target_variables, pkg_components=pkg_components, build_type=build_type, components=components, conan_find_apple_frameworks=CMakeFindPackageCommonMacros. apple_frameworks_macro, conan_package_library_targets=CMakeFindPackageCommonMacros. conan_package_library_targets) ret["{}Target-{}.cmake".format(pkg_filename, build_type.lower())] = variables targets = self.components_targets_tpl.render( pkg_name=pkg_findname, namespace=pkg_namespace, pkg_filename=pkg_filename, components=components, build_type=build_type) ret["{}Targets.cmake".format(pkg_filename)] = targets target_config = self.components_config_tpl.render( pkg_name=pkg_findname, namespace=pkg_namespace, pkg_filename=pkg_filename, components=components, pkg_public_deps=pkg_public_deps_filenames, conan_message=CMakeFindPackageCommonMacros.conan_message, configs=self.configurations) ret[self._config_filename(pkg_filename)] = target_config return ret
def _find_for_dep(self, pkg_name, pkg_findname, pkg_filename, cpp_info): # return the content of the FindXXX.cmake file for the package "pkg_name" self._validate_components(cpp_info) public_deps = self.get_public_deps(cpp_info) deps_names = ';'.join(["{}::{}".format(*self._get_require_name(*it)) for it in public_deps]) pkg_public_deps_filenames = [self._get_filename(self.deps_build_info[it[0]]) for it in public_deps] pkg_version = cpp_info.version if cpp_info.components: components = self._get_components(pkg_name, cpp_info) # Note these are in reversed order, from more dependent to less dependent pkg_components = " ".join(["{p}::{c}".format(p=pkg_findname, c=comp_findname) for comp_findname, _ in reversed(components)]) pkg_info = DepsCppCmake(cpp_info) global_target_variables = target_template.format(name=pkg_findname, deps=pkg_info, build_type_suffix="", deps_names=deps_names) return self.find_components_tpl.render( pkg_name=pkg_findname, pkg_filename=pkg_filename, pkg_version=pkg_version, pkg_components=pkg_components, global_target_variables=global_target_variables, pkg_public_deps_filenames=pkg_public_deps_filenames, components=components, conan_message=CMakeFindPackageCommonMacros.conan_message, conan_find_apple_frameworks=CMakeFindPackageCommonMacros.apple_frameworks_macro, conan_package_library_targets=CMakeFindPackageCommonMacros.conan_package_library_targets) else: # The common macros macros_and_functions = "\n".join([ CMakeFindPackageCommonMacros.conan_message, CMakeFindPackageCommonMacros.apple_frameworks_macro, CMakeFindPackageCommonMacros.conan_package_library_targets, ]) # compose the cpp_info with its "debug" or "release" specific config dep_cpp_info = cpp_info build_type = self.conanfile.settings.get_safe("build_type") if build_type: dep_cpp_info = extend(dep_cpp_info, build_type.lower()) # The find_libraries_block, all variables for the package, and creation of targets deps = DepsCppCmake(dep_cpp_info) find_libraries_block = target_template.format(name=pkg_findname, deps=deps, build_type_suffix="", deps_names=deps_names) # The find_transitive_dependencies block find_dependencies_block = "" if pkg_public_deps_filenames: # Here we are generating FindXXX, so find_modules=True f = find_transitive_dependencies(pkg_public_deps_filenames, find_modules=True) # proper indentation find_dependencies_block = ''.join(" " + line if line.strip() else line for line in f.splitlines(True)) return self.find_template.format(name=pkg_findname, version=pkg_version, filename=pkg_filename, find_libraries_block=find_libraries_block, find_dependencies_block=find_dependencies_block, macros_and_functions=macros_and_functions)
def content(self): ret = {} build_type = str(self.conanfile.settings.build_type).upper() build_type_suffix = "_{}".format(build_type) if build_type else "" for pkg_name, cpp_info in self.deps_build_info.dependencies: pkg_filename = self._get_filename(cpp_info) pkg_findname = self._get_name(cpp_info) pkg_version = cpp_info.version pkg_public_deps_names = [ self._get_name(self.deps_build_info[public_dep]) for public_dep in cpp_info.public_deps ] pkg_public_deps_filenames = [ self._get_filename(self.deps_build_info[public_dep]) for public_dep in cpp_info.public_deps ] ret["{}ConfigVersion.cmake".format(pkg_filename)] = self.config_version_template. \ format(version=pkg_version) if not cpp_info.components: public_deps_names = [{ "name": self.deps_build_info[dep].get_name( "cmake_find_package_multi"), "filename": self.deps_build_info[dep].get_filename( "cmake_find_package_multi") } for dep in cpp_info.public_deps] ret["{}Config.cmake".format(pkg_filename)] = self._config( filename=pkg_filename, name=pkg_findname, version=cpp_info.version, public_deps_names=pkg_public_deps_filenames) ret["{}Targets.cmake".format( pkg_filename)] = self.targets_template.format( filename=pkg_filename, name=pkg_findname) # If any config matches the build_type one, add it to the cpp_info dep_cpp_info = extend(cpp_info, build_type.lower()) deps = DepsCppCmake(dep_cpp_info) deps_names = ";".join([ "{n}::{n}".format(n=n['name']) for n in public_deps_names ]) find_lib = target_template.format( name=pkg_findname, deps=deps, build_type_suffix=build_type_suffix, deps_names=deps_names) ret["{}Target-{}.cmake".format(pkg_filename, build_type.lower())] = find_lib else: cpp_info = extend(cpp_info, build_type.lower()) pkg_info = DepsCppCmake(cpp_info) deps_names = ";".join( ["{n}::{n}".format(n=n) for n in pkg_public_deps_names]) components = self._get_components(pkg_name, pkg_findname, cpp_info) # Note these are in reversed order, from more dependent to less dependent pkg_components = " ".join([ "{p}::{c}".format(p=pkg_findname, c=comp_findname) for comp_findname, _ in reversed(components) ]) global_target_variables = target_template.format( name=pkg_findname, deps=pkg_info, build_type_suffix=build_type_suffix, deps_names=deps_names) variables = self.components_target_build_type_tpl.render( pkg_name=pkg_findname, global_target_variables=global_target_variables, pkg_components=pkg_components, build_type=build_type, components=components, conan_find_apple_frameworks=CMakeFindPackageCommonMacros. apple_frameworks_macro, conan_package_library_targets=CMakeFindPackageCommonMacros. conan_package_library_targets) ret["{}Target-{}.cmake".format(pkg_filename, build_type.lower())] = variables targets = self.components_targets_tpl.render( pkg_name=pkg_findname, pkg_filename=pkg_filename, components=components, build_type=build_type) ret["{}Targets.cmake".format(pkg_filename)] = targets target_config = self.components_config_tpl.render( pkg_name=pkg_findname, pkg_filename=pkg_filename, components=components, pkg_public_deps=pkg_public_deps_filenames, conan_message=CMakeFindPackageCommonMacros.conan_message) ret["{}Config.cmake".format(pkg_filename)] = target_config return ret