From 11b8d032e34964d799ed39d6534d6f4be569dd65 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sat, 19 Sep 2026 14:49:08 -0500 Subject: [PATCH 1/6] feat: use CMake's GnuInstallDir --- CMakeLists.txt | 12 ++++---- cmake/AddJanaLibrary.cmake | 8 +++--- cmake/AddJanaPlugin.cmake | 8 +++--- cmake/AddJanaTest.cmake | 2 +- cmake/MakeConfig.cmake | 14 +++++----- cmake/MakeJVersionH.cmake | 2 +- cmake/MakeJanaThis.cmake | 6 ++-- scripts/jana-generate.py | 8 ++++-- .../misc/PodioDatamodel/CMakeLists.txt | 10 +++---- .../misc/RootDatamodelExample/CMakeLists.txt | 2 +- .../misc/SubeventCUDAExample/CMakeLists.txt | 2 +- .../misc/SubeventExample/CMakeLists.txt | 2 +- .../01_datamodel/CMakeLists.txt | 4 +-- .../19_wrapper_program/CMakeLists.txt | 2 +- .../01_datamodel/CMakeLists.txt | 10 +++---- src/external/catch2/CMakeLists.txt | 4 +-- src/external/tomlplusplus/CMakeLists.txt | 4 +-- src/libraries/JANA/CMakeLists.txt | 28 +++++++++---------- src/plugins/janaview/CMakeLists.txt | 4 +-- src/programs/jana/CMakeLists.txt | 2 +- 20 files changed, 69 insertions(+), 65 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3aead24a6..936c99cce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ cmake_policy(SET CMP0074 NEW) # find_package() uses _ROOT implicit project(jana2 VERSION 2026.03.01) +include(GNUInstallDirs) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Enable -fPIC for all targets # Default the C++ standard to C++17, and validate that they provided one we can use @@ -164,14 +166,14 @@ if (USE_PERFETTO) add_library(perfetto_sdk STATIC ${PERFETTO_SDK_DIR}/perfetto.cc) target_include_directories(perfetto_sdk PUBLIC $ - $ + $ ) target_compile_options(perfetto_sdk PRIVATE $<$,$,$>: -Wno-sign-compare -Wno-unused-parameter -Wno-missing-field-initializers> ) - install(TARGETS perfetto_sdk EXPORT jana2_targets DESTINATION lib) - install(FILES ${PERFETTO_SDK_DIR}/perfetto.h DESTINATION include/perfetto) + install(TARGETS perfetto_sdk EXPORT jana2_targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(FILES ${PERFETTO_SDK_DIR}/perfetto.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/perfetto) set(JANA2_HAVE_PERFETTO 1) else() set(JANA2_HAVE_PERFETTO 0) @@ -278,10 +280,10 @@ endif() #--------------------------------------------------------------------------------------- -install(DIRECTORY scripts/ DESTINATION bin FILES_MATCHING PATTERN "jana-*.py" +install(DIRECTORY scripts/ DESTINATION ${CMAKE_INSTALL_BINDIR} FILES_MATCHING PATTERN "jana-*.py" PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE) - install(FILES "scripts/jana-status.sh" RENAME "jana-status" DESTINATION "bin" + install(FILES "scripts/jana-status.sh" RENAME "jana-status" DESTINATION ${CMAKE_INSTALL_BINDIR} PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_READ WORLD_EXECUTE) include(${CMAKE_SOURCE_DIR}/cmake/MakeConfig.cmake) diff --git a/cmake/AddJanaLibrary.cmake b/cmake/AddJanaLibrary.cmake index e2667903c..1307f494a 100644 --- a/cmake/AddJanaLibrary.cmake +++ b/cmake/AddJanaLibrary.cmake @@ -78,15 +78,15 @@ macro(add_jana_library library_name) target_include_directories(${library_name} PUBLIC $ - $ + $ ) endif() # Install target install(TARGETS ${library_name} EXPORT ${LIBRARY_EXPORT} - PUBLIC_HEADER DESTINATION include/${INSTALL_NAMESPACE}/${CWD_NAME} - LIBRARY DESTINATION lib + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${INSTALL_NAMESPACE}/${CWD_NAME} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) # Handle tests @@ -99,7 +99,7 @@ macro(add_jana_library library_name) INSTALL_RPATH_USE_LINK_PATH TRUE INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) - #install(TARGETS ${library_name}_tests RUNTIME DESTINATION bin) + #install(TARGETS ${library_name}_tests RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) add_test(NAME ${library_name}_tests COMMAND ${library_name}_tests) set_tests_properties(${library_name}_tests PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=$:$:$ENV{LD_LIBRARY_PATH}" diff --git a/cmake/AddJanaPlugin.cmake b/cmake/AddJanaPlugin.cmake index f10e26448..79d07129d 100644 --- a/cmake/AddJanaPlugin.cmake +++ b/cmake/AddJanaPlugin.cmake @@ -83,15 +83,15 @@ macro(add_jana_plugin plugin_name) target_include_directories(${plugin_name} PUBLIC $ - $ + $ ) endif() # Install target install(TARGETS ${plugin_name} EXPORT ${PLUGIN_EXPORT} - PUBLIC_HEADER DESTINATION include/${INSTALL_NAMESPACE}/plugins/${plugin_name} - LIBRARY DESTINATION lib/${INSTALL_NAMESPACE}/plugins + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${INSTALL_NAMESPACE}/plugins/${plugin_name} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${INSTALL_NAMESPACE}/plugins ) # Handle tests @@ -104,7 +104,7 @@ macro(add_jana_plugin plugin_name) INSTALL_RPATH_USE_LINK_PATH TRUE INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib/${INSTALL_NAMESPACE}/plugins" ) - #install(TARGETS ${plugin_name}-tests RUNTIME DESTINATION bin) + #install(TARGETS ${plugin_name}-tests RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) add_test(NAME ${plugin_name}-tests COMMAND ${plugin_name}-tests) set_tests_properties(${plugin_name}-tests PROPERTIES ENVIRONMENT "JANA_PLUGIN_PATH=${CMAKE_BINARY_DIR}/lib/JANA/plugins;LD_LIBRARY_PATH=$:$ENV{LD_LIBRARY_PATH}" diff --git a/cmake/AddJanaTest.cmake b/cmake/AddJanaTest.cmake index c62b646a8..0f83a6df5 100644 --- a/cmake/AddJanaTest.cmake +++ b/cmake/AddJanaTest.cmake @@ -33,7 +33,7 @@ macro(add_jana_test test_target_name) INSTALL_RPATH_USE_LINK_PATH TRUE INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib/JANA/plugins") - install(TARGETS ${test_target_name} RUNTIME DESTINATION bin) + install(TARGETS ${test_target_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) add_test(NAME ${test_target_name} COMMAND ${test_target_name}) set_tests_properties(${test_target_name} PROPERTIES diff --git a/cmake/MakeConfig.cmake b/cmake/MakeConfig.cmake index aba0927c9..8a5f2efef 100644 --- a/cmake/MakeConfig.cmake +++ b/cmake/MakeConfig.cmake @@ -4,7 +4,7 @@ include(CMakePackageConfigHelpers) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/JANAConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake/JANAConfig.cmake" - INSTALL_DESTINATION "lib/JANA/cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/JANA/cmake" ) write_basic_package_version_file( @@ -16,20 +16,20 @@ write_basic_package_version_file( install(EXPORT jana2_targets FILE "JANATargets.cmake" NAMESPACE JANA:: - DESTINATION "lib/JANA/cmake") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/JANA/cmake") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/JANAConfig.cmake" - DESTINATION "lib/JANA/cmake") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/JANA/cmake") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/JANAConfigVersion.cmake" - DESTINATION "lib/JANA/cmake") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/JANA/cmake") install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/AddJanaPlugin.cmake" - DESTINATION "lib/JANA/cmake") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/JANA/cmake") install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/AddJanaLibrary.cmake" - DESTINATION "lib/JANA/cmake") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/JANA/cmake") install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/AddJanaTest.cmake" - DESTINATION "lib/JANA/cmake") + DESTINATION "${CMAKE_INSTALL_LIBDIR}/JANA/cmake") diff --git a/cmake/MakeJVersionH.cmake b/cmake/MakeJVersionH.cmake index fcde1c652..f931f282c 100644 --- a/cmake/MakeJVersionH.cmake +++ b/cmake/MakeJVersionH.cmake @@ -74,4 +74,4 @@ endif() message(STATUS "Generating JVersion.h") configure_file(src/libraries/JANA/JVersion.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/libraries/JANA/JVersion.h @ONLY) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/src/libraries/JANA/JVersion.h DESTINATION include/JANA) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/src/libraries/JANA/JVersion.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA) diff --git a/cmake/MakeJanaThis.cmake b/cmake/MakeJanaThis.cmake index 9335c34a9..809602508 100644 --- a/cmake/MakeJanaThis.cmake +++ b/cmake/MakeJanaThis.cmake @@ -148,6 +148,6 @@ configure_file(scripts/jana-config.in jana-config @ONLY) configure_file(scripts/jana-this.sh.in jana-this.sh @ONLY) configure_file(scripts/jana-this.csh.in jana-this.csh @ONLY) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jana-config DESTINATION bin) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jana-this.sh DESTINATION bin) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jana-this.csh DESTINATION bin) +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jana-config DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jana-this.sh DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jana-this.csh DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/scripts/jana-generate.py b/scripts/jana-generate.py index 3aca72fea..7a701f239 100755 --- a/scripts/jana-generate.py +++ b/scripts/jana-generate.py @@ -327,6 +327,8 @@ class {name} : public JEventSource {{ cmake_minimum_required(VERSION 3.9) project({name}_project) +include(GnuInstallDirs) + if(NOT "${{CMAKE_CXX_STANDARD}}") set(CMAKE_CXX_STANDARD 17) endif() @@ -384,7 +386,7 @@ class {name} : public JEventSource {{ install(TARGETS {name}_plugin DESTINATION plugins) file(GLOB my_headers "*.h*") -install(FILES ${{my_headers}} DESTINATION include/{name}) +install(FILES ${{my_headers}} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/{name}) # For root dictionaries file(GLOB my_pcms "${{CMAKE_CURRENT_BINARY_DIR}}/*.pcm") @@ -424,7 +426,7 @@ class {name} : public JEventSource {{ install(TARGETS {name}_plugin DESTINATION plugins) file(GLOB my_headers "*.h*") -install(FILES ${{my_headers}} DESTINATION include/{name}) +install(FILES ${{my_headers}} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/{name}) # For root dictionaries file(GLOB my_pcms "${{CMAKE_CURRENT_BINARY_DIR}}/*.pcm") @@ -452,7 +454,7 @@ class {name} : public JEventSource {{ target_link_libraries({name}_plugin_tests {name}_plugin) target_link_libraries({name}_plugin_tests ${{JANA_LIBRARY}}) -install(TARGETS {name}_plugin_tests DESTINATION bin) +install(TARGETS {name}_plugin_tests DESTINATION ${CMAKE_INSTALL_BINDIR}) """ diff --git a/src/examples/misc/PodioDatamodel/CMakeLists.txt b/src/examples/misc/PodioDatamodel/CMakeLists.txt index eb6bab7cf..def3b065e 100644 --- a/src/examples/misc/PodioDatamodel/CMakeLists.txt +++ b/src/examples/misc/PodioDatamodel/CMakeLists.txt @@ -14,17 +14,17 @@ if (USE_PODIO) install(TARGETS PodioDatamodel EXPORT jana2_targets - LIBRARY DESTINATION lib - PUBLIC_HEADER DESTINATION include/JANA/examples/PodioDatamodel + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/examples/PodioDatamodel ) install(TARGETS PodioDatamodelDict EXPORT jana2_targets - DESTINATION lib + DESTINATION ${CMAKE_INSTALL_LIBDIR} ) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/PodioDatamodelDictDict.rootmap DESTINATION lib) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libPodioDatamodelDict_rdict.pcm DESTINATION lib) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/PodioDatamodelDictDict.rootmap DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libPodioDatamodelDict_rdict.pcm DESTINATION ${CMAKE_INSTALL_LIBDIR}) else() message(STATUS "Skipping examples/PodioDatamodel because USE_PODIO=Off") diff --git a/src/examples/misc/RootDatamodelExample/CMakeLists.txt b/src/examples/misc/RootDatamodelExample/CMakeLists.txt index b69436391..4d64794c4 100644 --- a/src/examples/misc/RootDatamodelExample/CMakeLists.txt +++ b/src/examples/misc/RootDatamodelExample/CMakeLists.txt @@ -41,7 +41,7 @@ if(${USE_ROOT}) target_link_libraries(RootDatamodelExample PUBLIC ROOT::Core) message(STATUS "Installing ROOT PCM files: ${my_pcms}") - install(FILES ${my_pcms} DESTINATION lib/JANA/plugins) + install(FILES ${my_pcms} DESTINATION ${CMAKE_INSTALL_LIBDIR}/JANA/plugins) add_test(NAME jana-example-rootdatamodel-tests COMMAND $ -Pplugins=RootDatamodelExample -Pjana:nevents=10) diff --git a/src/examples/misc/SubeventCUDAExample/CMakeLists.txt b/src/examples/misc/SubeventCUDAExample/CMakeLists.txt index c3ee3f7e4..7dda76b8f 100644 --- a/src/examples/misc/SubeventCUDAExample/CMakeLists.txt +++ b/src/examples/misc/SubeventCUDAExample/CMakeLists.txt @@ -16,7 +16,7 @@ if (USE_CUDA) OUTPUT_NAME "SubeventCUDAExample" CUDA_ARCHITECTURES "75;80") - install(TARGETS SubeventCUDAExample DESTINATION bin) + install(TARGETS SubeventCUDAExample DESTINATION ${CMAKE_INSTALL_BINDIR}) add_test(NAME jana-example-subevent-cuda-tests COMMAND SubeventCUDAExample) diff --git a/src/examples/misc/SubeventExample/CMakeLists.txt b/src/examples/misc/SubeventExample/CMakeLists.txt index 351a260f9..a1d45e54c 100644 --- a/src/examples/misc/SubeventExample/CMakeLists.txt +++ b/src/examples/misc/SubeventExample/CMakeLists.txt @@ -3,7 +3,7 @@ add_executable(SubeventExample SubeventExample.cc) target_link_libraries(SubeventExample jana2) set_target_properties(SubeventExample PROPERTIES PREFIX "" OUTPUT_NAME "SubeventExample") -install(TARGETS SubeventExample DESTINATION bin) +install(TARGETS SubeventExample DESTINATION ${CMAKE_INSTALL_BINDIR}) add_test(NAME jana-example-subevent-tests COMMAND SubeventExample) diff --git a/src/examples/tutorial_with_lightweight_datamodel/01_datamodel/CMakeLists.txt b/src/examples/tutorial_with_lightweight_datamodel/01_datamodel/CMakeLists.txt index 967de9812..4716c8462 100644 --- a/src/examples/tutorial_with_lightweight_datamodel/01_datamodel/CMakeLists.txt +++ b/src/examples/tutorial_with_lightweight_datamodel/01_datamodel/CMakeLists.txt @@ -3,13 +3,13 @@ add_library(lw_datamodel INTERFACE) target_include_directories(lw_datamodel INTERFACE $ - $ + $ ) file(GLOB lw_datamodel_headers "*.h") install(FILES ${lw_datamodel_headers} - DESTINATION include/jana2_tutorial_lightweight/01_datamodel) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/jana2_tutorial_lightweight/01_datamodel) install(TARGETS lw_datamodel EXPORT jana2_targets) diff --git a/src/examples/tutorial_with_lightweight_datamodel/19_wrapper_program/CMakeLists.txt b/src/examples/tutorial_with_lightweight_datamodel/19_wrapper_program/CMakeLists.txt index ac74de407..b89c48fdf 100644 --- a/src/examples/tutorial_with_lightweight_datamodel/19_wrapper_program/CMakeLists.txt +++ b/src/examples/tutorial_with_lightweight_datamodel/19_wrapper_program/CMakeLists.txt @@ -9,5 +9,5 @@ target_link_libraries(lw-tutorial-recon PRIVATE ) # Note that if you are outside the JANA2 source tree, you need to target_link_libraries against JANA::jana2_shared_lib instead -install(TARGETS lw-tutorial-recon DESTINATION bin) +install(TARGETS lw-tutorial-recon DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/examples/tutorial_with_podio_datamodel/01_datamodel/CMakeLists.txt b/src/examples/tutorial_with_podio_datamodel/01_datamodel/CMakeLists.txt index 75a652376..69afc1159 100644 --- a/src/examples/tutorial_with_podio_datamodel/01_datamodel/CMakeLists.txt +++ b/src/examples/tutorial_with_podio_datamodel/01_datamodel/CMakeLists.txt @@ -13,15 +13,15 @@ PODIO_ADD_ROOT_IO_DICT(jana2_tutorial_podio_datamodel_dict jana2_tutorial_podio_ install(TARGETS jana2_tutorial_podio_datamodel EXPORT jana2_targets - LIBRARY DESTINATION lib - PUBLIC_HEADER DESTINATION include/jana2_tutorial_podio_datamodel + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/jana2_tutorial_podio_datamodel ) install(TARGETS jana2_tutorial_podio_datamodel_dict EXPORT jana2_targets - DESTINATION lib + DESTINATION ${CMAKE_INSTALL_LIBDIR} ) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jana2_tutorial_podio_datamodel_dictDict.rootmap DESTINATION lib) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libjana2_tutorial_podio_datamodel_dict_rdict.pcm DESTINATION lib) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jana2_tutorial_podio_datamodel_dictDict.rootmap DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libjana2_tutorial_podio_datamodel_dict_rdict.pcm DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/src/external/catch2/CMakeLists.txt b/src/external/catch2/CMakeLists.txt index a289c6b51..7c5af4fff 100644 --- a/src/external/catch2/CMakeLists.txt +++ b/src/external/catch2/CMakeLists.txt @@ -3,13 +3,13 @@ add_library(VendoredCatch2 INTERFACE) target_include_directories(VendoredCatch2 INTERFACE $ - $ + $ ) install(TARGETS VendoredCatch2 EXPORT jana2_targets) install(FILES catch.hpp - DESTINATION include/JANA/external/catch2) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/external/catch2) diff --git a/src/external/tomlplusplus/CMakeLists.txt b/src/external/tomlplusplus/CMakeLists.txt index d8baf41f1..4a0deb630 100644 --- a/src/external/tomlplusplus/CMakeLists.txt +++ b/src/external/tomlplusplus/CMakeLists.txt @@ -3,11 +3,11 @@ add_library(VendoredTomlPlusPlus INTERFACE) target_include_directories(VendoredTomlPlusPlus INTERFACE $ - $ + $ ) install(FILES toml.hpp - DESTINATION include/JANA/external/tomlplusplus) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/external/tomlplusplus) install(TARGETS VendoredTomlPlusPlus EXPORT jana2_targets) diff --git a/src/libraries/JANA/CMakeLists.txt b/src/libraries/JANA/CMakeLists.txt index e2e5a9fec..db4a64872 100644 --- a/src/libraries/JANA/CMakeLists.txt +++ b/src/libraries/JANA/CMakeLists.txt @@ -93,7 +93,7 @@ endif() add_library(jana2_static_lib STATIC $ $) set_target_properties(jana2_static_lib PROPERTIES PREFIX "lib" OUTPUT_NAME "JANA") -target_include_directories(jana2_static_lib PUBLIC $) +target_include_directories(jana2_static_lib PUBLIC $) target_link_libraries(jana2_static_lib PUBLIC ${CMAKE_DL_LIBS} Threads::Threads) target_link_libraries(jana2_static_lib PUBLIC VendoredTomlPlusPlus) @@ -106,14 +106,14 @@ if (${USE_PODIO}) elseif (${USE_ROOT}) target_link_libraries(jana2_static_lib PUBLIC ROOT::Core) endif() -install(TARGETS jana2_static_lib EXPORT jana2_targets DESTINATION lib) +install(TARGETS jana2_static_lib EXPORT jana2_targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) # Build shared library add_library(jana2_shared_lib SHARED $ $) set_target_properties(jana2_shared_lib PROPERTIES PREFIX "lib" OUTPUT_NAME "JANA") -target_include_directories(jana2_shared_lib PUBLIC $) +target_include_directories(jana2_shared_lib PUBLIC $) target_link_libraries(jana2_shared_lib PUBLIC ${CMAKE_DL_LIBS} Threads::Threads) target_link_libraries(jana2_shared_lib PUBLIC VendoredTomlPlusPlus) @@ -127,7 +127,7 @@ elseif (${USE_ROOT}) target_link_libraries(jana2_shared_lib PUBLIC ROOT::Core) endif() -install(TARGETS jana2_shared_lib EXPORT jana2_targets DESTINATION lib) +install(TARGETS jana2_shared_lib EXPORT jana2_targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) set(INSTALL_RPATH_USE_LINK_PATH True) @@ -144,18 +144,18 @@ file(GLOB jana_cli_headers "CLI/*.h*") file(GLOB jana_component_headers "Components/*.h*") file(GLOB jana_topology_headers "Topology/*.h*") -install(FILES ${jana_headers} DESTINATION include/JANA) -install(FILES ${jana_engine_headers} DESTINATION include/JANA/Engine) -install(FILES ${jana_services_headers} DESTINATION include/JANA/Services) -install(FILES ${jana_utils_headers} DESTINATION include/JANA/Utils) -install(FILES ${jana_calibs_headers} DESTINATION include/JANA/Calibrations) -install(FILES ${jana_geometry_headers} DESTINATION include/JANA/Geometry) -install(FILES ${jana_cli_headers} DESTINATION include/JANA/CLI) -install(FILES ${jana_component_headers} DESTINATION include/JANA/Components) -install(FILES ${jana_topology_headers} DESTINATION include/JANA/Topology) +install(FILES ${jana_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA) +install(FILES ${jana_engine_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Engine) +install(FILES ${jana_services_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Services) +install(FILES ${jana_utils_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Utils) +install(FILES ${jana_calibs_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Calibrations) +install(FILES ${jana_geometry_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Geometry) +install(FILES ${jana_cli_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/CLI) +install(FILES ${jana_component_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Components) +install(FILES ${jana_topology_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Topology) #if (${USE_PODIO}) -# install(FILES ${jana_podio_headers} DESTINATION include/JANA/Podio) +# install(FILES ${jana_podio_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/JANA/Podio) #endif() diff --git a/src/plugins/janaview/CMakeLists.txt b/src/plugins/janaview/CMakeLists.txt index 9bc7ae051..c2fdb1ec7 100644 --- a/src/plugins/janaview/CMakeLists.txt +++ b/src/plugins/janaview/CMakeLists.txt @@ -12,8 +12,8 @@ if(USE_ROOT) PUBLIC_HEADER ${JANAVIEW_HEADERS} ) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libjv_mainframe_rdict.pcm DESTINATION lib/JANA/plugins) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libjv_mainframe.rootmap DESTINATION lib/JANA/plugins) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libjv_mainframe_rdict.pcm DESTINATION ${CMAKE_INSTALL_LIBDIR}/JANA/plugins) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libjv_mainframe.rootmap DESTINATION ${CMAKE_INSTALL_LIBDIR}/JANA/plugins) else() diff --git a/src/programs/jana/CMakeLists.txt b/src/programs/jana/CMakeLists.txt index 9ed2f11ff..22f203901 100644 --- a/src/programs/jana/CMakeLists.txt +++ b/src/programs/jana/CMakeLists.txt @@ -5,5 +5,5 @@ add_executable(jana jana.cc ) find_package(Threads REQUIRED) target_link_libraries(jana jana2_shared_lib) target_link_options(jana PRIVATE -rdynamic) -install(TARGETS jana DESTINATION bin) +install(TARGETS jana DESTINATION ${CMAKE_INSTALL_BINDIR}) From 6d2b4137e66b01ac7adf24b09b18b19598f25a92 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sat, 19 Sep 2026 15:19:48 -0500 Subject: [PATCH 2/6] fix: use correct include directive for GNUInstallDirs Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- scripts/jana-generate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/jana-generate.py b/scripts/jana-generate.py index 7a701f239..472fd9e2d 100755 --- a/scripts/jana-generate.py +++ b/scripts/jana-generate.py @@ -327,7 +327,7 @@ class {name} : public JEventSource {{ cmake_minimum_required(VERSION 3.9) project({name}_project) -include(GnuInstallDirs) +include(GNUInstallDirs) if(NOT "${{CMAKE_CXX_STANDARD}}") set(CMAKE_CXX_STANDARD 17) From 0bdfcbd6a006c26dd22e60f3c8d814e284b3e006 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sat, 19 Sep 2026 15:26:26 -0500 Subject: [PATCH 3/6] fix: include GNUInstallDirs in modules installed for users --- cmake/AddJanaLibrary.cmake | 1 + cmake/AddJanaPlugin.cmake | 2 ++ cmake/AddJanaTest.cmake | 1 + 3 files changed, 4 insertions(+) diff --git a/cmake/AddJanaLibrary.cmake b/cmake/AddJanaLibrary.cmake index 1307f494a..c525dcebc 100644 --- a/cmake/AddJanaLibrary.cmake +++ b/cmake/AddJanaLibrary.cmake @@ -1,3 +1,4 @@ +include(GNUInstallDirs) macro(add_jana_library library_name) diff --git a/cmake/AddJanaPlugin.cmake b/cmake/AddJanaPlugin.cmake index 79d07129d..77484f070 100644 --- a/cmake/AddJanaPlugin.cmake +++ b/cmake/AddJanaPlugin.cmake @@ -1,4 +1,6 @@ +include(GNUInstallDirs) + macro(add_jana_plugin plugin_name) # Parse remaining arguments diff --git a/cmake/AddJanaTest.cmake b/cmake/AddJanaTest.cmake index 0f83a6df5..d473daf29 100644 --- a/cmake/AddJanaTest.cmake +++ b/cmake/AddJanaTest.cmake @@ -1,3 +1,4 @@ +include(GNUInstallDirs) macro(add_jana_test test_target_name) From 11af52f7cd86bb6bf0c1d04e174360f62ad5714b Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sun, 20 Sep 2026 12:14:28 -0500 Subject: [PATCH 4/6] fix: INSTALL_RPATH also needs to use GNU install dirs --- cmake/AddJanaLibrary.cmake | 4 ++-- cmake/AddJanaPlugin.cmake | 4 ++-- cmake/AddJanaTest.cmake | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/AddJanaLibrary.cmake b/cmake/AddJanaLibrary.cmake index c525dcebc..b815ccd27 100644 --- a/cmake/AddJanaLibrary.cmake +++ b/cmake/AddJanaLibrary.cmake @@ -62,7 +62,7 @@ macro(add_jana_library library_name) SKIP_BUILD_RPATH FALSE BUILD_WITH_INSTALL_RPATH FALSE INSTALL_RPATH_USE_LINK_PATH TRUE - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" + INSTALL_RPATH ${CMAKE_INSTALL_LIBDIR} ) target_link_libraries(${library_name} PUBLIC "${JANA_NAMESPACE}jana2_static_lib") @@ -98,7 +98,7 @@ macro(add_jana_library library_name) SKIP_BUILD_RPATH FALSE BUILD_WITH_INSTALL_RPATH FALSE INSTALL_RPATH_USE_LINK_PATH TRUE - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" + INSTALL_RPATH ${CMAKE_INSTALL_LIBDIR} ) #install(TARGETS ${library_name}_tests RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) add_test(NAME ${library_name}_tests COMMAND ${library_name}_tests) diff --git a/cmake/AddJanaPlugin.cmake b/cmake/AddJanaPlugin.cmake index 77484f070..72fc05f64 100644 --- a/cmake/AddJanaPlugin.cmake +++ b/cmake/AddJanaPlugin.cmake @@ -71,7 +71,7 @@ macro(add_jana_plugin plugin_name) SKIP_BUILD_RPATH FALSE BUILD_WITH_INSTALL_RPATH FALSE INSTALL_RPATH_USE_LINK_PATH TRUE - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib/${INSTALL_NAMESPACE}/plugins" + INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR};${CMAKE_INSTALL_LIBDIR}/${INSTALL_NAMESPACE}/plugins" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/JANA/plugins" ) @@ -104,7 +104,7 @@ macro(add_jana_plugin plugin_name) SKIP_BUILD_RPATH FALSE BUILD_WITH_INSTALL_RPATH FALSE INSTALL_RPATH_USE_LINK_PATH TRUE - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib/${INSTALL_NAMESPACE}/plugins" + INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR};${CMAKE_INSTALL_LIBDIR}/${INSTALL_NAMESPACE}/plugins" ) #install(TARGETS ${plugin_name}-tests RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) add_test(NAME ${plugin_name}-tests COMMAND ${plugin_name}-tests) diff --git a/cmake/AddJanaTest.cmake b/cmake/AddJanaTest.cmake index d473daf29..e3c56ffcf 100644 --- a/cmake/AddJanaTest.cmake +++ b/cmake/AddJanaTest.cmake @@ -32,7 +32,7 @@ macro(add_jana_test test_target_name) SKIP_BUILD_RPATH FALSE BUILD_WITH_INSTALL_RPATH FALSE INSTALL_RPATH_USE_LINK_PATH TRUE - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib/JANA/plugins") + INSTALL_RPATH "${CMAKE_INSTALL_LIBDIR};${CMAKE_INSTALL_LIBDIR}/JANA/plugins") install(TARGETS ${test_target_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) From 43b80f4d6b297e366858366e329f8d13d3a4425c Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sun, 20 Sep 2026 12:19:45 -0500 Subject: [PATCH 5/6] fix: replace JANA_INSTALL_DIR/lib with CMAKE_INSTALL_LIBDIR etc. --- scripts/jana-config.in | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/jana-config.in b/scripts/jana-config.in index f841f4fb7..eaa15b494 100755 --- a/scripts/jana-config.in +++ b/scripts/jana-config.in @@ -61,6 +61,8 @@ fi CMAKE_INSTALL_PREFIX="@CMAKE_INSTALL_PREFIX@" +CMAKE_INSTALL_LIBDIR="@CMAKE_INSTALL_LIBDIR@" +CMAKE_INSTALL_INCLUDEDIR="@CMAKE_INSTALL_INCLUDEDIR@" CMAKE_CXX_STANDARD="@CMAKE_CXX_STANDARD@" JANA_VERSION="@PROJECT_VERSION@" @@ -116,16 +118,16 @@ while test $# -gt 0; do case $1 in --cflags|--cxxflags) - mess="$mess -I${JANA_INSTALL_DIR}/include ${CPPFLAGS}" + mess="$mess -I${JANA_INSTALL_INCLUDEDIR} ${CPPFLAGS}" ;; --version|-v) mess="${JANA_VERSION}" ;; --libs) - mess="$mess -Wl,-rpath,${JANA_INSTALL_DIR}/lib -L${JANA_INSTALL_DIR}/lib -lJANA ${LDFLAGS} ${JANA_ONLY_LIBS} ${LIBS}" + mess="$mess -Wl,-rpath,${CMAKE_INSTALL_LIBDIR} -L${CMAKE_INSTALL_LIBDIR} -lJANA ${LDFLAGS} ${JANA_ONLY_LIBS} ${LIBS}" ;; --static-libs) - mess="$mess ${JANA_INSTALL_DIR}/lib/libJANA.a ${LDFLAGS} ${JANA_ONLY_LIBS} ${LIBS}" + mess="$mess ${CMAKE_INSTALL_LIBDIR}/libJANA.a ${LDFLAGS} ${JANA_ONLY_LIBS} ${LIBS}" ;; --jana-only) CPPFLAGS="" From b84db9a8f7f612f043c0a6ba5ae7d9b65e9a0386 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sun, 20 Sep 2026 12:25:11 -0500 Subject: [PATCH 6/6] fix: include GNUInstallDirs in each generated CMakeLists for standalone=False --- scripts/jana-generate.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/jana-generate.py b/scripts/jana-generate.py index 472fd9e2d..4ceea6a24 100755 --- a/scripts/jana-generate.py +++ b/scripts/jana-generate.py @@ -356,6 +356,8 @@ class {name} : public JEventSource {{ plugin_cmakelists_txt = """ {extra_find_packages} +include(GNUInstallDirs) + # According to the internet, CMake authors discourage the use # of GLOB for identifying source files. IMHO, this is due to # the flawed use of cache files in CMake itself. Here, GLOB @@ -398,6 +400,8 @@ class {name} : public JEventSource {{ mini_plugin_cmakelists_txt = """ {extra_find_packages} +include(GNUInstallDirs) + # According to the internet, CMake authors discourage the use # of GLOB for identifying source files. IMHO, this is due to # the flawed use of cache files in CMake itself. Here, GLOB @@ -437,6 +441,8 @@ class {name} : public JEventSource {{ plugin_tests_cmakelists_txt = """ +include(GNUInstallDirs) + set ({name}_PLUGIN_TESTS_SOURCES catch.hpp TestsMain.cc