diff options
author | MyungJoo Ham <myungjoo.ham@samsung.com> | 2017-10-11 15:16:57 +0900 |
---|---|---|
committer | MyungJoo Ham <myungjoo.ham@samsung.com> | 2017-10-11 15:16:57 +0900 |
commit | 915c76ded744c0f5f151402b9fa69f3fd8452573 (patch) | |
tree | ca6a387466543248890f346847acaa8343989b22 /Source/cmUtilitySourceCommand.cxx | |
parent | 317dbdb79761ef65e45c7358cfc7571c6afa54ad (diff) | |
download | cmake-915c76ded744c0f5f151402b9fa69f3fd8452573.tar.gz cmake-915c76ded744c0f5f151402b9fa69f3fd8452573.tar.bz2 cmake-915c76ded744c0f5f151402b9fa69f3fd8452573.zip |
Imported Upstream version 3.9.4upstream/3.9.4
Diffstat (limited to 'Source/cmUtilitySourceCommand.cxx')
-rw-r--r-- | Source/cmUtilitySourceCommand.cxx | 133 |
1 files changed, 60 insertions, 73 deletions
diff --git a/Source/cmUtilitySourceCommand.cxx b/Source/cmUtilitySourceCommand.cxx index 6ea3dfac8..eabd7ef31 100644 --- a/Source/cmUtilitySourceCommand.cxx +++ b/Source/cmUtilitySourceCommand.cxx @@ -1,32 +1,30 @@ -/*============================================================================ - 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 "cmUtilitySourceCommand.h" - Distributed under the OSI-approved BSD License (the "License"); - see accompanying file Copyright.txt for details. +#include <string.h> - 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 "cmUtilitySourceCommand.h" +#include "cmMakefile.h" +#include "cmState.h" +#include "cmStateTypes.h" +#include "cmSystemTools.h" + +class cmExecutionStatus; // cmUtilitySourceCommand -bool cmUtilitySourceCommand -::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &) +bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args, + cmExecutionStatus&) { - if(args.size() < 3) - { + if (args.size() < 3) { this->SetError("called with incorrect number of arguments"); return false; - } + } std::vector<std::string>::const_iterator arg = args.begin(); // The first argument is the cache entry name. - std::string cacheEntry = *arg++; - const char* cacheValue = - this->Makefile->GetDefinition(cacheEntry.c_str()); + std::string const& cacheEntry = *arg++; + const char* cacheValue = this->Makefile->GetDefinition(cacheEntry); // If it exists already and appears up to date then we are done. If // the string contains "(IntDir)" but that is not the // CMAKE_CFG_INTDIR setting then the value is out of date. @@ -34,94 +32,83 @@ bool cmUtilitySourceCommand this->Makefile->GetRequiredDefinition("CMAKE_CFG_INTDIR"); bool haveCacheValue = false; - if (this->Makefile->IsOn("CMAKE_CROSSCOMPILING")) - { - haveCacheValue = (cacheValue != 0); - if (!haveCacheValue) - { + if (this->Makefile->IsOn("CMAKE_CROSSCOMPILING")) { + haveCacheValue = (cacheValue != CM_NULLPTR); + if (!haveCacheValue) { std::string msg = "UTILITY_SOURCE is used in cross compiling mode for "; msg += cacheEntry; msg += ". If your intention is to run this executable, you need to " - "preload the cache with the full path to a version of that " - "program, which runs on this build machine."; - cmSystemTools::Message(msg.c_str() ,"Warning"); - } - } - else - { - haveCacheValue = (cacheValue && - (strstr(cacheValue, "(IntDir)") == 0 || - (intDir && strcmp(intDir, "$(IntDir)") == 0)) && - (this->Makefile->GetCacheMajorVersion() != 0 && - this->Makefile->GetCacheMinorVersion() != 0 )); + "preload the cache with the full path to a version of that " + "program, which runs on this build machine."; + cmSystemTools::Message(msg.c_str(), "Warning"); } - - if(haveCacheValue) - { + } else { + cmState* state = this->Makefile->GetState(); + haveCacheValue = + (cacheValue && (strstr(cacheValue, "(IntDir)") == CM_NULLPTR || + (intDir && strcmp(intDir, "$(IntDir)") == 0)) && + (state->GetCacheMajorVersion() != 0 && + state->GetCacheMinorVersion() != 0)); + } + + if (haveCacheValue) { return true; - } + } // The second argument is the utility's executable name, which will be // needed later. - std::string utilityName = *arg++; + std::string const& utilityName = *arg++; // The third argument specifies the relative directory of the source // of the utility. - std::string relativeSource = *arg++; - std::string utilitySource = this->Makefile->GetCurrentDirectory(); - utilitySource = utilitySource+"/"+relativeSource; + std::string const& relativeSource = *arg++; + std::string utilitySource = this->Makefile->GetCurrentSourceDirectory(); + utilitySource = utilitySource + "/" + relativeSource; // If the directory doesn't exist, the source has not been included. - if(!cmSystemTools::FileExists(utilitySource.c_str())) - { return true; } + if (!cmSystemTools::FileExists(utilitySource.c_str())) { + return true; + } // Make sure all the files exist in the source directory. - while(arg != args.end()) - { - std::string file = utilitySource+"/"+*arg++; - if(!cmSystemTools::FileExists(file.c_str())) - { return true; } + while (arg != args.end()) { + std::string file = utilitySource + "/" + *arg++; + if (!cmSystemTools::FileExists(file.c_str())) { + return true; } + } // The source exists. std::string cmakeCFGout = this->Makefile->GetRequiredDefinition("CMAKE_CFG_INTDIR"); - std::string utilityDirectory = this->Makefile->GetCurrentOutputDirectory(); + std::string utilityDirectory = this->Makefile->GetCurrentBinaryDirectory(); std::string exePath; - if (this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH")) - { + if (this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH")) { exePath = this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"); - } - if(exePath.size()) - { + } + if (!exePath.empty()) { utilityDirectory = exePath; - } - else - { - utilityDirectory += "/"+relativeSource; - } + } else { + utilityDirectory += "/" + relativeSource; + } // Construct the cache entry for the executable's location. - std::string utilityExecutable = - utilityDirectory+"/"+cmakeCFGout+"/" - +utilityName+this->Makefile->GetDefinition("CMAKE_EXECUTABLE_SUFFIX"); + std::string utilityExecutable = utilityDirectory + "/" + cmakeCFGout + "/" + + utilityName + this->Makefile->GetDefinition("CMAKE_EXECUTABLE_SUFFIX"); // make sure we remove any /./ in the name cmSystemTools::ReplaceString(utilityExecutable, "/./", "/"); // Enter the value into the cache. - this->Makefile->AddCacheDefinition(cacheEntry.c_str(), - utilityExecutable.c_str(), - "Path to an internal program.", - cmCacheManager::FILEPATH); + this->Makefile->AddCacheDefinition(cacheEntry, utilityExecutable.c_str(), + "Path to an internal program.", + cmStateEnums::FILEPATH); // add a value into the cache that maps from the // full path to the name of the project cmSystemTools::ConvertToUnixSlashes(utilityExecutable); - this->Makefile->AddCacheDefinition(utilityExecutable.c_str(), - utilityName.c_str(), - "Executable to project name.", - cmCacheManager::INTERNAL); + this->Makefile->AddCacheDefinition(utilityExecutable, utilityName.c_str(), + "Executable to project name.", + cmStateEnums::INTERNAL); return true; } - |