BUG: Fix 64-bit build of CMake so it can find 32-bit VS install.

- cmFindBase should search both 32-bit and 64-bit registry views
    for FIND_PROGRAM even if CMAKE_SIZEOF_VOID_P is not set.
  - Needed because the variable is not available when CMAKE_MAKE_PROGRAM
    is to be found.
This commit is contained in:
Brad King 2008-06-05 09:54:28 -04:00
parent 958dc2709f
commit a9a33a5c5e

View File

@ -477,26 +477,17 @@ void cmFindBase::ExpandRegistryAndCleanPath(std::vector<std::string>& paths)
{ {
// We should view the registry as the target application would view // We should view the registry as the target application would view
// it. // it.
cmSystemTools::KeyWOW64 view = cmSystemTools::KeyWOW64_Default; cmSystemTools::KeyWOW64 view = cmSystemTools::KeyWOW64_32;
cmSystemTools::KeyWOW64 other_view = cmSystemTools::KeyWOW64_Default; cmSystemTools::KeyWOW64 other_view = cmSystemTools::KeyWOW64_64;
{
if(const char* psize = if(const char* psize =
this->Makefile->GetDefinition("CMAKE_SIZEOF_VOID_P")) this->Makefile->GetDefinition("CMAKE_SIZEOF_VOID_P"))
{ {
switch(atoi(psize)) if(atoi(psize) == 8)
{ {
case 4: view = cmSystemTools::KeyWOW64_64;
view = cmSystemTools::KeyWOW64_32; other_view = cmSystemTools::KeyWOW64_32;
other_view = cmSystemTools::KeyWOW64_64;
break;
case 8:
view = cmSystemTools::KeyWOW64_64;
other_view = cmSystemTools::KeyWOW64_32;
break;
default: break;
} }
} }
}
std::vector<std::string> finalPath; std::vector<std::string> finalPath;
std::vector<std::string>::iterator i; std::vector<std::string>::iterator i;
// glob and expand registry stuff from paths and put // glob and expand registry stuff from paths and put
@ -507,8 +498,7 @@ void cmFindBase::ExpandRegistryAndCleanPath(std::vector<std::string>& paths)
std::string expanded = *i; std::string expanded = *i;
cmSystemTools::ExpandRegistryValues(expanded, view); cmSystemTools::ExpandRegistryValues(expanded, view);
cmSystemTools::GlobDirs(expanded.c_str(), finalPath); cmSystemTools::GlobDirs(expanded.c_str(), finalPath);
if(view != other_view && expanded != *i && if(expanded != *i && this->CMakePathName == "PROGRAM")
this->CMakePathName == "PROGRAM")
{ {
// Executables can be either 32-bit or 64-bit. // Executables can be either 32-bit or 64-bit.
expanded = *i; expanded = *i;