summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2008-12-17 14:23:30 (GMT)
committerBrad King <brad.king@kitware.com>2008-12-17 14:23:30 (GMT)
commitd5c1191349778dd1c1d4646b28f8f532ea0bea9e (patch)
treec7793a162bd62728cde133f3d8877334905b6fcd
parent625ef26163451686a68b092d672e79c3e2b80e1e (diff)
downloadCMake-d5c1191349778dd1c1d4646b28f8f532ea0bea9e.zip
CMake-d5c1191349778dd1c1d4646b28f8f532ea0bea9e.tar.gz
CMake-d5c1191349778dd1c1d4646b28f8f532ea0bea9e.tar.bz2
ENH: Use 32-bit and 64-bit Program Files folders
On 64-bit Windows there may be two Program Files folders, one for 32-bit binaries and one for 64-bit binaries. When we compute CMAKE_SYSTEM_PREFIX_PATH we should put both folders in the path.
-rw-r--r--Modules/Platform/WindowsPaths.cmake57
1 files changed, 49 insertions, 8 deletions
diff --git a/Modules/Platform/WindowsPaths.cmake b/Modules/Platform/WindowsPaths.cmake
index 45ed479..00e3afa 100644
--- a/Modules/Platform/WindowsPaths.cmake
+++ b/Modules/Platform/WindowsPaths.cmake
@@ -1,15 +1,56 @@
+# Add the program-files folder(s) to the list of installation
+# prefixes.
+#
+# Windows 64-bit Binary:
+# ENV{ProgramFiles(x86)} = [C:\Program Files (x86)]
+# ENV{ProgramFiles} = [C:\Program Files]
+# ENV{ProgramW6432} = <not set>
+# (executed from cygwin):
+# ENV{ProgramFiles(x86)} = <not set>
+# ENV{ProgramFiles} = [C:\Program Files]
+# ENV{ProgramW6432} = <not set>
+#
+# Windows 32-bit Binary:
+# ENV{ProgramFiles(x86)} = [C:\Program Files (x86)]
+# ENV{ProgramFiles} = [C:\Program Files (x86)]
+# ENV{ProgramW6432} = [C:\Program Files]
+# (executed from cygwin):
+# ENV{ProgramFiles(x86)} = <not set>
+# ENV{ProgramFiles} = [C:\Program Files (x86)]
+# ENV{ProgramW6432} = [C:\Program Files]
+IF(DEFINED "ENV{ProgramW6432}")
+ # 32-bit binary on 64-bit windows.
+ # The 64-bit program files are in ProgramW6432.
+ LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramW6432}")
+
+ # The 32-bit program files are in ProgramFiles.
+ IF(DEFINED "ENV{ProgramFiles}")
+ LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramFiles}")
+ ENDIF()
+ELSE()
+ # 64-bit binary, or 32-bit binary on 32-bit windows.
+ IF(DEFINED "ENV{ProgramFiles}")
+ LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramFiles}")
+ ENDIF()
+ IF(DEFINED "ENV{ProgramFiles(x86)}")
+ # 64-bit binary. 32-bit program files are in ProgramFiles(x86).
+ LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "$ENV{ProgramFiles(x86)}")
+ ELSEIF(DEFINED "ENV{SystemDrive}")
+ # Guess the 32-bit program files location.
+ IF(EXISTS "$ENV{SystemDrive}/Program Files (x86)")
+ LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH
+ "$ENV{SystemDrive}/Program Files (x86)")
+ ENDIF()
+ ENDIF()
+ENDIF()
+
+# Add the CMake install location.
GET_FILENAME_COMPONENT(_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH)
GET_FILENAME_COMPONENT(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH)
+LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH "${_CMAKE_INSTALL_DIR}")
-# List common installation prefixes. These will be used for all
-# search types.
+# Add other locations.
LIST(APPEND CMAKE_SYSTEM_PREFIX_PATH
- # Standard
- "$ENV{ProgramFiles}"
-
- # CMake install location
- "${_CMAKE_INSTALL_DIR}"
-
# Project install destination.
"${CMAKE_INSTALL_PREFIX}"