Skip to content

Commit 04bfe92

Browse files
authored
Merge pull request #39 from iGwkang/main
fix linking to system libraries
2 parents 0ada08b + f57022f commit 04bfe92

File tree

2 files changed

+40
-29
lines changed

2 files changed

+40
-29
lines changed

scripts/test-unix.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ cmake -DXREPO_PACKAGE_VERBOSE=ON example | tee $output
1111
grep -E 'mode=debug pcre2' $output
1212
grep -E "pcre2_INCLUDE_DIRS" $output
1313
grep -E "pcre2_LIBRARY_DIRS" $output
14-
grep -E "pcre2_LIBRARIES" $output
14+
grep -E "pcre2_LINK_LIBRARIES" $output
1515
grep -E "pcre2_DEFINITIONS" $output
1616
grep -E "gflags prepend to CMAKE_PREFIX_PATH" $output
1717
grep -E "glog prepend to CMAKE_PREFIX_PATH" $output
@@ -42,4 +42,3 @@ grep -E "pcre2 $match_cached_output" $output
4242
grep -E "gflags 2.2.2 $match_cached_output" $output
4343
grep -E "example/packages/glog.lua" $output
4444
grep -E "myzlib $match_cached_output" $output
45-

xrepo.cmake

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)