diff options
author | Brad King <brad.king@kitware.com> | 2001-03-08 15:30:18 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2001-03-08 15:30:18 (GMT) |
commit | 4666b017101de1aa9367a8c6d8ad0b8cb03a77c5 (patch) | |
tree | b7a444b9a0dc7689617802f1321ff1c6d6f8197e /Source/cmUtilitySourceCommand.cxx | |
parent | 5c8b68ba70c77eb2409e29a416599e13cc2d7e5e (diff) | |
download | CMake-4666b017101de1aa9367a8c6d8ad0b8cb03a77c5.zip CMake-4666b017101de1aa9367a8c6d8ad0b8cb03a77c5.tar.gz CMake-4666b017101de1aa9367a8c6d8ad0b8cb03a77c5.tar.bz2 |
ENH: Added UTILITY_SOURCE command for specifying where a 3rd party utility's source is located when it is included in the distribution of a project.
Diffstat (limited to 'Source/cmUtilitySourceCommand.cxx')
-rw-r--r-- | Source/cmUtilitySourceCommand.cxx | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/Source/cmUtilitySourceCommand.cxx b/Source/cmUtilitySourceCommand.cxx new file mode 100644 index 0000000..0a8c9b7 --- /dev/null +++ b/Source/cmUtilitySourceCommand.cxx @@ -0,0 +1,81 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) 2000 National Library of Medicine + All rights reserved. + + See COPYRIGHT.txt for copyright details. + +=========================================================================*/ +#include "cmUtilitySourceCommand.h" + +// cmUtilitySourceCommand +bool cmUtilitySourceCommand::Invoke(std::vector<std::string>& args) +{ + 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 = + cmCacheManager::GetInstance()->GetCacheValue(cacheEntry.c_str()); + // If it exists already, we are done. + if(cacheValue) + { + // Set the makefile's definition with the cache value. + m_Makefile->AddDefinition(cacheEntry.c_str(), cacheValue); + return true; + } + + // The second argument is the utility's executable name, which will be + // needed later. + std::string utilityName = *arg++; + + // The third argument specifies the relative directory of the source + // of the utility. + std::string relativeSource = *arg++; + std::string utilitySource = m_Makefile->GetCurrentDirectory(); + utilitySource = utilitySource+"/"+relativeSource; + + // If the directory doesn't exist, the source has not been included. + 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; } + } + + // The source exists. Construct the cache entry for the executable's + // location. + std::string cmakeCFG = m_Makefile->GetDefinition("CMAKE_CFG"); + std::string utilityExecutable = m_Makefile->GetCurrentOutputDirectory(); + utilityExecutable = + (utilityExecutable+"/"+relativeSource+"/"+cmakeCFG+"/" + +utilityName+cmSystemTools::GetExecutableExtension()); + + // Enter the value into the cache. + cmCacheManager::GetInstance()->AddCacheEntry(cacheEntry.c_str(), + utilityExecutable.c_str(), + cmCacheManager::FILEPATH); + + // Set the definition in the makefile. + m_Makefile->AddDefinition(cacheEntry.c_str(), utilityExecutable.c_str()); + + return true; +} + |