From 70d892b38c105b1ce08b3d77ae526ebeccb5c672 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 22 Dec 2025 15:05:20 -0500 Subject: [PATCH] WIP: Conform GDCM to use CMAKE_*OUTPUT_DIRECTORY Add GDCM support for modern CMAKE_*_OUTPUT_DIRECTORY variables. Removes setting legacy CMake cache variables. Internlly GDCM still uses the legacy names. --- Modules/ThirdParty/GDCM/src/CMakeLists.txt | 4 -- .../ThirdParty/GDCM/src/gdcm/CMakeLists.txt | 41 ++++++++++++++----- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/Modules/ThirdParty/GDCM/src/CMakeLists.txt b/Modules/ThirdParty/GDCM/src/CMakeLists.txt index 9b99de751a3..3bae00a5447 100644 --- a/Modules/ThirdParty/GDCM/src/CMakeLists.txt +++ b/Modules/ThirdParty/GDCM/src/CMakeLists.txt @@ -63,10 +63,6 @@ set(GDCMV2_0_COMPATIBILITY ON CACHE INTERNAL "") set(GDCM_WRITE_ODD_LENGTH OFF CACHE INTERNAL "Do not change") set(GDCM_DEBUG_POSTFIX "" CACHE INTERNAL "") -# GDCM uses these to refer to executable and library locations -set(EXECUTABLE_OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) -set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) - add_subdirectory(gdcm) foreach(lib diff --git a/Modules/ThirdParty/GDCM/src/gdcm/CMakeLists.txt b/Modules/ThirdParty/GDCM/src/gdcm/CMakeLists.txt index 09f298a08f5..d828b51a7c0 100644 --- a/Modules/ThirdParty/GDCM/src/gdcm/CMakeLists.txt +++ b/Modules/ThirdParty/GDCM/src/gdcm/CMakeLists.txt @@ -118,20 +118,39 @@ if(BUILD_SHARED_LIBS) endif() #----------------------------------------------------------------------------- -if(NOT EXECUTABLE_OUTPUT_PATH) - set(EXECUTABLE_OUTPUT_PATH ${GDCM_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.") - mark_as_advanced(EXECUTABLE_OUTPUT_PATH) +# Compatibility with older usage of EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH. +# This should be removed in the future. +if(EXECUTABLE_OUTPUT_PATH) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) + message(WARNING "EXECUTABLE_OUTPUT_PATH is deprecated. Use CMAKE_RUNTIME_OUTPUT_DIRECTORY instead.") endif() -if(NOT LIBRARY_OUTPUT_PATH) - set(LIBRARY_OUTPUT_PATH ${GDCM_BINARY_DIR}/bin CACHE PATH "Single output directory for building all libraries.") - mark_as_advanced(LIBRARY_OUTPUT_PATH) +if(LIBRARY_OUTPUT_PATH) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}) + message(WARNING "LIBRARY_OUTPUT_PATH is deprecated. Use CMAKE_LIBRARY_OUTPUT_DIRECTORY and CMAKE_ARCHIVE_OUTPUT_DIRECTORY instead.") endif() -# TODO: The following should be used for CMake 3 and beyond, -# EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH are deprecated -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}) +if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +endif() +if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +endif() +if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) +endif() + +# Set for legacy internal usage of EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH +if (NOT EXECUTABLE_OUTPUT_PATH) + set(EXECUTABLE_OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +endif() +if (NOT LIBRARY_OUTPUT_PATH) + if (BUILD_SHARED_LIBS) + set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + else() + set(LIBRARY_OUTPUT_PATH ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}) + endif() +endif() #----------------------------------------------------------------------------- # Adding GDCM_DATA_ROOT