summaryrefslogtreecommitdiffstats
path: root/Source/cmMakefile.cxx
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2007-05-22 14:24:59 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2007-05-22 14:24:59 (GMT)
commit4878c009057cf410fff98d8450e1e7cd2b3072ae (patch)
treea7ef13ec8a302e2530ec1a1fe5edda141fa9896e /Source/cmMakefile.cxx
parent6be930f0cfca31d62c3dc498b3fc9e756acca710 (diff)
downloadCMake-4878c009057cf410fff98d8450e1e7cd2b3072ae.zip
CMake-4878c009057cf410fff98d8450e1e7cd2b3072ae.tar.gz
CMake-4878c009057cf410fff98d8450e1e7cd2b3072ae.tar.bz2
ENH: add the IMPORT keyword to ADD_EXECUTABLE(), which generates an
"imported" executable target. This can then be used e.g. with ADD_CUSTOM_COMMAND() to generate stuff. It adds a second container for "imported" targets, and FindTarget() now takes an additional argument bool useImportedTargets to specify whether you also want to search in the imported targets or only in the "normal" targets. Alex
Diffstat (limited to 'Source/cmMakefile.cxx')
-rw-r--r--Source/cmMakefile.cxx92
1 files changed, 53 insertions, 39 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index f126d0e..064e153 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -825,12 +825,10 @@ void cmMakefile::AddUtilityCommand(const char* utilityName,
bool escapeOldStyle, const char* comment)
{
// Create a target instance for this utility.
- cmTarget target;
- target.SetMakefile(this);
- target.SetType(cmTarget::UTILITY, utilityName);
+ cmTarget* target = this->AddNewTarget(cmTarget::UTILITY, utilityName, false);
if (excludeFromAll)
{
- target.SetProperty("EXCLUDE_FROM_ALL", "TRUE");
+ target->SetProperty("EXCLUDE_FROM_ALL", "TRUE");
}
if(!comment)
{
@@ -850,7 +848,7 @@ void cmMakefile::AddUtilityCommand(const char* utilityName,
commandLines, comment,
workingDirectory, no_replace,
escapeOldStyle);
- target.GetSourceLists().push_back(force);
+ target->GetSourceLists().push_back(force);
// The output is not actually created so mark it symbolic.
if(cmSourceFile* sf = this->GetSource(force.c_str()))
@@ -862,11 +860,6 @@ void cmMakefile::AddUtilityCommand(const char* utilityName,
cmSystemTools::Error("Could not get source file entry for ",
force.c_str());
}
-
- // Add the target to the set of targets.
- cmTargets::iterator it =
- this->Targets.insert(cmTargets::value_type(utilityName,target)).first;
- this->LocalGenerator->GetGlobalGenerator()->AddTarget(*it);
}
void cmMakefile::AddDefineFlag(const char* flag)
@@ -940,7 +933,7 @@ void cmMakefile::AddLinkLibraryForTarget(const char *target,
if ( i != this->Targets.end())
{
cmTarget* tgt =
- this->GetCMakeInstance()->GetGlobalGenerator()->FindTarget(0, lib);
+ this->GetCMakeInstance()->GetGlobalGenerator()->FindTarget(0, lib, false);
if(tgt)
{
bool allowModules = true;
@@ -1343,53 +1336,64 @@ void cmMakefile::AddLibrary(const char* lname, int shared,
const std::vector<std::string> &srcs,
bool excludeFromAll)
{
- cmTarget target;
+ cmTarget* target=0;
switch (shared)
{
case 0:
- target.SetType(cmTarget::STATIC_LIBRARY, lname);
+ target=this->AddNewTarget(cmTarget::STATIC_LIBRARY, lname, false);
break;
case 1:
- target.SetType(cmTarget::SHARED_LIBRARY, lname);
+ target=this->AddNewTarget(cmTarget::SHARED_LIBRARY, lname, false);
break;
case 2:
- target.SetType(cmTarget::MODULE_LIBRARY, lname);
+ target=this->AddNewTarget(cmTarget::MODULE_LIBRARY, lname, false);
break;
default:
- target.SetType(cmTarget::STATIC_LIBRARY, lname);
+ target=this->AddNewTarget(cmTarget::STATIC_LIBRARY, lname, false);
}
- target.SetMakefile(this);
// Clear its dependencies. Otherwise, dependencies might persist
// over changes in CMakeLists.txt, making the information stale and
// hence useless.
- target.ClearDependencyInformation( *this, lname );
+ target->ClearDependencyInformation( *this, lname );
if(excludeFromAll)
{
- target.SetProperty("EXCLUDE_FROM_ALL", "TRUE");
+ target->SetProperty("EXCLUDE_FROM_ALL", "TRUE");
}
- target.GetSourceLists() = srcs;
- this->AddGlobalLinkInformation(lname, target);
- cmTargets::iterator it =
- this->Targets.insert(cmTargets::value_type(lname,target)).first;
- this->LocalGenerator->GetGlobalGenerator()->AddTarget(*it);
+ target->GetSourceLists() = srcs;
+ this->AddGlobalLinkInformation(lname, *target);
}
cmTarget* cmMakefile::AddExecutable(const char *exeName,
const std::vector<std::string> &srcs,
bool excludeFromAll)
{
- cmTarget target;
- target.SetType(cmTarget::EXECUTABLE, exeName);
- target.SetMakefile(this);
+ cmTarget* target = this->AddNewTarget(cmTarget::EXECUTABLE, exeName, false);
if(excludeFromAll)
{
- target.SetProperty("EXCLUDE_FROM_ALL", "TRUE");
+ target->SetProperty("EXCLUDE_FROM_ALL", "TRUE");
}
- target.GetSourceLists() = srcs;
- this->AddGlobalLinkInformation(exeName, target);
- cmTargets::iterator it =
- this->Targets.insert(cmTargets::value_type(exeName,target)).first;
+ target->GetSourceLists() = srcs;
+ this->AddGlobalLinkInformation(exeName, *target);
+ return target;
+}
+
+
+cmTarget* cmMakefile::AddNewTarget(cmTarget::TargetType type, const char* name, bool isImported)
+{
+ cmTargets::iterator it;
+ cmTarget target;
+ target.SetType(type, name);
+ target.SetMakefile(this);
+ if (isImported)
+ {
+ target.MarkAsImported();
+ it=this->ImportedTargets.insert(cmTargets::value_type(target.GetName(), target)).first;
+ }
+ else
+ {
+ it=this->Targets.insert(cmTargets::value_type(target.GetName(), target)).first;
+ }
this->LocalGenerator->GetGlobalGenerator()->AddTarget(*it);
return &it->second;
}
@@ -2709,7 +2713,7 @@ const char *cmMakefile::GetProperty(const char* prop,
return this->GetCMakeInstance()->GetProperty(prop,scope);
}
- return retVal;
+ return retVal;
}
bool cmMakefile::GetPropertyAsBool(const char* prop)
@@ -2718,16 +2722,26 @@ bool cmMakefile::GetPropertyAsBool(const char* prop)
}
-cmTarget* cmMakefile::FindTarget(const char* name)
+cmTarget* cmMakefile::FindTarget(const char* name, bool useImportedTargets)
{
cmTargets& tgts = this->GetTargets();
-
- cmTargets::iterator i = tgts.find(name);
- if (i == tgts.end())
+
+ cmTargets::iterator i = tgts.find ( name );
+ if ( i != tgts.end() )
{
- return 0;
+ return &i->second;
}
- return &i->second;
+
+ if (useImportedTargets)
+ {
+ cmTargets::iterator impTarget = this->ImportedTargets.find(name);
+ if (impTarget != this->ImportedTargets.end())
+ {
+ return &impTarget->second;
+ }
+ }
+
+ return 0;
}
cmTest* cmMakefile::CreateTest(const char* testName)