summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-01-25 21:58:20 +0800
committerruki <[email protected]>2017-01-25 21:58:20 +0800
commitb9685215fcd76bc92a20f0d534f65fa692a599ec (patch)
treeec577d8737dbc338e9b8ae55dfa9de96f6b0b3f9
parent52d3b60f66b27a0a7f6fad5048f72de396d91ca3 (diff)
parse named flags for language
-rw-r--r--xmake/core/language/language.lua48
1 files changed, 47 insertions, 1 deletions
diff --git a/xmake/core/language/language.lua b/xmake/core/language/language.lua
index f14ebc613..bf2a8517f 100644
--- a/xmake/core/language/language.lua
+++ b/xmake/core/language/language.lua
@@ -141,7 +141,53 @@ end
-- get the named flags
function _instance:namedflags()
- -- TODO
+ -- attempt to get it from cache first
+ if self._NAMEDFLAGS then
+ return self._NAMEDFLAGS
+ end
+
+ -- get namedflags
+ local results = {}
+ for toolkind, namedflags in pairs(table.wrap(self._INFO.namedflags)) do
+
+ -- make tool info
+ local toolinfo = results[toolkind] or {}
+ for _, namedflag in ipairs(namedflags) do
+
+ -- split it by '.'
+ local splitinfo = namedflag:split('.')
+ assert(#splitinfo == 2)
+
+ -- get flag scope
+ local flagscope = splitinfo[1]
+ assert(flagscope)
+
+ -- get flag info
+ local flaginfo = splitinfo[2]:split(':')
+
+ -- get flag name
+ local flagname = flaginfo[1]
+ assert(flagname)
+
+ -- get check state
+ local checkstate = false
+ if #flaginfo == 2 and flaginfo[2] == "check" then
+ checkstate = true
+ end
+
+ -- insert this flag info
+ table.insert(toolinfo, {flagname, checkstate})
+ end
+
+ -- save this tool info
+ results[toolkind] = toolinfo
+ end
+
+ -- cache this results
+ self._NAMEDFLAGS = results
+
+ -- ok?
+ return results
end
-- the directory of language