From 7ba2742a767be713cc360ac403286db9d60e04fb Mon Sep 17 00:00:00 2001 From: bobtista Date: Mon, 24 Nov 2025 13:05:48 -0500 Subject: [PATCH] Fix CMake install path to use nested EA game directory structure --- Generals/CMakeLists.txt | 48 ++++++++++++++++++++++++------------ GeneralsMD/CMakeLists.txt | 52 +++++++++++++++++++++++++-------------- 2 files changed, 66 insertions(+), 34 deletions(-) diff --git a/Generals/CMakeLists.txt b/Generals/CMakeLists.txt index 964cb375bf..05f024a168 100644 --- a/Generals/CMakeLists.txt +++ b/Generals/CMakeLists.txt @@ -32,42 +32,58 @@ if("${CMAKE_HOST_SYSTEM}" MATCHES "Windows" AND "${CMAKE_SYSTEM}" MATCHES "Windo endif() if(RTS_INSTALL_PREFIX_GENERALS AND NOT "${RTS_INSTALL_PREFIX_GENERALS}" STREQUAL "/registry") - install(TARGETS g_generals RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + get_filename_component(INSTALL_BASENAME "${RTS_INSTALL_PREFIX_GENERALS}" NAME) + get_filename_component(INSTALL_PARENT "${RTS_INSTALL_PREFIX_GENERALS}" DIRECTORY) + get_filename_component(INSTALL_PARENT_BASENAME "${INSTALL_PARENT}" NAME) + + if("${INSTALL_BASENAME}" STREQUAL "Command and Conquer Generals" AND + "${INSTALL_PARENT_BASENAME}" STREQUAL "Command and Conquer Generals Zero Hour") + set(RTS_INSTALL_PATH "${RTS_INSTALL_PREFIX_GENERALS}") + else() + set(NESTED_PATH "${RTS_INSTALL_PREFIX_GENERALS}/Command and Conquer Generals") + if(EXISTS "${NESTED_PATH}") + set(RTS_INSTALL_PATH "${NESTED_PATH}") + else() + set(RTS_INSTALL_PATH "${RTS_INSTALL_PREFIX_GENERALS}") + endif() + endif() + + install(TARGETS g_generals RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) if(TARGET g_worldbuilder) - install(TARGETS g_worldbuilder RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + install(TARGETS g_worldbuilder RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET g_particleeditor) - install(TARGETS g_particleeditor RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + install(TARGETS g_particleeditor RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET g_debugwindow) - install(TARGETS g_debugwindow RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + install(TARGETS g_debugwindow RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET g_guiedit) - install(TARGETS g_guiedit RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + install(TARGETS g_guiedit RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET g_imagepacker) - install(TARGETS g_imagepacker RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + install(TARGETS g_imagepacker RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET g_mapcachebuilder) - install(TARGETS g_mapcachebuilder RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + install(TARGETS g_mapcachebuilder RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET g_w3dview) - install(TARGETS g_w3dview RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_GENERALS}" OPTIONAL) + install(TARGETS g_w3dview RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() else() message(STATUS "Generals install path not found. Registry keys for 'Generals' not found. " diff --git a/GeneralsMD/CMakeLists.txt b/GeneralsMD/CMakeLists.txt index 9c21d48887..4b879701f0 100644 --- a/GeneralsMD/CMakeLists.txt +++ b/GeneralsMD/CMakeLists.txt @@ -31,47 +31,63 @@ if("${CMAKE_HOST_SYSTEM}" MATCHES "Windows" AND "${CMAKE_SYSTEM}" MATCHES "Windo endif() if(RTS_INSTALL_PREFIX_ZEROHOUR AND NOT "${RTS_INSTALL_PREFIX_ZEROHOUR}" STREQUAL "/registry") - install(TARGETS z_generals RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + get_filename_component(INSTALL_BASENAME "${RTS_INSTALL_PREFIX_ZEROHOUR}" NAME) + get_filename_component(INSTALL_PARENT "${RTS_INSTALL_PREFIX_ZEROHOUR}" DIRECTORY) + get_filename_component(INSTALL_PARENT_BASENAME "${INSTALL_PARENT}" NAME) + + if("${INSTALL_BASENAME}" STREQUAL "Command and Conquer Generals Zero Hour" AND + "${INSTALL_PARENT_BASENAME}" STREQUAL "Command and Conquer Generals Zero Hour") + set(RTS_INSTALL_PATH "${RTS_INSTALL_PREFIX_ZEROHOUR}") + else() + set(NESTED_PATH "${RTS_INSTALL_PREFIX_ZEROHOUR}/Command and Conquer Generals Zero Hour") + if(EXISTS "${NESTED_PATH}") + set(RTS_INSTALL_PATH "${NESTED_PATH}") + else() + set(RTS_INSTALL_PATH "${RTS_INSTALL_PREFIX_ZEROHOUR}") + endif() + endif() + + install(TARGETS z_generals RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) if(TARGET z_worldbuilder) - install(TARGETS z_worldbuilder RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_worldbuilder RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET z_particleeditor) - install(TARGETS z_particleeditor RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_particleeditor RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET z_debugwindow) - install(TARGETS z_debugwindow RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_debugwindow RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET z_guiedit) - install(TARGETS z_guiedit RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_guiedit RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET z_imagepacker) - install(TARGETS z_imagepacker RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_imagepacker RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET z_mapcachebuilder) - install(TARGETS z_mapcachebuilder RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_mapcachebuilder RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET z_w3dview) - install(TARGETS z_w3dview RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_w3dview RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() if(TARGET z_wdump) - install(TARGETS z_wdump RUNTIME DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}") - install(FILES $ DESTINATION "${RTS_INSTALL_PREFIX_ZEROHOUR}" OPTIONAL) + install(TARGETS z_wdump RUNTIME DESTINATION "${RTS_INSTALL_PATH}") + install(FILES $ DESTINATION "${RTS_INSTALL_PATH}" OPTIONAL) endif() else() message(STATUS "Zero Hour install path not found. Registry keys for 'Command and Conquer Generals Zero Hour' not found. "