BUG: Fix previous registry lookup change for executables.

- The target platform does not matter for finding executables
    so find_program should expand to both 32-bit and 64-bit registry
    values.
  - See issue #7095.
This commit is contained in:
Brad King 2008-05-27 16:50:04 -04:00
parent 41ceabb60f
commit 3571198ea8

View File

@ -478,14 +478,21 @@ void cmFindBase::ExpandRegistryAndCleanPath(std::vector<std::string>& paths)
// We should view the registry as the target application would view
// it.
cmSystemTools::KeyWOW64 view = cmSystemTools::KeyWOW64_Default;
cmSystemTools::KeyWOW64 other_view = cmSystemTools::KeyWOW64_Default;
{
if(const char* psize =
this->Makefile->GetDefinition("CMAKE_SIZEOF_VOID_P"))
{
switch(atoi(psize))
{
case 4: view = cmSystemTools::KeyWOW64_32; break;
case 8: view = cmSystemTools::KeyWOW64_64; break;
case 4:
view = cmSystemTools::KeyWOW64_32;
other_view = cmSystemTools::KeyWOW64_64;
break;
case 8:
view = cmSystemTools::KeyWOW64_64;
other_view = cmSystemTools::KeyWOW64_32;
break;
default: break;
}
}
@ -497,8 +504,17 @@ void cmFindBase::ExpandRegistryAndCleanPath(std::vector<std::string>& paths)
for(i = paths.begin();
i != paths.end(); ++i)
{
cmSystemTools::ExpandRegistryValues(*i, view);
cmSystemTools::GlobDirs(i->c_str(), finalPath);
std::string expanded = *i;
cmSystemTools::ExpandRegistryValues(expanded, view);
cmSystemTools::GlobDirs(expanded.c_str(), finalPath);
if(view != other_view && expanded != *i &&
this->CMakePathName == "PROGRAM")
{
// Executables can be either 32-bit or 64-bit.
expanded = *i;
cmSystemTools::ExpandRegistryValues(expanded, other_view);
cmSystemTools::GlobDirs(expanded.c_str(), finalPath);
}
}
// clear the path
paths.clear();