diff options
| author | ruki <[email protected]> | 2018-05-05 00:42:02 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-05-04 22:12:14 +0800 |
| commit | 3567313cb859aa88e71ef9aa84e484f09fbccce8 (patch) | |
| tree | 315ceac7102e8b09cd654f813fd58afc14afb603 /xmake/core | |
| parent | 95af67cc06c76559599b79cfd057b1253bfdc95c (diff) | |
add values api to target
Diffstat (limited to 'xmake/core')
| -rw-r--r-- | xmake/core/base/interpreter.lua | 83 | ||||
| -rw-r--r-- | xmake/core/project/target.lua | 22 |
2 files changed, 98 insertions, 7 deletions
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua index c04ad5d21..79c782842 100644 --- a/xmake/core/base/interpreter.lua +++ b/xmake/core/base/interpreter.lua @@ -989,9 +989,6 @@ end -- function interpreter:api_register_set_values(scope_kind, ...) - -- check - assert(self) - -- define implementation local implementation = function (self, scope, name, ...) @@ -1024,9 +1021,6 @@ end -- register api for add_values function interpreter:api_register_add_values(scope_kind, ...) - -- check - assert(self) - -- define implementation local implementation = function (self, scope, name, ...) @@ -1056,6 +1050,82 @@ function interpreter:api_register_add_values(scope_kind, ...) self:_api_register_xxx_values(scope_kind, "add", implementation, ...) end +-- register api for set_keyvalues +-- +-- interp:api_register_set_keyvalues("scope_kind", "name1", "name2", ...) +-- +-- api: +-- set_$(name1)("key", "value1") +-- set_$(name2)("key", "value1", "value2", ...) +-- +function interpreter:api_register_set_keyvalues(scope_kind, ...) + + -- define implementation + local implementation = function (self, scope, name, key, ...) + + -- get extra config + local values = {...} + local extra_config = values[#values] + if table.is_dictionary(extra_config) then + table.remove(values) + else + extra_config = nil + end + + -- save values + name = name .. "." .. key + scope[name] = values + + -- save extra config + if extra_config then + scope["__extra_" .. name] = scope["__extra_" .. name] or {} + local extrascope = scope["__extra_" .. name] + for _, value in ipairs(values) do + extrascope[value] = extra_config + end + end + end + + -- register implementation + self:_api_register_xxx_values(scope_kind, "set", implementation, ...) +end + +-- register api for add_keyvalues +-- +-- interp:api_register_add_keyvalues("scope_kind", "name1", "name2", ...) +-- +function interpreter:api_register_add_keyvalues(scope_kind, ...) + + -- define implementation + local implementation = function (self, scope, name, key, ...) + + -- get extra config + local values = {...} + local extra_config = values[#values] + if table.is_dictionary(extra_config) then + table.remove(values) + else + extra_config = nil + end + + -- save values + name = name .. "." .. key + scope[name] = table.join2(scope[name] or {}, values) + + -- save extra config + if extra_config then + scope["__extra_" .. name] = scope["__extra_" .. name] or {} + local extrascope = scope["__extra_" .. name] + for _, value in ipairs(values) do + extrascope[value] = extra_config + end + end + end + + -- register implementation + self:_api_register_xxx_values(scope_kind, "add", implementation, ...) +end + -- register api for set_array function interpreter:api_register_set_array(scope_kind, ...) @@ -1086,7 +1156,6 @@ function interpreter:api_register_add_array(scope_kind, ...) -- append array? scope[name] = scope[name] or {} table.insert(scope[name], {...}) - end -- register implementation diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua index 896845e2c..20e8fbdaa 100644 --- a/xmake/core/project/target.lua +++ b/xmake/core/project/target.lua @@ -68,6 +68,13 @@ function target.apis() , "target.add_languages" , "target.add_vectorexts" } + , keyvalues = + { + -- target.set_xxx + "target.set_values" + -- target.add_xxx + , "target.add_values" + } , pathes = { -- target.set_xxx @@ -240,6 +247,21 @@ function target:data_add(name, data) self._DATA[name] = table.unwrap(table.join(self._DATA[name] or {}, data)) end +-- get values +function target:values(name) + return self:get("values." .. name) +end + +-- set values +function target:values_set(name, ...) + self:set("values." .. name, ...) +end + +-- add values +function target:values_add(name, ...) + self:add("values." .. name, ...) +end + -- dump this target function target:dump() table.dump(self._INFO) |
