[Cmake-commits] CMake branch, next, updated. v3.0.0-4354-g0d1ac35
Ben Boeckel
ben.boeckel at kitware.com
Thu Jul 17 11:18:21 EDT 2014
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 0d1ac351bc47e6c8d9e697e730d2abbf68e4f697 (commit)
via 03e1db881354d16c93ca2bda2ef83a4563782670 (commit)
via 93d441b5341b3288f113d7e9c3a488bb23497547 (commit)
via a9c9b66c272d1d63918c1a5040c63d6cb169be91 (commit)
via bcb6dbc1cb0bfeb0627c0b48ced41beea9d4c51a (commit)
via 679f3deeb79a7b19fb47b96bb520817c1c529f36 (commit)
via 23d6520daae729e433fc9325eb53acb541979d0f (commit)
via cd54f1dbeb5c71b400ccb0db81a0fcea45df46b8 (commit)
via b75fc0e1ad343173f5231819cfcdbdee9a8b076a (commit)
via 660769151a7f628f92eb28d77bcae854eaae54c2 (commit)
via cebefa71fad223f134529a2b859006360e465a80 (commit)
via 97ce676e75900dfeeb30ea1c6ba5a139befe9562 (commit)
from bd0274267f112ce43aa3f34779780026770612bd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0d1ac351bc47e6c8d9e697e730d2abbf68e4f697
commit 0d1ac351bc47e6c8d9e697e730d2abbf68e4f697
Merge: bd02742 03e1db8
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Thu Jul 17 11:18:20 2014 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Thu Jul 17 11:18:20 2014 -0400
Merge topic 'dev/target-fastpaths' into next
03e1db88 Revert "genex: Allow genex caching of config genex on single-config generators"
93d441b5 genex: Allow genex caching of config genex on single-config generators
a9c9b66c cmTarget: use a hash_map for cmTargets typedef
bcb6dbc1 cmTarget: help the optimizer a bit
679f3dee cmTarget: use hash_set for sets of strings
23d6520d cmTarget: Allow caching of empty genex expansions
cd54f1db cmTarget: Only copy GenEx expansions when necessary
b75fc0e1 cmTarget: Don't set properties on custom targets
66076915 cmTarget: Use static strings for special property names
cebefa71 cmTarget: Sort special property checks
97ce676e cmTarget: Fast path for regular properties
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=03e1db881354d16c93ca2bda2ef83a4563782670
commit 03e1db881354d16c93ca2bda2ef83a4563782670
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Thu Jul 17 11:17:59 2014 -0400
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:59 2014 -0400
Revert "genex: Allow genex caching of config genex on single-config generators"
This reverts commit 93d441b5341b3288f113d7e9c3a488bb23497547.
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 2581355..3b83cd3 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -15,7 +15,6 @@
#include "cmGeneratorExpressionParser.h"
#include "cmGeneratorExpressionDAGChecker.h"
#include "cmGeneratorExpression.h"
-#include "cmGlobalGenerator.h"
#include "cmLocalGenerator.h"
#include "cmSourceFile.h"
@@ -689,11 +688,7 @@ static const struct ConfigurationNode : public cmGeneratorExpressionNode
const GeneratorExpressionContent *,
cmGeneratorExpressionDAGChecker *) const
{
- if (context->Makefile->GetLocalGenerator()->
- GetGlobalGenerator()->IsMultiConfig())
- {
- context->HadContextSensitiveCondition = true;
- }
+ context->HadContextSensitiveCondition = true;
return context->Config;
}
} configurationNode;
@@ -721,11 +716,7 @@ static const struct ConfigurationTestNode : public cmGeneratorExpressionNode
"Expression syntax not recognized.");
return std::string();
}
- if (context->Makefile->GetLocalGenerator()->
- GetGlobalGenerator()->IsMultiConfig())
- {
- context->HadContextSensitiveCondition = true;
- }
+ context->HadContextSensitiveCondition = true;
if (context->Config.empty())
{
return parameters.front().empty() ? "1" : "0";
diff --git a/Tests/RunCMake/include_directories/RunCMakeTest.cmake b/Tests/RunCMake/include_directories/RunCMakeTest.cmake
index 57c52e3..fa76f24 100644
--- a/Tests/RunCMake/include_directories/RunCMakeTest.cmake
+++ b/Tests/RunCMake/include_directories/RunCMakeTest.cmake
@@ -9,11 +9,7 @@ run_cmake(RelativePathInInterface)
run_cmake(ImportedTarget)
run_cmake(RelativePathInGenex)
run_cmake(CMP0021)
-if (CMAKE_CONFIGURATION_TYPES)
- # $<CONFIGURATION> is only context-dependent in multi-config
- # generators.
- run_cmake(install_config)
-endif ()
+run_cmake(install_config)
run_cmake(incomplete-genex)
run_cmake(export-NOWARN)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=93d441b5341b3288f113d7e9c3a488bb23497547
commit 93d441b5341b3288f113d7e9c3a488bb23497547
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Apr 30 15:41:40 2014 -0400
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:52 2014 -0400
genex: Allow genex caching of config genex on single-config generators
The single-config generators do not make $<CONFIGURATION> and $<CONFIG>
generator expressions context-sensitive.
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 3b83cd3..2581355 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -15,6 +15,7 @@
#include "cmGeneratorExpressionParser.h"
#include "cmGeneratorExpressionDAGChecker.h"
#include "cmGeneratorExpression.h"
+#include "cmGlobalGenerator.h"
#include "cmLocalGenerator.h"
#include "cmSourceFile.h"
@@ -688,7 +689,11 @@ static const struct ConfigurationNode : public cmGeneratorExpressionNode
const GeneratorExpressionContent *,
cmGeneratorExpressionDAGChecker *) const
{
- context->HadContextSensitiveCondition = true;
+ if (context->Makefile->GetLocalGenerator()->
+ GetGlobalGenerator()->IsMultiConfig())
+ {
+ context->HadContextSensitiveCondition = true;
+ }
return context->Config;
}
} configurationNode;
@@ -716,7 +721,11 @@ static const struct ConfigurationTestNode : public cmGeneratorExpressionNode
"Expression syntax not recognized.");
return std::string();
}
- context->HadContextSensitiveCondition = true;
+ if (context->Makefile->GetLocalGenerator()->
+ GetGlobalGenerator()->IsMultiConfig())
+ {
+ context->HadContextSensitiveCondition = true;
+ }
if (context->Config.empty())
{
return parameters.front().empty() ? "1" : "0";
diff --git a/Tests/RunCMake/include_directories/RunCMakeTest.cmake b/Tests/RunCMake/include_directories/RunCMakeTest.cmake
index fa76f24..57c52e3 100644
--- a/Tests/RunCMake/include_directories/RunCMakeTest.cmake
+++ b/Tests/RunCMake/include_directories/RunCMakeTest.cmake
@@ -9,7 +9,11 @@ run_cmake(RelativePathInInterface)
run_cmake(ImportedTarget)
run_cmake(RelativePathInGenex)
run_cmake(CMP0021)
-run_cmake(install_config)
+if (CMAKE_CONFIGURATION_TYPES)
+ # $<CONFIGURATION> is only context-dependent in multi-config
+ # generators.
+ run_cmake(install_config)
+endif ()
run_cmake(incomplete-genex)
run_cmake(export-NOWARN)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a9c9b66c272d1d63918c1a5040c63d6cb169be91
commit a9c9b66c272d1d63918c1a5040c63d6cb169be91
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Tue Jun 10 13:07:24 2014 -0400
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:52 2014 -0400
cmTarget: use a hash_map for cmTargets typedef
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 4005443..9064eec 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -18,6 +18,9 @@
#include "cmListFileCache.h"
#include <cmsys/auto_ptr.hxx>
+#if defined(CMAKE_BUILD_WITH_CMAKE)
+#include <cmsys/hash_map.hxx>
+#endif
#define CM_FOR_EACH_TARGET_POLICY(F) \
F(CMP0003) \
@@ -831,7 +834,11 @@ private:
mutable bool LinkImplementationLanguageIsContextDependent;
};
+#ifdef CMAKE_BUILD_WITH_CMAKE
+typedef cmsys::hash_map<std::string,cmTarget> cmTargets;
+#else
typedef std::map<std::string,cmTarget> cmTargets;
+#endif
class cmTargetSet: public std::set<std::string> {};
class cmTargetManifest: public std::map<std::string, cmTargetSet> {};
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=bcb6dbc1cb0bfeb0627c0b48ced41beea9d4c51a
commit bcb6dbc1cb0bfeb0627c0b48ced41beea9d4c51a
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Tue Jun 10 13:07:12 2014 -0400
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:52 2014 -0400
cmTarget: help the optimizer a bit
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 155232d..843761f 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -224,7 +224,7 @@ public:
cmLinkImplItem cmTargetInternals::TargetPropertyEntry::NoLinkImplItem;
//----------------------------------------------------------------------------
-void deleteAndClear(
+static void deleteAndClear(
std::vector<cmTargetInternals::TargetPropertyEntry*> &entries)
{
for (std::vector<cmTargetInternals::TargetPropertyEntry*>::const_iterator
@@ -238,7 +238,7 @@ void deleteAndClear(
}
//----------------------------------------------------------------------------
-void deleteAndClear(
+static void deleteAndClear(
std::map<std::string,
std::vector<cmTargetInternals::TargetPropertyEntry*> > &entries)
{
@@ -2299,7 +2299,7 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
for(std::vector<std::string>::iterator
li = entryOptions->begin(); li != entryOptions->end(); ++li)
{
- std::string opt = *li;
+ std::string const& opt = *li;
if(uniqueOptions.insert(opt).second)
{
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=679f3deeb79a7b19fb47b96bb520817c1c529f36
commit 679f3deeb79a7b19fb47b96bb520817c1c529f36
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Tue Jun 10 10:29:16 2014 -0400
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:50 2014 -0400
cmTarget: use hash_set for sets of strings
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 67b3c11..155232d 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -25,6 +25,12 @@
#include <stdlib.h> // required for atof
#include <assert.h>
#include <errno.h>
+#if defined(CMAKE_BUILD_WITH_CMAKE)
+#include <cmsys/hash_set.hxx>
+#define UNORDERED_SET cmsys::hash_set
+#else
+#define UNORDERED_SET std::set
+#endif
const char* cmTarget::GetTargetTypeName(TargetType targetType)
{
@@ -642,7 +648,7 @@ bool cmTarget::IsBundleOnApple() const
static bool processSources(cmTarget const* tgt,
const std::vector<cmTargetInternals::TargetPropertyEntry*> &entries,
std::vector<std::string> &srcs,
- std::set<std::string> &uniqueSrcs,
+ UNORDERED_SET<std::string> &uniqueSrcs,
cmGeneratorExpressionDAGChecker *dagChecker,
std::string const& config, bool debugSources)
{
@@ -784,7 +790,7 @@ void cmTarget::GetSourceFiles(std::vector<std::string> &files,
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
"SOURCES", 0, 0);
- std::set<std::string> uniqueSrcs;
+ UNORDERED_SET<std::string> uniqueSrcs;
bool contextDependentDirectSources = processSources(this,
this->Internal->SourceEntries,
files,
@@ -1298,7 +1304,7 @@ void cmTarget::GetTllSignatureTraces(cmOStringStream &s,
= (sig == cmTarget::KeywordTLLSignature ? "keyword"
: "plain");
s << "The uses of the " << sigString << " signature are here:\n";
- std::set<std::string> emitted;
+ UNORDERED_SET<std::string> emitted;
for(std::vector<cmListFileBacktrace>::iterator it = sigs.begin();
it != sigs.end(); ++it)
{
@@ -1717,22 +1723,20 @@ static bool whiteListedInterfaceProperty(const std::string& prop)
{
return true;
}
- static const char* builtIns[] = {
- // ###: This must remain sorted. It is processed with a binary search.
- "COMPATIBLE_INTERFACE_BOOL",
- "COMPATIBLE_INTERFACE_NUMBER_MAX",
- "COMPATIBLE_INTERFACE_NUMBER_MIN",
- "COMPATIBLE_INTERFACE_STRING",
- "EXPORT_NAME",
- "IMPORTED",
- "NAME",
- "TYPE"
- };
+ static UNORDERED_SET<std::string> builtIns;
+ if (builtIns.empty())
+ {
+ builtIns.insert("COMPATIBLE_INTERFACE_BOOL");
+ builtIns.insert("COMPATIBLE_INTERFACE_NUMBER_MAX");
+ builtIns.insert("COMPATIBLE_INTERFACE_NUMBER_MIN");
+ builtIns.insert("COMPATIBLE_INTERFACE_STRING");
+ builtIns.insert("EXPORT_NAME");
+ builtIns.insert("IMPORTED");
+ builtIns.insert("NAME");
+ builtIns.insert("TYPE");
+ }
- if (std::binary_search(cmArrayBegin(builtIns),
- cmArrayEnd(builtIns),
- prop.c_str(),
- cmStrCmp(prop)))
+ if (builtIns.count(prop))
{
return true;
}
@@ -2017,7 +2021,7 @@ void cmTarget::InsertCompileDefinition(const cmValueWithOrigin &entry)
static void processIncludeDirectories(cmTarget const* tgt,
const std::vector<cmTargetInternals::TargetPropertyEntry*> &entries,
std::vector<std::string> &includes,
- std::set<std::string> &uniqueIncludes,
+ UNORDERED_SET<std::string> &uniqueIncludes,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string& config, bool debugIncludes)
{
@@ -2166,7 +2170,7 @@ std::vector<std::string>
cmTarget::GetIncludeDirectories(const std::string& config) const
{
std::vector<std::string> includes;
- std::set<std::string> uniqueIncludes;
+ UNORDERED_SET<std::string> uniqueIncludes;
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
"INCLUDE_DIRECTORIES", 0, 0);
@@ -2258,7 +2262,7 @@ cmTarget::GetIncludeDirectories(const std::string& config) const
static void processCompileOptionsInternal(cmTarget const* tgt,
const std::vector<cmTargetInternals::TargetPropertyEntry*> &entries,
std::vector<std::string> &options,
- std::set<std::string> &uniqueOptions,
+ UNORDERED_SET<std::string> &uniqueOptions,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string& config, bool debugOptions, const char *logName)
{
@@ -2321,7 +2325,7 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
static void processCompileOptions(cmTarget const* tgt,
const std::vector<cmTargetInternals::TargetPropertyEntry*> &entries,
std::vector<std::string> &options,
- std::set<std::string> &uniqueOptions,
+ UNORDERED_SET<std::string> &uniqueOptions,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string& config, bool debugOptions)
{
@@ -2358,7 +2362,7 @@ void cmTarget::GetAutoUicOptions(std::vector<std::string> &result,
void cmTarget::GetCompileOptions(std::vector<std::string> &result,
const std::string& config) const
{
- std::set<std::string> uniqueOptions;
+ UNORDERED_SET<std::string> uniqueOptions;
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
"COMPILE_OPTIONS", 0, 0);
@@ -2419,7 +2423,7 @@ void cmTarget::GetCompileOptions(std::vector<std::string> &result,
static void processCompileDefinitions(cmTarget const* tgt,
const std::vector<cmTargetInternals::TargetPropertyEntry*> &entries,
std::vector<std::string> &options,
- std::set<std::string> &uniqueOptions,
+ UNORDERED_SET<std::string> &uniqueOptions,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string& config, bool debugOptions)
{
@@ -2432,7 +2436,7 @@ static void processCompileDefinitions(cmTarget const* tgt,
void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
const std::string& config) const
{
- std::set<std::string> uniqueOptions;
+ UNORDERED_SET<std::string> uniqueOptions;
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
"COMPILE_DEFINITIONS", 0, 0);
@@ -2530,7 +2534,7 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
static void processCompileFeatures(cmTarget const* tgt,
const std::vector<cmTargetInternals::TargetPropertyEntry*> &entries,
std::vector<std::string> &options,
- std::set<std::string> &uniqueOptions,
+ UNORDERED_SET<std::string> &uniqueOptions,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string& config, bool debugOptions)
{
@@ -2542,7 +2546,7 @@ static void processCompileFeatures(cmTarget const* tgt,
void cmTarget::GetCompileFeatures(std::vector<std::string> &result,
const std::string& config) const
{
- std::set<std::string> uniqueFeatures;
+ UNORDERED_SET<std::string> uniqueFeatures;
cmGeneratorExpressionDAGChecker dagChecker(this->GetName(),
"COMPILE_FEATURES",
@@ -3082,7 +3086,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
cmProperty::TARGET);
}
// Support "<CONFIG>_LOCATION".
- if(cmHasLiteralSuffix(prop, "_LOCATION"))
+ else if(cmHasLiteralSuffix(prop, "_LOCATION"))
{
std::string configName(prop.c_str(), prop.size() - 9);
if(configName != "IMPORTED")
@@ -3097,7 +3101,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
}
}
}
- static std::set<std::string> specialProps;
+ static UNORDERED_SET<std::string> specialProps;
#define MAKE_STATIC_PROP(PROP) \
static const std::string prop##PROP = #PROP
MAKE_STATIC_PROP(LINK_LIBRARIES);
@@ -3323,7 +3327,7 @@ class cmTargetCollectLinkLanguages
public:
cmTargetCollectLinkLanguages(cmTarget const* target,
const std::string& config,
- std::set<std::string>& languages,
+ UNORDERED_SET<std::string>& languages,
cmTarget const* head):
Config(config), Languages(languages), HeadTarget(head),
Makefile(target->GetMakefile()), Target(target)
@@ -3393,7 +3397,7 @@ public:
}
private:
std::string Config;
- std::set<std::string>& Languages;
+ UNORDERED_SET<std::string>& Languages;
cmTarget const* HeadTarget;
cmMakefile* Makefile;
const cmTarget* Target;
@@ -3430,7 +3434,7 @@ class cmTargetSelectLinker
cmTarget const* Target;
cmMakefile* Makefile;
cmGlobalGenerator* GG;
- std::set<std::string> Preferred;
+ UNORDERED_SET<std::string> Preferred;
public:
cmTargetSelectLinker(cmTarget const* target): Preference(0), Target(target)
{
@@ -3462,7 +3466,7 @@ public:
e << "Target " << this->Target->GetName()
<< " contains multiple languages with the highest linker preference"
<< " (" << this->Preference << "):\n";
- for(std::set<std::string>::const_iterator
+ for(UNORDERED_SET<std::string>::const_iterator
li = this->Preferred.begin(); li != this->Preferred.end(); ++li)
{
e << " " << *li << "\n";
@@ -3481,7 +3485,7 @@ void cmTarget::ComputeLinkClosure(const std::string& config,
LinkClosure& lc) const
{
// Get languages built in this target.
- std::set<std::string> languages;
+ UNORDERED_SET<std::string> languages;
LinkImplementation const* impl = this->GetLinkImplementation(config);
for(std::vector<std::string>::const_iterator li = impl->Languages.begin();
li != impl->Languages.end(); ++li)
@@ -3499,7 +3503,7 @@ void cmTarget::ComputeLinkClosure(const std::string& config,
}
// Store the transitive closure of languages.
- for(std::set<std::string>::const_iterator li = languages.begin();
+ for(UNORDERED_SET<std::string>::const_iterator li = languages.begin();
li != languages.end(); ++li)
{
lc.Languages.push_back(*li);
@@ -3527,7 +3531,7 @@ void cmTarget::ComputeLinkClosure(const std::string& config,
}
// Now consider languages that propagate from linked targets.
- for(std::set<std::string>::const_iterator sit = languages.begin();
+ for(UNORDERED_SET<std::string>::const_iterator sit = languages.begin();
sit != languages.end(); ++sit)
{
std::string propagates = "CMAKE_"+*sit+"_LINKER_PREFERENCE_PROPAGATES";
@@ -6261,7 +6265,7 @@ void cmTargetInternals::ComputeLinkInterface(cmTarget const* thisTarget,
{
// Shared libraries may have runtime implementation dependencies
// on other shared libraries that are not in the interface.
- std::set<std::string> emitted;
+ UNORDERED_SET<std::string> emitted;
for(std::vector<cmLinkItem>::const_iterator
li = iface.Libraries.begin(); li != iface.Libraries.end(); ++li)
{
@@ -6835,6 +6839,7 @@ void cmTarget::CheckPropertyCompatibility(cmComputeLinkInformation *info,
if (!prop.empty())
{
+ // Use a std::set to keep the error message sorted.
std::set<std::string> props;
std::set<std::string>::const_iterator i = emittedBools.find(prop);
if (i != emittedBools.end())
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=23d6520daae729e433fc9325eb53acb541979d0f
commit 23d6520daae729e433fc9325eb53acb541979d0f
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Apr 30 15:41:19 2014 -0400
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:50 2014 -0400
cmTarget: Allow caching of empty genex expansions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 5836d7b..67b3c11 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -176,10 +176,11 @@ public:
public:
TargetPropertyEntry(cmsys::auto_ptr<cmCompiledGeneratorExpression> cge,
cmLinkImplItem const& item = NoLinkImplItem)
- : ge(cge), LinkImplItem(item)
+ : ge(cge), Cached(false), LinkImplItem(item)
{}
const cmsys::auto_ptr<cmCompiledGeneratorExpression> ge;
std::vector<std::string> CachedEntries;
+ bool Cached;
cmLinkImplItem const& LinkImplItem;
};
std::vector<TargetPropertyEntry*> IncludeDirectoriesEntries;
@@ -2269,7 +2270,7 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
std::vector<std::string>& entriesRef = (*it)->CachedEntries;
std::vector<std::string> localEntries;
std::vector<std::string>* entryOptions = &entriesRef;
- if(entryOptions->empty())
+ if(!(*it)->Cached)
{
cmSystemTools::ExpandListArgument((*it)->ge->Evaluate(mf,
config,
@@ -2282,6 +2283,7 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
{
// Cache the result.
*entryOptions = localEntries;
+ (*it)->Cached = true;
}
else
{
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cd54f1dbeb5c71b400ccb0db81a0fcea45df46b8
commit cd54f1dbeb5c71b400ccb0db81a0fcea45df46b8
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Mon Feb 10 01:24:42 2014 -0500
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:50 2014 -0400
cmTarget: Only copy GenEx expansions when necessary
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 41d370c..5836d7b 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2266,25 +2266,32 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
for (std::vector<cmTargetInternals::TargetPropertyEntry*>::const_iterator
it = entries.begin(), end = entries.end(); it != end; ++it)
{
- bool cacheOptions = false;
- std::vector<std::string> entryOptions = (*it)->CachedEntries;
- if(entryOptions.empty())
+ std::vector<std::string>& entriesRef = (*it)->CachedEntries;
+ std::vector<std::string> localEntries;
+ std::vector<std::string>* entryOptions = &entriesRef;
+ if(entryOptions->empty())
{
cmSystemTools::ExpandListArgument((*it)->ge->Evaluate(mf,
config,
false,
tgt,
dagChecker),
- entryOptions);
+ localEntries);
if (mf->IsGeneratingBuildSystem()
&& !(*it)->ge->GetHadContextSensitiveCondition())
{
- cacheOptions = true;
+ // Cache the result.
+ *entryOptions = localEntries;
+ }
+ else
+ {
+ // Use the context-sensitive results here.
+ entryOptions = &localEntries;
}
}
std::string usedOptions;
for(std::vector<std::string>::iterator
- li = entryOptions.begin(); li != entryOptions.end(); ++li)
+ li = entryOptions->begin(); li != entryOptions->end(); ++li)
{
std::string opt = *li;
@@ -2297,10 +2304,6 @@ static void processCompileOptionsInternal(cmTarget const* tgt,
}
}
}
- if (cacheOptions)
- {
- (*it)->CachedEntries = entryOptions;
- }
if (!usedOptions.empty())
{
mf->GetCMakeInstance()->IssueMessage(cmake::LOG,
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b75fc0e1ad343173f5231819cfcdbdee9a8b076a
commit b75fc0e1ad343173f5231819cfcdbdee9a8b076a
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Mar 12 14:05:52 2014 -0400
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:50 2014 -0400
cmTarget: Don't set properties on custom targets
Properties are not required on custom targets.
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 2424fe7..41d370c 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -328,7 +328,7 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->IsApple = this->Makefile->IsOn("APPLE");
// Setup default property values.
- if (this->GetType() != INTERFACE_LIBRARY)
+ if (this->GetType() != INTERFACE_LIBRARY && this->GetType() != UTILITY)
{
this->SetPropertyDefault("INSTALL_NAME_DIR", 0);
this->SetPropertyDefault("INSTALL_RPATH", "");
@@ -369,41 +369,44 @@ void cmTarget::SetMakefile(cmMakefile* mf)
mf->GetConfigurations(configNames);
// Setup per-configuration property default values.
- const char* configProps[] = {
- "ARCHIVE_OUTPUT_DIRECTORY_",
- "LIBRARY_OUTPUT_DIRECTORY_",
- "RUNTIME_OUTPUT_DIRECTORY_",
- "PDB_OUTPUT_DIRECTORY_",
- "COMPILE_PDB_OUTPUT_DIRECTORY_",
- "MAP_IMPORTED_CONFIG_",
- 0};
- for(std::vector<std::string>::iterator ci = configNames.begin();
- ci != configNames.end(); ++ci)
- {
- std::string configUpper = cmSystemTools::UpperCase(*ci);
- for(const char** p = configProps; *p; ++p)
- {
- if (this->TargetTypeValue == INTERFACE_LIBRARY
- && strcmp(*p, "MAP_IMPORTED_CONFIG_") != 0)
+ if (this->GetType() != UTILITY)
+ {
+ const char* configProps[] = {
+ "ARCHIVE_OUTPUT_DIRECTORY_",
+ "LIBRARY_OUTPUT_DIRECTORY_",
+ "RUNTIME_OUTPUT_DIRECTORY_",
+ "PDB_OUTPUT_DIRECTORY_",
+ "COMPILE_PDB_OUTPUT_DIRECTORY_",
+ "MAP_IMPORTED_CONFIG_",
+ 0};
+ for(std::vector<std::string>::iterator ci = configNames.begin();
+ ci != configNames.end(); ++ci)
+ {
+ std::string configUpper = cmSystemTools::UpperCase(*ci);
+ for(const char** p = configProps; *p; ++p)
{
- continue;
+ if (this->TargetTypeValue == INTERFACE_LIBRARY
+ && strcmp(*p, "MAP_IMPORTED_CONFIG_") != 0)
+ {
+ continue;
+ }
+ std::string property = *p;
+ property += configUpper;
+ this->SetPropertyDefault(property, 0);
}
- std::string property = *p;
- property += configUpper;
- this->SetPropertyDefault(property, 0);
- }
- // Initialize per-configuration name postfix property from the
- // variable only for non-executable targets. This preserves
- // compatibility with previous CMake versions in which executables
- // did not support this variable. Projects may still specify the
- // property directly.
- if(this->TargetTypeValue != cmTarget::EXECUTABLE
- && this->TargetTypeValue != cmTarget::INTERFACE_LIBRARY)
- {
- std::string property = cmSystemTools::UpperCase(*ci);
- property += "_POSTFIX";
- this->SetPropertyDefault(property, 0);
+ // Initialize per-configuration name postfix property from the
+ // variable only for non-executable targets. This preserves
+ // compatibility with previous CMake versions in which executables
+ // did not support this variable. Projects may still specify the
+ // property directly.
+ if(this->TargetTypeValue != cmTarget::EXECUTABLE
+ && this->TargetTypeValue != cmTarget::INTERFACE_LIBRARY)
+ {
+ std::string property = cmSystemTools::UpperCase(*ci);
+ property += "_POSTFIX";
+ this->SetPropertyDefault(property, 0);
+ }
}
}
@@ -442,7 +445,7 @@ void cmTarget::SetMakefile(cmMakefile* mf)
}
}
- if (this->GetType() != INTERFACE_LIBRARY)
+ if (this->GetType() != INTERFACE_LIBRARY && this->GetType() != UTILITY)
{
this->SetPropertyDefault("C_VISIBILITY_PRESET", 0);
this->SetPropertyDefault("CXX_VISIBILITY_PRESET", 0);
@@ -454,7 +457,7 @@ void cmTarget::SetMakefile(cmMakefile* mf)
{
this->SetProperty("POSITION_INDEPENDENT_CODE", "True");
}
- if (this->GetType() != INTERFACE_LIBRARY)
+ if (this->GetType() != INTERFACE_LIBRARY && this->GetType() != UTILITY)
{
this->SetPropertyDefault("POSITION_INDEPENDENT_CODE", 0);
}
@@ -476,8 +479,11 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->PolicyStatusCMP0022 = cmPolicies::NEW;
}
- this->SetPropertyDefault("JOB_POOL_COMPILE", 0);
- this->SetPropertyDefault("JOB_POOL_LINK", 0);
+ if (this->GetType() != INTERFACE_LIBRARY && this->GetType() != UTILITY)
+ {
+ this->SetPropertyDefault("JOB_POOL_COMPILE", 0);
+ this->SetPropertyDefault("JOB_POOL_LINK", 0);
+ }
}
//----------------------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=660769151a7f628f92eb28d77bcae854eaae54c2
commit 660769151a7f628f92eb28d77bcae854eaae54c2
Author: Ben Boeckel <mathstuf at gmail.com>
AuthorDate: Sat Feb 8 12:12:27 2014 -0500
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:50 2014 -0400
cmTarget: Use static strings for special property names
The function is called enough that the std::string/cstr comparisons are
expensive from the strlen. Cache the strings for faster comparisons.
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 09eb8a4..2424fe7 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -3037,7 +3037,8 @@ const char *cmTarget::GetProperty(const std::string& prop,
this->GetType() == cmTarget::MODULE_LIBRARY ||
this->GetType() == cmTarget::UNKNOWN_LIBRARY)
{
- if(prop == "LOCATION")
+ static const std::string propLOCATION = "LOCATION";
+ if(prop == propLOCATION)
{
if (!this->HandleLocationPropertyPolicy(context))
{
@@ -3053,12 +3054,12 @@ const char *cmTarget::GetProperty(const std::string& prop,
// cannot take into account the per-configuration name of the
// target because the configuration type may not be known at
// CMake time.
- this->Properties.SetProperty("LOCATION", this->GetLocationForBuild(),
+ this->Properties.SetProperty(propLOCATION, this->GetLocationForBuild(),
cmProperty::TARGET);
}
// Support "LOCATION_<CONFIG>".
- if(cmHasLiteralPrefix(prop, "LOCATION_"))
+ else if(cmHasLiteralPrefix(prop, "LOCATION_"))
{
if (!this->HandleLocationPropertyPolicy(context))
{
@@ -3086,21 +3087,33 @@ const char *cmTarget::GetProperty(const std::string& prop,
}
}
static std::set<std::string> specialProps;
+#define MAKE_STATIC_PROP(PROP) \
+ static const std::string prop##PROP = #PROP
+ MAKE_STATIC_PROP(LINK_LIBRARIES);
+ MAKE_STATIC_PROP(TYPE);
+ MAKE_STATIC_PROP(INCLUDE_DIRECTORIES);
+ MAKE_STATIC_PROP(COMPILE_FEATURES);
+ MAKE_STATIC_PROP(COMPILE_OPTIONS);
+ MAKE_STATIC_PROP(COMPILE_DEFINITIONS);
+ MAKE_STATIC_PROP(IMPORTED);
+ MAKE_STATIC_PROP(NAME);
+ MAKE_STATIC_PROP(SOURCES);
+#undef MAKE_STATIC_PROP
if(specialProps.empty())
{
- specialProps.insert("INCLUDE_DIRECTORIES");
- specialProps.insert("COMPILE_FEATURES");
- specialProps.insert("COMPILE_OPTIONS");
- specialProps.insert("COMPILE_DEFINITIONS");
- specialProps.insert("LINK_LIBRARIES");
- specialProps.insert("IMPORTED");
- specialProps.insert("NAME");
- specialProps.insert("SOURCES");
- specialProps.insert("TYPE");
+ specialProps.insert(propLINK_LIBRARIES);
+ specialProps.insert(propTYPE);
+ specialProps.insert(propINCLUDE_DIRECTORIES);
+ specialProps.insert(propCOMPILE_FEATURES);
+ specialProps.insert(propCOMPILE_OPTIONS);
+ specialProps.insert(propCOMPILE_DEFINITIONS);
+ specialProps.insert(propIMPORTED);
+ specialProps.insert(propNAME);
+ specialProps.insert(propSOURCES);
}
if(specialProps.count(prop))
{
- if(prop == "LINK_LIBRARIES")
+ if(prop == propLINK_LIBRARIES)
{
if (this->Internal->LinkImplementationPropertyEntries.empty())
{
@@ -3122,11 +3135,11 @@ const char *cmTarget::GetProperty(const std::string& prop,
return output.c_str();
}
// the type property returns what type the target is
- else if (prop == "TYPE")
+ else if (prop == propTYPE)
{
return cmTarget::GetTargetTypeName(this->GetType());
}
- else if(prop == "INCLUDE_DIRECTORIES")
+ else if(prop == propINCLUDE_DIRECTORIES)
{
if (this->Internal->IncludeDirectoriesEntries.empty())
{
@@ -3137,7 +3150,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
MakePropertyList(output, this->Internal->IncludeDirectoriesEntries);
return output.c_str();
}
- else if(prop == "COMPILE_FEATURES")
+ else if(prop == propCOMPILE_FEATURES)
{
if (this->Internal->CompileFeaturesEntries.empty())
{
@@ -3148,7 +3161,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
MakePropertyList(output, this->Internal->CompileFeaturesEntries);
return output.c_str();
}
- else if(prop == "COMPILE_OPTIONS")
+ else if(prop == propCOMPILE_OPTIONS)
{
if (this->Internal->CompileOptionsEntries.empty())
{
@@ -3159,7 +3172,7 @@ const char *cmTarget::GetProperty(const std::string& prop,
MakePropertyList(output, this->Internal->CompileOptionsEntries);
return output.c_str();
}
- else if(prop == "COMPILE_DEFINITIONS")
+ else if(prop == propCOMPILE_DEFINITIONS)
{
if (this->Internal->CompileDefinitionsEntries.empty())
{
@@ -3170,15 +3183,15 @@ const char *cmTarget::GetProperty(const std::string& prop,
MakePropertyList(output, this->Internal->CompileDefinitionsEntries);
return output.c_str();
}
- else if (prop == "IMPORTED")
+ else if (prop == propIMPORTED)
{
return this->IsImported()?"TRUE":"FALSE";
}
- else if (prop == "NAME")
+ else if (prop == propNAME)
{
return this->GetName().c_str();
}
- else if(prop == "SOURCES")
+ else if(prop == propSOURCES)
{
if (this->Internal->SourceEntries.empty())
{
@@ -4795,12 +4808,13 @@ bool cmTarget::IsNullImpliedByLinkLibraries(const std::string &p) const
//----------------------------------------------------------------------------
template<typename PropertyType>
-PropertyType getTypedProperty(cmTarget const* tgt, const char *prop,
+PropertyType getTypedProperty(cmTarget const* tgt, const std::string& prop,
PropertyType *);
//----------------------------------------------------------------------------
template<>
-bool getTypedProperty<bool>(cmTarget const* tgt, const char *prop, bool *)
+bool getTypedProperty<bool>(cmTarget const* tgt, const std::string& prop,
+ bool *)
{
return tgt->GetPropertyAsBool(prop);
}
@@ -4808,7 +4822,7 @@ bool getTypedProperty<bool>(cmTarget const* tgt, const char *prop, bool *)
//----------------------------------------------------------------------------
template<>
const char *getTypedProperty<const char *>(cmTarget const* tgt,
- const char *prop,
+ const std::string& prop,
const char **)
{
return tgt->GetProperty(prop);
@@ -5047,7 +5061,7 @@ PropertyType checkInterfacePropertyCompatibility(cmTarget const* tgt,
CompatibleType t,
PropertyType *)
{
- PropertyType propContent = getTypedProperty<PropertyType>(tgt, p.c_str(),
+ PropertyType propContent = getTypedProperty<PropertyType>(tgt, p,
0);
const bool explicitlySet = tgt->GetProperties()
.find(p)
@@ -5083,6 +5097,7 @@ PropertyType checkInterfacePropertyCompatibility(cmTarget const* tgt,
report += "\" property not set.\n";
}
+ std::string interfaceProperty = "INTERFACE_" + p;
for(std::vector<cmTarget const*>::const_iterator li =
deps.begin();
li != deps.end(); ++li)
@@ -5096,11 +5111,11 @@ PropertyType checkInterfacePropertyCompatibility(cmTarget const* tgt,
cmTarget const* theTarget = *li;
const bool ifaceIsSet = theTarget->GetProperties()
- .find("INTERFACE_" + p)
+ .find(interfaceProperty)
!= theTarget->GetProperties().end();
PropertyType ifacePropContent =
getTypedProperty<PropertyType>(theTarget,
- ("INTERFACE_" + p).c_str(), 0);
+ interfaceProperty, 0);
std::string reportEntry;
if (ifaceIsSet)
@@ -6167,7 +6182,7 @@ cmTargetInternals::ComputeLinkInterfaceLibraries(
// Compare the link implementation fallback link interface to the
// preferred new link interface property and warn if different.
std::vector<cmLinkItem> ifaceLibs;
- std::string newProp = "INTERFACE_LINK_LIBRARIES";
+ static const std::string newProp = "INTERFACE_LINK_LIBRARIES";
if(const char* newExplicitLibraries = thisTarget->GetProperty(newProp))
{
thisTarget->ExpandLinkItems(newProp, newExplicitLibraries, config,
@@ -6752,9 +6767,13 @@ void cmTarget::CheckPropertyCompatibility(cmComputeLinkInformation *info,
const cmComputeLinkInformation::ItemVector &deps = info->GetItems();
std::set<std::string> emittedBools;
+ static std::string strBool = "COMPATIBLE_INTERFACE_BOOL";
std::set<std::string> emittedStrings;
+ static std::string strString = "COMPATIBLE_INTERFACE_STRING";
std::set<std::string> emittedMinNumbers;
+ static std::string strNumMin = "COMPATIBLE_INTERFACE_NUMBER_MIN";
std::set<std::string> emittedMaxNumbers;
+ static std::string strNumMax = "COMPATIBLE_INTERFACE_NUMBER_MAX";
for(cmComputeLinkInformation::ItemVector::const_iterator li =
deps.begin();
@@ -6766,14 +6785,14 @@ void cmTarget::CheckPropertyCompatibility(cmComputeLinkInformation *info,
}
checkPropertyConsistency<bool>(this, li->Target,
- std::string("COMPATIBLE_INTERFACE_BOOL"),
+ strBool,
emittedBools, config, BoolType, 0);
if (cmSystemTools::GetErrorOccuredFlag())
{
return;
}
checkPropertyConsistency<const char *>(this, li->Target,
- std::string("COMPATIBLE_INTERFACE_STRING"),
+ strString,
emittedStrings, config,
StringType, 0);
if (cmSystemTools::GetErrorOccuredFlag())
@@ -6781,7 +6800,7 @@ void cmTarget::CheckPropertyCompatibility(cmComputeLinkInformation *info,
return;
}
checkPropertyConsistency<const char *>(this, li->Target,
- std::string("COMPATIBLE_INTERFACE_NUMBER_MIN"),
+ strNumMin,
emittedMinNumbers, config,
NumberMinType, 0);
if (cmSystemTools::GetErrorOccuredFlag())
@@ -6789,7 +6808,7 @@ void cmTarget::CheckPropertyCompatibility(cmComputeLinkInformation *info,
return;
}
checkPropertyConsistency<const char *>(this, li->Target,
- std::string("COMPATIBLE_INTERFACE_NUMBER_MAX"),
+ strNumMax,
emittedMaxNumbers, config,
NumberMaxType, 0);
if (cmSystemTools::GetErrorOccuredFlag())
@@ -6809,22 +6828,22 @@ void cmTarget::CheckPropertyCompatibility(cmComputeLinkInformation *info,
std::set<std::string>::const_iterator i = emittedBools.find(prop);
if (i != emittedBools.end())
{
- props.insert("COMPATIBLE_INTERFACE_BOOL");
+ props.insert(strBool);
}
i = emittedStrings.find(prop);
if (i != emittedStrings.end())
{
- props.insert("COMPATIBLE_INTERFACE_STRING");
+ props.insert(strString);
}
i = emittedMinNumbers.find(prop);
if (i != emittedMinNumbers.end())
{
- props.insert("COMPATIBLE_INTERFACE_NUMBER_MIN");
+ props.insert(strNumMin);
}
i = emittedMaxNumbers.find(prop);
if (i != emittedMaxNumbers.end())
{
- props.insert("COMPATIBLE_INTERFACE_NUMBER_MAX");
+ props.insert(strNumMax);
}
std::string propsString = *props.begin();
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cebefa71fad223f134529a2b859006360e465a80
commit cebefa71fad223f134529a2b859006360e465a80
Author: Ben Boeckel <mathstuf at gmail.com>
AuthorDate: Sat Feb 8 12:11:32 2014 -0500
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:49 2014 -0400
cmTarget: Sort special property checks
The LINK_LIBRARIES property is by *far* the most popular. Move it to the
top. TYPE is second, but with more generator expression usage, that may
change in the future.
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 62b30fd..09eb8a4 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -3100,26 +3100,41 @@ const char *cmTarget::GetProperty(const std::string& prop,
}
if(specialProps.count(prop))
{
- if(prop == "INCLUDE_DIRECTORIES")
+ if(prop == "LINK_LIBRARIES")
{
- if (this->Internal->IncludeDirectoriesEntries.empty())
+ if (this->Internal->LinkImplementationPropertyEntries.empty())
{
return 0;
}
static std::string output;
- MakePropertyList(output, this->Internal->IncludeDirectoriesEntries);
+ output = "";
+ std::string sep;
+ for (std::vector<cmValueWithOrigin>::const_iterator
+ it = this->Internal->LinkImplementationPropertyEntries.begin(),
+ end = this->Internal->LinkImplementationPropertyEntries.end();
+ it != end; ++it)
+ {
+ output += sep;
+ output += it->Value;
+ sep = ";";
+ }
return output.c_str();
}
- else if(prop == "COMPILE_OPTIONS")
+ // the type property returns what type the target is
+ else if (prop == "TYPE")
{
- if (this->Internal->CompileOptionsEntries.empty())
+ return cmTarget::GetTargetTypeName(this->GetType());
+ }
+ else if(prop == "INCLUDE_DIRECTORIES")
+ {
+ if (this->Internal->IncludeDirectoriesEntries.empty())
{
return 0;
}
static std::string output;
- MakePropertyList(output, this->Internal->CompileOptionsEntries);
+ MakePropertyList(output, this->Internal->IncludeDirectoriesEntries);
return output.c_str();
}
else if(prop == "COMPILE_FEATURES")
@@ -3133,36 +3148,26 @@ const char *cmTarget::GetProperty(const std::string& prop,
MakePropertyList(output, this->Internal->CompileFeaturesEntries);
return output.c_str();
}
- else if(prop == "COMPILE_DEFINITIONS")
+ else if(prop == "COMPILE_OPTIONS")
{
- if (this->Internal->CompileDefinitionsEntries.empty())
+ if (this->Internal->CompileOptionsEntries.empty())
{
return 0;
}
static std::string output;
- MakePropertyList(output, this->Internal->CompileDefinitionsEntries);
+ MakePropertyList(output, this->Internal->CompileOptionsEntries);
return output.c_str();
}
- else if(prop == "LINK_LIBRARIES")
+ else if(prop == "COMPILE_DEFINITIONS")
{
- if (this->Internal->LinkImplementationPropertyEntries.empty())
+ if (this->Internal->CompileDefinitionsEntries.empty())
{
return 0;
}
static std::string output;
- output = "";
- std::string sep;
- for (std::vector<cmValueWithOrigin>::const_iterator
- it = this->Internal->LinkImplementationPropertyEntries.begin(),
- end = this->Internal->LinkImplementationPropertyEntries.end();
- it != end; ++it)
- {
- output += sep;
- output += it->Value;
- sep = ";";
- }
+ MakePropertyList(output, this->Internal->CompileDefinitionsEntries);
return output.c_str();
}
else if (prop == "IMPORTED")
@@ -3270,11 +3275,6 @@ const char *cmTarget::GetProperty(const std::string& prop,
this->Properties.SetProperty("SOURCES", ss.str().c_str(),
cmProperty::TARGET);
}
- // the type property returns what type the target is
- else if (prop == "TYPE")
- {
- return cmTarget::GetTargetTypeName(this->GetType());
- }
}
bool chain = false;
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=97ce676e75900dfeeb30ea1c6ba5a139befe9562
commit 97ce676e75900dfeeb30ea1c6ba5a139befe9562
Author: Ben Boeckel <mathstuf at gmail.com>
AuthorDate: Sat Feb 8 05:27:45 2014 -0500
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Thu Jul 17 11:17:49 2014 -0400
cmTarget: Fast path for regular properties
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 8be14f3..62b30fd 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -3085,180 +3085,196 @@ const char *cmTarget::GetProperty(const std::string& prop,
}
}
}
- if(prop == "INCLUDE_DIRECTORIES")
+ static std::set<std::string> specialProps;
+ if(specialProps.empty())
{
- if (this->Internal->IncludeDirectoriesEntries.empty())
- {
- return 0;
- }
-
- static std::string output;
- MakePropertyList(output, this->Internal->IncludeDirectoriesEntries);
- return output.c_str();
+ specialProps.insert("INCLUDE_DIRECTORIES");
+ specialProps.insert("COMPILE_FEATURES");
+ specialProps.insert("COMPILE_OPTIONS");
+ specialProps.insert("COMPILE_DEFINITIONS");
+ specialProps.insert("LINK_LIBRARIES");
+ specialProps.insert("IMPORTED");
+ specialProps.insert("NAME");
+ specialProps.insert("SOURCES");
+ specialProps.insert("TYPE");
}
- else if(prop == "COMPILE_OPTIONS")
+ if(specialProps.count(prop))
{
- if (this->Internal->CompileOptionsEntries.empty())
+ if(prop == "INCLUDE_DIRECTORIES")
{
- return 0;
- }
+ if (this->Internal->IncludeDirectoriesEntries.empty())
+ {
+ return 0;
+ }
- static std::string output;
- MakePropertyList(output, this->Internal->CompileOptionsEntries);
- return output.c_str();
- }
- else if(prop == "COMPILE_FEATURES")
- {
- if (this->Internal->CompileFeaturesEntries.empty())
- {
- return 0;
+ static std::string output;
+ MakePropertyList(output, this->Internal->IncludeDirectoriesEntries);
+ return output.c_str();
}
-
- static std::string output;
- MakePropertyList(output, this->Internal->CompileFeaturesEntries);
- return output.c_str();
- }
- else if(prop == "COMPILE_DEFINITIONS")
- {
- if (this->Internal->CompileDefinitionsEntries.empty())
+ else if(prop == "COMPILE_OPTIONS")
{
- return 0;
+ if (this->Internal->CompileOptionsEntries.empty())
+ {
+ return 0;
+ }
+
+ static std::string output;
+ MakePropertyList(output, this->Internal->CompileOptionsEntries);
+ return output.c_str();
}
+ else if(prop == "COMPILE_FEATURES")
+ {
+ if (this->Internal->CompileFeaturesEntries.empty())
+ {
+ return 0;
+ }
- static std::string output;
- MakePropertyList(output, this->Internal->CompileDefinitionsEntries);
- return output.c_str();
- }
- else if(prop == "LINK_LIBRARIES")
- {
- if (this->Internal->LinkImplementationPropertyEntries.empty())
+ static std::string output;
+ MakePropertyList(output, this->Internal->CompileFeaturesEntries);
+ return output.c_str();
+ }
+ else if(prop == "COMPILE_DEFINITIONS")
{
- return 0;
+ if (this->Internal->CompileDefinitionsEntries.empty())
+ {
+ return 0;
+ }
+
+ static std::string output;
+ MakePropertyList(output, this->Internal->CompileDefinitionsEntries);
+ return output.c_str();
}
+ else if(prop == "LINK_LIBRARIES")
+ {
+ if (this->Internal->LinkImplementationPropertyEntries.empty())
+ {
+ return 0;
+ }
- static std::string output;
- output = "";
- std::string sep;
- for (std::vector<cmValueWithOrigin>::const_iterator
- it = this->Internal->LinkImplementationPropertyEntries.begin(),
- end = this->Internal->LinkImplementationPropertyEntries.end();
- it != end; ++it)
+ static std::string output;
+ output = "";
+ std::string sep;
+ for (std::vector<cmValueWithOrigin>::const_iterator
+ it = this->Internal->LinkImplementationPropertyEntries.begin(),
+ end = this->Internal->LinkImplementationPropertyEntries.end();
+ it != end; ++it)
+ {
+ output += sep;
+ output += it->Value;
+ sep = ";";
+ }
+ return output.c_str();
+ }
+ else if (prop == "IMPORTED")
{
- output += sep;
- output += it->Value;
- sep = ";";
+ return this->IsImported()?"TRUE":"FALSE";
}
- return output.c_str();
- }
- else if (prop == "IMPORTED")
- {
- return this->IsImported()?"TRUE":"FALSE";
- }
- else if (prop == "NAME")
- {
- return this->GetName().c_str();
- }
- else if(prop == "SOURCES")
- {
- if (this->Internal->SourceEntries.empty())
+ else if (prop == "NAME")
{
- return 0;
+ return this->GetName().c_str();
}
-
- cmOStringStream ss;
- const char* sep = "";
- typedef cmTargetInternals::TargetPropertyEntry
- TargetPropertyEntry;
- for(std::vector<TargetPropertyEntry*>::const_iterator
- i = this->Internal->SourceEntries.begin();
- i != this->Internal->SourceEntries.end(); ++i)
+ else if(prop == "SOURCES")
{
- std::string entry = (*i)->ge->GetInput();
+ if (this->Internal->SourceEntries.empty())
+ {
+ return 0;
+ }
- std::vector<std::string> files;
- cmSystemTools::ExpandListArgument(entry, files);
- for (std::vector<std::string>::const_iterator
- li = files.begin(); li != files.end(); ++li)
+ cmOStringStream ss;
+ const char* sep = "";
+ typedef cmTargetInternals::TargetPropertyEntry
+ TargetPropertyEntry;
+ for(std::vector<TargetPropertyEntry*>::const_iterator
+ i = this->Internal->SourceEntries.begin();
+ i != this->Internal->SourceEntries.end(); ++i)
{
- if(cmHasLiteralPrefix(*li, "$<TARGET_OBJECTS:") &&
- (*li)[li->size() - 1] == '>')
- {
- std::string objLibName = li->substr(17, li->size()-18);
+ std::string entry = (*i)->ge->GetInput();
- if (cmGeneratorExpression::Find(objLibName) != std::string::npos)
+ std::vector<std::string> files;
+ cmSystemTools::ExpandListArgument(entry, files);
+ for (std::vector<std::string>::const_iterator
+ li = files.begin(); li != files.end(); ++li)
+ {
+ if(cmHasLiteralPrefix(*li, "$<TARGET_OBJECTS:") &&
+ (*li)[li->size() - 1] == '>')
{
- ss << sep;
- sep = ";";
- ss << *li;
- continue;
- }
+ std::string objLibName = li->substr(17, li->size()-18);
- bool addContent = false;
- bool noMessage = true;
- cmOStringStream e;
- cmake::MessageType messageType = cmake::AUTHOR_WARNING;
- switch(context->GetPolicyStatus(cmPolicies::CMP0051))
- {
- case cmPolicies::WARN:
- e << (this->Makefile->GetPolicies()
- ->GetPolicyWarning(cmPolicies::CMP0051)) << "\n";
- noMessage = false;
- case cmPolicies::OLD:
- break;
- case cmPolicies::REQUIRED_ALWAYS:
- case cmPolicies::REQUIRED_IF_USED:
- case cmPolicies::NEW:
- addContent = true;
- }
- if (!noMessage)
- {
- e << "Target \"" << this->Name << "\" contains $<TARGET_OBJECTS> "
- "generator expression in its sources list. This content was not "
- "previously part of the SOURCES property when that property was "
- "read at configure time. Code reading that property needs to be "
- "adapted to ignore the generator expression using the "
- "string(GENEX_STRIP) command.";
- context->IssueMessage(messageType, e.str());
+ if (cmGeneratorExpression::Find(objLibName) != std::string::npos)
+ {
+ ss << sep;
+ sep = ";";
+ ss << *li;
+ continue;
+ }
+
+ bool addContent = false;
+ bool noMessage = true;
+ cmOStringStream e;
+ cmake::MessageType messageType = cmake::AUTHOR_WARNING;
+ switch(context->GetPolicyStatus(cmPolicies::CMP0051))
+ {
+ case cmPolicies::WARN:
+ e << (this->Makefile->GetPolicies()
+ ->GetPolicyWarning(cmPolicies::CMP0051)) << "\n";
+ noMessage = false;
+ case cmPolicies::OLD:
+ break;
+ case cmPolicies::REQUIRED_ALWAYS:
+ case cmPolicies::REQUIRED_IF_USED:
+ case cmPolicies::NEW:
+ addContent = true;
+ }
+ if (!noMessage)
+ {
+ e << "Target \"" << this->Name << "\" contains "
+ "$<TARGET_OBJECTS> generator expression in its sources list. "
+ "This content was not previously part of the SOURCES property "
+ "when that property was read at configure time. Code reading "
+ "that property needs to be adapted to ignore the generator "
+ "expression using the string(GENEX_STRIP) command.";
+ context->IssueMessage(messageType, e.str());
+ }
+ if (addContent)
+ {
+ ss << sep;
+ sep = ";";
+ ss << *li;
+ }
}
- if (addContent)
+ else if (cmGeneratorExpression::Find(*li) == std::string::npos)
{
ss << sep;
sep = ";";
ss << *li;
}
- }
- else if (cmGeneratorExpression::Find(*li) == std::string::npos)
- {
- ss << sep;
- sep = ";";
- ss << *li;
- }
- else
- {
- cmSourceFile *sf = this->Makefile->GetOrCreateSource(*li);
- // Construct what is known about this source file location.
- cmSourceFileLocation const& location = sf->GetLocation();
- std::string sname = location.GetDirectory();
- if(!sname.empty())
+ else
{
- sname += "/";
- }
- sname += location.GetName();
+ cmSourceFile *sf = this->Makefile->GetOrCreateSource(*li);
+ // Construct what is known about this source file location.
+ cmSourceFileLocation const& location = sf->GetLocation();
+ std::string sname = location.GetDirectory();
+ if(!sname.empty())
+ {
+ sname += "/";
+ }
+ sname += location.GetName();
- ss << sep;
- sep = ";";
- // Append this list entry.
- ss << sname;
+ ss << sep;
+ sep = ";";
+ // Append this list entry.
+ ss << sname;
+ }
}
}
+ this->Properties.SetProperty("SOURCES", ss.str().c_str(),
+ cmProperty::TARGET);
+ }
+ // the type property returns what type the target is
+ else if (prop == "TYPE")
+ {
+ return cmTarget::GetTargetTypeName(this->GetType());
}
- this->Properties.SetProperty("SOURCES", ss.str().c_str(),
- cmProperty::TARGET);
- }
- // the type property returns what type the target is
- else if (prop == "TYPE")
- {
- return cmTarget::GetTargetTypeName(this->GetType());
}
bool chain = false;
-----------------------------------------------------------------------
Summary of changes:
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list