@@ -29,7 +29,7 @@ include(CMakeParseLibraryList)
2929# instead of being dispatched in SOFA install directory (between bin, libs, share, ...).
3030# If not building through SOFA, RELOCATABLE has no effect.
3131macro (sofa_create_package_with_targets )
32- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE)
32+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH )
3333 set (multiValueArgs TARGETS)
3434 set (optionalArgs AUTO_SET_TARGET_PROPERTIES NO_AUTO_RESOURCES_INSTALL)
3535 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -46,6 +46,26 @@ macro(sofa_create_package_with_targets)
4646 list (APPEND child_args INCLUDE_INSTALL_DIR "${ARG_PACKAGE_NAME} " )
4747 endif ()
4848
49+ if (ARG_RELOCATABLE)
50+ string (TOUPPER "${CMAKE_PROJECT_NAME } _${ARG_RELOCATABLE} _RELOCATABLE_PATH" global_relocatable_path)
51+ if (${global_relocatable_path} )
52+ set (plugin_relocatable_path "${${global_relocatable_path} }" )
53+ else ()
54+ message (WARNING "sofa_create_package_with_targets(${ARG_PACKAGE_NAME} ) Relocatable type ${ARG_RELOCATABLE} is unknown. Either specify one of the following {applications, plugins, projects} or specify a custom RELOCATABLE_PATH" )
55+ endif ()
56+
57+ if (ARG_RELOCATABLE_PATH)
58+ list (FIND child_args "RELOCATABLE_PATH" relPathNameId)
59+ list (REMOVE_AT child_args ${relPathNameId} )
60+ list (INSERT child_args ${relPathNameId} "${plugin_relocatable_path} " )
61+ else ()
62+ list (APPEND child_args RELOCATABLE_PATH)
63+ list (APPEND child_args "${plugin_relocatable_path} " )
64+ endif ()
65+ endif ()
66+
67+
68+
4969 sofa_create_package (${child_args} )
5070 sofa_add_targets_to_package (${child_args} )
5171endmacro ()
@@ -79,7 +99,7 @@ endmacro()
7999# instead of being dispatched in SOFA install directory (between bin, libs, share, ...).
80100# If not building through SOFA, RELOCATABLE has no effect.
81101macro (sofa_create_component_in_package_with_targets )
82- set (oneValueArgs COMPONENT_NAME COMPONENT_VERSION PACKAGE_NAME INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR RELOCATABLE)
102+ set (oneValueArgs COMPONENT_NAME COMPONENT_VERSION PACKAGE_NAME INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR RELOCATABLE RELOCATABLE_PATH )
83103 set (multiValueArgs TARGETS)
84104 set (optionalArgs AUTO_SET_TARGET_PROPERTIES)
85105 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -96,6 +116,24 @@ macro(sofa_create_component_in_package_with_targets)
96116 list (APPEND child_args INCLUDE_INSTALL_DIR "${ARG_PACKAGE_NAME} " )
97117 endif ()
98118
119+ if (ARG_RELOCATABLE)
120+ string (TOUPPER "${CMAKE_PROJECT_NAME } _${ARG_RELOCATABLE} _RELOCATABLE_PATH" global_relocatable_path)
121+ if (${global_relocatable_path} )
122+ set (plugin_relocatable_path "${${global_relocatable_path} }" )
123+ else ()
124+ message (WARNING "sofa_create_component_in_package_with_targets(${ARG_PACKAGE_NAME} ) Relocatable type ${ARG_RELOCATABLE} is unknown. Either specify one of the following {applications, plugins, projects} or specify a custom RELOCATABLE_PATH" )
125+ endif ()
126+
127+ if (ARG_RELOCATABLE_PATH)
128+ list (FIND child_args "RELOCATABLE_PATH" relPathNameId)
129+ list (REMOVE_AT child_args ${relPathNameId} )
130+ list (INSERT child_args ${relPathNameId} "${plugin_relocatable_path} " )
131+ else ()
132+ list (APPEND child_args RELOCATABLE_PATH)
133+ list (APPEND child_args "${plugin_relocatable_path} " )
134+ endif ()
135+ endif ()
136+
99137 # Calling sofa_create_package like sofa_create_package_with_targets does
100138 # but with different values for PACKAGE_NAME and PACKAGE_VERSION
101139 # and a new PACKAGE_PARENT argument.
@@ -146,7 +184,7 @@ endmacro()
146184#
147185# check_required_components(Foo Qux)
148186macro (sofa_create_package )
149- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION PACKAGE_PARENT INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE)
187+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION PACKAGE_PARENT INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH )
150188 set (multiValueArgs TARGETS)
151189 set (optionalArgs AUTO_SET_TARGET_PROPERTIES)
152190 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -158,6 +196,15 @@ macro(sofa_create_package)
158196 endif ()
159197 endforeach ()
160198
199+ if (ARG_RELOCATABLE AND NOT ARG_RELOCATABLE_PATH)
200+ string (TOUPPER "${CMAKE_PROJECT_NAME } _${ARG_RELOCATABLE} _RELOCATABLE_PATH" global_relocatable_path)
201+ if (${global_relocatable_path} )
202+ set (ARG_RELOCATABLE_PATH "${${global_relocatable_path} }" )
203+ else ()
204+ message (WARNING "sofa_create_component_in_package_with_targets(${ARG_PACKAGE_NAME} ) Relocatable type ${ARG_RELOCATABLE} is unknown. Either specify one of the following {applications, plugins, projects} or specify a custom RELOCATABLE_PATH" )
205+ endif ()
206+ endif ()
207+
161208 # Optional subpackage/namespace
162209 set (package_install_dir ${ARG_PACKAGE_NAME} )
163210 set (package_namespace "" )
@@ -184,7 +231,7 @@ macro(sofa_create_package)
184231 "### Expanded from \@ PACKAGE_GUARD\@ by SofaMacrosInstall.cmake ###" "\n "
185232 "include_guard()" "\n "
186233 )
187- if (ARG_RELOCATABLE )
234+ if (ARG_RELOCATABLE_PATH )
188235 string (CONCAT PACKAGE_GUARD ${PACKAGE_GUARD}
189236 "list(APPEND CMAKE_LIBRARY_PATH \"\$ {CMAKE_CURRENT_LIST_DIR}/../../../bin\" )" "\n "
190237 "list(APPEND CMAKE_LIBRARY_PATH \"\$ {CMAKE_CURRENT_LIST_DIR}/../../../lib\" )" "\n "
@@ -204,8 +251,8 @@ macro(sofa_create_package)
204251 )
205252 install (FILES "${CMAKE_BINARY_DIR } /lib/cmake/${ARG_PACKAGE_NAME} Config.cmake" DESTINATION "lib/cmake/${package_install_dir} " COMPONENT headers)
206253
207- if (ARG_RELOCATABLE )
208- sofa_set_project_install_relocatable (${package_install_dir} ${CMAKE_CURRENT_BINARY_DIR } ${ARG_RELOCATABLE } )
254+ if (ARG_RELOCATABLE_PATH )
255+ sofa_set_project_install_relocatable (${package_install_dir} ${CMAKE_CURRENT_BINARY_DIR } ${ARG_RELOCATABLE_PATH } )
209256 endif ()
210257
211258 sofa_install_git_infos (${ARG_PACKAGE_NAME} ${CMAKE_CURRENT_SOURCE_DIR } )
@@ -224,7 +271,7 @@ endmacro()
224271# Use AUTO_SET_TARGET_PROPERTIES to enable default properties setting
225272# on all targets (see sofa_auto_set_target_properties).
226273macro (sofa_add_targets_to_package )
227- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE OPTIMIZE_BUILD_DIR)
274+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE_PATH RELOCATABLE OPTIMIZE_BUILD_DIR)
228275 set (multiValueArgs TARGETS)
229276 set (optionalArgs AUTO_SET_TARGET_PROPERTIES NO_AUTO_RESOURCES_INSTALL)
230277 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -304,7 +351,7 @@ endfunction()
304351# - INCLUDE_DIRECTORIES: if not already set, add as PUBLIC include dirs
305352# 2 BUILD_INTERFACE (source dir and build dir) and 1 INSTALL_INTERFACE (install dir)
306353macro (sofa_auto_set_target_properties )
307- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE)
354+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH )
308355 set (multiValueArgs TARGETS)
309356 set (optionalArgs AUTO_SET_TARGET_PROPERTIES)
310357 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -327,7 +374,7 @@ endmacro()
327374
328375
329376macro (sofa_auto_set_target_version )
330- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE)
377+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH )
331378 set (multiValueArgs TARGETS)
332379 set (optionalArgs AUTO_SET_TARGET_PROPERTIES)
333380 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -383,7 +430,7 @@ endmacro()
383430
384431
385432macro (sofa_auto_set_target_compile_definitions )
386- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE)
433+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH )
387434 set (multiValueArgs TARGETS)
388435 set (optionalArgs AUTO_SET_TARGET_PROPERTIES)
389436 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -422,7 +469,7 @@ endmacro()
422469
423470
424471macro (sofa_auto_set_target_include_directories )
425- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE)
472+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH )
426473 set (multiValueArgs TARGETS)
427474 set (optionalArgs AUTO_SET_TARGET_PROPERTIES)
428475 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -481,7 +528,7 @@ macro(sofa_auto_set_target_include_directories)
481528 target_include_directories (${target} ${TARGET_VISIBILITY} "$<BUILD_INTERFACE :${CMAKE_BINARY_DIR } /include /${ARG_PACKAGE_NAME} >" )
482529 endif ()
483530
484- if (ARG_RELOCATABLE )
531+ if (ARG_RELOCATABLE_PATH )
485532 if (NOT "\$ <INSTALL_INTERFACE:include>" IN_LIST target_include_dirs)
486533 target_include_directories (${target} ${TARGET_VISIBILITY} "$<INSTALL_INTERFACE :include >" )
487534 endif ()
@@ -501,10 +548,11 @@ endmacro()
501548
502549
503550macro (sofa_auto_set_target_rpath )
504- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE)
551+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH )
505552 set (multiValueArgs TARGETS)
506553 set (optionalArgs AUTO_SET_TARGET_PROPERTIES)
507554 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
555+
508556 # Required arguments
509557 foreach (arg ARG_TARGETS)
510558 if ("${${arg} }" STREQUAL "" )
@@ -539,7 +587,7 @@ macro(sofa_auto_set_target_rpath)
539587 get_target_property (dep_reloc_install_dir ${dep} "RELOCATABLE_INSTALL_DIR" )
540588 if (dep_reloc_install_dir)
541589 # the dependency is relocatable
542- if (ARG_RELOCATABLE )
590+ if (ARG_RELOCATABLE_PATH )
543591 # current target is relocatable
544592 list (APPEND target_rpath
545593 "$ORIGIN/../../../${dep_reloc_install_dir} /lib"
@@ -558,7 +606,7 @@ macro(sofa_auto_set_target_rpath)
558606 endif ()
559607 else ()
560608 # the dependency is NOT relocatable
561- if (ARG_RELOCATABLE )
609+ if (ARG_RELOCATABLE_PATH )
562610 # current target is relocatable
563611 list (APPEND target_rpath
564612 "$ORIGIN/../../../lib"
@@ -587,7 +635,7 @@ endmacro()
587635# INCLUDE_INSTALL_DIR <include_install_dir>
588636# Directory in which headers will be copied into <CMAKE_INSTALL_PREFIX>/include/<include_install_dir>
589637macro (sofa_install_targets_in_package )
590- set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE OPTIMIZE_BUILD_DIR)
638+ set (oneValueArgs PACKAGE_NAME PACKAGE_VERSION INCLUDE_ROOT_DIR INCLUDE_INSTALL_DIR INCLUDE_SOURCE_DIR EXAMPLE_INSTALL_DIR RELOCATABLE RELOCATABLE_PATH OPTIMIZE_BUILD_DIR)
591639 set (multiValueArgs TARGETS)
592640 set (optionalArgs AUTO_SET_TARGET_PROPERTIES NO_AUTO_RESOURCES_INSTALL)
593641 cmake_parse_arguments ("ARG" "${optionalArgs} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
@@ -663,7 +711,7 @@ macro(sofa_install_targets_in_package)
663711 endif ()
664712
665713 # Finalize dirs
666- if (ARG_RELOCATABLE )
714+ if (ARG_RELOCATABLE_PATH )
667715 set (header_install_dir "include/${header_relative_dir_for_build} " )
668716 else ()
669717 # headers install-dir tree = headers build-dir tree
@@ -707,7 +755,7 @@ macro(sofa_install_targets_in_package)
707755 file (GLOB txt_files "*.txt" RELATIVE ${CMAKE_CURRENT_SOURCE_DIR } LIST_DIRECTORIES false )
708756 list (FILTER txt_files EXCLUDE REGEX "CMakeLists.txt" )
709757 file (GLOB md_files "*.md" RELATIVE ${CMAKE_CURRENT_SOURCE_DIR } LIST_DIRECTORIES false )
710- if (ARG_RELOCATABLE )
758+ if (ARG_RELOCATABLE_PATH )
711759 set (info_install_dir "." )
712760 else ()
713761 set (info_install_dir "include/${ARG_INCLUDE_INSTALL_DIR} " )
0 commit comments