@@ -30,6 +30,11 @@ set(XREPO_XMAKEFILE "" CACHE STRING "Xmake script file of Xrepo package")
3030# If specified, include all dependent libraries' settings in various
3131# variables. Also add all dependent libraries' install dir to
3232# CMAKE_PREFIX_PATH.
33+ # USE_ABSOLUTE_LIBS: optional
34+ # If specified, forces the linker to use absolute paths to library files rather than
35+ # relying on the -l flag which only specifies the library name. This can be particularly
36+ # useful when you need to ensure that the linker finds the correct library version,
37+ # especially in environments where multiple versions of the same library might be present.
3338# MODE: optional, debug|release
3439# Pass `--mode` option to xrepo install command. If not specified,
3540# `--mode` option is not passed.
@@ -47,6 +52,7 @@ set(XREPO_XMAKEFILE "" CACHE STRING "Xmake script file of Xrepo package")
4752# [CONFIGS feature1=true,feature2=false]
4853# [CONFIGS path/to/script.lua]
4954# [DEPS]
55+ # [USE_ABSOLUTE_LIBS]
5056# [MODE debug|release]
5157# [OUTPUT verbose|diagnosis|quiet]
5258# [DIRECTORY_SCOPE]
@@ -255,7 +261,7 @@ function(xrepo_package package)
255261 return ()
256262 endif ()
257263
258- set (options "DIRECTORY_SCOPE;DEPS" )
264+ set (options "DIRECTORY_SCOPE;DEPS;USE_ABSOLUTE_LIBS " )
259265 set (one_value_args CONFIGS MODE OUTPUT ALIAS)
260266 cmake_parse_arguments (ARG "${options} " "${one_value_args} " "" ${ARGN} )
261267
@@ -400,9 +406,9 @@ function(xrepo_target_packages target)
400406 message (STATUS "xrepo: target_link_directories(${target} ${_visibility} ${${package_name} _LIBRARY_DIRS})" )
401407 target_link_directories (${target} ${_visibility} ${${package_name} _LIBRARY_DIRS})
402408 endif ()
403- if ((DEFINED ${package_name} _LIBRARIES ) AND (NOT ARG_NO_LINK_LIBRARIES))
404- message (STATUS "xrepo: target_link_libraries(${target} ${_visibility} ${${package_name} _LIBRARIES })" )
405- target_link_libraries (${target} ${_visibility} ${${package_name} _LIBRARIES })
409+ if ((DEFINED ${package_name} _LINK_LIBRARIES ) AND (NOT ARG_NO_LINK_LIBRARIES))
410+ message (STATUS "xrepo: target_link_libraries(${target} ${_visibility} ${${package_name} _LINK_LIBRARIES })" )
411+ target_link_libraries (${target} ${_visibility} ${${package_name} _LINK_LIBRARIES })
406412 endif ()
407413 if ((DEFINED ${package_name} _SYS_LIBRARIES) AND (NOT ARG_NO_LINK_LIBRARIES))
408414 message (STATUS "xrepo: target_link_libraries(${target} ${_visibility} ${${package_name} _SYS_LIBRARIES})" )
@@ -530,36 +536,41 @@ macro(_xrepo_fetch_json)
530536 endif ()
531537 endif ()
532538
533- # Loop over linkdirs.
534- string (JSON linkdirs_type ERROR_VARIABLE linkdirs_error TYPE ${json_output} ${idx} "linkdirs" )
535- if ("${linkdirs_type} " STREQUAL "STRING" )
536- string (JSON dir GET ${json_output} ${idx} "linkdirs" )
537- list (APPEND linkdirs ${dir} )
538- elseif ("${linkdirs_type} " MATCHES "ARRAY|OBJECT" )
539- string (JSON linkdirs_len ERROR_VARIABLE linkdirs_error LENGTH ${json_output} ${idx} "linkdirs" )
540- if ("${linkdirs_error} " STREQUAL "NOTFOUND" AND NOT "${linkdirs_len} " EQUAL 0)
541- math (EXPR linkdirs_end "${linkdirs_len} - 1" )
542- foreach (linkdirs_idx RANGE 0 ${linkdirs_end} )
543- string (JSON dir GET ${json_output} ${idx} "linkdirs" ${linkdirs_idx} )
544- list (APPEND linkdirs ${dir} )
545- #message(STATUS "xrepo DEBUG: linkdirs ${idx} ${linkdirs_idx} ${dir}")
546- endforeach ()
539+ if (NOT ARG_USE_ABSOLUTE_LIBS)
540+ set (links_tag "links" )
541+ # Loop over linkdirs.
542+ string (JSON linkdirs_type ERROR_VARIABLE linkdirs_error TYPE ${json_output} ${idx} "linkdirs" )
543+ if ("${linkdirs_type} " STREQUAL "STRING" )
544+ string (JSON dir GET ${json_output} ${idx} "linkdirs" )
545+ list (APPEND linkdirs ${dir} )
546+ elseif ("${linkdirs_type} " MATCHES "ARRAY|OBJECT" )
547+ string (JSON linkdirs_len ERROR_VARIABLE linkdirs_error LENGTH ${json_output} ${idx} "linkdirs" )
548+ if ("${linkdirs_error} " STREQUAL "NOTFOUND" AND NOT "${linkdirs_len} " EQUAL 0)
549+ math (EXPR linkdirs_end "${linkdirs_len} - 1" )
550+ foreach (linkdirs_idx RANGE 0 ${linkdirs_end} )
551+ string (JSON dir GET ${json_output} ${idx} "linkdirs" ${linkdirs_idx} )
552+ list (APPEND linkdirs ${dir} )
553+ #message(STATUS "xrepo DEBUG: linkdirs ${idx} ${linkdirs_idx} ${dir}")
554+ endforeach ()
555+ endif ()
547556 endif ()
557+ else ()
558+ set (links_tag "libfiles" )
548559 endif ()
549560
550561 # Loop over links.
551- string (JSON links_type ERROR_VARIABLE links_error TYPE ${json_output} ${idx} "links" )
562+ string (JSON links_type ERROR_VARIABLE links_error TYPE ${json_output} ${idx} ${links_tag} )
552563 if ("${links_type} " STREQUAL "STRING" )
553- string (JSON dir GET ${json_output} ${idx} "links" )
554- list (APPEND links ${dir } )
564+ string (JSON libfile GET ${json_output} ${idx} ${links_tag} )
565+ list (APPEND links ${libfile } )
555566 elseif ("${links_type} " MATCHES "ARRAY|OBJECT" )
556- string (JSON links_len ERROR_VARIABLE links_error LENGTH ${json_output} ${idx} "links" )
567+ string (JSON links_len ERROR_VARIABLE links_error LENGTH ${json_output} ${idx} ${links_tag} )
557568 if ("${links_error} " STREQUAL "NOTFOUND" AND NOT "${links_len} " EQUAL 0)
558569 math (EXPR links_end "${links_len} - 1" )
559570 foreach (links_idx RANGE 0 ${links_end} )
560- string (JSON dir GET ${json_output} ${idx} "links" ${links_idx} )
561- list (APPEND links ${dir } )
562- #message(STATUS "xrepo DEBUG: links ${idx} ${links_idx} ${dir }")
571+ string (JSON libfile GET ${json_output} ${idx} ${links_tag} ${links_idx} )
572+ list (APPEND links ${libfile } )
573+ #message(STATUS "xrepo DEBUG: links ${idx} ${links_idx} ${libfile }")
563574 endforeach ()
564575 endif ()
565576 endif ()
@@ -618,9 +629,10 @@ macro(_xrepo_fetch_json)
618629 endif ()
619630
620631 if (DEFINED links)
632+ set (${package_name} _LINK_LIBRARIES "${links} " CACHE INTERNAL "" )
621633 set (${package_name} _LIBRARIES "${links} " CACHE INTERNAL "" )
622- list (APPEND xrepo_vars_${package_name} ${package_name} _LIBRARIES )
623- message (STATUS "xrepo: ${package_name} _LIBRARIES ${${package_name} _LIBRARIES }" )
634+ list (APPEND xrepo_vars_${package_name} ${package_name} _LINK_LIBRARIES )
635+ message (STATUS "xrepo: ${package_name} _LINK_LIBRARIES ${${package_name} _LINK_LIBRARIES }" )
624636 else ()
625637 message (STATUS "xrepo fetch --json: ${package_name} links not found" )
626638 endif ()
0 commit comments