diff --git a/Generals/CMakeLists.txt b/Generals/CMakeLists.txt index 837065acba..78f920244e 100644 --- a/Generals/CMakeLists.txt +++ b/Generals/CMakeLists.txt @@ -15,28 +15,31 @@ add_subdirectory(Code) # If we are building on windows for windows, try and get the game install path from the registry. if("${CMAKE_HOST_SYSTEM}" MATCHES "Windows" AND "${CMAKE_SYSTEM}" MATCHES "Windows") - # Check the CD registry path - if(NOT RTS_INSTALL_PREFIX_GENERALS) - get_filename_component(RTS_INSTALL_PREFIX_GENERALS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Generals;InstallPath]" ABSOLUTE CACHE) - endif() + include(${CMAKE_SOURCE_DIR}/cmake/registry.cmake) - # Check the WOW6432Node registry path (for EA App on 64-bit Windows) - if(NOT RTS_INSTALL_PREFIX_GENERALS OR "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry") - get_filename_component(RTS_INSTALL_PREFIX_GENERALS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Electronic Arts\\EA Games\\Generals;InstallPath]" ABSOLUTE CACHE) - endif() + # Check the EA App/CD registry path + fetch_registry_value( + "HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Generals" + "InstallPath" + RTS_INSTALL_PREFIX_GENERALS + "Generals install path from registry") # Check the "First Decade" registry path - if(NOT RTS_INSTALL_PREFIX_GENERALS OR "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry") - 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) - endif() + fetch_registry_value( + "HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Command and Conquer The First Decade" + "gr_folder" + RTS_INSTALL_PREFIX_GENERALS + "Generals install path from registry") # Check the Steam registry path - if(NOT RTS_INSTALL_PREFIX_GENERALS OR "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry") - get_filename_component(RTS_INSTALL_PREFIX_GENERALS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Generals;installPath]" ABSOLUTE CACHE) - endif() + fetch_registry_value( + "HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Generals" + "installPath" + RTS_INSTALL_PREFIX_GENERALS + "Generals install path from registry") endif() -if(RTS_INSTALL_PREFIX_GENERALS AND NOT "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry") +if(RTS_INSTALL_PREFIX_GENERALS) install(TARGETS g_generals RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) diff --git a/GeneralsMD/CMakeLists.txt b/GeneralsMD/CMakeLists.txt index 830d0df785..2a9a65fb78 100644 --- a/GeneralsMD/CMakeLists.txt +++ b/GeneralsMD/CMakeLists.txt @@ -15,27 +15,31 @@ add_subdirectory(Code) # If we are building on windows for windows, try and get the game install path from the registry. if("${CMAKE_HOST_SYSTEM}" MATCHES "Windows" AND "${CMAKE_SYSTEM}" MATCHES "Windows") - if(NOT RTS_INSTALL_PREFIX_ZEROHOUR) - get_filename_component(RTS_INSTALL_PREFIX_ZEROHOUR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\Command and Conquer Generals Zero Hour;InstallPath]" ABSOLUTE CACHE) - endif() + include(${CMAKE_SOURCE_DIR}/cmake/registry.cmake) - # Check the WOW6432Node registry path (for EA App on 64-bit Windows) - if(NOT RTS_INSTALL_PREFIX_ZEROHOUR OR "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry") - 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) - endif() + # Check the EA App/CD registry path + fetch_registry_value( + "HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Command and Conquer Generals Zero Hour" + "InstallPath" + RTS_INSTALL_PREFIX_ZEROHOUR + "Zero Hour install path from registry") # Check the "First Decade" registry path - if(NOT RTS_INSTALL_PREFIX_ZEROHOUR OR "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry") - 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) - endif() + fetch_registry_value( + "HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/Command and Conquer The First Decade" + "zh_folder" + RTS_INSTALL_PREFIX_ZEROHOUR + "Zero Hour install path from registry") # Check the Steam registry path - if(NOT RTS_INSTALL_PREFIX_ZEROHOUR OR "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry") - get_filename_component(RTS_INSTALL_PREFIX_ZEROHOUR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\EA Games\\ZeroHour;installPath]" ABSOLUTE CACHE) - endif() + fetch_registry_value( + "HKEY_LOCAL_MACHINE/SOFTWARE/Electronic Arts/EA Games/ZeroHour" + "installPath" + RTS_INSTALL_PREFIX_ZEROHOUR + "Zero Hour install path from registry") endif() -if(RTS_INSTALL_PREFIX_ZEROHOUR AND NOT "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry") +if(RTS_INSTALL_PREFIX_ZEROHOUR) install(TARGETS z_generals RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) diff --git a/cmake/registry.cmake b/cmake/registry.cmake new file mode 100644 index 0000000000..6f8caae688 --- /dev/null +++ b/cmake/registry.cmake @@ -0,0 +1,15 @@ +# Helper macro for querying Windows registry values +# Queries both 32-bit and 64-bit registry views automatically +macro(fetch_registry_value registry_key registry_value output_var description) + if(NOT ${output_var}) + cmake_host_system_information(RESULT _variable + QUERY WINDOWS_REGISTRY + "${registry_key}" + VALUE "${registry_value}" + VIEW 32_64) + if(_variable) + set(${output_var} "${_variable}" CACHE PATH "${description}") + endif() + endif() +endmacro() +