diff options
Diffstat (limited to 'Source/cmLoadCacheCommand.cxx')
-rw-r--r-- | Source/cmLoadCacheCommand.cxx | 177 |
1 files changed, 72 insertions, 105 deletions
diff --git a/Source/cmLoadCacheCommand.cxx b/Source/cmLoadCacheCommand.cxx index 462e086ef..00a30bf0e 100644 --- a/Source/cmLoadCacheCommand.cxx +++ b/Source/cmLoadCacheCommand.cxx @@ -1,121 +1,100 @@ -/*============================================================================ - CMake - Cross Platform Makefile Generator - Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#include "cmLoadCacheCommand.h" - Distributed under the OSI-approved BSD License (the "License"); - see accompanying file Copyright.txt for details. +#include "cmsys/FStream.hxx" - This software is distributed WITHOUT ANY WARRANTY; without even the - implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the License for more information. -============================================================================*/ -#include "cmLoadCacheCommand.h" +#include "cmMakefile.h" +#include "cmStateTypes.h" +#include "cmSystemTools.h" +#include "cmake.h" -#include <cmsys/RegularExpression.hxx> +class cmExecutionStatus; // cmLoadCacheCommand -bool cmLoadCacheCommand -::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &) +bool cmLoadCacheCommand::InitialPass(std::vector<std::string> const& args, + cmExecutionStatus&) { - if (args.size()< 1) - { + if (args.empty()) { this->SetError("called with wrong number of arguments."); - } + } - if(args.size() >= 2 && args[1] == "READ_WITH_PREFIX") - { + if (args.size() >= 2 && args[1] == "READ_WITH_PREFIX") { return this->ReadWithPrefix(args); - } + } // Cache entries to be excluded from the import list. // If this set is empty, all cache entries are brought in // and they can not be overridden. - bool excludeFiles=false; + bool excludeFiles = false; unsigned int i; - std::set<cmStdString> excludes; + std::set<std::string> excludes; - for(i=0; i<args.size(); i++) - { - if (excludeFiles) - { + for (i = 0; i < args.size(); i++) { + if (excludeFiles) { excludes.insert(args[i]); - } - if (args[i] == "EXCLUDE") - { - excludeFiles=true; - } - if (excludeFiles && (args[i] == "INCLUDE_INTERNALS")) - { + } + if (args[i] == "EXCLUDE") { + excludeFiles = true; + } + if (excludeFiles && (args[i] == "INCLUDE_INTERNALS")) { break; - } } + } // Internal cache entries to be imported. // If this set is empty, no internal cache entries are // brought in. - bool includeFiles=false; - std::set<cmStdString> includes; + bool includeFiles = false; + std::set<std::string> includes; - for(i=0; i<args.size(); i++) - { - if (includeFiles) - { + for (i = 0; i < args.size(); i++) { + if (includeFiles) { includes.insert(args[i]); - } - if (args[i] == "INCLUDE_INTERNALS") - { - includeFiles=true; - } - if (includeFiles && (args[i] == "EXCLUDE")) - { + } + if (args[i] == "INCLUDE_INTERNALS") { + includeFiles = true; + } + if (includeFiles && (args[i] == "EXCLUDE")) { break; - } } + } // Loop over each build directory listed in the arguments. Each // directory has a cache file. - for(i=0; i<args.size(); i++) - { - if ((args[i] == "EXCLUDE") || (args[i] == "INCLUDE_INTERNALS")) - { + for (i = 0; i < args.size(); i++) { + if ((args[i] == "EXCLUDE") || (args[i] == "INCLUDE_INTERNALS")) { break; - } - this->Makefile->GetCacheManager()->LoadCache(args[i].c_str(), false, - excludes, includes); } - + this->Makefile->GetCMakeInstance()->LoadCache(args[i], false, excludes, + includes); + } return true; } -//---------------------------------------------------------------------------- bool cmLoadCacheCommand::ReadWithPrefix(std::vector<std::string> const& args) { // Make sure we have a prefix. - if(args.size() < 3) - { + if (args.size() < 3) { this->SetError("READ_WITH_PREFIX form must specify a prefix."); return false; - } + } // Make sure the cache file exists. - std::string cacheFile = args[0]+"/CMakeCache.txt"; - if(!cmSystemTools::FileExists(cacheFile.c_str())) - { + std::string cacheFile = args[0] + "/CMakeCache.txt"; + if (!cmSystemTools::FileExists(cacheFile.c_str())) { std::string e = "Cannot load cache file from " + cacheFile; - this->SetError(e.c_str()); + this->SetError(e); return false; - } + } // Prepare the table of variables to read. this->Prefix = args[2]; - for(unsigned int i=3; i < args.size(); ++i) - { - this->VariablesToRead.insert(args[i]); - } + this->VariablesToRead.insert(args.begin() + 3, args.end()); // Read the cache file. - std::ifstream fin(cacheFile.c_str()); + cmsys::ifstream fin(cacheFile.c_str()); // This is a big hack read loop to overcome a buggy ifstream // implementation on HP-UX. This should work on all platforms even @@ -123,74 +102,62 @@ bool cmLoadCacheCommand::ReadWithPrefix(std::vector<std::string> const& args) const int bufferSize = 4096; char buffer[bufferSize]; std::string line; - while(fin) - { + while (fin) { // Read a block of the file. fin.read(buffer, bufferSize); - if(fin.gcount()) - { + if (fin.gcount()) { // Parse for newlines directly. const char* i = buffer; - const char* end = buffer+fin.gcount(); - while(i != end) - { + const char* end = buffer + fin.gcount(); + while (i != end) { const char* begin = i; - while(i != end && *i != '\n') { ++i; } - if(i == begin || *(i-1) != '\r') - { + while (i != end && *i != '\n') { + ++i; + } + if (i == begin || *(i - 1) != '\r') { // Include this portion of the line. - line += std::string(begin, i-begin); - } - else - { + line += std::string(begin, i - begin); + } else { // Include this portion of the line. // Don't include the \r in a \r\n pair. - line += std::string(begin, i-1-begin); - } - if(i != end) - { + line += std::string(begin, i - 1 - begin); + } + if (i != end) { // Completed a line. this->CheckLine(line.c_str()); line = ""; // Skip the newline character. ++i; - } } } } - if(line.length()) - { + } + if (!line.empty()) { // Partial last line. this->CheckLine(line.c_str()); - } + } return true; } -//---------------------------------------------------------------------------- void cmLoadCacheCommand::CheckLine(const char* line) { // Check one line of the cache file. std::string var; std::string value; - cmCacheManager::CacheEntryType type = cmCacheManager::UNINITIALIZED; - if(cmCacheManager::ParseEntry(line, var, value, type)) - { + cmStateEnums::CacheEntryType type = cmStateEnums::UNINITIALIZED; + if (cmake::ParseCacheEntry(line, var, value, type)) { // Found a real entry. See if this one was requested. - if(this->VariablesToRead.find(var) != this->VariablesToRead.end()) - { + if (this->VariablesToRead.find(var) != this->VariablesToRead.end()) { // This was requested. Set this variable locally with the given // prefix. var = this->Prefix + var; - if(value.length()) - { - this->Makefile->AddDefinition(var.c_str(), value.c_str()); - } - else - { - this->Makefile->RemoveDefinition(var.c_str()); - } + if (!value.empty()) { + this->Makefile->AddDefinition(var, value.c_str()); + } else { + this->Makefile->RemoveDefinition(var); } } + } } |