From 303ce8315661f2c8f008bc59c52d0a4c06b98039 Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 18 Dec 2023 16:02:12 +0800 Subject: [PATCH] improve abseil links (#2961) --- packages/a/abseil/xmake.lua | 44 +++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/packages/a/abseil/xmake.lua b/packages/a/abseil/xmake.lua index f0db1b29c9c..d3a90a8b0e8 100644 --- a/packages/a/abseil/xmake.lua +++ b/packages/a/abseil/xmake.lua @@ -16,21 +16,6 @@ package("abseil") add_deps("cmake") - add_linkorders("absl_strings", "absl_base") - add_linkorders("absl_strings", "absl_raw_logging_internal") - add_linkorders("absl_strings_internal", "absl_base") - add_linkorders("absl_strings_internal", "absl_raw_logging_internal") - add_linkorders("absl_str_format_internal", "absl_base") - add_linkorders("absl_str_format_internal", "absl_raw_logging_internal") - add_linkorders("absl_str_format_internal", "absl_strings") - add_linkorders("absl_flags", "absl_base") - add_linkorders("absl_synchronization", "absl_base") - add_linkorders("absl_synchronization", "absl_stacktrace") - add_linkorders("absl_hash", "absl_city") - add_linkorders("absl_base", "absl_time") - add_linkorders("absl_kernel_timeout_internal", "absl_time") - add_linkorders("absl_time", "absl_time_zone") - if is_plat("macosx") then add_frameworks("CoreFoundation") end @@ -38,10 +23,6 @@ package("abseil") on_load(function (package) if package:is_plat("windows") and package:config("shared") then package:add("defines", "ABSL_CONSUME_DLL") - package:add("links", "abseil_dll") - end - if package:version():eq("20230802.1") then - package:add("linkorders", "absl_synchronization", "absl_kernel_timeout_internal") end end) @@ -54,6 +35,31 @@ package("abseil") table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) import("package.tools.cmake").install(package, configs, {buildir = os.tmpfile() .. ".dir"}) + + -- get links and ensure link order + import("core.base.graph") + local dag = graph.new(true) + local pkgconfigdir = package:installdir("lib", "pkgconfig") + for _, pcfile in ipairs(os.files(path.join(pkgconfigdir, "*.pc"))) do + local link = path.basename(pcfile) + local content = io.readfile(pcfile) + for _, line in ipairs(content:split("\n")) do + if line:startswith("Requires: ") then + local requires = line:sub(10):split(",") + for _, dep in ipairs(requires) do + dep = dep:split("=")[1]:trim() + dag:add_edge(link, dep) + end + end + end + end + local links = dag:topological_sort() + package:add("links", links) + + local cycle = dag:find_cycle() + if cycle then + wprint("cycle links found", cycle) + end end) on_test(function (package)