mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
In order to support generation of Common Package Specifications, the mechanisms CMake uses to export package information need to be made more abstract. The prior commits began this refactoring; this continues by (actually) restructuring the classes used to generate the actual export files. To minimize churn, this introduces virtual base classes and diamond inheritance in order to separate logic which is format-agnostic but depends on the export mode (build-tree versus install-tree) from logic which is format-specific but mode-agnostic. This could probably be refactored further to use helper classes instead, and a future commit may do that, however an initial attempt to do that was proving even more invasive, such that this approach was deemed more manageable. While we're at it, add 'const' in more places where possible.
78 lines
2.6 KiB
C++
78 lines
2.6 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 <set>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmExportCMakeConfigGenerator.h"
|
|
|
|
class cmFileSet;
|
|
class cmGeneratorTarget;
|
|
class cmGlobalGenerator;
|
|
class cmMakefile;
|
|
class cmTargetExport;
|
|
|
|
class cmExportTryCompileFileGenerator : public cmExportCMakeConfigGenerator
|
|
{
|
|
public:
|
|
cmExportTryCompileFileGenerator(cmGlobalGenerator* gg,
|
|
std::vector<std::string> const& targets,
|
|
cmMakefile* mf,
|
|
std::set<std::string> const& langs);
|
|
|
|
/** Set the list of targets to export. */
|
|
void SetConfig(std::string const& config) { this->Config = config; }
|
|
|
|
protected:
|
|
// Implement virtual methods from the superclass.
|
|
void ComplainAboutDuplicateTarget(
|
|
std::string const& /*targetName*/) const override{};
|
|
void ReportError(std::string const& errorMessage) const override;
|
|
|
|
bool GenerateMainFile(std::ostream& os) override;
|
|
|
|
void GenerateImportTargetsConfig(std::ostream&, std::string const&,
|
|
std::string const&) override
|
|
{
|
|
}
|
|
void HandleMissingTarget(std::string&, cmGeneratorTarget const*,
|
|
cmGeneratorTarget*) override
|
|
{
|
|
}
|
|
|
|
void PopulateProperties(cmGeneratorTarget const* target,
|
|
ImportPropertyMap& properties,
|
|
std::set<cmGeneratorTarget const*>& emitted);
|
|
|
|
std::string InstallNameDir(cmGeneratorTarget const* target,
|
|
std::string const& config) override;
|
|
|
|
std::string GetFileSetDirectories(cmGeneratorTarget* target,
|
|
cmFileSet* fileSet,
|
|
cmTargetExport const* te) override;
|
|
|
|
std::string GetFileSetFiles(cmGeneratorTarget* target, cmFileSet* fileSet,
|
|
cmTargetExport const* te) override;
|
|
|
|
std::string GetCxxModulesDirectory() const override { return {}; }
|
|
void GenerateCxxModuleConfigInformation(std::string const&,
|
|
std::ostream&) const override
|
|
{
|
|
}
|
|
|
|
private:
|
|
std::string FindTargets(std::string const& prop,
|
|
cmGeneratorTarget const* tgt,
|
|
std::string const& language,
|
|
std::set<cmGeneratorTarget const*>& emitted);
|
|
|
|
std::vector<cmGeneratorTarget const*> Exports;
|
|
std::string Config;
|
|
std::vector<std::string> Languages;
|
|
};
|