diff --git a/CMakeLists.txt b/CMakeLists.txt index 17e824e4b08..28b626f0338 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,18 +22,30 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) endif() -# Output Directories definition -set(ARCHIVE_OUTPUT_DIRECTORY lib) -set(RUNTIME_OUTPUT_DIRECTORY bin) -if(WIN32) - set(LIBRARY_OUTPUT_DIRECTORY ${RUNTIME_OUTPUT_DIRECTORY}) -else() - set(LIBRARY_OUTPUT_DIRECTORY ${ARCHIVE_OUTPUT_DIRECTORY}) -endif() + ## Set the output directories globally -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${RUNTIME_OUTPUT_DIRECTORY}) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${LIBRARY_OUTPUT_DIRECTORY}) +if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() + +if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +endif() + +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} ) +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ) + +if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY) + if(WIN32) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + else() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}) + endif() +endif() + +string(REGEX REPLACE "^${CMAKE_BINARY_DIR}/" "" LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ) + + # Option for packaging option(SOFA_BUILD_RELEASE_PACKAGE "Run package specific configure" OFF) @@ -76,7 +88,7 @@ message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}") # Remove generated CMake files, this prevents CMake from finding packages that # were disabled (like, unchecked in cmake-gui) after being built once. file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/cmake) -file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/lib/cmake) +file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake) # Remove generated SofaPython configuration files, to prevent SofaPython from # adding paths to disabled plugins. file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/etc/sofa/python.d) @@ -92,7 +104,7 @@ install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/macdeployqt.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/windeployqt.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindTinyXML2.cmake" - DESTINATION lib/cmake/Modules + DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Modules COMPONENT headers ) @@ -108,15 +120,15 @@ if(UNIX) # see https://cmake.org/Wiki/CMake_RPATH_handling for $ORIGIN doc set(CMAKE_INSTALL_RPATH - "$ORIGIN/../lib" - "$$ORIGIN/../lib" + "$ORIGIN/../${ARCHIVE_OUTPUT_DIRECTORY}" + "$$ORIGIN/../${ARCHIVE_OUTPUT_DIRECTORY}" ) if(APPLE) set(CMAKE_MACOSX_RPATH ON) list(APPEND CMAKE_INSTALL_RPATH - "@loader_path/../lib" - "@executable_path/../lib" + "@loader_path/../${ARCHIVE_OUTPUT_DIRECTORY}" + "@executable_path/../${ARCHIVE_OUTPUT_DIRECTORY}" "@loader_path/../../Frameworks" "@executable_path/../../Frameworks" ) diff --git a/Sofa/framework/Config/CMakeLists.txt b/Sofa/framework/Config/CMakeLists.txt index 13d079ae39e..74882bd1e05 100644 --- a/Sofa/framework/Config/CMakeLists.txt +++ b/Sofa/framework/Config/CMakeLists.txt @@ -3,7 +3,7 @@ project(Sofa.Config LANGUAGES CXX) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules") -list(APPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/lib/cmake") +list(APPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake") include(SofaMacros) @@ -324,14 +324,14 @@ set_target_properties(${PROJECT_NAME} PROPERTIES SOFA_VERSION "${SOFA_VERSION}") set_target_properties(${PROJECT_NAME} PROPERTIES SOFA_URL "${SOFA_URL}") # CMakeParseLibraryList.cmake -configure_file(cmake/CMakeParseLibraryList.cmake ${CMAKE_BINARY_DIR}/lib/cmake/CMakeParseLibraryList.cmake COPYONLY) -install(FILES cmake/CMakeParseLibraryList.cmake DESTINATION lib/cmake/${PROJECT_NAME} COMPONENT headers) +configure_file(cmake/CMakeParseLibraryList.cmake ${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/CMakeParseLibraryList.cmake COPYONLY) +install(FILES cmake/CMakeParseLibraryList.cmake DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME} COMPONENT headers) # SofaMacros*.cmake set(macro_files SofaMacros.cmake SofaMacrosConfigure.cmake SofaMacrosInstall.cmake SofaMacrosPython.cmake SofaMacrosUtils.cmake) foreach(macro_file ${macro_files}) - configure_file(cmake/${macro_file} ${CMAKE_BINARY_DIR}/lib/cmake/${macro_file} COPYONLY) - install(FILES cmake/${macro_file} DESTINATION lib/cmake/${PROJECT_NAME} COMPONENT headers) + configure_file(cmake/${macro_file} ${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${macro_file} COPYONLY) + install(FILES cmake/${macro_file} DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME} COMPONENT headers) endforeach() sofa_create_package_with_targets( diff --git a/Sofa/framework/Config/Sofa.ConfigConfig.cmake.in b/Sofa/framework/Config/Sofa.ConfigConfig.cmake.in index e6c96943433..93b3f07cbaf 100644 --- a/Sofa/framework/Config/Sofa.ConfigConfig.cmake.in +++ b/Sofa/framework/Config/Sofa.ConfigConfig.cmake.in @@ -7,9 +7,9 @@ set(Sofa_VERSION @Sofa_VERSION@) set(SOFA_USE_DEPENDENCY_PACK @SOFA_USE_DEPENDENCY_PACK@) # Setup CMAKE_MODULE_PATH, CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH -string(REGEX REPLACE "/lib/cmake/?.*" "" SOFA_ROOT "${CMAKE_CURRENT_LIST_DIR}") +string(REGEX REPLACE "/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/?.*" "" SOFA_ROOT "${CMAKE_CURRENT_LIST_DIR}") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") # Needed to do: include(SofaMacros) -list(APPEND CMAKE_MODULE_PATH "${SOFA_ROOT}/lib/cmake/Modules") # Needed to do: find_package(Eigen3) +list(APPEND CMAKE_MODULE_PATH "${SOFA_ROOT}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Modules") # Needed to do: find_package(Eigen3) if(SOFA_USE_DEPENDENCY_PACK) list(APPEND CMAKE_INCLUDE_PATH "${SOFA_ROOT}/include/extlibs/WinDepPack") # Needed to do: #include endif() diff --git a/Sofa/framework/Config/cmake/SofaMacrosInstall.cmake b/Sofa/framework/Config/cmake/SofaMacrosInstall.cmake index f07fe9a27d8..9914bed509f 100644 --- a/Sofa/framework/Config/cmake/SofaMacrosInstall.cmake +++ b/Sofa/framework/Config/cmake/SofaMacrosInstall.cmake @@ -125,9 +125,9 @@ endmacro() # - ${CMAKE_BINARY_DIR}/cmake/FooConfig.cmake # - ${CMAKE_BINARY_DIR}/cmake/FooConfigVersion.cmake # - In the install tree: -# - lib/cmake/Foo/FooConfigVersion.cmake -# - lib/cmake/Foo/FooConfig.cmake -# - lib/cmake/Foo/FooTargets.cmake +# - ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Foo/FooConfigVersion.cmake +# - ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Foo/FooConfig.cmake +# - ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Foo/FooTargets.cmake # # This macro factorizes boilerplate CMake code for the different # packages in Sofa. It assumes that there is a FooConfig.cmake.in @@ -172,7 +172,7 @@ macro(sofa_create_package) # by sofa_create_package_with_targets # or sofa_create_component_in_package_with_targets install(EXPORT ${ARG_PACKAGE_NAME}Targets - DESTINATION "lib/cmake/${package_install_dir}" + DESTINATION "${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${package_install_dir}" NAMESPACE "${package_namespace}" COMPONENT headers) endif() @@ -186,23 +186,23 @@ macro(sofa_create_package) ) if(ARG_RELOCATABLE) string(CONCAT PACKAGE_GUARD ${PACKAGE_GUARD} - "list(APPEND CMAKE_LIBRARY_PATH \"\${CMAKE_CURRENT_LIST_DIR}/../../../bin\")" "\n" - "list(APPEND CMAKE_LIBRARY_PATH \"\${CMAKE_CURRENT_LIST_DIR}/../../../lib\")" "\n" + "list(APPEND CMAKE_LIBRARY_PATH \"\${CMAKE_CURRENT_LIST_DIR}/../../../${RUNTIME_OUTPUT_DIRECTORY}\")" "\n" + "list(APPEND CMAKE_LIBRARY_PATH \"\${CMAKE_CURRENT_LIST_DIR}/../../../${ARCHIVE_OUTPUT_DIRECTORY}\")" "\n" ) endif() string(CONCAT PACKAGE_GUARD ${PACKAGE_GUARD} "################################################################" ) - configure_file("${CMAKE_CURRENT_BINARY_DIR}/${filename}" "${CMAKE_BINARY_DIR}/lib/cmake/${filename}" COPYONLY) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${filename}" DESTINATION "lib/cmake/${package_install_dir}" COMPONENT headers) + configure_file("${CMAKE_CURRENT_BINARY_DIR}/${filename}" "${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${filename}" COPYONLY) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${filename}" DESTINATION "${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${package_install_dir}" COMPONENT headers) # Config.cmake configure_package_config_file( ${ARG_PACKAGE_NAME}Config.cmake.in - "${CMAKE_BINARY_DIR}/lib/cmake/${ARG_PACKAGE_NAME}Config.cmake" - INSTALL_DESTINATION "lib/cmake/${package_install_dir}" + "${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${ARG_PACKAGE_NAME}Config.cmake" + INSTALL_DESTINATION "${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${package_install_dir}" ) - install(FILES "${CMAKE_BINARY_DIR}/lib/cmake/${ARG_PACKAGE_NAME}Config.cmake" DESTINATION "lib/cmake/${package_install_dir}" COMPONENT headers) + install(FILES "${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${ARG_PACKAGE_NAME}Config.cmake" DESTINATION "${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${package_install_dir}" COMPONENT headers) if(ARG_RELOCATABLE) sofa_set_project_install_relocatable(${package_install_dir} ${CMAKE_CURRENT_BINARY_DIR} ${ARG_RELOCATABLE}) @@ -542,18 +542,18 @@ macro(sofa_auto_set_target_rpath) if(ARG_RELOCATABLE) # current target is relocatable list(APPEND target_rpath - "$ORIGIN/../../../${dep_reloc_install_dir}/lib" - "$$ORIGIN/../../../${dep_reloc_install_dir}/lib" - "@loader_path/../../../${dep_reloc_install_dir}/lib" - "@executable_path/../../../${dep_reloc_install_dir}/lib" + "$ORIGIN/../../../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" + "$$ORIGIN/../../../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" + "@loader_path/../../../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" + "@executable_path/../../../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" ) else() # current target is NOT relocatable list(APPEND target_rpath - "$ORIGIN/../${dep_reloc_install_dir}/lib" - "$$ORIGIN/../${dep_reloc_install_dir}/lib" - "@loader_path/../${dep_reloc_install_dir}/lib" - "@executable_path/../${dep_reloc_install_dir}/lib" + "$ORIGIN/../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" + "$$ORIGIN/../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" + "@loader_path/../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" + "@executable_path/../${dep_reloc_install_dir}/${ARCHIVE_OUTPUT_DIRECTORY}" ) endif() else() @@ -561,10 +561,10 @@ macro(sofa_auto_set_target_rpath) if(ARG_RELOCATABLE) # current target is relocatable list(APPEND target_rpath - "$ORIGIN/../../../lib" - "$$ORIGIN/../../../lib" - "@loader_path/../../../lib" - "@executable_path/../../../lib" + "$ORIGIN/../../../${ARCHIVE_OUTPUT_DIRECTORY}" + "$$ORIGIN/../../../${ARCHIVE_OUTPUT_DIRECTORY}" + "@loader_path/../../../${ARCHIVE_OUTPUT_DIRECTORY}" + "@executable_path/../../../${ARCHIVE_OUTPUT_DIRECTORY}" ) endif() endif() @@ -601,9 +601,9 @@ macro(sofa_install_targets_in_package) install(TARGETS ${ARG_TARGETS} EXPORT ${ARG_PACKAGE_NAME}Targets - RUNTIME DESTINATION "bin" COMPONENT applications - LIBRARY DESTINATION "lib" COMPONENT libraries - ARCHIVE DESTINATION "lib" COMPONENT libraries + RUNTIME DESTINATION "${RUNTIME_OUTPUT_DIRECTORY}" COMPONENT applications + LIBRARY DESTINATION "${LIBRARY_OUTPUT_DIRECTORY}" COMPONENT libraries + ARCHIVE DESTINATION "${ARCHIVE_OUTPUT_DIRECTORY}" COMPONENT libraries PUBLIC_HEADER DESTINATION "include/${ARG_INCLUDE_INSTALL_DIR}" COMPONENT headers # [MacOS] install runSofa above the already populated runSofa.app (see CMAKE_INSTALL_PREFIX) @@ -850,7 +850,7 @@ function(sofa_install_libraries) get_target_property(is_framework ${target} FRAMEWORK) if(APPLE AND is_framework) get_filename_component(target_location ${target_location} DIRECTORY) # parent dir - install(DIRECTORY ${target_location} DESTINATION "lib" COMPONENT applications) + install(DIRECTORY ${target_location} DESTINATION "${ARCHIVE_OUTPUT_DIRECTORY}" COMPONENT applications) else() list(APPEND lib_paths "${target_location}") endif() @@ -903,12 +903,9 @@ function(sofa_install_libraries) ) # Install the libs - if(WIN32) - install(FILES ${SHARED_LIBS} DESTINATION "bin" COMPONENT applications) - else() - install(FILES ${SHARED_LIBS} DESTINATION "lib" COMPONENT applications) - endif() - install(FILES ${STATIC_LIBS} DESTINATION "lib" COMPONENT libraries) + + install(FILES ${SHARED_LIBS} DESTINATION "${LIBRARY_OUTPUT_DIRECTORY}" COMPONENT applications) + install(FILES ${STATIC_LIBS} DESTINATION "${ARCHIVE_OUTPUT_DIRECTORY}" COMPONENT libraries) # Copy the libs (Windows only) if(WIN32 AND NOT no_copy) @@ -1107,9 +1104,9 @@ endfunction() # - ${CMAKE_BINARY_DIR}/cmake/FooConfig.cmake # - ${CMAKE_BINARY_DIR}/cmake/FooConfigVersion.cmake # - In the install tree: -# - lib/cmake/Foo/FooConfigVersion.cmake -# - lib/cmake/Foo/FooConfig.cmake -# - lib/cmake/Foo/FooTargets.cmake +# - ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Foo/FooConfigVersion.cmake +# - ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Foo/FooConfig.cmake +# - ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Foo/FooTargets.cmake # # This macro factorizes boilerplate CMake code for the different # packages in Sofa. It assumes that there is a FooConfig.cmake.in diff --git a/Sofa/framework/Helper/src/sofa/helper/config.h.in b/Sofa/framework/Helper/src/sofa/helper/config.h.in index 69368c79b44..2bb68615195 100644 --- a/Sofa/framework/Helper/src/sofa/helper/config.h.in +++ b/Sofa/framework/Helper/src/sofa/helper/config.h.in @@ -27,7 +27,7 @@ #cmakedefine01 SOFA_HELPER_HAVE_BOOST_THREAD #cmakedefine01 SOFA_HELPER_HAVE_BOOST_FILESYSTEM -// DEPRECATED since v21.06 +// DEPRECATED since v21.06 // will be removed at v21.12 #define SOFAHELPER_HAVE_BOOST = @SOFA_HELPER_HAVE_BOOST@; #define SOFAHELPER_HAVE_BOOST_THREAD = @SOFA_HELPER_HAVE_BOOST_THREAD@; @@ -40,7 +40,12 @@ # define SOFA_HELPER_API SOFA_IMPORT_DYNAMIC_LIBRARY #endif - +namespace sofa::helper +{ + static constexpr auto SOFAArchiveDir = "@ARCHIVE_OUTPUT_DIRECTORY@"; + static constexpr auto SOFARuntimeDir = "@RUNTIME_OUTPUT_DIRECTORY@"; + static constexpr auto SOFALibraryDir = "@LIBRARY_OUTPUT_DIRECTORY@"; +} #define SOFA_ATTRIBUTE_DISABLED__PLUGIN_GETCOMPONENTLIST() \ SOFA_ATTRIBUTE_DISABLED("v24.12", "v25.06", \ diff --git a/Sofa/framework/Helper/src/sofa/helper/system/FileRepository.cpp b/Sofa/framework/Helper/src/sofa/helper/system/FileRepository.cpp index dfd888f7de4..b7d4eefe115 100644 --- a/Sofa/framework/Helper/src/sofa/helper/system/FileRepository.cpp +++ b/Sofa/framework/Helper/src/sofa/helper/system/FileRepository.cpp @@ -93,8 +93,8 @@ FileRepository PluginRepository( FileRepository PluginRepository( "SOFA_PLUGIN_PATH", { - Utils::getSofaPathTo("lib"), - Utils::getSofaPathTo("plugins"), + Utils::getSofaPathTo(SOFARuntimeDir), + Utils::getSofaPathTo(SOFAArchiveDir), } ); #endif diff --git a/Sofa/framework/Helper/src/sofa/helper/system/PluginManager.cpp b/Sofa/framework/Helper/src/sofa/helper/system/PluginManager.cpp index d09b31e693a..2884c5c827c 100644 --- a/Sofa/framework/Helper/src/sofa/helper/system/PluginManager.cpp +++ b/Sofa/framework/Helper/src/sofa/helper/system/PluginManager.cpp @@ -505,8 +505,8 @@ std::string PluginManager::findPlugin(const std::string& pluginName, const std:: const std::array paths = { FileSystem::append(prefix, libName), FileSystem::append(prefix, pluginName, libName), - FileSystem::append(prefix, pluginName, "bin", libName), - FileSystem::append(prefix, pluginName, "lib", libName) + FileSystem::append(prefix, pluginName, SOFAArchiveDir, libName), + FileSystem::append(prefix, pluginName, SOFARuntimeDir, libName) }; for (const auto & path : paths) { if (FileSystem::isFile(path)) { diff --git a/applications/plugins/CImgPlugin/CMakeLists.txt b/applications/plugins/CImgPlugin/CMakeLists.txt index 4273ac3c28d..ebd76034837 100644 --- a/applications/plugins/CImgPlugin/CMakeLists.txt +++ b/applications/plugins/CImgPlugin/CMakeLists.txt @@ -17,8 +17,8 @@ sofa_find_package(Sofa.DefaultType REQUIRED) # add FindCImg.cmake list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCImg.cmake ${CMAKE_BINARY_DIR}/lib/cmake/FindCImg.cmake COPYONLY) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCImg.cmake DESTINATION lib/cmake/${PROJECT_NAME} COMPONENT headers) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCImg.cmake ${CMAKE_BINARY_DIR}/${ARCHIVE_OUTPUT_DIRECTORY}/cmake/FindCImg.cmake COPYONLY) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCImg.cmake DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME} COMPONENT headers) sofa_find_package(CImg QUIET) @@ -118,7 +118,7 @@ sofa_create_package_with_targets( install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindCImg.cmake" - DESTINATION lib/cmake/Modules + DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}/cmake/Modules COMPONENT headers ) diff --git a/applications/plugins/Haption/CMakeLists.txt b/applications/plugins/Haption/CMakeLists.txt index e3db3247644..0e98dc62bb7 100644 --- a/applications/plugins/Haption/CMakeLists.txt +++ b/applications/plugins/Haption/CMakeLists.txt @@ -37,8 +37,8 @@ include_directories("${CMAKE_CURRENT_SOURCE_DIR}/..") install(TARGETS ${PROJECT_NAME} COMPONENT Haption_libraries EXPORT HaptionTargets - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) + RUNTIME DESTINATION ${RUNTIME_OUTPUT_DIRECTORY} + LIBRARY DESTINATION ${LIBRARY_OUTPUT_DIRECTORY} + ARCHIVE DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}) install(DIRECTORY examples/ DESTINATION share/sofa/plugins/${PROJECT_NAME}) diff --git a/applications/plugins/HeadlessRecorder/CMakeLists.txt b/applications/plugins/HeadlessRecorder/CMakeLists.txt index df5f84a280c..ee5297fb7b5 100644 --- a/applications/plugins/HeadlessRecorder/CMakeLists.txt +++ b/applications/plugins/HeadlessRecorder/CMakeLists.txt @@ -42,7 +42,7 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${X11_LIBRARIES}) set(FFMPEG_EXEC_PATH "${FFMPEG_EXEC_FILE}") # FFMPEG_EXEC_FILE is set by FindFFMEG_exec.cmake configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/${PROJECT_NAME}.ini.in "${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}.ini") get_filename_component(FFMPEG_EXEC_FILENAME "${FFMPEG_EXEC_FILE}" NAME) -set(FFMPEG_EXEC_PATH "../bin/${FFMPEG_EXEC_FILENAME}") # relative path for install dir, see .ini file +set(FFMPEG_EXEC_PATH "../${RUNTIME_OUTPUT_DIRECTORY}/${FFMPEG_EXEC_FILENAME}") # relative path for install dir, see .ini file configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/${PROJECT_NAME}.ini.in "${CMAKE_BINARY_DIR}/etc/installed${PROJECT_NAME}.ini") install(FILES "${CMAKE_BINARY_DIR}/etc/installed${PROJECT_NAME}.ini" DESTINATION etc RENAME ${PROJECT_NAME}.ini COMPONENT applications) diff --git a/applications/plugins/PersistentContact/CMakeLists.txt b/applications/plugins/PersistentContact/CMakeLists.txt index b481c04837b..11eece2e3d5 100644 --- a/applications/plugins/PersistentContact/CMakeLists.txt +++ b/applications/plugins/PersistentContact/CMakeLists.txt @@ -41,9 +41,9 @@ include_directories("${CMAKE_CURRENT_SOURCE_DIR}/..") install(TARGETS ${PROJECT_NAME} COMPONENT PersistentContact_libraries EXPORT PersistentContactTargets - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib + RUNTIME DESTINATION ${RUNTIME_OUTPUT_DIRECTORY} + LIBRARY DESTINATION ${LIBRARY_OUTPUT_DIRECTORY} + ARCHIVE DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY} PUBLIC_HEADER DESTINATION "include/${PROJECT_NAME}") install(DIRECTORY examples/ DESTINATION share/sofa/plugins/${PROJECT_NAME}) diff --git a/applications/plugins/Sensable/CMakeLists.txt b/applications/plugins/Sensable/CMakeLists.txt index d994bd39bd3..f69f976f6c6 100644 --- a/applications/plugins/Sensable/CMakeLists.txt +++ b/applications/plugins/Sensable/CMakeLists.txt @@ -32,8 +32,8 @@ target_link_libraries(${PROJECT_NAME} SofaHaptics SofaOpenglVisual ${OPENHAPTICS install(TARGETS ${PROJECT_NAME} COMPONENT Sensable_libraries EXPORT SensableTargets - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) + RUNTIME DESTINATION ${RUNTIME_OUTPUT_DIRECTORY} + LIBRARY DESTINATION ${LIBRARY_OUTPUT_DIRECTORY} + ARCHIVE DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}) install(DIRECTORY examples/ DESTINATION share/sofa/plugins/${PROJECT_NAME}) diff --git a/applications/plugins/Xitact/CMakeLists.txt b/applications/plugins/Xitact/CMakeLists.txt index 200e7e7182c..64223d9017b 100644 --- a/applications/plugins/Xitact/CMakeLists.txt +++ b/applications/plugins/Xitact/CMakeLists.txt @@ -30,8 +30,8 @@ include_directories("${CMAKE_CURRENT_SOURCE_DIR}/..") install(TARGETS ${PROJECT_NAME} COMPONENT Xitact_libraries EXPORT XitactTargets - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) + RUNTIME DESTINATION ${RUNTIME_OUTPUT_DIRECTORY} + LIBRARY DESTINATION ${LIBRARY_OUTPUT_DIRECTORY} + ARCHIVE DESTINATION ${ARCHIVE_OUTPUT_DIRECTORY}) install(DIRECTORY examples/ DESTINATION share/sofa/plugins/${PROJECT_NAME}) diff --git a/applications/projects/runSofa/CMakeLists.txt b/applications/projects/runSofa/CMakeLists.txt index aeffe5209db..3ab8233bf12 100644 --- a/applications/projects/runSofa/CMakeLists.txt +++ b/applications/projects/runSofa/CMakeLists.txt @@ -11,13 +11,10 @@ endif() ################################### # Generate plugin_list.conf.default include(cmake/GeneratePluginConfig.cmake) -if(MSVC) - # plugins are located in bin/ - set(_pluginLocation "bin") -else() - # plugins are located in lib/ - set(_pluginLocation "lib") -endif() + +# plugins are located in bin/ +set(_pluginLocation "${LIBRARY_OUTPUT_DIRECTORY}") + set(_configPluginFileName plugin_list.conf) set(_defaultConfigPluginFileName "${_configPluginFileName}.default") diff --git a/applications/projects/runSofa/cmake/GeneratePluginConfig.cmake b/applications/projects/runSofa/cmake/GeneratePluginConfig.cmake index dc75641fdd4..f58df238112 100644 --- a/applications/projects/runSofa/cmake/GeneratePluginConfig.cmake +++ b/applications/projects/runSofa/cmake/GeneratePluginConfig.cmake @@ -43,8 +43,8 @@ macro(sofa_generate_plugin_config config_filename) # With Win/MVSC, we can only know $CONFIG at build time if (MSVC) add_custom_target(do_always ALL - COMMAND if exist "${CMAKE_BINARY_DIR}/bin/$/" # does not exist if using MSVC without Visual Studio IDE - "${CMAKE_COMMAND}" -E copy "${config_filename}" "${CMAKE_BINARY_DIR}/bin/$/" + COMMAND if exist "${CMAKE_BINARY_DIR}/${RUNTIME_OUTPUT_DIRECTORY}/$/" # does not exist if using MSVC without Visual Studio IDE + "${CMAKE_COMMAND}" -E copy "${config_filename}" "${CMAKE_BINARY_DIR}/${RUNTIME_OUTPUT_DIRECTORY}/$/" ) endif(MSVC) endif() diff --git a/cmake/Modules/windeployqt.cmake b/cmake/Modules/windeployqt.cmake index d8f08f36c87..296228fef06 100644 --- a/cmake/Modules/windeployqt.cmake +++ b/cmake/Modules/windeployqt.cmake @@ -66,7 +66,7 @@ function(windeployqt target build_dir install_dir) foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES}) install( DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/windeployqt/" - DESTINATION bin/${CONFIG} + DESTINATION ${LIBRARY_OUTPUT_DIRECTORY}/${CONFIG} OPTIONAL COMPONENT applications PATTERN "resources" EXCLUDE @@ -76,7 +76,7 @@ function(windeployqt target build_dir install_dir) else() install( DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/windeployqt/" - DESTINATION bin + DESTINATION ${LIBRARY_OUTPUT_DIRECTORY} COMPONENT applications PATTERN "resources" EXCLUDE PATTERN "translations" EXCLUDE @@ -107,7 +107,7 @@ function(windeployqt target build_dir install_dir) foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES}) install( PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} - DESTINATION bin/${CONFIG} + DESTINATION ${LIBRARY_OUTPUT_DIRECTORY}/${CONFIG} OPTIONAL COMPONENT applications ) @@ -115,7 +115,7 @@ function(windeployqt target build_dir install_dir) else() install( PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} - DESTINATION bin + DESTINATION ${LIBRARY_OUTPUT_DIRECTORY} COMPONENT applications ) endif() diff --git a/tools/postinstall-fixup/CMakeLists.txt b/tools/postinstall-fixup/CMakeLists.txt index 5c90cd7509a..1af3666c6ad 100644 --- a/tools/postinstall-fixup/CMakeLists.txt +++ b/tools/postinstall-fixup/CMakeLists.txt @@ -21,8 +21,8 @@ endif() if(CMAKE_SYSTEM_NAME STREQUAL Linux) install(CODE "file(WRITE - \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin/qt.conf\" - \"[Paths]\\n Prefix = ..\\n Plugins = bin\\n LibraryExecutables = bin\" + \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${RUNTIME_OUTPUT_DIRECTORY}/qt.conf\" + \"[Paths]\\n Prefix = ..\\n Plugins = ${RUNTIME_OUTPUT_DIRECTORY}\\n LibraryExecutables = ${RUNTIME_OUTPUT_DIRECTORY}\" )" COMPONENT resources) install(CODE "execute_process(COMMAND /bin/bash @@ -60,8 +60,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin) endif() elseif(CMAKE_SYSTEM_NAME STREQUAL Windows) install(CODE "file(WRITE - \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin/qt.conf\" - \"[Paths]\\n Prefix = ..\\n Plugins = bin\\n LibraryExecutables = bin\" + \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${RUNTIME_OUTPUT_DIRECTORY}/qt.conf\" + \"[Paths]\\n Prefix = ..\\n Plugins = ${RUNTIME_OUTPUT_DIRECTORY}\\n LibraryExecutables = ${RUNTIME_OUTPUT_DIRECTORY}\" )" COMPONENT resources) install(CODE "execute_process(COMMAND bash