diff options
author | Brad King <brad.king@kitware.com> | 2014-09-15 14:27:36 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2014-09-15 14:27:36 (GMT) |
commit | 9edf6903e62f84a567db3938bb8fec3f19789545 (patch) | |
tree | 889b2078804ab5f74e8e76a9e4000b9dc27479d5 /Source/cmMakefile.cxx | |
parent | 78884b6effcb5406eb64365d6cf4b43c085f56c3 (diff) | |
parent | 858d5a0b3e52dbae635fac5a6944fba23a362f5b (diff) | |
download | CMake-9edf6903e62f84a567db3938bb8fec3f19789545.zip CMake-9edf6903e62f84a567db3938bb8fec3f19789545.tar.gz CMake-9edf6903e62f84a567db3938bb8fec3f19789545.tar.bz2 |
Merge topic 'if-sanity'
858d5a0b Fix if() checks of CMAKE_SYSTEM_NAME on Cygwin
e177e7af FPHSA: Avoid if() dereferencing of quoted variable
425acc52 cmcurl: Use if(DEFINED) to simplify conditions
cede5cbd libarchive: Avoid depending on if() to dereference a quoted variable
2d97178b FindGTK2: Avoid depending on if() to dereference a quoted variable
0b12815d Modules/Test*.cmake: Use if(DEFINED) to simplify conditions
188a1f23 If: Introduce policy CMP0054 - don't dereference quoted variables in if()
b900c1cc If: Extract cmConditionEvaluator from if() implementation
Diffstat (limited to 'Source/cmMakefile.cxx')
-rw-r--r-- | Source/cmMakefile.cxx | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index efdaeec..8806205 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3292,6 +3292,7 @@ void cmMakefile::PopFunctionBlockerBarrier(bool reportError) this->FunctionBlockerBarriers.pop_back(); } +//---------------------------------------------------------------------------- bool cmMakefile::ExpandArguments( std::vector<cmListFileArgument> const& inArgs, std::vector<std::string>& outArgs) const @@ -3328,6 +3329,47 @@ bool cmMakefile::ExpandArguments( } //---------------------------------------------------------------------------- +bool cmMakefile::ExpandArguments( + std::vector<cmListFileArgument> const& inArgs, + std::vector<cmExpandedCommandArgument>& outArgs) const +{ + std::vector<cmListFileArgument>::const_iterator i; + std::string value; + outArgs.reserve(inArgs.size()); + for(i = inArgs.begin(); i != inArgs.end(); ++i) + { + // No expansion in a bracket argument. + if(i->Delim == cmListFileArgument::Bracket) + { + outArgs.push_back(cmExpandedCommandArgument(i->Value, true)); + continue; + } + // Expand the variables in the argument. + value = i->Value; + this->ExpandVariablesInString(value, false, false, false, + i->FilePath, i->Line, + false, false); + + // If the argument is quoted, it should be one argument. + // Otherwise, it may be a list of arguments. + if(i->Delim == cmListFileArgument::Quoted) + { + outArgs.push_back(cmExpandedCommandArgument(value, true)); + } + else + { + std::vector<std::string> stringArgs; + cmSystemTools::ExpandListArgument(value, stringArgs); + for(size_t j = 0; j < stringArgs.size(); ++j) + { + outArgs.push_back(cmExpandedCommandArgument(stringArgs[j], false)); + } + } + } + return !cmSystemTools::GetFatalErrorOccured(); +} + +//---------------------------------------------------------------------------- void cmMakefile::AddFunctionBlocker(cmFunctionBlocker* fb) { if(!this->CallStack.empty()) @@ -4939,12 +4981,14 @@ void cmMakefile::PopPolicyBarrier(bool reportError) this->PolicyBarriers.pop_back(); } +//---------------------------------------------------------------------------- bool cmMakefile::SetPolicyVersion(const char *version) { return this->GetCMakeInstance()->GetPolicies()-> ApplyPolicyVersion(this,version); } +//---------------------------------------------------------------------------- cmPolicies *cmMakefile::GetPolicies() const { if (!this->GetCMakeInstance()) @@ -4955,6 +4999,23 @@ cmPolicies *cmMakefile::GetPolicies() const } //---------------------------------------------------------------------------- +bool cmMakefile::HasCMP0054AlreadyBeenReported( + cmListFileContext context) const +{ + cmCMP0054Id id(context); + + bool alreadyReported = + this->CMP0054ReportedIds.find(id) != this->CMP0054ReportedIds.end(); + + if(!alreadyReported) + { + this->CMP0054ReportedIds.insert(id); + } + + return alreadyReported; +} + +//---------------------------------------------------------------------------- void cmMakefile::RecordPolicies(cmPolicies::PolicyMap& pm) { /* Record the setting of every policy. */ |