summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-11-24 00:46:12 +0800
committerruki <[email protected]>2018-11-23 22:37:15 +0800
commit17e064c41270a9d270fcfb7c6438c49d4fbfaa63 (patch)
tree31b3c73ab313e4bfbef2f1fc26f5775576f1590a
parent2130def012a0e6d023bdb3825c85458e353e9841 (diff)
sort requires
-rw-r--r--xmake/actions/require/impl/package.lua20
-rw-r--r--xmake/core/package/package.lua8
2 files changed, 23 insertions, 5 deletions
diff --git a/xmake/actions/require/impl/package.lua b/xmake/actions/require/impl/package.lua
index b4eb3f7d3..a94d10bae 100644
--- a/xmake/actions/require/impl/package.lua
+++ b/xmake/actions/require/impl/package.lua
@@ -117,6 +117,7 @@ function _parse_require(require_str, requires_extra, parentinfo)
version = version,
alias = require_extra.alias, -- set package alias name
debug = require_extra.debug, -- uses the debug package, default: false
+ group = require_extra.group, -- only uses the first package in same group
system = require_extra.system, -- default: true, we can set it to disable system package manually
option = require_extra.option, -- set and attach option
config = require_extra.config, -- the build configuration of package
@@ -241,10 +242,10 @@ function _load_packages(requires, opt)
-- load packages
local packages = {}
- for packagename, requireinfo in pairs(load_requires(requires, opt.requires_extra, opt.parentinfo)) do
+ for _, requireinfo in ipairs(load_requires(requires, opt.requires_extra, opt.parentinfo)) do
-- load package
- local package = _load_package(packagename, requireinfo)
+ local package = _load_package(requireinfo.name, requireinfo.info)
-- maybe package not found and optional
if package then
@@ -253,7 +254,7 @@ function _load_packages(requires, opt)
local deps = package:get("deps")
if deps and opt.nodeps ~= true then
local packagedeps = {}
- for _, dep in ipairs(_load_packages(deps, {requires_extra = package:get("__extra_deps"), parentinfo = requireinfo, nodeps = opt.nodeps})) do
+ for _, dep in ipairs(_load_packages(deps, {requires_extra = package:get("__extra_deps"), parentinfo = requireinfo.info, nodeps = opt.nodeps})) do
table.insert(packages, dep)
packagedeps[dep:name()] = dep
end
@@ -367,7 +368,7 @@ function load_requires(requires, requires_extra, parentinfo)
local packagename, requireinfo = _parse_require(require_str, requires_extra, parentinfo)
-- save this required package
- requireinfos[packagename] = requireinfo
+ table.insert(requireinfos, {name = packagename, info = requireinfo})
end
-- ok
@@ -496,8 +497,17 @@ function install_packages(requires, opt)
end)
-- install all required packages from repositories
+ local installed_in_group = {}
for _, package in ipairs(packages_install) do
- action.install(package)
+
+ -- only install the first package in same group
+ local group = package:group()
+ if not group or not installed_in_group[group] then
+ action.install(package)
+ if group then
+ installed_in_group[group] = true
+ end
+ end
end
-- ok
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index b0ae85bd3..5220bc76a 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -429,6 +429,14 @@ function _instance:configs()
end
end
+-- get the group name
+function _instance:group()
+ local requireinfo = self:requireinfo()
+ if requireinfo then
+ return requireinfo.group
+ end
+end
+
-- get the given configuration value of package
function _instance:config(name)
local configs = self:configs()