diff options
author | Brad King <brad.king@kitware.com> | 2020-03-30 17:29:25 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-03-30 17:30:48 (GMT) |
commit | 888b8a43d82e6f6157642c2bd84520920d8e2d11 (patch) | |
tree | 23a1b0275674fb60f36feb9a4bfe31ef47317b70 /Source | |
parent | 615950dfb68bfd30736fb9b77753d91050c1a650 (diff) | |
parent | a4255ecf813120e4b764e78e6c50b34bd87b438a (diff) | |
download | CMake-888b8a43d82e6f6157642c2bd84520920d8e2d11.zip CMake-888b8a43d82e6f6157642c2bd84520920d8e2d11.tar.gz CMake-888b8a43d82e6f6157642c2bd84520920d8e2d11.tar.bz2 |
Merge topic 'cmprop-state'
a4255ecf81 cmStateDirectory::GetProperty: return cmProp
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !4536
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 4 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 6 | ||||
-rw-r--r-- | Source/cmStateDirectory.cxx | 40 | ||||
-rw-r--r-- | Source/cmStateDirectory.h | 6 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 5 |
5 files changed, 34 insertions, 27 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index e908180..8484c58 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -2965,8 +2965,8 @@ const char* cmLocalGenerator::GetFeature(const std::string& feature, } cmStateSnapshot snp = this->StateSnapshot; while (snp.IsValid()) { - if (const char* value = snp.GetDirectory().GetProperty(featureName)) { - return value; + if (cmProp value = snp.GetDirectory().GetProperty(featureName)) { + return value->c_str(); } snp = snp.GetBuildsystemDirectoryParent(); } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 2487f4d..812f922 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -4102,12 +4102,14 @@ const char* cmMakefile::GetProperty(const std::string& prop) const return output.c_str(); } - return this->StateSnapshot.GetDirectory().GetProperty(prop); + cmProp retVal = this->StateSnapshot.GetDirectory().GetProperty(prop); + return retVal ? retVal->c_str() : nullptr; } const char* cmMakefile::GetProperty(const std::string& prop, bool chain) const { - return this->StateSnapshot.GetDirectory().GetProperty(prop, chain); + cmProp retVal = this->StateSnapshot.GetDirectory().GetProperty(prop, chain); + return retVal ? retVal->c_str() : nullptr; } bool cmMakefile::GetPropertyAsBool(const std::string& prop) const diff --git a/Source/cmStateDirectory.cxx b/Source/cmStateDirectory.cxx index 2ce7530..a4fe663 100644 --- a/Source/cmStateDirectory.cxx +++ b/Source/cmStateDirectory.cxx @@ -548,32 +548,31 @@ void cmStateDirectory::AppendProperty(const std::string& prop, this->DirectoryState->Properties.AppendProperty(prop, value, asString); } -const char* cmStateDirectory::GetProperty(const std::string& prop) const +cmProp cmStateDirectory::GetProperty(const std::string& prop) const { const bool chain = this->Snapshot_.State->IsPropertyChained(prop, cmProperty::DIRECTORY); return this->GetProperty(prop, chain); } -const char* cmStateDirectory::GetProperty(const std::string& prop, - bool chain) const +cmProp cmStateDirectory::GetProperty(const std::string& prop, bool chain) const { static std::string output; output.clear(); if (prop == "PARENT_DIRECTORY") { cmStateSnapshot parent = this->Snapshot_.GetBuildsystemDirectoryParent(); if (parent.IsValid()) { - return parent.GetDirectory().GetCurrentSource().c_str(); + return &parent.GetDirectory().GetCurrentSource(); } - return ""; + return &output; } if (prop == kBINARY_DIR) { output = this->GetCurrentBinary(); - return output.c_str(); + return &output; } if (prop == kSOURCE_DIR) { output = this->GetCurrentSource(); - return output.c_str(); + return &output; } if (prop == kSUBDIRECTORIES) { std::vector<std::string> child_dirs; @@ -584,11 +583,11 @@ const char* cmStateDirectory::GetProperty(const std::string& prop, child_dirs.push_back(ci.GetDirectory().GetCurrentSource()); } output = cmJoin(child_dirs, ";"); - return output.c_str(); + return &output; } if (prop == kBUILDSYSTEM_TARGETS) { output = cmJoin(this->DirectoryState->NormalTargetNames, ";"); - return output.c_str(); + return &output; } if (prop == "LISTFILE_STACK") { @@ -600,38 +599,38 @@ const char* cmStateDirectory::GetProperty(const std::string& prop, } std::reverse(listFiles.begin(), listFiles.end()); output = cmJoin(listFiles, ";"); - return output.c_str(); + return &output; } if (prop == "CACHE_VARIABLES") { output = cmJoin(this->Snapshot_.State->GetCacheEntryKeys(), ";"); - return output.c_str(); + return &output; } if (prop == "VARIABLES") { std::vector<std::string> res = this->Snapshot_.ClosureKeys(); cm::append(res, this->Snapshot_.State->GetCacheEntryKeys()); std::sort(res.begin(), res.end()); output = cmJoin(res, ";"); - return output.c_str(); + return &output; } if (prop == "INCLUDE_DIRECTORIES") { output = cmJoin(this->GetIncludeDirectoriesEntries(), ";"); - return output.c_str(); + return &output; } if (prop == "COMPILE_OPTIONS") { output = cmJoin(this->GetCompileOptionsEntries(), ";"); - return output.c_str(); + return &output; } if (prop == "COMPILE_DEFINITIONS") { output = cmJoin(this->GetCompileDefinitionsEntries(), ";"); - return output.c_str(); + return &output; } if (prop == "LINK_OPTIONS") { output = cmJoin(this->GetLinkOptionsEntries(), ";"); - return output.c_str(); + return &output; } if (prop == "LINK_DIRECTORIES") { output = cmJoin(this->GetLinkDirectoriesEntries(), ";"); - return output.c_str(); + return &output; } cmProp retVal = this->DirectoryState->Properties.GetPropertyValue(prop); @@ -641,15 +640,16 @@ const char* cmStateDirectory::GetProperty(const std::string& prop, if (parentSnapshot.IsValid()) { return parentSnapshot.GetDirectory().GetProperty(prop, chain); } - retVal = this->Snapshot_.State->GetGlobalProperty(prop); + return this->Snapshot_.State->GetGlobalProperty(prop); } - return retVal ? retVal->c_str() : nullptr; + return retVal; } bool cmStateDirectory::GetPropertyAsBool(const std::string& prop) const { - return cmIsOn(this->GetProperty(prop)); + cmProp p = this->GetProperty(prop); + return p && cmIsOn(*p); } std::vector<std::string> cmStateDirectory::GetPropertyKeys() const diff --git a/Source/cmStateDirectory.h b/Source/cmStateDirectory.h index 53a2d54..8144160 100644 --- a/Source/cmStateDirectory.h +++ b/Source/cmStateDirectory.h @@ -16,6 +16,8 @@ #include "cmStateSnapshot.h" #include "cmStringAlgorithms.h" +using cmProp = const std::string*; + class cmStateDirectory { cmStateDirectory( @@ -86,8 +88,8 @@ public: cmListFileBacktrace const& lfbt); void AppendProperty(const std::string& prop, const std::string& value, bool asString, cmListFileBacktrace const& lfbt); - const char* GetProperty(const std::string& prop) const; - const char* GetProperty(const std::string& prop, bool chain) const; + cmProp GetProperty(const std::string& prop) const; + cmProp GetProperty(const std::string& prop, bool chain) const; bool GetPropertyAsBool(const std::string& prop) const; std::vector<std::string> GetPropertyKeys() const; diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 8b51690..93c168a 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1779,8 +1779,11 @@ const char* cmTarget::GetProperty(const std::string& prop) const const bool chain = impl->Makefile->GetState()->IsPropertyChained(prop, cmProperty::TARGET); if (chain) { - return impl->Makefile->GetStateSnapshot().GetDirectory().GetProperty( + retVal = impl->Makefile->GetStateSnapshot().GetDirectory().GetProperty( prop, chain); + if (retVal) { + return retVal->c_str(); + } } return nullptr; } |