[CMake] CMAKE_LIBRARY_PATH appears not to work properly for finding libtcl
Bill Hoffman
bill.hoffman at kitware.com
Sat May 15 09:43:37 EDT 2010
OK, your right, it does prefer names that show up first in the name list
even if they are later in the total path.
Here is what the code does:
The ivar this->SearchPaths is the super path in the this function:
std::string cmFindProgramCommand::FindProgram(std::vector<std::string>
names)
{
std::string program = "";
if(this->SearchAppBundleFirst || this->SearchAppBundleOnly)
{
program = FindAppBundle(names);
}
// this is the main search, it passes in a list of names,
// and the super path
if(program.empty() && !this->SearchAppBundleOnly)
{
program = cmSystemTools::FindProgram(names, this->SearchPaths, true);
}
if(program.empty() && this->SearchAppBundleLast)
{
program = this->FindAppBundle(names);
}
return program;
}
// FindProgram loops over the names and trys to each
// name in the total path
//
kwsys_stl::string SystemTools::FindProgram(
const kwsys_stl::vector<kwsys_stl::string>& names,
const kwsys_stl::vector<kwsys_stl::string>& path,
bool noSystemPath)
{
for(kwsys_stl::vector<kwsys_stl::string>::const_iterator it =
names.begin();
it != names.end() ; ++it)
{
// Try to find the program.
kwsys_stl::string result = SystemTools::FindProgram(it->c_str(),
path,
noSystemPath);
if ( !result.empty() )
{
return result;
}
}
return "";
Not supper easy to fix... FindProgram is actually a pretty complicated
function. But, if someone wants to test/send a patch... :)
Might break something, but I doubt it. If you have two copies of
something on a machine, you are bound to make someone unhappy some of
the time by picking the wrong one...
-Bill
More information about the CMake
mailing list