summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-05-14 22:36:12 +0800
committerruki <[email protected]>2020-05-14 09:37:17 +0800
commitf7ece67bf3f768f98b22818aa13afd65a00831d7 (patch)
treed974226c87da5721b9e3d013cbe1e13e0e24030f
parent3d934a771f3a383f915d691ad3edb293aed58e4f (diff)
add set_policy api
-rw-r--r--xmake/core/project/project.lua111
-rw-r--r--xmake/core/project/target.lua12
-rw-r--r--xmake/core/sandbox/modules/import/core/project/project.lua1
3 files changed, 74 insertions, 50 deletions
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index d931a3c3b..f7abb5de1 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -595,44 +595,10 @@ function project._load_packages()
return project._load_scope("package", true, false)
end
--- get interpreter
-function project.interpreter()
-
- -- the interpreter has been initialized? return it directly
- if project._INTERPRETER then
- return project._INTERPRETER
- end
-
- -- init interpreter
- local interp = interpreter.new()
- assert(interp)
-
- -- set root directory
- interp:rootdir_set(project.directory())
-
- -- set root scope
- interp:rootscope_set("target")
-
- -- define apis for rule
- interp:api_define(rule.apis())
-
- -- define apis for task
- interp:api_define(task.apis())
-
- -- define apis for target
- interp:api_define(target.apis())
-
- -- define apis for option
- interp:api_define(option.apis())
-
- -- define apis for package
- interp:api_define(package.apis())
+-- get project apis
+function project.apis()
- -- define apis for language
- interp:api_define(language.apis())
-
- -- define apis for project
- interp:api_define
+ return
{
values =
{
@@ -675,6 +641,46 @@ function project.interpreter()
, {"add_platformdirs", project._api_add_platformdirs }
}
}
+end
+
+-- get interpreter
+function project.interpreter()
+
+ -- the interpreter has been initialized? return it directly
+ if project._INTERPRETER then
+ return project._INTERPRETER
+ end
+
+ -- init interpreter
+ local interp = interpreter.new()
+ assert(interp)
+
+ -- set root directory
+ interp:rootdir_set(project.directory())
+
+ -- set root scope
+ interp:rootscope_set("target")
+
+ -- define apis for rule
+ interp:api_define(rule.apis())
+
+ -- define apis for task
+ interp:api_define(task.apis())
+
+ -- define apis for target
+ interp:api_define(target.apis())
+
+ -- define apis for option
+ interp:api_define(option.apis())
+
+ -- define apis for package
+ interp:api_define(package.apis())
+
+ -- define apis for language
+ interp:api_define(language.apis())
+
+ -- define apis for project
+ interp:api_define(project.apis())
-- register api: deprecated
deprecated_project.api_register(interp)
@@ -786,11 +792,31 @@ function project.get(name)
return project._INFO and project._INFO:get(name) or nil
end
+-- get the project name
+function project.name()
+ local name = project.get("project")
+ -- TODO multi project names? we only get the first name now.
+ -- and we need improve it in the future.
+ if type(name) == "table" then
+ name = name[1]
+ end
+ return name
+end
+
-- get the project version, the root version of the target scope
function project.version()
return project.get("target.version")
end
+-- get the project policy, the root policy of the target scope
+function project.policy(name)
+ local policies = project.get("target.policy")
+ if policies then
+ local value = policies[name]
+ return value and table.unwrap(value)
+ end
+end
+
-- clear project cache to reload targets and options
function project.clear()
@@ -941,17 +967,6 @@ function project.mtimes()
return project.interpreter():mtimes()
end
--- get the project name
-function project.name()
- local name = project.get("project")
- -- TODO multi project names? we only get the first name now.
- -- and we need improve it in the future.
- if type(name) == "table" then
- name = name[1]
- end
- return name
-end
-
-- get the project modes
function project.modes()
local modes = project.get("modes") or {}
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 5e67d0f7e..b466c9e2e 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -465,11 +465,18 @@ function _instance:version()
end
end
end
-
- -- ok?
return version, version_build
end
+-- get the target policy
+function _instance:policy(name)
+ local policies = self:get("policy")
+ if policies then
+ local value = policies[name]
+ return value and table.unwrap(value)
+ end
+end
+
-- get the base name of target file
function _instance:basename()
local filename = self:get("filename")
@@ -1669,6 +1676,7 @@ function target.apis()
, "target.set_configvar"
, "target.set_runenv"
, "target.set_toolchain"
+ , "target.set_policy"
-- target.add_xxx
, "target.add_values"
, "target.add_runenvs"
diff --git a/xmake/core/sandbox/modules/import/core/project/project.lua b/xmake/core/sandbox/modules/import/core/project/project.lua
index 758f8218f..c6796af36 100644
--- a/xmake/core/sandbox/modules/import/core/project/project.lua
+++ b/xmake/core/sandbox/modules/import/core/project/project.lua
@@ -55,6 +55,7 @@ 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
-- load project
function sandbox_core_project.load()