Files
cmake/Source/cmFindPackageStack.h
T
Vito Gamberini a4f08400f4 CPS/PkgC: Add PkgC interop to CPS
Extend the automatic export system of install(PACKAGE_INFO) and
export(PACKAGE_INFO) to handle targets created with cmake_pkg_config,
and allow find_package to resolve CPS requirements in the pkg-config
domain.

A pkg-config package has no components of its own, so it is exposed to
CPS as a package named after itself with a single component of the same
name; such references take the form "<PkgName>:<PkgName>" and resolve
directly to the foreign target which provides the package.  The domains
in which a requirement may be found are recorded in a CMake extension
section rather than a non-standard `domains` attribute.
2026-09-24 14:47:59 -04:00

62 lines
1.5 KiB
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file LICENSE.rst or https://cmake.org/licensing for details. */
#pragma once
#include "cmConfigure.h" // IWYU pragma: keep
#include <memory>
#include <set>
#include <string>
#include <vector>
#include <cm/optional>
#include "cmConstStack.h"
namespace cm {
enum class PackageDomain;
}
/**
* This data represents the actual contents of find_package
* <PACKAGE>-Config.cmake or <PACKAGE>.cps file, and not what is passed
* to the find_package command. They can be the same, but it is not guaranteed.
*/
class cmPackageInformation
{
public:
cm::optional<std::string> Directory;
cm::optional<std::string> Version;
cm::optional<std::string> Description;
cm::optional<std::string> License;
cm::optional<std::string> Website;
cm::optional<std::string> PackageUrl;
std::set<std::string> Components;
std::vector<cm::PackageDomain> Domains;
};
/**
* Represents one call to find_package.
*/
class cmFindPackageCall
{
public:
std::string const Name;
std::shared_ptr<cmPackageInformation const> PackageInfo;
unsigned int Index;
};
/**
* Represents a stack of find_package calls with efficient value semantics.
*/
class cmFindPackageStack
: public cmConstStack<cmFindPackageCall, cmFindPackageStack>
{
using cmConstStack::cmConstStack;
friend class cmConstStack<cmFindPackageCall, cmFindPackageStack>;
};
#ifndef cmFindPackageStack_cxx
extern template class cmConstStack<cmFindPackageCall, cmFindPackageStack>;
#endif