summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 9710d20527..ef75b3b06f 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 a581ea14a3..f0b2e0d43a 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 b03e9cf452..6dbc9e1474 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 af773664c2..4fd9041613 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,