|
|
@@ -1,9 +1,11 @@
|
|
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
|
#include "cmQtAutoGenInitializer.h"
|
|
|
+
|
|
|
#include "cmQtAutoGen.h"
|
|
|
#include "cmQtAutoGenGlobalInitializer.h"
|
|
|
|
|
|
+#include "cmAlgorithms.h"
|
|
|
#include "cmCustomCommand.h"
|
|
|
#include "cmCustomCommandLines.h"
|
|
|
#include "cmFilePathChecksum.h"
|
|
|
@@ -41,7 +43,9 @@
|
|
|
|
|
|
#include "cm_memory.hxx"
|
|
|
|
|
|
-static std::size_t GetParallelCPUCount()
|
|
|
+namespace {
|
|
|
+
|
|
|
+std::size_t GetParallelCPUCount()
|
|
|
{
|
|
|
static std::size_t count = 0;
|
|
|
// Detect only on the first call
|
|
|
@@ -55,8 +59,8 @@ static std::size_t GetParallelCPUCount()
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
-static std::string FileProjectRelativePath(cmMakefile* makefile,
|
|
|
- std::string const& fileName)
|
|
|
+std::string FileProjectRelativePath(cmMakefile* makefile,
|
|
|
+ std::string const& fileName)
|
|
|
{
|
|
|
std::string res;
|
|
|
{
|
|
|
@@ -80,9 +84,9 @@ static std::string FileProjectRelativePath(cmMakefile* makefile,
|
|
|
* recursive STATIC_LIBRARY dependencies depends on targetOrigin
|
|
|
* (STATIC_LIBRARY cycle).
|
|
|
*/
|
|
|
-static bool StaticLibraryCycle(cmGeneratorTarget const* targetOrigin,
|
|
|
- cmGeneratorTarget const* targetDepend,
|
|
|
- std::string const& config)
|
|
|
+bool StaticLibraryCycle(cmGeneratorTarget const* targetOrigin,
|
|
|
+ cmGeneratorTarget const* targetDepend,
|
|
|
+ std::string const& config)
|
|
|
{
|
|
|
bool cycle = false;
|
|
|
if ((targetOrigin->GetType() == cmStateEnums::STATIC_LIBRARY) &&
|
|
|
@@ -120,6 +124,42 @@ static bool StaticLibraryCycle(cmGeneratorTarget const* targetOrigin,
|
|
|
return cycle;
|
|
|
}
|
|
|
|
|
|
+/** Sanitizes file search paths */
|
|
|
+class SearchPathSanitizer
|
|
|
+{
|
|
|
+public:
|
|
|
+ SearchPathSanitizer(cmMakefile* makefile)
|
|
|
+ : SourcePath_(makefile->GetCurrentSourceDirectory())
|
|
|
+ {
|
|
|
+ }
|
|
|
+ std::vector<std::string> operator()(
|
|
|
+ std::vector<std::string> const& paths) const;
|
|
|
+
|
|
|
+private:
|
|
|
+ std::string SourcePath_;
|
|
|
+};
|
|
|
+
|
|
|
+std::vector<std::string> SearchPathSanitizer::operator()(
|
|
|
+ std::vector<std::string> const& paths) const
|
|
|
+{
|
|
|
+ std::vector<std::string> res;
|
|
|
+ res.reserve(paths.size());
|
|
|
+ for (std::string const& srcPath : paths) {
|
|
|
+ // Collapse relative paths
|
|
|
+ std::string path = cmSystemTools::CollapseFullPath(srcPath, SourcePath_);
|
|
|
+ // Remove suffix slashes
|
|
|
+ while (cmHasSuffix(path, '/')) {
|
|
|
+ path.pop_back();
|
|
|
+ }
|
|
|
+ // Accept only non empty paths
|
|
|
+ if (!path.empty()) {
|
|
|
+ res.emplace_back(std::move(path));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+}
|
|
|
+} // End of unnamed namespace
|
|
|
+
|
|
|
cmQtAutoGenInitializer::InfoWriter::InfoWriter(std::string const& filename)
|
|
|
{
|
|
|
Ofs_.SetCopyIfDifferent(true);
|
|
|
@@ -213,11 +253,15 @@ void cmQtAutoGenInitializer::InfoWriter::WriteNestedLists(
|
|
|
};
|
|
|
|
|
|
cmQtAutoGenInitializer::cmQtAutoGenInitializer(
|
|
|
- cmQtAutoGenGlobalInitializer* globalInitializer, cmGeneratorTarget* target,
|
|
|
- IntegerVersion const& qtVersion, bool mocEnabled, bool uicEnabled,
|
|
|
- bool rccEnabled, bool globalAutogenTarget, bool globalAutoRccTarget)
|
|
|
+ cmQtAutoGenGlobalInitializer* globalInitializer,
|
|
|
+ cmGeneratorTarget* genTarget, IntegerVersion const& qtVersion,
|
|
|
+ bool mocEnabled, bool uicEnabled, bool rccEnabled, bool globalAutogenTarget,
|
|
|
+ bool globalAutoRccTarget)
|
|
|
: GlobalInitializer(globalInitializer)
|
|
|
- , Target(target)
|
|
|
+ , GenTarget(genTarget)
|
|
|
+ , GlobalGen(genTarget->GetGlobalGenerator())
|
|
|
+ , LocalGen(genTarget->GetLocalGenerator())
|
|
|
+ , Makefile(genTarget->Makefile)
|
|
|
, QtVersion(qtVersion)
|
|
|
{
|
|
|
AutogenTarget.GlobalTarget = globalAutogenTarget;
|
|
|
@@ -229,19 +273,15 @@ cmQtAutoGenInitializer::cmQtAutoGenInitializer(
|
|
|
|
|
|
bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
- cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
|
|
|
- cmGlobalGenerator* globalGen = localGen->GetGlobalGenerator();
|
|
|
-
|
|
|
// Configurations
|
|
|
- this->MultiConfig = globalGen->IsMultiConfig();
|
|
|
- this->ConfigDefault = makefile->GetConfigurations(this->ConfigsList);
|
|
|
+ this->MultiConfig = this->GlobalGen->IsMultiConfig();
|
|
|
+ this->ConfigDefault = this->Makefile->GetConfigurations(this->ConfigsList);
|
|
|
if (this->ConfigsList.empty()) {
|
|
|
this->ConfigsList.push_back(this->ConfigDefault);
|
|
|
}
|
|
|
|
|
|
// Verbosity
|
|
|
- this->Verbosity = makefile->GetSafeDefinition("CMAKE_AUTOGEN_VERBOSE");
|
|
|
+ this->Verbosity = this->Makefile->GetSafeDefinition("CMAKE_AUTOGEN_VERBOSE");
|
|
|
if (!this->Verbosity.empty()) {
|
|
|
unsigned long iVerb = 0;
|
|
|
if (!cmStrToULong(this->Verbosity, &iVerb)) {
|
|
|
@@ -253,14 +293,14 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
// Targets FOLDER
|
|
|
{
|
|
|
const char* folder =
|
|
|
- makefile->GetState()->GetGlobalProperty("AUTOMOC_TARGETS_FOLDER");
|
|
|
+ this->Makefile->GetState()->GetGlobalProperty("AUTOMOC_TARGETS_FOLDER");
|
|
|
if (folder == nullptr) {
|
|
|
- folder =
|
|
|
- makefile->GetState()->GetGlobalProperty("AUTOGEN_TARGETS_FOLDER");
|
|
|
+ folder = this->Makefile->GetState()->GetGlobalProperty(
|
|
|
+ "AUTOGEN_TARGETS_FOLDER");
|
|
|
}
|
|
|
// Inherit FOLDER property from target (#13688)
|
|
|
if (folder == nullptr) {
|
|
|
- folder = this->Target->GetProperty("FOLDER");
|
|
|
+ folder = this->GenTarget->GetProperty("FOLDER");
|
|
|
}
|
|
|
if (folder != nullptr) {
|
|
|
this->TargetsFolder = folder;
|
|
|
@@ -270,7 +310,7 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
// Check status of policy CMP0071
|
|
|
{
|
|
|
cmPolicies::PolicyStatus const CMP0071_status =
|
|
|
- makefile->GetPolicyStatus(cmPolicies::CMP0071);
|
|
|
+ this->Makefile->GetPolicyStatus(cmPolicies::CMP0071);
|
|
|
switch (CMP0071_status) {
|
|
|
case cmPolicies::WARN:
|
|
|
this->CMP0071Warn = true;
|
|
|
@@ -291,18 +331,18 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
{
|
|
|
// Collapsed current binary directory
|
|
|
std::string const cbd = cmSystemTools::CollapseFullPath(
|
|
|
- std::string(), makefile->GetCurrentBinaryDirectory());
|
|
|
+ std::string(), this->Makefile->GetCurrentBinaryDirectory());
|
|
|
|
|
|
// Info directory
|
|
|
- this->Dir.Info =
|
|
|
- cmStrCat(cbd, "/CMakeFiles/", this->Target->GetName(), "_autogen.dir");
|
|
|
+ this->Dir.Info = cmStrCat(cbd, "/CMakeFiles/", this->GenTarget->GetName(),
|
|
|
+ "_autogen.dir");
|
|
|
cmSystemTools::ConvertToUnixSlashes(this->Dir.Info);
|
|
|
|
|
|
// Build directory
|
|
|
- this->Dir.Build = this->Target->GetSafeProperty("AUTOGEN_BUILD_DIR");
|
|
|
+ this->Dir.Build = this->GenTarget->GetSafeProperty("AUTOGEN_BUILD_DIR");
|
|
|
if (this->Dir.Build.empty()) {
|
|
|
this->Dir.Build =
|
|
|
- cmStrCat(cbd, '/', this->Target->GetName(), "_autogen");
|
|
|
+ cmStrCat(cbd, '/', this->GenTarget->GetName(), "_autogen");
|
|
|
}
|
|
|
cmSystemTools::ConvertToUnixSlashes(this->Dir.Build);
|
|
|
// Cleanup build directory
|
|
|
@@ -339,11 +379,12 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
}
|
|
|
|
|
|
// Autogen target name
|
|
|
- this->AutogenTarget.Name = cmStrCat(this->Target->GetName(), "_autogen");
|
|
|
+ this->AutogenTarget.Name =
|
|
|
+ cmStrCat(this->GenTarget->GetName(), "_autogen");
|
|
|
|
|
|
// Autogen target parallel processing
|
|
|
this->AutogenTarget.Parallel =
|
|
|
- this->Target->GetSafeProperty("AUTOGEN_PARALLEL");
|
|
|
+ this->GenTarget->GetSafeProperty("AUTOGEN_PARALLEL");
|
|
|
if (this->AutogenTarget.Parallel.empty() ||
|
|
|
(this->AutogenTarget.Parallel == "AUTO")) {
|
|
|
// Autodetect number of CPUs
|
|
|
@@ -377,15 +418,14 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
// Autogen target: Compute user defined dependencies
|
|
|
{
|
|
|
this->AutogenTarget.DependOrigin =
|
|
|
- this->Target->GetPropertyAsBool("AUTOGEN_ORIGIN_DEPENDS");
|
|
|
+ this->GenTarget->GetPropertyAsBool("AUTOGEN_ORIGIN_DEPENDS");
|
|
|
|
|
|
std::string const deps =
|
|
|
- this->Target->GetSafeProperty("AUTOGEN_TARGET_DEPENDS");
|
|
|
+ this->GenTarget->GetSafeProperty("AUTOGEN_TARGET_DEPENDS");
|
|
|
if (!deps.empty()) {
|
|
|
- std::vector<std::string> extraDeps = cmExpandedList(deps);
|
|
|
- for (std::string const& depName : extraDeps) {
|
|
|
+ for (std::string const& depName : cmExpandedList(deps)) {
|
|
|
// Allow target and file dependencies
|
|
|
- auto* depTarget = makefile->FindTargetToUse(depName);
|
|
|
+ auto* depTarget = this->Makefile->FindTargetToUse(depName);
|
|
|
if (depTarget != nullptr) {
|
|
|
this->AutogenTarget.DependTargets.insert(depTarget);
|
|
|
} else {
|
|
|
@@ -397,13 +437,13 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
|
|
|
// CMAKE_AUTOMOC_RELAXED_MODE deprecation warning
|
|
|
if (this->Moc.Enabled) {
|
|
|
- if (makefile->IsOn("CMAKE_AUTOMOC_RELAXED_MODE")) {
|
|
|
- makefile->IssueMessage(
|
|
|
+ if (this->Makefile->IsOn("CMAKE_AUTOMOC_RELAXED_MODE")) {
|
|
|
+ this->Makefile->IssueMessage(
|
|
|
MessageType::AUTHOR_WARNING,
|
|
|
cmStrCat("AUTOMOC: CMAKE_AUTOMOC_RELAXED_MODE is "
|
|
|
"deprecated an will be removed in the future. Consider "
|
|
|
"disabling it and converting the target ",
|
|
|
- this->Target->GetName(), " to regular mode."));
|
|
|
+ this->GenTarget->GetName(), " to regular mode."));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -415,7 +455,7 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
|
|
|
// Add autogen include directory to the origin target INCLUDE_DIRECTORIES
|
|
|
if (this->MocOrUicEnabled() || (this->Rcc.Enabled && this->MultiConfig)) {
|
|
|
- this->Target->AddIncludeDirectory(this->Dir.Include, true);
|
|
|
+ this->GenTarget->AddIncludeDirectory(this->Dir.Include, true);
|
|
|
}
|
|
|
|
|
|
// Scan files
|
|
|
@@ -438,33 +478,29 @@ bool cmQtAutoGenInitializer::InitCustomTargets()
|
|
|
|
|
|
bool cmQtAutoGenInitializer::InitMoc()
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
- cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
|
|
|
-
|
|
|
// Mocs compilation file
|
|
|
this->Moc.MocsCompilation =
|
|
|
cmStrCat(this->Dir.Build, "/mocs_compilation.cpp");
|
|
|
|
|
|
// Moc predefs command
|
|
|
- if (this->Target->GetPropertyAsBool("AUTOMOC_COMPILER_PREDEFINES") &&
|
|
|
+ if (this->GenTarget->GetPropertyAsBool("AUTOMOC_COMPILER_PREDEFINES") &&
|
|
|
(this->QtVersion >= IntegerVersion(5, 8))) {
|
|
|
- this->Moc.PredefsCmd =
|
|
|
- makefile->GetSafeDefinition("CMAKE_CXX_COMPILER_PREDEFINES_COMMAND");
|
|
|
+ this->Moc.PredefsCmd = this->Makefile->GetSafeDefinition(
|
|
|
+ "CMAKE_CXX_COMPILER_PREDEFINES_COMMAND");
|
|
|
}
|
|
|
|
|
|
// Moc includes
|
|
|
{
|
|
|
- bool const appendImplicit = (this->QtVersion.Major >= 5);
|
|
|
+ SearchPathSanitizer sanitizer(this->Makefile);
|
|
|
auto GetIncludeDirs =
|
|
|
- [this, localGen,
|
|
|
- appendImplicit](std::string const& cfg) -> std::vector<std::string> {
|
|
|
+ [this, &sanitizer](std::string const& cfg) -> std::vector<std::string> {
|
|
|
// Get the include dirs for this target, without stripping the implicit
|
|
|
- // include dirs off, see
|
|
|
- // https://gitlab.kitware.com/cmake/cmake/issues/13667
|
|
|
+ // include dirs off, see issue #13667.
|
|
|
std::vector<std::string> dirs;
|
|
|
- localGen->GetIncludeDirectoriesImplicit(dirs, this->Target, "CXX", cfg,
|
|
|
- false, appendImplicit);
|
|
|
- return dirs;
|
|
|
+ bool const appendImplicit = (this->QtVersion.Major >= 5);
|
|
|
+ this->LocalGen->GetIncludeDirectoriesImplicit(
|
|
|
+ dirs, this->GenTarget, "CXX", cfg, false, appendImplicit);
|
|
|
+ return sanitizer(dirs);
|
|
|
};
|
|
|
|
|
|
// Default configuration include directories
|
|
|
@@ -483,9 +519,9 @@ bool cmQtAutoGenInitializer::InitMoc()
|
|
|
// Moc compile definitions
|
|
|
{
|
|
|
auto GetCompileDefinitions =
|
|
|
- [this, localGen](std::string const& cfg) -> std::set<std::string> {
|
|
|
+ [this](std::string const& cfg) -> std::set<std::string> {
|
|
|
std::set<std::string> defines;
|
|
|
- localGen->GetTargetDefines(this->Target, cfg, "CXX", defines);
|
|
|
+ this->LocalGen->GetTargetDefines(this->GenTarget, cfg, "CXX", defines);
|
|
|
#ifdef _WIN32
|
|
|
if (this->Moc.PredefsCmd.empty()) {
|
|
|
// Add WIN32 definition if we don't have a moc_predefs.h
|
|
|
@@ -525,18 +561,13 @@ bool cmQtAutoGenInitializer::InitMoc()
|
|
|
|
|
|
bool cmQtAutoGenInitializer::InitUic()
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
-
|
|
|
// Uic search paths
|
|
|
{
|
|
|
std::string const usp =
|
|
|
- this->Target->GetSafeProperty("AUTOUIC_SEARCH_PATHS");
|
|
|
+ this->GenTarget->GetSafeProperty("AUTOUIC_SEARCH_PATHS");
|
|
|
if (!usp.empty()) {
|
|
|
- cmExpandList(usp, this->Uic.SearchPaths);
|
|
|
- std::string const& srcDir = makefile->GetCurrentSourceDirectory();
|
|
|
- for (std::string& path : this->Uic.SearchPaths) {
|
|
|
- path = cmSystemTools::CollapseFullPath(path, srcDir);
|
|
|
- }
|
|
|
+ this->Uic.SearchPaths =
|
|
|
+ SearchPathSanitizer(this->Makefile)(cmExpandedList(usp));
|
|
|
}
|
|
|
}
|
|
|
// Uic target options
|
|
|
@@ -544,7 +575,7 @@ bool cmQtAutoGenInitializer::InitUic()
|
|
|
auto UicGetOpts =
|
|
|
[this](std::string const& cfg) -> std::vector<std::string> {
|
|
|
std::vector<std::string> opts;
|
|
|
- this->Target->GetAutoUicOptions(opts, cfg);
|
|
|
+ this->GenTarget->GetAutoUicOptions(opts, cfg);
|
|
|
return opts;
|
|
|
};
|
|
|
|
|
|
@@ -605,14 +636,13 @@ bool cmQtAutoGenInitializer::InitRcc()
|
|
|
|
|
|
bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
- cmake const* cm = makefile->GetCMakeInstance();
|
|
|
+ cmake const* cm = this->Makefile->GetCMakeInstance();
|
|
|
auto const& kw = this->GlobalInitializer->kw();
|
|
|
|
|
|
auto makeMUFile = [this, &kw](cmSourceFile* sf, std::string const& fullPath,
|
|
|
bool muIt) -> MUFileHandle {
|
|
|
MUFileHandle muf = cm::make_unique<MUFile>();
|
|
|
- muf->RealPath = cmSystemTools::GetRealPath(fullPath);
|
|
|
+ muf->FullPath = fullPath;
|
|
|
muf->SF = sf;
|
|
|
muf->Generated = sf->GetIsGenerated();
|
|
|
bool const skipAutogen = sf->GetPropertyAsBool(kw.SKIP_AUTOGEN);
|
|
|
@@ -642,9 +672,9 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
{
|
|
|
// Scan through target files
|
|
|
std::vector<cmSourceFile*> srcFiles;
|
|
|
- this->Target->GetConfigCommonSourceFiles(srcFiles);
|
|
|
+ this->GenTarget->GetConfigCommonSourceFiles(srcFiles);
|
|
|
for (cmSourceFile* sf : srcFiles) {
|
|
|
- // sf->GetExtension() is only valid after sf->GetFullPath() ...
|
|
|
+ // sf->GetExtension() is only valid after sf->ResolveFullPath() ...
|
|
|
// Since we're iterating over source files that might be not in the
|
|
|
// target we need to check for path errors (not existing files).
|
|
|
std::string pathError;
|
|
|
@@ -670,7 +700,7 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
!sf->GetPropertyAsBool(kw.SKIP_AUTORCC)) {
|
|
|
// Register qrc file
|
|
|
Qrc qrc;
|
|
|
- qrc.QrcFile = cmSystemTools::GetRealPath(fullPath);
|
|
|
+ qrc.QrcFile = fullPath;
|
|
|
qrc.QrcName =
|
|
|
cmSystemTools::GetFilenameWithoutLastExtension(qrc.QrcFile);
|
|
|
qrc.Generated = sf->GetIsGenerated();
|
|
|
@@ -690,7 +720,7 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
// sources meta data cache. Clear it so that OBJECT library targets that
|
|
|
// are AUTOGEN initialized after this target get their added
|
|
|
// mocs_compilation.cpp source acknowledged by this target.
|
|
|
- this->Target->ClearSourcesCache();
|
|
|
+ this->GenTarget->ClearSourcesCache();
|
|
|
|
|
|
// For source files find additional headers and private headers
|
|
|
if (this->MocOrUicEnabled()) {
|
|
|
@@ -704,21 +734,21 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
MUFile const& muf = *pair.second;
|
|
|
if (muf.MocIt || muf.UicIt) {
|
|
|
// Search for the default header file and a private header
|
|
|
- std::string const& srcPath = muf.SF->ResolveFullPath();
|
|
|
- std::string basePath =
|
|
|
- cmStrCat(cmQtAutoGen::SubDirPrefix(srcPath),
|
|
|
- cmSystemTools::GetFilenameWithoutLastExtension(srcPath));
|
|
|
+ std::string const& srcFullPath = muf.SF->ResolveFullPath();
|
|
|
+ std::string basePath = cmStrCat(
|
|
|
+ cmQtAutoGen::SubDirPrefix(srcFullPath),
|
|
|
+ cmSystemTools::GetFilenameWithoutLastExtension(srcFullPath));
|
|
|
for (auto const& suffix : suffixes) {
|
|
|
std::string const suffixedPath = cmStrCat(basePath, suffix);
|
|
|
for (auto const& ext : exts) {
|
|
|
std::string fullPath = cmStrCat(suffixedPath, '.', ext);
|
|
|
|
|
|
auto constexpr locationKind = cmSourceFileLocationKind::Known;
|
|
|
- cmSourceFile* sf = makefile->GetSource(fullPath, locationKind);
|
|
|
+ cmSourceFile* sf =
|
|
|
+ this->Makefile->GetSource(fullPath, locationKind);
|
|
|
if (sf != nullptr) {
|
|
|
// Check if we know about this header already
|
|
|
- if (this->AutogenTarget.Headers.find(sf) !=
|
|
|
- this->AutogenTarget.Headers.end()) {
|
|
|
+ if (cmContains(this->AutogenTarget.Headers, sf)) {
|
|
|
continue;
|
|
|
}
|
|
|
// We only accept not-GENERATED files that do exist.
|
|
|
@@ -728,7 +758,7 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
}
|
|
|
} else if (cmSystemTools::FileExists(fullPath)) {
|
|
|
// Create a new source file for the existing file
|
|
|
- sf = makefile->CreateSource(fullPath, false, locationKind);
|
|
|
+ sf = this->Makefile->CreateSource(fullPath, false, locationKind);
|
|
|
}
|
|
|
|
|
|
if (sf != nullptr) {
|
|
|
@@ -757,8 +787,8 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
// The reason is that their file names might be discovered from source files
|
|
|
// at generation time.
|
|
|
if (this->MocOrUicEnabled()) {
|
|
|
- for (cmSourceFile* sf : makefile->GetSourceFiles()) {
|
|
|
- // sf->GetExtension() is only valid after sf->GetFullPath() ...
|
|
|
+ for (cmSourceFile* sf : this->Makefile->GetSourceFiles()) {
|
|
|
+ // sf->GetExtension() is only valid after sf->ResolveFullPath() ...
|
|
|
// Since we're iterating over source files that might be not in the
|
|
|
// target we need to check for path errors (not existing files).
|
|
|
std::string pathError;
|
|
|
@@ -770,16 +800,14 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
cmSystemTools::LowerCase(sf->GetExtension());
|
|
|
|
|
|
if (cm->IsHeaderExtension(extLower)) {
|
|
|
- if (this->AutogenTarget.Headers.find(sf) ==
|
|
|
- this->AutogenTarget.Headers.end()) {
|
|
|
+ if (!cmContains(this->AutogenTarget.Headers, sf)) {
|
|
|
auto muf = makeMUFile(sf, fullPath, false);
|
|
|
if (muf->SkipMoc || muf->SkipUic) {
|
|
|
this->AutogenTarget.Headers.emplace(sf, std::move(muf));
|
|
|
}
|
|
|
}
|
|
|
} else if (cm->IsSourceExtension(extLower)) {
|
|
|
- if (this->AutogenTarget.Sources.find(sf) ==
|
|
|
- this->AutogenTarget.Sources.end()) {
|
|
|
+ if (!cmContains(this->AutogenTarget.Headers, sf)) {
|
|
|
auto muf = makeMUFile(sf, fullPath, false);
|
|
|
if (muf->SkipMoc || muf->SkipUic) {
|
|
|
this->AutogenTarget.Sources.emplace(sf, std::move(muf));
|
|
|
@@ -787,7 +815,6 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
}
|
|
|
} else if (this->Uic.Enabled && (extLower == kw.ui)) {
|
|
|
// .ui file
|
|
|
- std::string realPath = cmSystemTools::GetRealPath(fullPath);
|
|
|
bool const skipAutogen = sf->GetPropertyAsBool(kw.SKIP_AUTOGEN);
|
|
|
bool const skipUic =
|
|
|
(skipAutogen || sf->GetPropertyAsBool(kw.SKIP_AUTOUIC));
|
|
|
@@ -795,13 +822,12 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
// Check if the .ui file has uic options
|
|
|
std::string const uicOpts = sf->GetSafeProperty(kw.AUTOUIC_OPTIONS);
|
|
|
if (!uicOpts.empty()) {
|
|
|
- this->Uic.FileFiles.push_back(std::move(realPath));
|
|
|
- std::vector<std::string> optsVec = cmExpandedList(uicOpts);
|
|
|
- this->Uic.FileOptions.push_back(std::move(optsVec));
|
|
|
+ this->Uic.FileFiles.push_back(fullPath);
|
|
|
+ this->Uic.FileOptions.push_back(cmExpandedList(uicOpts));
|
|
|
}
|
|
|
} else {
|
|
|
// Register skipped .ui file
|
|
|
- this->Uic.SkipUi.insert(std::move(realPath));
|
|
|
+ this->Uic.SkipUi.insert(fullPath);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -812,7 +838,7 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
if (this->CMP0071Accept) {
|
|
|
// Let the autogen target depend on the GENERATED files
|
|
|
for (MUFile* muf : this->AutogenTarget.FilesGenerated) {
|
|
|
- this->AutogenTarget.DependFiles.insert(muf->RealPath);
|
|
|
+ this->AutogenTarget.DependFiles.insert(muf->FullPath);
|
|
|
}
|
|
|
} else if (this->CMP0071Warn) {
|
|
|
cm::string_view property;
|
|
|
@@ -825,9 +851,9 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
}
|
|
|
std::string files;
|
|
|
for (MUFile* muf : this->AutogenTarget.FilesGenerated) {
|
|
|
- files += cmStrCat(" ", Quoted(muf->RealPath), '\n');
|
|
|
+ files += cmStrCat(" ", Quoted(muf->FullPath), '\n');
|
|
|
}
|
|
|
- makefile->IssueMessage(
|
|
|
+ this->Makefile->IssueMessage(
|
|
|
MessageType::AUTHOR_WARNING,
|
|
|
cmStrCat(
|
|
|
cmPolicies::GetPolicyWarning(cmPolicies::CMP0071), '\n',
|
|
|
@@ -848,7 +874,7 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
const bool modernQt = (this->QtVersion.Major >= 5);
|
|
|
// Target rcc options
|
|
|
std::vector<std::string> optionsTarget =
|
|
|
- cmExpandedList(this->Target->GetSafeProperty(kw.AUTORCC_OPTIONS));
|
|
|
+ cmExpandedList(this->GenTarget->GetSafeProperty(kw.AUTORCC_OPTIONS));
|
|
|
|
|
|
// Check if file name is unique
|
|
|
for (Qrc& qrc : this->Rcc.Qrcs) {
|
|
|
@@ -862,7 +888,7 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
}
|
|
|
// Path checksum and file names
|
|
|
{
|
|
|
- cmFilePathChecksum const fpathCheckSum(makefile);
|
|
|
+ cmFilePathChecksum const fpathCheckSum(this->Makefile);
|
|
|
for (Qrc& qrc : this->Rcc.Qrcs) {
|
|
|
qrc.PathChecksum = fpathCheckSum.getPart(qrc.QrcFile);
|
|
|
// RCC output file name
|
|
|
@@ -925,12 +951,8 @@ bool cmQtAutoGenInitializer::InitScanFiles()
|
|
|
|
|
|
bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
- cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
|
|
|
- cmGlobalGenerator* globalGen = localGen->GetGlobalGenerator();
|
|
|
-
|
|
|
// Register info file as generated by CMake
|
|
|
- makefile->AddCMakeOutputFile(this->AutogenTarget.InfoFile);
|
|
|
+ this->Makefile->AddCMakeOutputFile(this->AutogenTarget.InfoFile);
|
|
|
|
|
|
// Files provided by the autogen target
|
|
|
std::vector<std::string> autogenProvides;
|
|
|
@@ -952,8 +974,8 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
}
|
|
|
tools += "UIC";
|
|
|
}
|
|
|
- autogenComment =
|
|
|
- cmStrCat("Automatic ", tools, " for target ", this->Target->GetName());
|
|
|
+ autogenComment = cmStrCat("Automatic ", tools, " for target ",
|
|
|
+ this->GenTarget->GetName());
|
|
|
}
|
|
|
|
|
|
// Compose command lines
|
|
|
@@ -963,7 +985,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
|
|
|
// Use PRE_BUILD on demand
|
|
|
bool usePRE_BUILD = false;
|
|
|
- if (globalGen->GetName().find("Visual Studio") != std::string::npos) {
|
|
|
+ if (this->GlobalGen->GetName().find("Visual Studio") != std::string::npos) {
|
|
|
// Under VS use a PRE_BUILD event instead of a separate target to
|
|
|
// reduce the number of targets loaded into the IDE.
|
|
|
// This also works around a VS 11 bug that may skip updating the target:
|
|
|
@@ -985,7 +1007,8 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
if (usePRE_BUILD) {
|
|
|
// Add additional autogen target dependencies to origin target
|
|
|
for (cmTarget* depTarget : this->AutogenTarget.DependTargets) {
|
|
|
- this->Target->Target->AddUtility(depTarget->GetName(), makefile);
|
|
|
+ this->GenTarget->Target->AddUtility(depTarget->GetName(),
|
|
|
+ this->Makefile);
|
|
|
}
|
|
|
|
|
|
// Add the pre-build command directly to bypass the OBJECT_LIBRARY
|
|
|
@@ -995,12 +1018,12 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
// PRE_BUILD does not support file dependencies!
|
|
|
const std::vector<std::string> no_output;
|
|
|
const std::vector<std::string> no_deps;
|
|
|
- cmCustomCommand cc(makefile, no_output, autogenProvides, no_deps,
|
|
|
+ cmCustomCommand cc(this->Makefile, no_output, autogenProvides, no_deps,
|
|
|
commandLines, autogenComment.c_str(),
|
|
|
this->Dir.Work.c_str());
|
|
|
cc.SetEscapeOldStyle(false);
|
|
|
cc.SetEscapeAllowMakeVars(true);
|
|
|
- this->Target->Target->AddPreBuildCommand(cc);
|
|
|
+ this->GenTarget->Target->AddPreBuildCommand(cc);
|
|
|
} else {
|
|
|
|
|
|
// Add link library target dependencies to the autogen target
|
|
|
@@ -1011,12 +1034,12 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
std::map<cmGeneratorTarget const*, std::size_t> commonTargets;
|
|
|
for (std::string const& config : this->ConfigsList) {
|
|
|
cmLinkImplementationLibraries const* libs =
|
|
|
- this->Target->GetLinkImplementationLibraries(config);
|
|
|
+ this->GenTarget->GetLinkImplementationLibraries(config);
|
|
|
if (libs != nullptr) {
|
|
|
for (cmLinkItem const& item : libs->Libraries) {
|
|
|
cmGeneratorTarget const* libTarget = item.Target;
|
|
|
if ((libTarget != nullptr) &&
|
|
|
- !StaticLibraryCycle(this->Target, libTarget, config)) {
|
|
|
+ !StaticLibraryCycle(this->GenTarget, libTarget, config)) {
|
|
|
// Increment target config count
|
|
|
commonTargets[libTarget]++;
|
|
|
}
|
|
|
@@ -1031,25 +1054,25 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
}
|
|
|
|
|
|
// Create autogen target
|
|
|
- cmTarget* autogenTarget = makefile->AddUtilityCommand(
|
|
|
+ cmTarget* autogenTarget = this->Makefile->AddUtilityCommand(
|
|
|
this->AutogenTarget.Name, cmMakefile::TargetOrigin::Generator, true,
|
|
|
this->Dir.Work.c_str(), /*byproducts=*/autogenProvides,
|
|
|
std::vector<std::string>(this->AutogenTarget.DependFiles.begin(),
|
|
|
this->AutogenTarget.DependFiles.end()),
|
|
|
commandLines, false, autogenComment.c_str());
|
|
|
// Create autogen generator target
|
|
|
- localGen->AddGeneratorTarget(
|
|
|
- new cmGeneratorTarget(autogenTarget, localGen));
|
|
|
+ this->LocalGen->AddGeneratorTarget(
|
|
|
+ new cmGeneratorTarget(autogenTarget, this->LocalGen));
|
|
|
|
|
|
// Forward origin utilities to autogen target
|
|
|
if (this->AutogenTarget.DependOrigin) {
|
|
|
- for (BT<std::string> const& depName : this->Target->GetUtilities()) {
|
|
|
- autogenTarget->AddUtility(depName.Value, makefile);
|
|
|
+ for (BT<std::string> const& depName : this->GenTarget->GetUtilities()) {
|
|
|
+ autogenTarget->AddUtility(depName.Value, this->Makefile);
|
|
|
}
|
|
|
}
|
|
|
// Add additional autogen target dependencies to autogen target
|
|
|
for (cmTarget* depTarget : this->AutogenTarget.DependTargets) {
|
|
|
- autogenTarget->AddUtility(depTarget->GetName(), makefile);
|
|
|
+ autogenTarget->AddUtility(depTarget->GetName(), this->Makefile);
|
|
|
}
|
|
|
|
|
|
// Set FOLDER property in autogen target
|
|
|
@@ -1058,11 +1081,12 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
}
|
|
|
|
|
|
// Add autogen target to the origin target dependencies
|
|
|
- this->Target->Target->AddUtility(this->AutogenTarget.Name, makefile);
|
|
|
+ this->GenTarget->Target->AddUtility(this->AutogenTarget.Name,
|
|
|
+ this->Makefile);
|
|
|
|
|
|
// Add autogen target to the global autogen target dependencies
|
|
|
if (this->AutogenTarget.GlobalTarget) {
|
|
|
- this->GlobalInitializer->AddToGlobalAutoGen(localGen,
|
|
|
+ this->GlobalInitializer->AddToGlobalAutoGen(this->LocalGen,
|
|
|
this->AutogenTarget.Name);
|
|
|
}
|
|
|
}
|
|
|
@@ -1072,12 +1096,9 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
|
|
|
|
|
|
bool cmQtAutoGenInitializer::InitRccTargets()
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
- cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
|
|
|
-
|
|
|
for (Qrc const& qrc : this->Rcc.Qrcs) {
|
|
|
// Register info file as generated by CMake
|
|
|
- makefile->AddCMakeOutputFile(qrc.InfoFile);
|
|
|
+ this->Makefile->AddCMakeOutputFile(qrc.InfoFile);
|
|
|
// Register file at target
|
|
|
this->AddGeneratedSource(qrc.RccFile, this->Rcc);
|
|
|
|
|
|
@@ -1102,41 +1123,43 @@ bool cmQtAutoGenInitializer::InitRccTargets()
|
|
|
cmMakeCommandLine({ cmSystemTools::GetCMakeCommand(), "-E",
|
|
|
"cmake_autorcc", qrc.InfoFile, "$<CONFIG>" }));
|
|
|
}
|
|
|
- std::string ccComment = cmStrCat(
|
|
|
- "Automatic RCC for ", FileProjectRelativePath(makefile, qrc.QrcFile));
|
|
|
+ std::string ccComment =
|
|
|
+ cmStrCat("Automatic RCC for ",
|
|
|
+ FileProjectRelativePath(this->Makefile, qrc.QrcFile));
|
|
|
|
|
|
if (qrc.Generated || this->Rcc.GlobalTarget) {
|
|
|
// Create custom rcc target
|
|
|
std::string ccName;
|
|
|
{
|
|
|
- ccName = cmStrCat(this->Target->GetName(), "_arcc_", qrc.QrcName);
|
|
|
+ ccName = cmStrCat(this->GenTarget->GetName(), "_arcc_", qrc.QrcName);
|
|
|
if (!qrc.Unique) {
|
|
|
ccName += cmStrCat('_', qrc.PathChecksum);
|
|
|
}
|
|
|
|
|
|
- cmTarget* autoRccTarget = makefile->AddUtilityCommand(
|
|
|
+ cmTarget* autoRccTarget = this->Makefile->AddUtilityCommand(
|
|
|
ccName, cmMakefile::TargetOrigin::Generator, true,
|
|
|
this->Dir.Work.c_str(), ccOutput, ccDepends, commandLines, false,
|
|
|
ccComment.c_str());
|
|
|
|
|
|
// Create autogen generator target
|
|
|
- localGen->AddGeneratorTarget(
|
|
|
- new cmGeneratorTarget(autoRccTarget, localGen));
|
|
|
+ this->LocalGen->AddGeneratorTarget(
|
|
|
+ new cmGeneratorTarget(autoRccTarget, this->LocalGen));
|
|
|
|
|
|
// Set FOLDER property in autogen target
|
|
|
if (!this->TargetsFolder.empty()) {
|
|
|
autoRccTarget->SetProperty("FOLDER", this->TargetsFolder.c_str());
|
|
|
}
|
|
|
if (!this->Rcc.ExecutableTargetName.empty()) {
|
|
|
- autoRccTarget->AddUtility(this->Rcc.ExecutableTargetName, makefile);
|
|
|
+ autoRccTarget->AddUtility(this->Rcc.ExecutableTargetName,
|
|
|
+ this->Makefile);
|
|
|
}
|
|
|
}
|
|
|
// Add autogen target to the origin target dependencies
|
|
|
- this->Target->Target->AddUtility(ccName, makefile);
|
|
|
+ this->GenTarget->Target->AddUtility(ccName, this->Makefile);
|
|
|
|
|
|
// Add autogen target to the global autogen target dependencies
|
|
|
if (this->Rcc.GlobalTarget) {
|
|
|
- this->GlobalInitializer->AddToGlobalAutoRcc(localGen, ccName);
|
|
|
+ this->GlobalInitializer->AddToGlobalAutoRcc(this->LocalGen, ccName);
|
|
|
}
|
|
|
} else {
|
|
|
// Create custom rcc command
|
|
|
@@ -1153,13 +1176,13 @@ bool cmQtAutoGenInitializer::InitRccTargets()
|
|
|
}
|
|
|
std::string no_main_dependency;
|
|
|
cmImplicitDependsList no_implicit_depends;
|
|
|
- makefile->AddCustomCommandToOutput(
|
|
|
+ this->Makefile->AddCustomCommandToOutput(
|
|
|
ccOutput, ccByproducts, ccDepends, no_main_dependency,
|
|
|
no_implicit_depends, commandLines, ccComment.c_str(),
|
|
|
this->Dir.Work.c_str());
|
|
|
}
|
|
|
// Reconfigure when .qrc file changes
|
|
|
- makefile->AddCMakeDependFile(qrc.QrcFile);
|
|
|
+ this->Makefile->AddCMakeDependFile(qrc.QrcFile);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1192,9 +1215,8 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
InfoWriter ofs(this->AutogenTarget.InfoFile);
|
|
|
if (ofs) {
|
|
|
// Utility lambdas
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
- auto MfDef = [makefile](const char* key) {
|
|
|
- return makefile->GetSafeDefinition(key);
|
|
|
+ auto MfDef = [this](const char* key) {
|
|
|
+ return this->Makefile->GetSafeDefinition(key);
|
|
|
};
|
|
|
|
|
|
// Write common settings
|
|
|
@@ -1210,8 +1232,6 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
MfDef("CMAKE_CURRENT_SOURCE_DIR"));
|
|
|
ofs.Write("AM_CMAKE_CURRENT_BINARY_DIR",
|
|
|
MfDef("CMAKE_CURRENT_BINARY_DIR"));
|
|
|
- ofs.Write("AM_CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE",
|
|
|
- MfDef("CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE"));
|
|
|
ofs.Write("AM_BUILD_DIR", this->Dir.Build);
|
|
|
ofs.Write("AM_INCLUDE_DIR", this->Dir.Include);
|
|
|
ofs.WriteConfig("AM_INCLUDE_DIR", this->Dir.ConfigInclude);
|
|
|
@@ -1238,7 +1258,7 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
}
|
|
|
std::sort(sortedHeaders.begin(), sortedHeaders.end(),
|
|
|
[](MUFile const* a, MUFile const* b) {
|
|
|
- return (a->RealPath < b->RealPath);
|
|
|
+ return (a->FullPath < b->FullPath);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -1247,13 +1267,13 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
continue;
|
|
|
}
|
|
|
if (muf->SkipMoc) {
|
|
|
- moc_skip.insert(muf->RealPath);
|
|
|
+ moc_skip.insert(muf->FullPath);
|
|
|
}
|
|
|
if (muf->SkipUic) {
|
|
|
- uic_skip.insert(muf->RealPath);
|
|
|
+ uic_skip.insert(muf->FullPath);
|
|
|
}
|
|
|
if (muf->MocIt || muf->UicIt) {
|
|
|
- headers.emplace_back(muf->RealPath);
|
|
|
+ headers.emplace_back(muf->FullPath);
|
|
|
headersFlags.emplace_back(
|
|
|
cmStrCat(muf->MocIt ? 'M' : 'm', muf->UicIt ? 'U' : 'u'));
|
|
|
}
|
|
|
@@ -1261,7 +1281,7 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
}
|
|
|
// Header build paths
|
|
|
{
|
|
|
- cmFilePathChecksum const fpathCheckSum(makefile);
|
|
|
+ cmFilePathChecksum const fpathCheckSum(this->Makefile);
|
|
|
std::unordered_set<std::string> emitted;
|
|
|
for (std::string const& hdr : headers) {
|
|
|
std::string const basePath =
|
|
|
@@ -1292,7 +1312,7 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
}
|
|
|
std::sort(sorted.begin(), sorted.end(),
|
|
|
[](MUFile const* a, MUFile const* b) {
|
|
|
- return (a->RealPath < b->RealPath);
|
|
|
+ return (a->FullPath < b->FullPath);
|
|
|
});
|
|
|
|
|
|
for (MUFile const* const muf : sorted) {
|
|
|
@@ -1300,13 +1320,13 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
continue;
|
|
|
}
|
|
|
if (muf->SkipMoc) {
|
|
|
- moc_skip.insert(muf->RealPath);
|
|
|
+ moc_skip.insert(muf->FullPath);
|
|
|
}
|
|
|
if (muf->SkipUic) {
|
|
|
- uic_skip.insert(muf->RealPath);
|
|
|
+ uic_skip.insert(muf->FullPath);
|
|
|
}
|
|
|
if (muf->MocIt || muf->UicIt) {
|
|
|
- sources.emplace_back(muf->RealPath);
|
|
|
+ sources.emplace_back(muf->FullPath);
|
|
|
sourcesFlags.emplace_back(
|
|
|
cmStrCat(muf->MocIt ? 'M' : 'm', muf->UicIt ? 'U' : 'u'));
|
|
|
}
|
|
|
@@ -1339,12 +1359,14 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo()
|
|
|
ofs.WriteStrings("AM_MOC_INCLUDES", this->Moc.Includes);
|
|
|
ofs.WriteConfigStrings("AM_MOC_INCLUDES", this->Moc.ConfigIncludes);
|
|
|
ofs.Write("AM_MOC_OPTIONS",
|
|
|
- this->Target->GetSafeProperty("AUTOMOC_MOC_OPTIONS"));
|
|
|
+ this->GenTarget->GetSafeProperty("AUTOMOC_MOC_OPTIONS"));
|
|
|
ofs.Write("AM_MOC_RELAXED_MODE", MfDef("CMAKE_AUTOMOC_RELAXED_MODE"));
|
|
|
+ ofs.Write("AM_MOC_PATH_PREFIX",
|
|
|
+ this->GenTarget->GetSafeProperty("AUTOMOC_PATH_PREFIX"));
|
|
|
ofs.Write("AM_MOC_MACRO_NAMES",
|
|
|
- this->Target->GetSafeProperty("AUTOMOC_MACRO_NAMES"));
|
|
|
+ this->GenTarget->GetSafeProperty("AUTOMOC_MACRO_NAMES"));
|
|
|
ofs.Write("AM_MOC_DEPEND_FILTERS",
|
|
|
- this->Target->GetSafeProperty("AUTOMOC_DEPEND_FILTERS"));
|
|
|
+ this->GenTarget->GetSafeProperty("AUTOMOC_DEPEND_FILTERS"));
|
|
|
ofs.Write("AM_MOC_PREDEFS_CMD", this->Moc.PredefsCmd);
|
|
|
}
|
|
|
|
|
|
@@ -1375,6 +1397,11 @@ bool cmQtAutoGenInitializer::SetupWriteRccInfo()
|
|
|
for (Qrc const& qrc : this->Rcc.Qrcs) {
|
|
|
InfoWriter ofs(qrc.InfoFile);
|
|
|
if (ofs) {
|
|
|
+ // Utility lambdas
|
|
|
+ auto MfDef = [this](const char* key) {
|
|
|
+ return this->Makefile->GetSafeDefinition(key);
|
|
|
+ };
|
|
|
+
|
|
|
// Write
|
|
|
ofs.Write("# Configurations\n");
|
|
|
ofs.Write("ARCC_MULTI_CONFIG", this->MultiConfig ? "TRUE" : "FALSE");
|
|
|
@@ -1384,6 +1411,8 @@ bool cmQtAutoGenInitializer::SetupWriteRccInfo()
|
|
|
ofs.WriteConfig("ARCC_SETTINGS_FILE", qrc.ConfigSettingsFile);
|
|
|
|
|
|
ofs.Write("# Directories\n");
|
|
|
+ ofs.Write("ARCC_CMAKE_SOURCE_DIR", MfDef("CMAKE_SOURCE_DIR"));
|
|
|
+ ofs.Write("ARCC_CMAKE_BINARY_DIR", MfDef("CMAKE_BINARY_DIR"));
|
|
|
ofs.Write("ARCC_BUILD_DIR", this->Dir.Build);
|
|
|
ofs.Write("ARCC_INCLUDE_DIR", this->Dir.Include);
|
|
|
ofs.WriteConfig("ARCC_INCLUDE_DIR", this->Dir.ConfigInclude);
|
|
|
@@ -1414,8 +1443,7 @@ bool cmQtAutoGenInitializer::SetupWriteRccInfo()
|
|
|
void cmQtAutoGenInitializer::RegisterGeneratedSource(
|
|
|
std::string const& filename)
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
- cmSourceFile* gFile = makefile->GetOrCreateSource(filename, true);
|
|
|
+ cmSourceFile* gFile = this->Makefile->GetOrCreateSource(filename, true);
|
|
|
gFile->SetProperty("GENERATED", "1");
|
|
|
gFile->SetProperty("SKIP_AUTOGEN", "1");
|
|
|
}
|
|
|
@@ -1427,7 +1455,7 @@ bool cmQtAutoGenInitializer::AddGeneratedSource(std::string const& filename,
|
|
|
// Register source at makefile
|
|
|
this->RegisterGeneratedSource(filename);
|
|
|
// Add source file to target
|
|
|
- this->Target->AddSource(filename, prepend);
|
|
|
+ this->GenTarget->AddSource(filename, prepend);
|
|
|
// Add source file to source group
|
|
|
return this->AddToSourceGroup(filename, genVars.GenNameUpper);
|
|
|
}
|
|
|
@@ -1435,7 +1463,6 @@ bool cmQtAutoGenInitializer::AddGeneratedSource(std::string const& filename,
|
|
|
bool cmQtAutoGenInitializer::AddToSourceGroup(std::string const& fileName,
|
|
|
cm::string_view genNameUpper)
|
|
|
{
|
|
|
- cmMakefile* makefile = this->Target->Target->GetMakefile();
|
|
|
cmSourceGroup* sourceGroup = nullptr;
|
|
|
// Acquire source group
|
|
|
{
|
|
|
@@ -1447,7 +1474,8 @@ bool cmQtAutoGenInitializer::AddToSourceGroup(std::string const& fileName,
|
|
|
cmStrCat(genNameUpper, "_SOURCE_GROUP"), "AUTOGEN_SOURCE_GROUP"
|
|
|
};
|
|
|
for (std::string const& prop : props) {
|
|
|
- const char* propName = makefile->GetState()->GetGlobalProperty(prop);
|
|
|
+ const char* propName =
|
|
|
+ this->Makefile->GetState()->GetGlobalProperty(prop);
|
|
|
if ((propName != nullptr) && (*propName != '\0')) {
|
|
|
groupName = propName;
|
|
|
property = prop;
|
|
|
@@ -1457,7 +1485,7 @@ bool cmQtAutoGenInitializer::AddToSourceGroup(std::string const& fileName,
|
|
|
}
|
|
|
// Generate a source group on demand
|
|
|
if (!groupName.empty()) {
|
|
|
- sourceGroup = makefile->GetOrCreateSourceGroup(groupName);
|
|
|
+ sourceGroup = this->Makefile->GetOrCreateSourceGroup(groupName);
|
|
|
if (sourceGroup == nullptr) {
|
|
|
cmSystemTools::Error(
|
|
|
cmStrCat(genNameUpper, " error in ", property,
|
|
|
@@ -1475,8 +1503,8 @@ bool cmQtAutoGenInitializer::AddToSourceGroup(std::string const& fileName,
|
|
|
|
|
|
void cmQtAutoGenInitializer::AddCleanFile(std::string const& fileName)
|
|
|
{
|
|
|
- Target->Target->AppendProperty("ADDITIONAL_CLEAN_FILES", fileName.c_str(),
|
|
|
- false);
|
|
|
+ this->GenTarget->Target->AppendProperty("ADDITIONAL_CLEAN_FILES",
|
|
|
+ fileName.c_str(), false);
|
|
|
}
|
|
|
|
|
|
static unsigned int CharPtrToUInt(const char* const input)
|
|
|
@@ -1489,7 +1517,7 @@ static unsigned int CharPtrToUInt(const char* const input)
|
|
|
}
|
|
|
|
|
|
static std::vector<cmQtAutoGen::IntegerVersion> GetKnownQtVersions(
|
|
|
- cmGeneratorTarget const* target)
|
|
|
+ cmGeneratorTarget const* genTarget)
|
|
|
{
|
|
|
// Qt version variable prefixes
|
|
|
static std::initializer_list<
|
|
|
@@ -1511,7 +1539,7 @@ static std::vector<cmQtAutoGen::IntegerVersion> GetKnownQtVersions(
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- cmMakefile* makefile = target->Target->GetMakefile();
|
|
|
+ cmMakefile* makefile = genTarget->Makefile;
|
|
|
|
|
|
// Read versions from variables
|
|
|
for (auto const& keyPair : keys) {
|
|
|
@@ -1561,22 +1589,20 @@ bool cmQtAutoGenInitializer::GetQtExecutable(GenVarsT& genVars,
|
|
|
{
|
|
|
auto print_err = [this, &genVars](std::string const& err) {
|
|
|
cmSystemTools::Error(cmStrCat(genVars.GenNameUpper, " for target ",
|
|
|
- this->Target->GetName(), ": ", err));
|
|
|
+ this->GenTarget->GetName(), ": ", err));
|
|
|
};
|
|
|
|
|
|
// Custom executable
|
|
|
{
|
|
|
std::string const prop = cmStrCat(genVars.GenNameUpper, "_EXECUTABLE");
|
|
|
- std::string const val = this->Target->Target->GetSafeProperty(prop);
|
|
|
+ std::string const val = this->GenTarget->Target->GetSafeProperty(prop);
|
|
|
if (!val.empty()) {
|
|
|
// Evaluate generator expression
|
|
|
{
|
|
|
- cmListFileBacktrace lfbt =
|
|
|
- this->Target->Target->GetMakefile()->GetBacktrace();
|
|
|
+ cmListFileBacktrace lfbt = this->Makefile->GetBacktrace();
|
|
|
cmGeneratorExpression ge(lfbt);
|
|
|
std::unique_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(val);
|
|
|
- genVars.Executable =
|
|
|
- cge->Evaluate(this->Target->GetLocalGenerator(), "");
|
|
|
+ genVars.Executable = cge->Evaluate(this->LocalGen, "");
|
|
|
}
|
|
|
if (genVars.Executable.empty() && !ignoreMissingTarget) {
|
|
|
print_err(prop + " evaluates to an empty value");
|
|
|
@@ -1604,15 +1630,15 @@ bool cmQtAutoGenInitializer::GetQtExecutable(GenVarsT& genVars,
|
|
|
std::string const targetName = cmStrCat(prefix, executable);
|
|
|
|
|
|
// Find target
|
|
|
- cmLocalGenerator* localGen = this->Target->GetLocalGenerator();
|
|
|
- cmGeneratorTarget* target = localGen->FindGeneratorTargetToUse(targetName);
|
|
|
- if (target != nullptr) {
|
|
|
+ cmGeneratorTarget* genTarget =
|
|
|
+ this->LocalGen->FindGeneratorTargetToUse(targetName);
|
|
|
+ if (genTarget != nullptr) {
|
|
|
genVars.ExecutableTargetName = targetName;
|
|
|
- genVars.ExecutableTarget = target;
|
|
|
- if (target->IsImported()) {
|
|
|
- genVars.Executable = target->ImportedGetLocation("");
|
|
|
+ genVars.ExecutableTarget = genTarget;
|
|
|
+ if (genTarget->IsImported()) {
|
|
|
+ genVars.Executable = genTarget->ImportedGetLocation("");
|
|
|
} else {
|
|
|
- genVars.Executable = target->GetLocation("");
|
|
|
+ genVars.Executable = genTarget->GetLocation("");
|
|
|
}
|
|
|
} else {
|
|
|
if (ignoreMissingTarget) {
|