
#pragma once is a widely supported compiler pragma, even though it is not part of the C++ standard. Many of the issues keeping #pragma once from being standardized (distributed filesystems, build farms, hard links, etc.) do not apply to CMake - it is easy to build CMake on a single machine. CMake also does not install any header files which can be consumed by other projects (though cmCPluginAPI.h has been deliberately omitted from this conversion in case anyone is still using it.) Finally, #pragma once has been required to build CMake since at least August 2017 (7f29bbe6
enabled server mode unconditionally, which had been using #pragma once since September 2016 (b13d3e0d
)). The fact that we now require C++11 filters out old compilers, and it is unlikely that there is a compiler which supports C++11 but does not support #pragma once.
105 lines
3.8 KiB
C++
105 lines
3.8 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 <map>
|
|
#include <set>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
#include "cmExportFileGenerator.h"
|
|
#include "cmStateTypes.h"
|
|
|
|
class cmGeneratorTarget;
|
|
class cmGlobalGenerator;
|
|
class cmInstallExportGenerator;
|
|
class cmInstallTargetGenerator;
|
|
class cmTargetExport;
|
|
|
|
/** \class cmExportInstallFileGenerator
|
|
* \brief Generate a file exporting targets from an install tree.
|
|
*
|
|
* cmExportInstallFileGenerator generates files exporting targets from
|
|
* install an installation tree. The files are placed in a temporary
|
|
* location for installation by cmInstallExportGenerator. One main
|
|
* file is generated that creates the imported targets and loads
|
|
* per-configuration files. Target locations and settings for each
|
|
* configuration are written to these per-configuration files. After
|
|
* installation the main file loads the configurations that have been
|
|
* installed.
|
|
*
|
|
* This is used to implement the INSTALL(EXPORT) command.
|
|
*/
|
|
class cmExportInstallFileGenerator : public cmExportFileGenerator
|
|
{
|
|
public:
|
|
/** Construct with the export installer that will install the
|
|
files. */
|
|
cmExportInstallFileGenerator(cmInstallExportGenerator* iegen);
|
|
|
|
/** Get the per-config file generated for each configuration. This
|
|
maps from the configuration name to the file temporary location
|
|
for installation. */
|
|
std::map<std::string, std::string> const& GetConfigImportFiles()
|
|
{
|
|
return this->ConfigImportFiles;
|
|
}
|
|
|
|
/** Compute the globbing expression used to load per-config import
|
|
files from the main file. */
|
|
std::string GetConfigImportFileGlob();
|
|
|
|
protected:
|
|
// Implement virtual methods from the superclass.
|
|
bool GenerateMainFile(std::ostream& os) override;
|
|
void GenerateImportTargetsConfig(
|
|
std::ostream& os, const std::string& config, std::string const& suffix,
|
|
std::vector<std::string>& missingTargets) override;
|
|
cmStateEnums::TargetType GetExportTargetType(
|
|
cmTargetExport const* targetExport) const;
|
|
void HandleMissingTarget(std::string& link_libs,
|
|
std::vector<std::string>& missingTargets,
|
|
cmGeneratorTarget* depender,
|
|
cmGeneratorTarget* dependee) override;
|
|
|
|
void ReplaceInstallPrefix(std::string& input) override;
|
|
|
|
void ComplainAboutMissingTarget(cmGeneratorTarget* depender,
|
|
cmGeneratorTarget* dependee,
|
|
std::vector<std::string> const& exportFiles);
|
|
|
|
std::pair<std::vector<std::string>, std::string> FindNamespaces(
|
|
cmGlobalGenerator* gg, const std::string& name);
|
|
|
|
/** Generate the relative import prefix. */
|
|
virtual void GenerateImportPrefix(std::ostream&);
|
|
|
|
/** Generate the relative import prefix. */
|
|
virtual void LoadConfigFiles(std::ostream&);
|
|
|
|
virtual void CleanupTemporaryVariables(std::ostream&);
|
|
|
|
/** Generate a per-configuration file for the targets. */
|
|
virtual bool GenerateImportFileConfig(
|
|
const std::string& config, std::vector<std::string>& missingTargets);
|
|
|
|
/** Fill in properties indicating installed file locations. */
|
|
void SetImportLocationProperty(const std::string& config,
|
|
std::string const& suffix,
|
|
cmInstallTargetGenerator* itgen,
|
|
ImportPropertyMap& properties,
|
|
std::set<std::string>& importedLocations);
|
|
|
|
std::string InstallNameDir(cmGeneratorTarget* target,
|
|
const std::string& config) override;
|
|
|
|
cmInstallExportGenerator* IEGen;
|
|
|
|
// The import file generated for each configuration.
|
|
std::map<std::string, std::string> ConfigImportFiles;
|
|
};
|