1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
--!The Automatic Cross-platform Build Tool
--
-- XMake is free software; you can redistribute it and/or modify
-- it under the terms of the GNU Lesser General Public License as published by
-- the Free Software Foundation; either version 2.1 of the License, or
-- (at your option) any later version.
--
-- XMake is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public License
-- along with XMake;
-- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
--
-- Copyright (C) 2009 - 2015, ruki All rights reserved.
--
-- @author ruki
-- @file option.lua
--
-- define module: option
local option = {}
-- init _OPTIONS.metatable to always use lowercase keys
local _OPTIONS_metatable =
{
__index = function(table, key)
-- make lowercase key
if type(key) == "string" then
key = key:lower()
end
return rawget(table, key)
end
, __newindex = function(table, key, value)
-- make lowercase key
if type(key) == "string" then
key = key:lower()
end
rawset(table, key, value)
end
}
xmake._OPTIONS = xmake._OPTIONS or {}
setmetatable(xmake._OPTIONS, _OPTIONS_metatable)
-- done the option
function option.done(argv)
-- check
assert(option._MENU)
-- parse _ARGV to _OPTIONS
for i, arg in ipairs(argv) do
-- parse key and value
local key, value
local i = arg:find("=", 1, true)
-- key=value?
if i then
key = arg:sub(1, i - 1)
value = arg:sub(i + 1)
-- only key?
else
key = arg
value = ""
end
-- -k?
if key:startswith("-") then
xmake._OPTIONS[key:sub(2)] = value
-- --key=value?
elseif key:startswith("--") then
xmake. _OPTIONS[key:sub(3)] = value
end
end
-- ok
return true
end
-- print the help option
function option.help()
-- check
assert(option._MENU)
end
-- return module: option
return option
|