mirror of
https://github.com/Kitware/CMake.git
synced 2025-06-12 08:42:47 +08:00

Add initial support for exporting (install only, for now) Common Package Specification (https://cps-org.github.io/cps/) format package descriptions. This has some limitations, such as not supporting generator expressions (as these cannot be portably exported), and only partially supporting transitive dependencies, but should be usable for at least some simple cases. (Actually, $<LINK_ONLY> is theoretically supportable, but is not yet implemented.) This still needs tests; these will be added in the next commit. Other potential improvements include support for language-specific compile definitions and inferring some package properties from project properties. Additionally, there is no module support yet; this is partly pending on having a tool agnostic format for providing the necessary information.
67 lines
2.4 KiB
C++
67 lines
2.4 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <iosfwd>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmExportInstallFileGenerator.h"
|
|
#include "cmExportPackageInfoGenerator.h"
|
|
|
|
class cmGeneratorTarget;
|
|
class cmInstallExportGenerator;
|
|
|
|
/** \class cmExportInstallPackageInfoGenerator
|
|
* \brief Generate files exporting targets from an install tree.
|
|
*
|
|
* cmExportInstallPackageInfoGenerator generates files exporting targets from
|
|
* an installation tree. The files are placed in a temporary location for
|
|
* installation by cmInstallExportGenerator. The file format is the Common
|
|
* Package Specification (https://cps-org.github.io/cps/).
|
|
*
|
|
* One main file is generated that describes the imported targets. Additional,
|
|
* per-configuration files describe target locations and settings for each
|
|
* configuration.
|
|
*
|
|
* This is used to implement the INSTALL(PACKAGE_INFO) command.
|
|
*/
|
|
class cmExportInstallPackageInfoGenerator
|
|
: public cmExportPackageInfoGenerator
|
|
, public cmExportInstallFileGenerator
|
|
{
|
|
public:
|
|
/** Construct with the export installer that will install the
|
|
files. */
|
|
cmExportInstallPackageInfoGenerator(
|
|
cmInstallExportGenerator* iegen, std::string packageName,
|
|
std::string version, std::string versionCompat, std::string versionSchema,
|
|
std::vector<std::string> defaultTargets,
|
|
std::vector<std::string> defaultConfigurations);
|
|
|
|
/** Compute the globbing expression used to load per-config import
|
|
files from the main file. */
|
|
std::string GetConfigImportFileGlob() const override;
|
|
|
|
protected:
|
|
std::string const& GetExportName() const override;
|
|
|
|
// Implement virtual methods from the superclass.
|
|
bool GenerateMainFile(std::ostream& os) override;
|
|
void GenerateImportTargetsConfig(std::ostream& os, std::string const& config,
|
|
std::string const& suffix) override;
|
|
|
|
char GetConfigFileNameSeparator() const override { return '@'; }
|
|
|
|
/** Generate the cps_path, which determines the import prefix. */
|
|
std::string GenerateImportPrefix() const;
|
|
|
|
std::string InstallNameDir(cmGeneratorTarget const* target,
|
|
std::string const& config) override;
|
|
|
|
std::string GetCxxModulesDirectory() const override;
|
|
// TODO: Generate C++ module info in a not-CMake-specific format.
|
|
};
|