summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-08-19 18:00:35 +0800
committerGitHub <[email protected]>2024-08-19 18:00:35 +0800
commit44e39614b275ecab708f5e6a1127efae6aadf452 (patch)
tree56c6da15fcc118e598aef6a6451aa6299c777ef7
parentcbefe04267b1c7793d8d851dcbe25a7eb1edf73a (diff)
parent248cf58f94a08d45ec6262b84038d1661ec37729 (diff)
Merge pull request #5484 from xmake-io/cmake
fix packagedeps
-rw-r--r--xmake/modules/lib/detect/find_package.lua2
-rw-r--r--xmake/modules/package/tools/autoconf.lua49
-rw-r--r--xmake/modules/package/tools/cmake.lua49
-rw-r--r--xmake/modules/package/tools/meson.lua48
4 files changed, 121 insertions, 27 deletions
diff --git a/xmake/modules/lib/detect/find_package.lua b/xmake/modules/lib/detect/find_package.lua
index 3fdaf56c7..ac1f78ae1 100644
--- a/xmake/modules/lib/detect/find_package.lua
+++ b/xmake/modules/lib/detect/find_package.lua
@@ -35,7 +35,7 @@ function _concat_packages(a, b)
result[k] = v
end
for k, v in pairs(result) do
- if k == "links" then
+ if k == "links" or k == "syslinks" or k == "frameworks" or k == "ldflags" or k == "shflags" then
if type(v) == "table" and #v > 1 then
-- we need to ensure link orders when removing repeat values
v = table.reverse_unique(v)
diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua
index 0b1512d52..8600d7334 100644
--- a/xmake/modules/package/tools/autoconf.lua
+++ b/xmake/modules/package/tools/autoconf.lua
@@ -181,36 +181,67 @@ end
-- get cflags from package deps
function _get_cflags_from_packagedeps(package, opt)
- local result = {}
+ local values
for _, depname in ipairs(opt.packagedeps) do
local dep = type(depname) ~= "string" and depname or package:dep(depname)
if dep then
local fetchinfo = dep:fetch()
if fetchinfo then
- table.join2(result, _map_compflags(package, "cxx", "define", fetchinfo.defines))
- table.join2(result, _translate_paths(_map_compflags(package, "cxx", "includedir", fetchinfo.includedirs)))
- table.join2(result, _translate_paths(_map_compflags(package, "cxx", "sysincludedir", fetchinfo.sysincludedirs)))
+ if values then
+ values = values .. fetchinfo
+ else
+ values = fetchinfo
+ end
end
end
end
+ -- @see https://github.com/xmake-io/xmake-repo/pull/4973#issuecomment-2295890196
+ local result = {}
+ if values then
+ if values.defines then
+ table.join2(result, _map_compflags(package, "cxx", "define", values.defines))
+ end
+ if values.includedirs then
+ table.join2(result, _translate_paths(_map_compflags(package, "cxx", "includedir", values.includedirs)))
+ end
+ if values.sysincludedirs then
+ table.join2(result, _translate_paths(_map_compflags(package, "cxx", "sysincludedir", values.sysincludedirs)))
+ end
+ end
return result
end
-- get ldflags from package deps
function _get_ldflags_from_packagedeps(package, opt)
- local result = {}
+ local values
for _, depname in ipairs(opt.packagedeps) do
local dep = type(depname) ~= "string" and depname or package:dep(depname)
if dep then
local fetchinfo = dep:fetch()
if fetchinfo then
- table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "linkdir", fetchinfo.linkdirs)))
- table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", fetchinfo.links))
- table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "syslink", fetchinfo.syslinks)))
- table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "framework", fetchinfo.frameworks))
+ if values then
+ values = values .. fetchinfo
+ else
+ values = fetchinfo
+ end
end
end
end
+ local result = {}
+ if values then
+ if values.linkdirs then
+ table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "linkdir", values.linkdirs)))
+ end
+ if values.links then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", values.links))
+ end
+ if values.syslinks then
+ table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "syslink", values.syslinks)))
+ end
+ if values.frameworks then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "framework", values.frameworks))
+ end
+ end
return result
end
diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua
index 3d8701297..7f7dea51d 100644
--- a/xmake/modules/package/tools/cmake.lua
+++ b/xmake/modules/package/tools/cmake.lua
@@ -100,36 +100,67 @@ end
-- get cflags from package deps
function _get_cflags_from_packagedeps(package, opt)
- local result = {}
+ local values
for _, depname in ipairs(opt.packagedeps) do
local dep = type(depname) ~= "string" and depname or package:dep(depname)
if dep then
local fetchinfo = dep:fetch()
if fetchinfo then
- table.join2(result, _map_compflags(package, "cxx", "define", fetchinfo.defines))
- table.join2(result, _translate_paths(_map_compflags(package, "cxx", "includedir", fetchinfo.includedirs)))
- table.join2(result, _translate_paths(_map_compflags(package, "cxx", "sysincludedir", fetchinfo.sysincludedirs)))
+ if values then
+ values = values .. fetchinfo
+ else
+ values = fetchinfo
+ end
end
end
end
+ -- @see https://github.com/xmake-io/xmake-repo/pull/4973#issuecomment-2295890196
+ local result = {}
+ if values then
+ if values.defines then
+ table.join2(result, _map_compflags(package, "cxx", "define", values.defines))
+ end
+ if values.includedirs then
+ table.join2(result, _translate_paths(_map_compflags(package, "cxx", "includedir", values.includedirs)))
+ end
+ if values.sysincludedirs then
+ table.join2(result, _translate_paths(_map_compflags(package, "cxx", "sysincludedir", values.sysincludedirs)))
+ end
+ end
return result
end
-- get ldflags from package deps
function _get_ldflags_from_packagedeps(package, opt)
- local result = {}
+ local values
for _, depname in ipairs(opt.packagedeps) do
local dep = type(depname) ~= "string" and depname or package:dep(depname)
if dep then
local fetchinfo = dep:fetch()
if fetchinfo then
- table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "linkdir", fetchinfo.linkdirs)))
- table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", fetchinfo.links))
- table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "syslink", fetchinfo.syslinks)))
- table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "framework", fetchinfo.frameworks))
+ if values then
+ values = values .. fetchinfo
+ else
+ values = fetchinfo
+ end
end
end
end
+ local result = {}
+ if values then
+ if values.linkdirs then
+ table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "linkdir", values.linkdirs)))
+ end
+ if values.links then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", values.links))
+ end
+ if values.syslinks then
+ table.join2(result, _translate_paths(_map_linkflags(package, "binary", {"cxx"}, "syslink", values.syslinks)))
+ end
+ if values.frameworks then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "framework", values.frameworks))
+ end
+ end
return result
end
diff --git a/xmake/modules/package/tools/meson.lua b/xmake/modules/package/tools/meson.lua
index ddac3c5a4..fddf32999 100644
--- a/xmake/modules/package/tools/meson.lua
+++ b/xmake/modules/package/tools/meson.lua
@@ -410,35 +410,67 @@ end
-- get cflags from package deps
function _get_cflags_from_packagedeps(package, opt)
- local result = {}
+ local values
for _, depname in ipairs(opt.packagedeps) do
local dep = type(depname) ~= "string" and depname or package:dep(depname)
if dep then
local fetchinfo = dep:fetch()
if fetchinfo then
- table.join2(result, _map_compflags(package, "cxx", "define", fetchinfo.defines))
- table.join2(result, _map_compflags(package, "cxx", "includedir", fetchinfo.includedirs))
- table.join2(result, _map_compflags(package, "cxx", "sysincludedir", fetchinfo.sysincludedirs))
+ if values then
+ values = values .. fetchinfo
+ else
+ values = fetchinfo
+ end
end
end
end
+ -- @see https://github.com/xmake-io/xmake-repo/pull/4973#issuecomment-2295890196
+ local result = {}
+ if values then
+ if values.defines then
+ table.join2(result, _map_compflags(package, "cxx", "define", values.defines))
+ end
+ if values.includedirs then
+ table.join2(result, _map_compflags(package, "cxx", "includedir", values.includedirs))
+ end
+ if values.sysincludedirs then
+ table.join2(result, _map_compflags(package, "cxx", "sysincludedir", values.sysincludedirs))
+ end
+ end
return _translate_flags(package, result)
end
-- get ldflags from package deps
function _get_ldflags_from_packagedeps(package, opt)
- local result = {}
+ local values
for _, depname in ipairs(opt.packagedeps) do
local dep = type(depname) ~= "string" and depname or package:dep(depname)
if dep then
local fetchinfo = dep:fetch()
if fetchinfo then
- table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "linkdir", fetchinfo.linkdirs))
- table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", fetchinfo.links))
- table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "syslink", fetchinfo.syslinks))
+ if values then
+ values = values .. fetchinfo
+ else
+ values = fetchinfo
+ end
end
end
end
+ local result = {}
+ if values then
+ if values.linkdirs then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "linkdir", values.linkdirs))
+ end
+ if values.links then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "link", values.links))
+ end
+ if values.syslinks then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "syslink", values.syslinks))
+ end
+ if values.frameworks then
+ table.join2(result, _map_linkflags(package, "binary", {"cxx"}, "framework", values.frameworks))
+ end
+ end
return _translate_flags(package, result)
end