From 76d0fc693e61e0c43ff20e7cf0397f73e33d7e18 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 29 Dec 2025 17:36:39 -0500 Subject: [PATCH] ENH: Conform GDCM to support CMAKE_*OUTPUT_DIRECTORY Recommend users using modern CMAKE_*_OUTPUT_DIRECTORY variables to configure paths. Prioritize legacy variables only if set by the user. Removes setting legacy CMake variable such as EXECUTE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH as cache variables. Add support for modern CMAKE_*_OUTPUT_DIRECTORY variables, if they are set by the user. --- CMakeLists.txt | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0018264a7..31465e5a0 100644 --- a/CMakeLists.txt +++ b/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