diff options
| author | ruki <[email protected]> | 2017-09-09 00:46:23 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-09-08 22:38:23 +0800 |
| commit | bfd5744eadf1d4d83221a7a4fd313235e106a9a3 (patch) | |
| tree | aa8028ddfa720e103ef8ef9840f6639850bf0096 | |
| parent | 7755ecd8b9b751cfec483bb16d30a4764f1aad14 (diff) | |
improve to dump require list
| -rw-r--r-- | tests/projects/requires/xmake.lua | 4 | ||||
| -rw-r--r-- | xmake/actions/require/list.lua | 34 | ||||
| -rw-r--r-- | xmake/actions/require/package.lua | 2 | ||||
| -rw-r--r-- | xmake/core/project/project.lua | 14 |
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 |
