
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 <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmInstallGenerator.h"
|
|
|
|
class cmExportInstallFileGenerator;
|
|
class cmExportSet;
|
|
class cmListFileBacktrace;
|
|
class cmLocalGenerator;
|
|
|
|
/** \class cmInstallExportGenerator
|
|
* \brief Support class for generating rules for creating export files.
|
|
*/
|
|
class cmInstallExportGenerator : public cmInstallGenerator
|
|
{
|
|
public:
|
|
cmInstallExportGenerator(cmExportSet* exportSet, std::string destination,
|
|
std::string filePermissions,
|
|
std::vector<std::string> const& configurations,
|
|
std::string component, MessageLevel message,
|
|
bool excludeFromAll, std::string filename,
|
|
std::string targetNamespace,
|
|
std::string cxxModulesDirectory,
|
|
cmListFileBacktrace backtrace);
|
|
cmInstallExportGenerator(const cmInstallExportGenerator&) = delete;
|
|
~cmInstallExportGenerator() override;
|
|
|
|
cmInstallExportGenerator& operator=(const cmInstallExportGenerator&) =
|
|
delete;
|
|
|
|
virtual char const* InstallSubcommand() const = 0;
|
|
|
|
cmExportSet* GetExportSet() { return this->ExportSet; }
|
|
|
|
bool Compute(cmLocalGenerator* lg) override;
|
|
|
|
cmLocalGenerator* GetLocalGenerator() const { return this->LocalGenerator; }
|
|
|
|
const std::string& GetNamespace() const { return this->Namespace; }
|
|
|
|
std::string const& GetMainImportFile() const { return this->MainImportFile; }
|
|
|
|
std::string const& GetDestination() const { return this->Destination; }
|
|
std::string GetDestinationFile() const;
|
|
std::string GetFileName() const { return this->FileName; }
|
|
std::string GetTempDir() const;
|
|
std::string GetCxxModuleDirectory() const
|
|
{
|
|
return this->CxxModulesDirectory;
|
|
}
|
|
|
|
protected:
|
|
void GenerateScript(std::ostream& os) override;
|
|
void GenerateScriptConfigs(std::ostream& os, Indent indent) override;
|
|
void GenerateScriptActions(std::ostream& os, Indent indent) override;
|
|
std::string TempDirCalculate() const;
|
|
void ComputeTempDir();
|
|
|
|
cmExportSet* const ExportSet;
|
|
std::string const FilePermissions;
|
|
std::string const FileName;
|
|
std::string const Namespace;
|
|
std::string const CxxModulesDirectory;
|
|
cmLocalGenerator* LocalGenerator = nullptr;
|
|
|
|
std::string TempDir;
|
|
std::string MainImportFile;
|
|
std::unique_ptr<cmExportInstallFileGenerator> EFGen;
|
|
};
|