summaryrefslogtreecommitdiff
path: root/xmake/core/platform/menu.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2016-04-21 11:21:50 +0800
committerruki <[email protected]>2016-04-21 11:21:50 +0800
commit6f8d1fe8d6451d403e6c2ec72b630bb500b10b4d (patch)
tree63dbdf458f9c2b200fe6e1ff2c5e751a50e10e04 /xmake/core/platform/menu.lua
parent655f4fc9f27d19bb02eb6f131412f88db42f4253 (diff)
reimpl platform and it's menu
Diffstat (limited to 'xmake/core/platform/menu.lua')
-rw-r--r--xmake/core/platform/menu.lua99
1 files changed, 99 insertions, 0 deletions
diff --git a/xmake/core/platform/menu.lua b/xmake/core/platform/menu.lua
new file mode 100644
index 000000000..2c42ee91f
--- /dev/null
+++ b/xmake/core/platform/menu.lua
@@ -0,0 +1,99 @@
+--!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) 2015 - 2016, ruki All rights reserved.
+--
+-- @author ruki
+-- @file menu.lua
+--
+
+-- define module
+local menu = menu or {}
+
+-- load modules
+local os = require("base/os")
+local path = require("base/path")
+local utils = require("base/utils")
+local table = require("base/table")
+local platform = require("platform/platform")
+
+-- get the option menu for action: xmake config or global
+function menu.options(action)
+
+ -- check
+ assert(action)
+
+ -- get all platforms
+ local plats = platform.plats()
+ assert(plats)
+
+ -- load and merge all platform options
+ local exist = {}
+ local results = {}
+ for _, plat in ipairs(plats) do
+
+ -- load platform
+ local instance, errors = platform.load(plat)
+ if not instance then
+ return nil, errors
+ end
+
+ -- get menu
+ local menu = instance:menu()
+ if menu then
+
+ -- get the options for this action
+ local options = menu[action]
+ if options then
+
+ -- exists options?
+ local exists = false
+ for _, option in ipairs(options) do
+ local name = option[2]
+ if name and not exist[name] then
+ exists = true
+ break
+ end
+ end
+
+ -- merge it and remove repeat if exists options
+ if exists then
+
+ -- get the platform option
+ for _, option in ipairs(options) do
+
+ -- merge it and remove repeat
+ local name = option[2]
+ if name then
+ if not exist[name] then
+ table.insert(results, option)
+ exist[name] = true
+ end
+ else
+ table.insert(results, option)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ -- ok?
+ return results
+end
+
+-- return module
+return menu