summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-09-09 00:46:23 +0800
committerruki <[email protected]>2017-09-08 22:38:23 +0800
commitbfd5744eadf1d4d83221a7a4fd313235e106a9a3 (patch)
treeaa8028ddfa720e103ef8ef9840f6639850bf0096
parent7755ecd8b9b751cfec483bb16d30a4764f1aad14 (diff)
improve to dump require list
-rw-r--r--tests/projects/requires/xmake.lua4
-rw-r--r--xmake/actions/require/list.lua34
-rw-r--r--xmake/actions/require/package.lua2
-rw-r--r--xmake/core/project/project.lua14
4 files changed, 48 insertions, 6 deletions
diff --git a/tests/projects/requires/xmake.lua b/tests/projects/requires/xmake.lua
index 725e3ef05..1ff3daed3 100644
--- a/tests/projects/requires/xmake.lua
+++ b/tests/projects/requires/xmake.lua
@@ -7,12 +7,12 @@ package_end()
-- group packages
package("zlib-mbedtls")
add_deps("zlib >=1.2.11")
- add_deps("mbedtls master optional")
+ add_deps("mbedtls", {optional = true})
package_end()
-- requires
add_requires("zlib-mbedtls")
-add_requires("[email protected] ~1.6.0 optional")
+add_requires("[email protected] ~1.6.0", {optional = true})
-- the debug mode
if is_mode("debug") then
diff --git a/xmake/actions/require/list.lua b/xmake/actions/require/list.lua
index 67f85f723..f8849373e 100644
--- a/xmake/actions/require/list.lua
+++ b/xmake/actions/require/list.lua
@@ -25,14 +25,44 @@
-- imports
import("core.project.project")
import("package")
+import("repository")
+import("environment")
-- list packages
function main()
-- list all requires
print("Tha package dependencies:")
- for packagename, requireinfo in pairs(package.load_requires(project.requires())) do
- print(" %s %s %s", packagename, requireinfo.version, ifelse(requireinfo.optional, "optional", ""))
+
+ -- get requires
+ local requires, requires_extra = project.requires()
+ if not requires or #requires == 0 then
+ return
+ end
+
+ -- TODO
+ -- enter environment
+ environment.enter()
+
+ -- pull all repositories first if not exists
+ if not repository.exists() then
+ task.run("repo", {update = true})
end
+
+ -- list all packages
+ for _, instance in ipairs(package.load_packages(requires, requires_extra)) do
+ local requireinfo = instance:requireinfo() or {}
+ local packageopt = project.option(instance:fullname())
+ if packageopt then
+ cprint(" ${magenta}require${clear}(${bright}%s${clear}): %s%s%s", requireinfo.originstr, ifelse(instance:version_str(), instance:version_str(), "group"), ifelse(instance:exists(), ", ${green}local${clear}", ", ${yellow}remote${clear}"), ifelse(requireinfo.optional, ", optional", ""))
+ for _, dep in ipairs(instance:orderdeps()) do
+ requireinfo = dep:requireinfo() or {}
+ cprint(" -> ${magenta}dep${clear}(${bright}%s${clear}): %s%s%s", requireinfo.originstr, ifelse(dep:version_str(), dep:version_str(), "group"), ifelse(dep:exists(), ", ${green}local${clear}", ", ${yellow}remote${clear}"), ifelse(requireinfo.optional, ", ${yellow}optional${clear}", ""))
+ end
+ end
+ end
+
+ -- leave environment
+ environment.leave()
end
diff --git a/xmake/actions/require/package.lua b/xmake/actions/require/package.lua
index f20e4c9f5..e7318e425 100644
--- a/xmake/actions/require/package.lua
+++ b/xmake/actions/require/package.lua
@@ -108,7 +108,7 @@ function _parse_require(require_str, requires_extra)
-- init required item
local required = {}
required.packagename = packagename
- required.requireinfo = {reponame = reponame, packageurl = packageurl, version = version, optional = require_extra.optional, option = require_extra.option}
+ required.requireinfo = {originstr = require_str, reponame = reponame, packageurl = packageurl, version = version, optional = require_extra.optional, option = require_extra.option}
-- save this required item to cache
requires[require_str] = required
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index bd853ab7e..1c873987a 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -505,6 +505,7 @@ function project._load_options(disable_filter)
end
-- load the options from the project requires
+ local requires_extra = project.get("__extra_requires") or {}
for _, require_str in ipairs(table.wrap(project.get("requires"))) do
-- get the package name
@@ -521,8 +522,19 @@ function project._load_options(disable_filter)
-- check
assert(not results[packagename], "requires(\"" .. packagename .. "\") and option(\"" .. packagename .. "\") conflicts!")
+ -- define package option
+ local packageopt = {category = "requires", default = true, showmenu = true, description = "The " .. packagename .. " package"}
+
+ -- inherit extra option settings and override the default values
+ local require_extra = requires_extra[require_str]
+ if require_extra then
+ for name, value in pairs(table.wrap(require_extra.option)) do
+ packageopt[name] = value
+ end
+ end
+
-- add option
- results[packagename] = {category = "requires", default = true, showmenu = true, description = "The " .. packagename .. " package"}
+ results[packagename] = packageopt
end
-- check options