From 3571198ea832a741dfe80c566a206e9de140fbdd Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Tue, 27 May 2008 16:50:04 -0400
Subject: 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.
---
 Source/cmFindBase.cxx | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx
index cff55ee..8d519bc 100644
--- a/Source/cmFindBase.cxx
+++ b/Source/cmFindBase.cxx
@@ -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();
-- 
cgit v0.12