/*========================================================================= 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 "cmFindLibraryCommand.h" #include "cmCacheManager.h" // cmFindLibraryCommand bool cmFindLibraryCommand::Invoke(std::vector& args) { if(args.size() < 2 ) { this->SetError("called with incorrect number of arguments"); return false; } // Now check and see if the value has been stored in the cache // already, if so use that value and don't look for the program const char* cacheValue = cmCacheManager::GetInstance()->GetCacheValue(args[0].c_str()); if(cacheValue) { if(strcmp(cacheValue, "NOTFOUND") != 0) { m_Makefile->AddDefinition(args[0].c_str(), cacheValue); } return true; } std::vector path; // add any user specified paths for (unsigned int j = 2; j < args.size(); j++) { // expand variables std::string exp = args[j]; m_Makefile->ExpandVariablesInString(exp); path.push_back(exp); } // add the standard path cmSystemTools::GetPath(path); unsigned int k; for(k=0; k < path.size(); k++) { std::string tryPath = path[k]; tryPath += "/"; tryPath += args[1]; if(cmSystemTools::FileExists(tryPath.c_str())) { m_Makefile->AddDefinition(args[0].c_str(), path[k].c_str()); cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(), path[k].c_str(), cmCacheManager::PATH); return true; } } cmCacheManager::GetInstance()->AddCacheEntry(args[0].c_str(), "NOTFOUND", cmCacheManager::PATH); std::string message = "Library not found: "; message += args[1]; message += "\n"; message += "looked in "; for(k=0; k < path.size(); k++) { message += path[k]; message += "\n"; } this->SetError(message.c_str()); return false; }