summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorAlex Neundorf <neundorf@kde.org>2011-08-15 23:27:30 (GMT)
committerAlex Neundorf <neundorf@kde.org>2011-08-15 23:27:30 (GMT)
commitc27607baf860b6c57db84f21a298ad8257ff7153 (patch)
tree45a21e677e53e01c201a142f8c46777adf4f255f /Source
parent24d9b7d7452bfd9b3d7cea670a3a5a2e9f5b2f16 (diff)
downloadCMake-c27607baf860b6c57db84f21a298ad8257ff7153.zip
CMake-c27607baf860b6c57db84f21a298ad8257ff7153.tar.gz
CMake-c27607baf860b6c57db84f21a298ad8257ff7153.tar.bz2
Refactor SetupAutomocTarget() so it can be run after creating the target
This makes it easier to move it from InitialPass() to some other location, e.g. FinalPass() or something else. Alex
Diffstat (limited to 'Source')
-rw-r--r--Source/cmAddExecutableCommand.cxx15
-rw-r--r--Source/cmAddLibraryCommand.cxx14
-rw-r--r--Source/cmQtAutomoc.cxx57
-rw-r--r--Source/cmQtAutomoc.h6
4 files changed, 28 insertions, 64 deletions
diff --git a/Source/cmAddExecutableCommand.cxx b/Source/cmAddExecutableCommand.cxx
index 9710d20..ef75b3b 100644
--- a/Source/cmAddExecutableCommand.cxx
+++ b/Source/cmAddExecutableCommand.cxx
@@ -126,14 +126,6 @@ bool cmAddExecutableCommand
}
std::vector<std::string> srclists(s, args.end());
- cmQtAutomoc* automoc = 0;
- if ( doAutomoc )
- {
- automoc = new cmQtAutomoc;
- automoc->SetupAutomocTarget(this->Makefile, exename.c_str(), srclists);
- }
-
-
cmTarget* tgt = this->Makefile->AddExecutable(exename.c_str(), srclists,
excludeFromAll);
if ( use_win32 )
@@ -145,11 +137,10 @@ bool cmAddExecutableCommand
tgt->SetProperty("MACOSX_BUNDLE", "ON");
}
- if ( automoc )
+ if ( doAutomoc )
{
- automoc->AddTargetDependency(this->Makefile, tgt);
- delete automoc;
- automoc = 0;
+ cmQtAutomoc automoc;
+ automoc.SetupAutomocTarget(tgt);
}
return true;
diff --git a/Source/cmAddLibraryCommand.cxx b/Source/cmAddLibraryCommand.cxx
index a581ea1..f0b2e0d 100644
--- a/Source/cmAddLibraryCommand.cxx
+++ b/Source/cmAddLibraryCommand.cxx
@@ -178,21 +178,13 @@ bool cmAddLibraryCommand
++s;
}
- cmQtAutomoc* automoc = 0;
- if ( doAutomoc )
- {
- automoc = new cmQtAutomoc;
- automoc->SetupAutomocTarget(this->Makefile, libName.c_str(), srclists);
- }
-
cmTarget* tgt =this->Makefile->AddLibrary(libName.c_str(), type, srclists,
excludeFromAll);
- if ( automoc )
+ if ( doAutomoc )
{
- automoc->AddTargetDependency(this->Makefile, tgt);
- delete automoc;
- automoc = 0;
+ cmQtAutomoc automoc;
+ automoc.SetupAutomocTarget(tgt);
}
return true;
diff --git a/Source/cmQtAutomoc.cxx b/Source/cmQtAutomoc.cxx
index b03e9cf..6dbc9e1 100644
--- a/Source/cmQtAutomoc.cxx
+++ b/Source/cmQtAutomoc.cxx
@@ -32,10 +32,10 @@ cmQtAutomoc::cmQtAutomoc()
}
-void cmQtAutomoc::SetupAutomocTarget(cmMakefile* makefile,
- const char* targetName,
- std::vector<std::string>& srcs)
+void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
{
+ cmMakefile* makefile = target->GetMakefile();
+ const char* targetName = target->GetName();
// don't do anything if there is no Qt4:
std::string qtMajorVersion = makefile->GetSafeDefinition("QT_VERSION_MAJOR");
if (qtMajorVersion != "4")
@@ -43,6 +43,7 @@ void cmQtAutomoc::SetupAutomocTarget(cmMakefile* makefile,
return;
}
+ // create a custom target for running automoc at buildtime:
std::string automocTargetName = targetName;
automocTargetName += "_automoc";
@@ -66,34 +67,32 @@ void cmQtAutomoc::SetupAutomocTarget(cmMakefile* makefile,
std::vector<std::string> depends;
- cmTarget* target = makefile->AddUtilityCommand(automocTargetName.c_str(),
- true,
+ cmTarget* mocTarget = makefile->AddUtilityCommand(automocTargetName.c_str(),
+ true,
workingDirectory.c_str(), depends,
commandLines, false, "Automoc target");
+ target->AddUtility(automocTargetName.c_str());
+ // configure a file to get all information to automoc at buildtime:
std::string _moc_files;
std::string _moc_headers;
const char* sepFiles = "";
const char* sepHeaders = "";
- for(std::vector<std::string>::const_iterator fileIt = srcs.begin();
- fileIt != srcs.end();
+
+ const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
+
+ for(std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
+ fileIt != srcFiles.end();
++fileIt)
{
- std::string absFile = cmSystemTools::CollapseFullPath(
- fileIt->c_str(), makefile->GetCurrentDirectory());
-
- bool skip = false;
- bool generated = false;
- cmSourceFile* sf = makefile->GetSource(absFile.c_str());
- if (sf)
- {
- skip = cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"));
- generated = cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"));
- }
+ cmSourceFile* sf = *fileIt;
+ std::string absFile = sf->GetFullPath();
+ bool skip = cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTOMOC"));
+ bool generated = cmSystemTools::IsOn(sf->GetPropertyForUser("GENERATED"));
if ((skip==false) && (generated == false))
{
- std::string ext = cmSystemTools::GetFilenameExtension(fileIt->c_str());
+ std::string ext = sf->GetExtension();
cmSystemTools::FileFormat fileType = cmSystemTools::GetFileFormat(
ext.c_str());
if (fileType == cmSystemTools::CXX_FILE_FORMAT)
@@ -137,29 +136,15 @@ void cmQtAutomoc::SetupAutomocTarget(cmMakefile* makefile,
mocCppFile += "/";
mocCppFile += automocTargetName;
mocCppFile += ".cpp";
- makefile->GetOrCreateSource(mocCppFile.c_str(), true);
- srcs.push_back(mocCppFile);
+ cmSourceFile* mocCppSource = makefile->GetOrCreateSource(mocCppFile.c_str(),
+ true);
+ target->AddSourceFile(mocCppSource);
makefile->AppendProperty("ADDITIONAL_MAKE_CLEAN_FILES",
mocCppFile.c_str(), false);
}
-void cmQtAutomoc::AddTargetDependency(cmMakefile* makefile, cmTarget* target)
-{
- // don't do anything if there is no Qt4:
- std::string qtMajorVersion = makefile->GetSafeDefinition("QT_VERSION_MAJOR");
- if (qtMajorVersion != "4")
- {
- return;
- }
-
- std::string automocTargetName = target->GetName();
- automocTargetName += "_automoc";
- target->AddUtility(automocTargetName.c_str());
-}
-
-
bool cmQtAutomoc::Run(const char* targetDirectory)
{
cmake cm;
diff --git a/Source/cmQtAutomoc.h b/Source/cmQtAutomoc.h
index af77366..4fd9041 100644
--- a/Source/cmQtAutomoc.h
+++ b/Source/cmQtAutomoc.h
@@ -10,11 +10,7 @@ public:
cmQtAutomoc();
bool Run(const char* targetDirectory);
- void SetupAutomocTarget(cmMakefile* makefile,
- const char* targetName,
- std::vector<std::string>& srcs);
-
- void AddTargetDependency(cmMakefile* makefile, cmTarget* target);
+ void SetupAutomocTarget(cmTarget* target);
private:
cmGlobalGenerator* CreateGlobalGenerator(cmake* cm,