summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-01-01 22:33:43 +0800
committerruki <[email protected]>2021-01-01 22:33:43 +0800
commit18b68e6e7ab221b5ebd6c992bd02fa11c73d52ae (patch)
tree5fcb1da8fcf653d2580db3478442983eede98625
parent0650d385e898d4bea721fa1014b5d881f4120c5d (diff)
use add_requireconfs
-rw-r--r--tests/projects/package/depconfigs/xmake.lua19
-rw-r--r--xmake/actions/require/impl/package.lua46
-rw-r--r--xmake/core/project/project.lua14
-rw-r--r--xmake/core/sandbox/modules/import/core/project/project.lua51
4 files changed, 55 insertions, 75 deletions
diff --git a/tests/projects/package/depconfigs/xmake.lua b/tests/projects/package/depconfigs/xmake.lua
index 33af8338a..7bf8eba87 100644
--- a/tests/projects/package/depconfigs/xmake.lua
+++ b/tests/projects/package/depconfigs/xmake.lua
@@ -1,11 +1,10 @@
-add_requires("libpng", {system = false, configs = {vs_runtime = "MD"},
- after_load = function (package)
- --package:set("deps", "zlib 1.2.10", {system = false, configs = {cxflags = "-DTEST"}})
- package:extraconf_set("deps", "zlib", {system = false, configs = {cxflags = "-DTEST"}})
- end})
+add_requires("libpng", "libtiff", {system = false, configs = {vs_runtime = "MD"}})
+add_requires("libwebp")
-add_requires("libtiff", {system = false, configs = {vs_runtime = "MD"},
- deps = {system = false, configs = {cxflags = "-DTEST2"}}})
+add_requireconfs("libwebp", {system = false, configs = {vs_runtime = "MD"}})
+add_requireconfs("libpng.zlib", {system = false, configs = {cxflags = "-DTEST1"}})
+add_requireconfs("libtiff.zlib", {system = false, configs = {cxflags = "-DTEST2"}})
+add_requireconfs("libwebp.*", {system = false, configs = {cxflags = "-DTEST3"}})
target("test")
set_kind("binary")
@@ -16,3 +15,9 @@ target("test2")
set_kind("binary")
add_files("src/*.c")
add_packages("libtiff")
+
+target("test3")
+ set_kind("binary")
+ add_files("src/*.c")
+ add_packages("libwebp")
+
diff --git a/xmake/actions/require/impl/package.lua b/xmake/actions/require/impl/package.lua
index c11f43005..4a400bb34 100644
--- a/xmake/actions/require/impl/package.lua
+++ b/xmake/actions/require/impl/package.lua
@@ -82,15 +82,6 @@ end
-- true: only get system package
-- false: only get local packages
--
--- custom on_load/after_load package script
--- - add_requires("libpng", {after_load = function (package)
--- -- modify dependent package version and configs
--- -- package:set("deps", "zlib 1.2.10", {system = false, configs = {cxflags = "-DTEST"}})
---
--- -- only modify dependent package configs
--- package:extraconf_set("deps", "zlib", {system = false, configs = {cxflags = "-DTEST"}})
--- end})
---
--
function _parse_require(require_str, requires_extra, parentinfo)
@@ -183,8 +174,6 @@ function _parse_require(require_str, requires_extra, parentinfo)
optional = parentinfo.optional or require_extra.optional, -- default: false, inherit parentinfo.optional
verify = require_extra.verify, -- default: true, we can set false to ignore sha256sum and select any version
external = require_extra.external, -- default: true, we use sysincludedirs/-isystem instead of -I/xxx
- on_load = require_extra.on_load, -- optional, we use it to override package().on_load
- after_load = require_extra.after_load -- optional, we use it to load some user custom configuration after loading package()
}
return required.packagename, required.requireinfo
end
@@ -418,17 +407,11 @@ function _load_package(packagename, requireinfo, opt)
_check_package_configurations(package)
-- do load
- local on_load = requireinfo.on_load or package:script("load")
+ local on_load = package:script("load")
if on_load then
on_load(package)
end
- -- do after_load
- local after_load = requireinfo.after_load
- if after_load then
- after_load(package)
- end
-
-- load environments from the manifest to enable the environments of on_install()
package:envs_load()
@@ -443,34 +426,10 @@ function _load_package_depconfigs(package)
-- get all extra configs of dependent packages
local extraconfs = package:extraconf("deps") or {}
- -- inherit depconfigs of root package
- -- e.g. add_requires("libpng", {deps = {...}})
- --
- local deps = package:get("deps")
- local requireinfo = package:requireinfo()
- if requireinfo and requireinfo.deps then
- local requiredeps = requireinfo.deps
- for _, depstr in ipairs(deps) do
- local depconf = extraconfs[depstr]
- if not depconf then
- depconf = {}
- extraconfs[depstr] = depconf
- end
- depconf.configs = depconf.configs or {}
- for k, v in pairs(requiredeps.configs) do
- depconf.configs[k] = v
- end
- for k, v in pairs(requiredeps) do
- if k ~= "configs" then
- depconf[k] = v
- end
- end
- end
- end
-
-- inherit some builtin configs of root package
-- e.g. add_requires("libpng", {configs = {vs_runtime = "MD"}})
--
+ local deps = package:get("deps")
if not package:config("shared") then
for _, depstr in ipairs(deps) do
local depconf = extraconfs[depstr]
@@ -484,6 +443,7 @@ function _load_package_depconfigs(package)
end
end
end
+ print(extraconfs)
return extraconfs
end
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index 6bb8d8b07..a495a300c 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -693,6 +693,7 @@ function project.apis()
, "set_description"
-- add_xxx
, "add_requires"
+ , "add_requireconfs"
, "add_repositories"
}
, paths =
@@ -1002,10 +1003,23 @@ function project.requires_str()
requires_str, requires_extra = project.get("requires"), project.get("__extra_requires")
project._memcache():set("requires_str", requires_str or false)
project._memcache():set("requires_extra", requires_extra)
+
+ -- get raw requireconfs
+ local requireconfs_str, requireconfs_extra = project.get("requireconfs"), project.get("__extra_requireconfs")
+ project._memcache():set("requireconfs_str", requireconfs_str or false)
+ project._memcache():set("requireconfs_extra", requireconfs_extra)
end
return requires_str or nil, requires_extra
end
+-- get string requireconfs
+function project.requireconfs_str()
+ project.requires_str()
+ local requireconfs_str = project._memcache():get("requireconfs_str")
+ local requireconfs_extra = project._memcache():get("requireconfs_extra")
+ return requireconfs_str, requireconfs_extra
+end
+
-- get the given rule
function project.rule(name)
return project.rules()[name]
diff --git a/xmake/core/sandbox/modules/import/core/project/project.lua b/xmake/core/sandbox/modules/import/core/project/project.lua
index 1e5faa2a9..a72bd5f92 100644
--- a/xmake/core/sandbox/modules/import/core/project/project.lua
+++ b/xmake/core/sandbox/modules/import/core/project/project.lua
@@ -36,31 +36,32 @@ local package = require("package/package")
local import = require("sandbox/modules/import")
-- export some readonly interfaces
-sandbox_core_project.get = project.get
-sandbox_core_project.rule = project.rule
-sandbox_core_project.rules = project.rules
-sandbox_core_project.toolchain = project.toolchain
-sandbox_core_project.toolchains = project.toolchains
-sandbox_core_project.target = project.target
-sandbox_core_project.targets = project.targets
-sandbox_core_project.ordertargets = project.ordertargets
-sandbox_core_project.option = project.option
-sandbox_core_project.options = project.options
-sandbox_core_project.rootfile = project.rootfile
-sandbox_core_project.allfiles = project.allfiles
-sandbox_core_project.rcfile = project.rcfile
-sandbox_core_project.directory = project.directory
-sandbox_core_project.name = project.name
-sandbox_core_project.modes = project.modes
-sandbox_core_project.mtimes = project.mtimes
-sandbox_core_project.version = project.version
-sandbox_core_project.require = project.require
-sandbox_core_project.requires = project.requires
-sandbox_core_project.requires_str = project.requires_str
-sandbox_core_project.policy = project.policy
-sandbox_core_project.tmpdir = project.tmpdir
-sandbox_core_project.tmpfile = project.tmpfile
-sandbox_core_project.is_loaded = project.is_loaded
+sandbox_core_project.get = project.get
+sandbox_core_project.rule = project.rule
+sandbox_core_project.rules = project.rules
+sandbox_core_project.toolchain = project.toolchain
+sandbox_core_project.toolchains = project.toolchains
+sandbox_core_project.target = project.target
+sandbox_core_project.targets = project.targets
+sandbox_core_project.ordertargets = project.ordertargets
+sandbox_core_project.option = project.option
+sandbox_core_project.options = project.options
+sandbox_core_project.rootfile = project.rootfile
+sandbox_core_project.allfiles = project.allfiles
+sandbox_core_project.rcfile = project.rcfile
+sandbox_core_project.directory = project.directory
+sandbox_core_project.name = project.name
+sandbox_core_project.modes = project.modes
+sandbox_core_project.mtimes = project.mtimes
+sandbox_core_project.version = project.version
+sandbox_core_project.require = project.require
+sandbox_core_project.requires = project.requires
+sandbox_core_project.requires_str = project.requires_str
+sandbox_core_project.requireconfs_str = project.requireconfs_str
+sandbox_core_project.policy = project.policy
+sandbox_core_project.tmpdir = project.tmpdir
+sandbox_core_project.tmpfile = project.tmpfile
+sandbox_core_project.is_loaded = project.is_loaded
-- check project options
function sandbox_core_project.check()