Преглед изворни кода

cmake_host_system_information(WINDOWS_REGISTRY) updates

* add a cross-reference in 'get_filename_component()' documentation
* rework tests for better 32bit systems support
Marc Chevrier пре 3 година
родитељ
комит
0c33f12a39

+ 2 - 0
Help/command/cmake_host_system_information.rst

@@ -261,6 +261,8 @@ Example:
 .. _man 5 os-release: https://www.freedesktop.org/software/systemd/man/os-release.html
 .. _various distribution-specific files: http://linuxmafia.com/faq/Admin/release-files.html
 
+.. _Query Windows registry:
+
 Query Windows registry
 ^^^^^^^^^^^^^^^^^^^^^^
 

+ 8 - 2
Help/command/get_filename_component.rst

@@ -4,10 +4,16 @@ get_filename_component
 Get a specific component of a full filename.
 
 .. versionchanged:: 3.20
-  This command been superseded by :command:`cmake_path` command, except
-  ``REALPATH`` now offered by :ref:`file(REAL_PATH) <REAL_PATH>` command and
+  This command has been superseded by :command:`cmake_path` command, except
+  ``REALPATH`` now offered by :ref:`file(REAL_PATH)<REAL_PATH>` command and
   ``PROGRAM`` now available in :command:`separate_arguments(PROGRAM)` command.
 
+.. versionchanged:: 3.24
+  The undocumented feature offering the capability to query the ``Windows``
+  registry is superseded by
+  :ref:`cmake_host_system_information(QUERY WINDOWS_REGISTRY)<Query Windows registry>`
+  command.
+
 .. code-block:: cmake
 
   get_filename_component(<var> <FileName> <mode> [CACHE])

+ 236 - 132
Tests/RunCMake/cmake_host_system_information/Registry_Query.cmake

@@ -1,12 +1,4 @@
 
-# check Windows architecture
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKCU" SUBKEYS VIEW 64 ERROR_VARIABLE status)
-if (status STREQUAL "")
-  set(HOST_64BIT TRUE)
-else()
-  set(HOST_64BIT FALSE)
-endif()
-
 # helper function for test validation
 function(CHECK key result status expression)
   if(status STREQUAL "")
@@ -25,33 +17,51 @@ set(KEY "HKCU/Software/Classes/CLSID/CMake-Tests/chsi-registry")
 
 cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" ERROR_VARIABLE status)
 check("${KEY}" "${result}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"default 64bit\")
-      OR (NOT HOST_64BIT AND result STREQUAL \"default 32bit\")")
+      "result STREQUAL \"default ${ARCH}\"")
 # query value using special name should be identical to default value
 cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE "(default)" ERROR_VARIABLE status)
 check("${KEY}{(default)}" "${result2}" "${status}" "result2 STREQUAL result")
 
 cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW HOST ERROR_VARIABLE status)
 check("${KEY}" "${result}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"default 64bit\")
-      OR (NOT HOST_64BIT AND result STREQUAL \"default 32bit\")")
+      "result STREQUAL \"default ${ARCH}\"")
 # VIEW TARGET should have same value as VIEW HOST
 cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VIEW TARGET ERROR_VARIABLE status)
 check("${KEY}" "${result2}" "${status}" "result2 STREQUAL result")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 64 ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 64bit\"")
+if (ARCH STREQUAL "64bit")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 64bit\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
+
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 64bit\"")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 32 ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
+  # reg 32bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
 
-# reg 64bit is read first
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 64_32 ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 64bit\"")
+else() #32bit
 
-# reg 32bit is read first
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 32_64 ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
+
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
+
+  # reg 32bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
+
+endif()
 
 
 # HKCU/Software/CMake-Tests/chsi-registry: Query named value
@@ -60,37 +70,58 @@ set(KEY "HKCU/Software/Classes/CLSID/CMake-Tests/chsi-registry")
 cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
                               ERROR_VARIABLE status)
 check("${KEY}{BYTE_SIZE}" "${result}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"64bit\")
-      OR (NOT HOST_64BIT AND result STREQUAL \"32bit\")")
+      "result STREQUAL \"${ARCH}\"")
 
 cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
                               VIEW HOST ERROR_VARIABLE status)
 check("${KEY}{BYTE_SIZE}" "${result}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"64bit\")
-      OR (NOT HOST_64BIT AND result STREQUAL \"32bit\")")
+      "result STREQUAL \"${ARCH}\"")
 # VIEW TARGET should have same value as VIEW HOST
 cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
                               VIEW TARGET ERROR_VARIABLE status)
 check("${KEY}{BYTE_SIZE}" "${result2}" "${status}" "result2 STREQUAL result")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
-                              VIEW 64 ERROR_VARIABLE status)
-check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"64bit\"")
+if (ARCH STREQUAL "64bit")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
-                              VIEW 32 ERROR_VARIABLE status)
-check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"64bit\"")
 
-# reg 64bit is read first
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
-                              VIEW 64_32 ERROR_VARIABLE status)
-check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"64bit\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"32bit\"")
 
-# reg 32bit is read first
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
-                              VIEW 32_64 ERROR_VARIABLE status)
-check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"64bit\"")
+
+  # reg 32bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+
+else() # 32bit
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"\"")
 
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+
+  # reg 32bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}{BYTE_SIZE}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+
+endif()
 
 # HKCU/Software/CMake-Tests/chsi-registry: check retrieval of various types
 cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE VALUE_SZ ERROR_VARIABLE status)
@@ -114,119 +145,192 @@ check("${KEY}{VALUE_QWORD}" "${result}" "${status}" "result EQUAL \"513\"")
 
 
 # HKCU/Software/CMake-Tests/chsi-registry: check retrieval of value names
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE2_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
-# VIEW BOTH should have same result as default view
-cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW BOTH ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE2_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+if (ARCH STREQUAL "64bit")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE2_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+  # VIEW BOTH should have same result as default view
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW BOTH ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result2 STREQUAL result")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW HOST ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
+    "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+  # VIEW TARGET should have same result as VIEW HOST
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result2 STREQUAL result")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
+    "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_SZ\"")
+
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
+    "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE2_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+
+  # reg 32bit is read first. Result is the same as with view 64_32
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result2 STREQUAL result")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW HOST ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\")
-       OR (NOT HOST_64BIT AND result STREQUAL \"(default);BYTE_SIZE;VALUE2_SZ\")")
-# VIEW TARGET should have same result as VIEW HOST
-cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result2}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\")
-       OR (NOT HOST_64BIT AND result STREQUAL \"(default);BYTE_SIZE;VALUE2_SZ\")")
+else()
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW 64 ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
-      "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+  # VIEW BOTH should have same result as default view
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW BOTH ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result STREQUAL result2")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW HOST ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
+    "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ")
+  # VIEW TARGET should have same result as VIEW HOST
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result2 STREQUAL result")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}" "result STREQUAL \"\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
+    "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+
+  # reg 32bit is read first. Result is the same as with view 64_32
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result2 STREQUAL result")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW 32 ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_SZ\"")
+endif()
 
-# reg 64bit is read first
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW 64_32 ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result}" "${status}"
-      "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE2_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
 
-# reg 32bit is read first. Result is the same as with view 64_32
-cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW 32_64 ERROR_VARIABLE status)
-check("${KEY}[VALUE_NAMES]" "${result2}" "${status}" "result2 STREQUAL result")
+# HKCU/Software/CMake-Tests/chsi-registry: check retrieval of sub keys
+if (ARCH STREQUAL "64bit")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2;subkey3\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW HOST ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
+  # VIEW TARGET should have same result as VIEW HOST
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result2 STREQUAL result")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey3\"")
+
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}[SUBLEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2;subkey3\"")
+
+  # reg 32bit is read first. Result is the same as with view 64_32
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result2}" "${status}" "result2 STREQUAL result")
 
+else()
 
-# HKCU/Software/CMake-Tests/chsi-registry: check retrieval of sub keys
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              ERROR_VARIABLE status)
-check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2;subkey3\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW HOST ERROR_VARIABLE status)
-check("${KEY}[SUBKEYS]" "${result}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"subkey1;subkey2\")
-       OR (NOT HOST_64BIT AND result STREQUAL \"subkey1;subkey3\")")
-# VIEW TARGET should have same result as VIEW HOST
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}[SUBKEYS]" "${result}" "${status}"
-      "(HOST_64BIT AND result STREQUAL \"subkey1;subkey2\")
-       OR (NOT HOST_64BIT AND result STREQUAL \"subkey1;subkey3\")")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW HOST ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
+  # VIEW TARGET should have same result as VIEW HOST
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result2 STREQUAL result")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW 64 ERROR_VARIABLE status)
-check("${KEY}[SUBKEYS]" "${result}" "${status}"
-      "result STREQUAL \"subkey1;subkey2\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 64 ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"\"")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW 32 ERROR_VARIABLE status)
-check("${KEY}[SUBKEYS]" "${result}" "${status}"
-      "result STREQUAL \"subkey1;subkey3\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 32 ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
 
-# reg 64bit is read first
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW 64_32 ERROR_VARIABLE status)
-check("${KEY}[SUBLEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2;subkey3\"")
+  # reg 64bit is read first
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 64_32 ERROR_VARIABLE status)
+  check("${KEY}[SUBLEYS]" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
 
-# reg 32bit is read first. Result is the same as with view 64_32
-cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW 32_64 ERROR_VARIABLE status)
-check("${KEY}[SUBKEYS]" "${result2}" "${status}" "result2 STREQUAL result")
+  # reg 32bit is read first. Result is the same as with view 64_32
+  cmake_host_system_information(RESULT result2 QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW 32_64 ERROR_VARIABLE status)
+  check("${KEY}[SUBKEYS]" "${result2}" "${status}" "result2 STREQUAL result")
 
+endif()
 
-# Check influence of variable CMAKE_SIZEOF_VOID_P
-set(CMAKE_SIZEOF_VOID_P 8)
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}"
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 64bit\"")
+if (ARCH STREQUAL "64bit")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"64bit\"")
+  # Check influence of variable CMAKE_SIZEOF_VOID_P
+  set(CMAKE_SIZEOF_VOID_P 8)
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}"
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 64bit\"")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"64bit\"")
 
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_MULTI_SZ;VALUE_DWORD;VALUE_EXPAND_SZ;VALUE_MULTI_SZ;VALUE_QWORD;VALUE_SZ\"")
 
-set(CMAKE_SIZEOF_VOID_P 4)
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"subkey1;subkey2\"")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}"
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+  set(CMAKE_SIZEOF_VOID_P 4)
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_SZ\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}"
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"default 32bit\"")
 
-cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
-                              VIEW TARGET ERROR_VARIABLE status)
-check("${KEY}" "${result}" "${status}" "result STREQUAL \"subkey1;subkey3\"")
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE BYTE_SIZE
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"32bit\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" VALUE_NAMES
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"(default);BYTE_SIZE;VALUE2_SZ\"")
+
+  cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "${KEY}" SUBKEYS
+    VIEW TARGET ERROR_VARIABLE status)
+  check("${KEY}" "${result}" "${status}" "result STREQUAL \"subkey1;subkey3\"")
+
+endif()

+ 16 - 4
Tests/RunCMake/cmake_host_system_information/RunCMakeTest.cmake

@@ -36,12 +36,24 @@ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
   # Tests using the Windows registry
   find_program(REG NAMES "reg.exe" NO_CACHE)
   if (REG)
+    ## check host architecture
+    cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKCU" SUBKEYS VIEW 64 ERROR_VARIABLE status)
+    if (status STREQUAL "")
+      set(ARCH "64bit")
+    else()
+      set(ARCH "32bit")
+    endif()
+
     # crete some entries in the registry
-    cmake_path(CONVERT "${RunCMake_SOURCE_DIR}/registry_data.reg" TO_NATIVE_PATH_LIST registry_data)
+    cmake_path(CONVERT "${RunCMake_SOURCE_DIR}/registry_host${ARCH}.reg" TO_NATIVE_PATH_LIST registry_data)
     execute_process(COMMAND "${REG}" import "${registry_data}" OUTPUT_QUIET ERROR_QUIET)
-    run_cmake(Registry_Query)
+
+    run_cmake_with_options(Registry_Query -DARCH=${ARCH})
+
     # clean-up registry
-    execute_process(COMMAND "${REG}" delete "HKCU\\SOFTWARE\\Classes\\CLSID\\CMake-Tests" /f OUTPUT_QUIET ERROR_QUIET)
-    execute_process(COMMAND "${REG}" delete "HKCU\\SOFTWARE\\Classes\\WOW6432Node\\CLSID\\CMake-Tests" /f OUTPUT_QUIET ERROR_QUIET)
+    execute_process(COMMAND "${REG}" delete "HKCU\\SOFTWARE\\Classes\\CLSID\\CMake-Tests\\chsi-registry" /f OUTPUT_QUIET ERROR_QUIET)
+    if (ARCH STREQUAL "64bit")
+      execute_process(COMMAND "${REG}" delete "HKCU\\SOFTWARE\\Classes\\WOW6432Node\\CLSID\\CMake-Tests\\chsi-registry" /f OUTPUT_QUIET ERROR_QUIET)
+    endif()
   endif()
 endif()

BIN
Tests/RunCMake/cmake_host_system_information/registry_host32bit.reg


+ 0 - 0
Tests/RunCMake/cmake_host_system_information/registry_data.reg → Tests/RunCMake/cmake_host_system_information/registry_host64bit.reg