summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-10-20 00:42:19 +0800
committerruki <[email protected]>2022-10-20 00:42:19 +0800
commita89822b7530c98914109cecc770dfef15e707e23 (patch)
treec00cfd9cee983a868e90348a40a2d1a9021f5608
parentb17daa462dd75c5a218a788698f30955d13ebe5f (diff)
add extsources for components
-rw-r--r--tests/projects/package/components/xmake.lua10
-rw-r--r--xmake/core/package/package.lua12
2 files changed, 21 insertions, 1 deletions
diff --git a/tests/projects/package/components/xmake.lua b/tests/projects/package/components/xmake.lua
index 41850fd7c..eb18d7bb0 100644
--- a/tests/projects/package/components/xmake.lua
+++ b/tests/projects/package/components/xmake.lua
@@ -56,6 +56,10 @@ package("sfml")
add_configs("main", {description = "Link to the sfml-main library", default = true, type = "boolean"})
end
+ if is_plat("macosx") then
+ add_extsources("brew::sfml")
+ end
+
on_component("graphics", function (package, component)
local e = package:config("shared") and "" or "-s"
component:add("links", "sfml-graphics" .. e)
@@ -63,6 +67,7 @@ package("sfml")
component:add("links", "freetype")
component:add("syslinks", "opengl32", "gdi32", "user32", "advapi32")
end
+ component:add("extsources", "brew::sfml/sfml-graphics")
end)
on_component("window", function (package, component)
@@ -71,6 +76,7 @@ package("sfml")
if package:is_plat("windows", "mingw") and not package:config("shared") then
component:add("syslinks", "opengl32", "gdi32", "user32", "advapi32")
end
+ component:add("extsources", "brew::sfml/sfml-window")
end)
on_component("audio", function (package, component)
@@ -79,6 +85,7 @@ package("sfml")
if package:is_plat("windows", "mingw") and not package:config("shared") then
component:add("links", "openal32", "flac", "vorbisenc", "vorbisfile", "vorbis", "ogg")
end
+ component:add("extsources", "brew::sfml/sfml-audio")
end)
on_component("network", function (package, component)
@@ -87,6 +94,8 @@ package("sfml")
if package:is_plat("windows", "mingw") and not package:config("shared") then
component:add("syslinks", "ws2_32")
end
+ component:add("extsources", "brew::sfml/sfml-network")
+ component:add("extsources", "apt::sfml-network")
end)
on_component("system", function (package, component)
@@ -95,6 +104,7 @@ package("sfml")
if package:is_plat("windows", "mingw") then
component:add("syslinks", "winmm")
end
+ component:add("extsources", "brew::sfml/sfml-system")
end)
on_component("main", function (package, component)
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 945701a4f..0ccdf42b0 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -1512,7 +1512,16 @@ function _instance:_fetch_library(opt)
end
table.insert(fetchnames, self:name())
for _, fetchname in ipairs(fetchnames) do
- fetchinfo = self:find_package(fetchname, opt)
+ local components_extsources = {}
+ for name, comp in pairs(self:components()) do
+ for _, extsource in ipairs(table.wrap(comp:get("extsources"))) do
+ if fetchname:split("::")[1] == extsource:split("::")[1] then
+ components_extsources[name] = extsource
+ break
+ end
+ end
+ end
+ fetchinfo = self:find_package(fetchname, table.join(opt, {components_extsources = components_extsources}))
if fetchinfo then
break
end
@@ -1558,6 +1567,7 @@ function _instance:find_package(name, opt)
arch = self:arch(),
configs = table.join(self:configs(), opt.configs),
components = self:components_orderlist(),
+ components_extsources = opt.components_extsources,
buildhash = self:buildhash(), -- for xmake package or 3rd package manager, e.g. go:: ..
cachekey = opt.cachekey or "fetch_package_system",
external = opt.external,