cmAutogen: Move autogen target creation to InitializeMocSourceFile.

The SetupAutoGenerateTarget method will soon be invoked at a later
time in a followup commit. We need to ensure that we create the
utility autogen target early.
This commit is contained in:
Stephen Kelly 2013-11-04 10:29:21 +01:00
parent 20a234d1b8
commit 45735f3827
1 changed files with 72 additions and 67 deletions

View File

@ -185,75 +185,9 @@ bool cmQtAutoGenerators::InitializeMocSourceFile(cmTarget* target)
target->AddSourceFile(mocCppSource);
}
return true;
}
static void GetCompileDefinitionsAndDirectories(cmTarget *target,
const char * config,
std::string &incs,
std::string &defs)
{
cmMakefile* makefile = target->GetMakefile();
cmLocalGenerator* localGen = makefile->GetLocalGenerator();
std::vector<std::string> includeDirs;
cmGeneratorTarget gtgt(target);
// Get the include dirs for this target, without stripping the implicit
// include dirs off, see http://public.kitware.com/Bug/view.php?id=13667
localGen->GetIncludeDirectories(includeDirs, &gtgt, "CXX", config, false);
const char* sep = "";
incs = "";
for(std::vector<std::string>::const_iterator incDirIt = includeDirs.begin();
incDirIt != includeDirs.end();
++incDirIt)
{
incs += sep;
sep = ";";
incs += *incDirIt;
}
std::set<std::string> defines;
localGen->AddCompileDefinitions(defines, target, config);
sep = "";
for(std::set<std::string>::const_iterator defIt = defines.begin();
defIt != defines.end();
++defIt)
{
defs += sep;
sep = ";";
defs += *defIt;
}
}
void cmQtAutoGenerators::SetupAutoGenerateTarget(cmTarget* target)
{
cmMakefile* makefile = target->GetMakefile();
const char* targetName = target->GetName();
// forget the variables added here afterwards again:
cmMakefile::ScopePushPop varScope(makefile);
static_cast<void>(varScope);
const char *qtVersion = makefile->GetDefinition("Qt5Core_VERSION_MAJOR");
if (!qtVersion)
{
qtVersion = makefile->GetDefinition("QT_VERSION_MAJOR");
}
if (const char *targetQtVersion =
target->GetLinkInterfaceDependentStringProperty("QT_MAJOR_VERSION", 0))
{
qtVersion = targetQtVersion;
}
if (qtVersion)
{
makefile->AddDefinition("_target_qt_version", qtVersion);
}
// create a custom target for running generators at buildtime:
std::string autogenTargetName = getAutogenTargetName(target);
makefile->AddDefinition("_moc_target_name",
cmLocalGenerator::EscapeForCMake(autogenTargetName.c_str()).c_str());
std::string targetDir = getAutogenTargetDir(target);
cmCustomCommandLine currentLine;
@ -296,7 +230,7 @@ void cmQtAutoGenerators::SetupAutoGenerateTarget(cmTarget* target)
tools += " and " + toolNames[0];
}
std::string autogenComment = "Automatic " + tools + " for target ";
autogenComment += targetName;
autogenComment += target->GetName();
#if defined(_WIN32) && !defined(__CYGWIN__)
bool usePRE_BUILD = false;
@ -353,6 +287,77 @@ void cmQtAutoGenerators::SetupAutoGenerateTarget(cmTarget* target)
target->AddUtility(autogenTargetName.c_str());
}
return true;
}
static void GetCompileDefinitionsAndDirectories(cmTarget *target,
const char * config,
std::string &incs,
std::string &defs)
{
cmMakefile* makefile = target->GetMakefile();
cmLocalGenerator* localGen = makefile->GetLocalGenerator();
std::vector<std::string> includeDirs;
cmGeneratorTarget gtgt(target);
// Get the include dirs for this target, without stripping the implicit
// include dirs off, see http://public.kitware.com/Bug/view.php?id=13667
localGen->GetIncludeDirectories(includeDirs, &gtgt, "CXX", config, false);
const char* sep = "";
incs = "";
for(std::vector<std::string>::const_iterator incDirIt = includeDirs.begin();
incDirIt != includeDirs.end();
++incDirIt)
{
incs += sep;
sep = ";";
incs += *incDirIt;
}
std::set<std::string> defines;
localGen->AddCompileDefinitions(defines, target, config);
sep = "";
for(std::set<std::string>::const_iterator defIt = defines.begin();
defIt != defines.end();
++defIt)
{
defs += sep;
sep = ";";
defs += *defIt;
}
}
void cmQtAutoGenerators::SetupAutoGenerateTarget(cmTarget* target)
{
cmMakefile* makefile = target->GetMakefile();
// forget the variables added here afterwards again:
cmMakefile::ScopePushPop varScope(makefile);
static_cast<void>(varScope);
// create a custom target for running generators at buildtime:
std::string autogenTargetName = getAutogenTargetName(target);
makefile->AddDefinition("_moc_target_name",
cmLocalGenerator::EscapeForCMake(autogenTargetName.c_str()).c_str());
std::string targetDir = getAutogenTargetDir(target);
const char *qtVersion = makefile->GetDefinition("Qt5Core_VERSION_MAJOR");
if (!qtVersion)
{
qtVersion = makefile->GetDefinition("QT_VERSION_MAJOR");
}
if (const char *targetQtVersion =
target->GetLinkInterfaceDependentStringProperty("QT_MAJOR_VERSION", 0))
{
qtVersion = targetQtVersion;
}
if (qtVersion)
{
makefile->AddDefinition("_target_qt_version", qtVersion);
}
std::map<std::string, std::string> configIncludes;
std::map<std::string, std::string> configDefines;