Skip to content

Commit 6f9785f

Browse files
authored
build: Use cmake_host_system_information to make registry queries in cmake (#1943)
1 parent e6c28a4 commit 6f9785f

File tree

3 files changed

+51
-29
lines changed

3 files changed

+51
-29
lines changed

Generals/CMakeLists.txt

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,31 @@ add_subdirectory(Code)
1515

1616
# If we are building on windows for windows, try and get the game install path from the registry.
1717
if("${CMAKE_HOST_SYSTEM}" MATCHES "Windows" AND "${CMAKE_SYSTEM}" MATCHES "Windows")
18-
# Check the CD registry path
19-
if(NOT RTS_INSTALL_PREFIX_GENERALS)
20-
get_filename_component(RTS_INSTALL_PREFIX_GENERALS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Generals;InstallPath]" ABSOLUTE CACHE)
21-
endif()
18+
include(${CMAKE_SOURCE_DIR}/cmake/registry.cmake)
2219

23-
# Check the WOW6432Node registry path (for EA App on 64-bit Windows)
24-
if(NOT RTS_INSTALL_PREFIX_GENERALS OR "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry")
25-
get_filename_component(RTS_INSTALL_PREFIX_GENERALS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Electronic Arts\\EA Games\\Generals;InstallPath]" ABSOLUTE CACHE)
26-
endif()
20+
# Check the EA App/CD registry path
21+
fetch_registry_value(
22+
"HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Generals"
23+
"InstallPath"
24+
RTS_INSTALL_PREFIX_GENERALS
25+
"Generals install path from registry")
2726

2827
# Check the "First Decade" registry path
29-
if(NOT RTS_INSTALL_PREFIX_GENERALS OR "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry")
30-
get_filename_component(RTS_INSTALL_PREFIX_GENERALS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Command and Conquer The First Decade;gr_folder]" ABSOLUTE CACHE)
31-
endif()
28+
fetch_registry_value(
29+
"HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Command and Conquer The First Decade"
30+
"gr_folder"
31+
RTS_INSTALL_PREFIX_GENERALS
32+
"Generals install path from registry")
3233

3334
# Check the Steam registry path
34-
if(NOT RTS_INSTALL_PREFIX_GENERALS OR "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry")
35-
get_filename_component(RTS_INSTALL_PREFIX_GENERALS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Generals;installPath]" ABSOLUTE CACHE)
36-
endif()
35+
fetch_registry_value(
36+
"HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Generals"
37+
"installPath"
38+
RTS_INSTALL_PREFIX_GENERALS
39+
"Generals install path from registry")
3740
endif()
3841

39-
if(RTS_INSTALL_PREFIX_GENERALS AND NOT "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry")
42+
if(RTS_INSTALL_PREFIX_GENERALS)
4043
install(TARGETS g_generals RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}")
4144
install(FILES $<TARGET_PDB_FILE:g_generals> DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL)
4245

GeneralsMD/CMakeLists.txt

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,31 @@ add_subdirectory(Code)
1515

1616
# If we are building on windows for windows, try and get the game install path from the registry.
1717
if("${CMAKE_HOST_SYSTEM}" MATCHES "Windows" AND "${CMAKE_SYSTEM}" MATCHES "Windows")
18-
if(NOT RTS_INSTALL_PREFIX_ZEROHOUR)
19-
get_filename_component(RTS_INSTALL_PREFIX_ZEROHOUR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Command and Conquer Generals Zero Hour;InstallPath]" ABSOLUTE CACHE)
20-
endif()
18+
include(${CMAKE_SOURCE_DIR}/cmake/registry.cmake)
2119

22-
# Check the WOW6432Node registry path (for EA App on 64-bit Windows)
23-
if(NOT RTS_INSTALL_PREFIX_ZEROHOUR OR "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry")
24-
get_filename_component(RTS_INSTALL_PREFIX_ZEROHOUR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Electronic Arts\\EA Games\\Command and Conquer Generals Zero Hour;InstallPath]" ABSOLUTE CACHE)
25-
endif()
20+
# Check the EA App/CD registry path
21+
fetch_registry_value(
22+
"HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Command and Conquer Generals Zero Hour"
23+
"InstallPath"
24+
RTS_INSTALL_PREFIX_ZEROHOUR
25+
"Zero Hour install path from registry")
2626

2727
# Check the "First Decade" registry path
28-
if(NOT RTS_INSTALL_PREFIX_ZEROHOUR OR "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry")
29-
get_filename_component(RTS_INSTALL_PREFIX_ZEROHOUR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Command and Conquer The First Decade;zh_folder]" ABSOLUTE CACHE)
30-
endif()
28+
fetch_registry_value(
29+
"HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Command and Conquer The First Decade"
30+
"zh_folder"
31+
RTS_INSTALL_PREFIX_ZEROHOUR
32+
"Zero Hour install path from registry")
3133

3234
# Check the Steam registry path
33-
if(NOT RTS_INSTALL_PREFIX_ZEROHOUR OR "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry")
34-
get_filename_component(RTS_INSTALL_PREFIX_ZEROHOUR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\ZeroHour;installPath]" ABSOLUTE CACHE)
35-
endif()
35+
fetch_registry_value(
36+
"HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/ZeroHour"
37+
"installPath"
38+
RTS_INSTALL_PREFIX_ZEROHOUR
39+
"Zero Hour install path from registry")
3640
endif()
3741

38-
if(RTS_INSTALL_PREFIX_ZEROHOUR AND NOT "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry")
42+
if(RTS_INSTALL_PREFIX_ZEROHOUR)
3943
install(TARGETS z_generals RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}")
4044
install(FILES $<TARGET_PDB_FILE:z_generals> DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL)
4145

cmake/registry.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Helper macro for querying Windows registry values
2+
# Queries both 32-bit and 64-bit registry views automatically
3+
macro(fetch_registry_value registry_key registry_value output_var description)
4+
if(NOT ${output_var})
5+
cmake_host_system_information(RESULT _variable
6+
QUERY WINDOWS_REGISTRY
7+
"${registry_key}"
8+
VALUE "${registry_value}"
9+
VIEW 32_64)
10+
if(_variable)
11+
set(${output_var} "${_variable}" CACHE PATH "${description}")
12+
endif()
13+
endif()
14+
endmacro()
15+

0 commit comments

Comments
 (0)