diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua index 4a26e170a3..ce8333c0f6 100644 --- a/xmake/core/package/package.lua +++ b/xmake/core/package/package.lua @@ -433,6 +433,20 @@ function _instance:plaindeps() return self._PLAINDEPS end +-- get library dep +function _instance:librarydep(name, opt) + local key = "librarydeps_map_" .. ((opt and opt.private) and "private" or "") + local librarydeps_map = self:_memcache():get(key) + if not librarydeps_map then + librarydeps_map = {} + for _, dep in ipairs(self:librarydeps()) do + librarydeps_map[dep:name()] = dep + end + self:_memcache():set(key, librarydeps_map) + end + return librarydeps_map[name] +end + -- get library deps with correct link order function _instance:librarydeps(opt) if opt and opt.private then diff --git a/xmake/modules/package/tools/autoconf.lua b/xmake/modules/package/tools/autoconf.lua index af50784fbc..58ea2e4c2c 100644 --- a/xmake/modules/package/tools/autoconf.lua +++ b/xmake/modules/package/tools/autoconf.lua @@ -176,7 +176,7 @@ end function _get_cflags_from_packagedeps(package, opt) local values for _, depname in ipairs(opt.packagedeps) do - local dep = type(depname) ~= "string" and depname or package:dep(depname) + local dep = type(depname) ~= "string" and depname or package:librarydep(depname) if dep then local fetchinfo = dep:fetch() if fetchinfo then @@ -208,7 +208,7 @@ end function _get_ldflags_from_packagedeps(package, opt) local values for _, depname in ipairs(opt.packagedeps) do - local dep = type(depname) ~= "string" and depname or package:dep(depname) + local dep = type(depname) ~= "string" and depname or package:librarydep(depname) if dep then local fetchinfo = dep:fetch() if fetchinfo then diff --git a/xmake/modules/package/tools/cmake.lua b/xmake/modules/package/tools/cmake.lua index e0535bdac4..d4eeabe56b 100644 --- a/xmake/modules/package/tools/cmake.lua +++ b/xmake/modules/package/tools/cmake.lua @@ -119,7 +119,7 @@ end function _get_cflags_from_packagedeps(package, opt) local values for _, depname in ipairs(opt.packagedeps) do - local dep = type(depname) ~= "string" and depname or package:dep(depname) + local dep = type(depname) ~= "string" and depname or package:librarydep(depname) if dep then local fetchinfo = dep:fetch() if fetchinfo then @@ -151,7 +151,7 @@ end function _get_ldflags_from_packagedeps(package, opt) local values for _, depname in ipairs(opt.packagedeps) do - local dep = type(depname) ~= "string" and depname or package:dep(depname) + local dep = type(depname) ~= "string" and depname or package:librarydep(depname) if dep then local fetchinfo = dep:fetch() if fetchinfo then diff --git a/xmake/modules/package/tools/meson.lua b/xmake/modules/package/tools/meson.lua index 21ab6faf18..1668d2bfe5 100644 --- a/xmake/modules/package/tools/meson.lua +++ b/xmake/modules/package/tools/meson.lua @@ -396,7 +396,7 @@ end function _get_cflags_from_packagedeps(package, opt) local values for _, depname in ipairs(opt.packagedeps) do - local dep = type(depname) ~= "string" and depname or package:dep(depname) + local dep = type(depname) ~= "string" and depname or package:librarydep(depname) if dep then local fetchinfo = dep:fetch() if fetchinfo then @@ -428,7 +428,7 @@ end function _get_ldflags_from_packagedeps(package, opt) local values for _, depname in ipairs(opt.packagedeps) do - local dep = type(depname) ~= "string" and depname or package:dep(depname) + local dep = type(depname) ~= "string" and depname or package:librarydep(depname) if dep then local fetchinfo = dep:fetch() if fetchinfo then