diff options
| author | ruki <[email protected]> | 2015-05-25 11:13:04 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-05-25 11:13:04 +0800 |
| commit | d3afea28dfea3709fde2296a090cf94598271047 (patch) | |
| tree | 954d26f9ffd3ebd29a64cc9ecb585542d9d8d0fa /xmake/scripts/platform | |
| parent | 99582c402d5580877247344cca1f708f15e16d7b (diff) | |
custom option menu for platform
Diffstat (limited to 'xmake/scripts/platform')
| -rw-r--r-- | xmake/scripts/platform/android/_android.lua | 24 | ||||
| -rw-r--r-- | xmake/scripts/platform/ios/_ios.lua | 34 | ||||
| -rw-r--r-- | xmake/scripts/platform/linux/_linux.lua | 20 | ||||
| -rw-r--r-- | xmake/scripts/platform/macosx/_macosx.lua | 38 | ||||
| -rw-r--r-- | xmake/scripts/platform/platform.lua | 97 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/_windows.lua | 25 |
6 files changed, 221 insertions, 17 deletions
diff --git a/xmake/scripts/platform/android/_android.lua b/xmake/scripts/platform/android/_android.lua index d79236a28..b91aa4eca 100644 --- a/xmake/scripts/platform/android/_android.lua +++ b/xmake/scripts/platform/android/_android.lua @@ -38,6 +38,30 @@ function _android.init(configs) configs.archs.armv6 = {} end +-- get the option menu for action: xmake config or global +function _android.menu(action) + + -- init config option menu + _android._MENU_CONFIG = _android._MENU_CONFIG or + { {} + , {nil, "ndk", "kv", nil, "The NDK directory" } + , {nil, "ndk_sdkver", "kv", "auto", "The SDK version for NDK" } + , } + + -- init global option menu + _android._MENU_GLOBAL = _android._MENU_GLOBAL or + { {} + , {nil, "ndk", "kv", nil, "The NDK directory" } + , {nil, "ndk_sdkver", "kv", "auto", "The SDK version for NDK" } + , } + + -- get the option menu + if action == "config" then + return _android._MENU_CONFIG + elseif action == "global" then + return _android._MENU_GLOBAL + end +end -- return module: _android return _android diff --git a/xmake/scripts/platform/ios/_ios.lua b/xmake/scripts/platform/ios/_ios.lua index f74d26544..a8cb3dc75 100644 --- a/xmake/scripts/platform/ios/_ios.lua +++ b/xmake/scripts/platform/ios/_ios.lua @@ -39,6 +39,40 @@ function _ios.init(configs) configs.archs.arm64 = {} end +-- get the option menu for action: xmake config or global +function _ios.menu(action) + + -- init config option menu + _ios._MENU_CONFIG = _ios._MENU_CONFIG or + { {} + , {nil, "mm", "kv", nil, "The objc compiler" } + , {nil, "mx", "kv", nil, "The objc/c++ compiler" } + , {nil, "mxx", "kv", nil, "The objc++ compiler" } + , {nil, "mflags", "kv", nil, "The objc compiler flags" } + , {nil, "mxflags", "kv", nil, "The objc/c++ compiler flags" } + , {nil, "mxxflags", "kv", nil, "The objc++ compiler flags" } + , {} + , {nil, "xcode", "kv", "/Applications/Xcode.app" + , "The Xcode application directory" } + , {nil, "xcode_sdkver", "kv", "auto", "The SDK version for Xcode" } + , } + + -- init global option menu + _ios._MENU_GLOBAL = _ios._MENU_GLOBAL or + { {} + , {nil, "xcode", "kv", "/Applications/Xcode.app" + , "The Xcode application directory" } + , {nil, "xcode_sdkver", "kv", "auto", "The SDK version for Xcode" } + , } + + -- get the option menu + if action == "config" then + return _ios._MENU_CONFIG + elseif action == "global" then + return _ios._MENU_GLOBAL + end +end + -- return module: _ios return _ios diff --git a/xmake/scripts/platform/linux/_linux.lua b/xmake/scripts/platform/linux/_linux.lua index 2bc54e4c1..8aba6d7ec 100644 --- a/xmake/scripts/platform/linux/_linux.lua +++ b/xmake/scripts/platform/linux/_linux.lua @@ -38,6 +38,26 @@ function _linux.init(configs) configs.archs.x64 = {} end +-- get the option menu for action: xmake config or global +function _linux.menu(action) + + -- init config option menu + _linux._MENU_CONFIG = _linux._MENU_CONFIG or + { {} + , {nil, "ar", "kv", "ar", "The library creator" } + , {nil, "arflags", "kv", nil, "The library creator flags" } + } + + -- init global option menu + _linux._MENU_GLOBAL = _linux._MENU_GLOBAL or {} + + -- get the option menu + if action == "config" then + return _linux._MENU_CONFIG + elseif action == "global" then + return _linux._MENU_GLOBAL + end +end -- return module: _linux return _linux diff --git a/xmake/scripts/platform/macosx/_macosx.lua b/xmake/scripts/platform/macosx/_macosx.lua index 79fd1c9c5..ee6df36c4 100644 --- a/xmake/scripts/platform/macosx/_macosx.lua +++ b/xmake/scripts/platform/macosx/_macosx.lua @@ -23,7 +23,7 @@ -- define module: _macosx local _macosx = _macosx or {} --- init _macosx +-- init configure function _macosx.init(configs) -- init the file name formats @@ -36,8 +36,44 @@ function _macosx.init(configs) configs.archs = {} configs.archs.x86 = {} configs.archs.x64 = {} + + -- save configure + _macosx._CONFIGS = configs end +-- get the option menu for action: xmake config or global +function _macosx.menu(action) + + -- init config option menu + _macosx._MENU_CONFIG = _macosx._MENU_CONFIG or + { {} + , {nil, "mm", "kv", nil, "The objc compiler" } + , {nil, "mx", "kv", nil, "The objc/c++ compiler" } + , {nil, "mxx", "kv", nil, "The objc++ compiler" } + , {nil, "mflags", "kv", nil, "The objc compiler flags" } + , {nil, "mxflags", "kv", nil, "The objc/c++ compiler flags" } + , {nil, "mxxflags", "kv", nil, "The objc++ compiler flags" } + , {} + , {nil, "xcode", "kv", "/Applications/Xcode.app" + , "The Xcode application directory" } + , {nil, "xcode_sdkver", "kv", "auto", "The SDK version for Xcode" } + , } + + -- init global option menu + _macosx._MENU_GLOBAL = _macosx._MENU_GLOBAL or + { {} + , {nil, "xcode", "kv", "/Applications/Xcode.app" + , "The Xcode application directory" } + , {nil, "xcode_sdkver", "kv", "auto", "The SDK version for Xcode" } + , } + + -- get the option menu + if action == "config" then + return _macosx._MENU_CONFIG + elseif action == "global" then + return _macosx._MENU_GLOBAL + end +end -- return module: _macosx return _macosx diff --git a/xmake/scripts/platform/platform.lua b/xmake/scripts/platform/platform.lua index 24d618835..533026c9c 100644 --- a/xmake/scripts/platform/platform.lua +++ b/xmake/scripts/platform/platform.lua @@ -29,39 +29,46 @@ local path = require("base/path") local utils = require("base/utils") local config = require("base/config") +-- load the given platform +function platform._load(plat) + + -- load it + return require("platform/" .. plat .. "/_" .. plat) +end + -- get the configure of the given platform -function platform._config(plat) +function platform._configs(plat) -- the configure platform._CONFIGS = platform._CONFIGS or {} - local config = platform._CONFIGS[plat] + local configs = platform._CONFIGS[plat] -- return it directly if exists - if config then - return config + if configs then + return configs end -- load platform - local p = require("platform/" .. plat .. "/_" .. plat) + local p = platform._load(plat) if p then -- make configure platform._CONFIGS[plat]= {} - config = platform._CONFIGS[plat] + configs = platform._CONFIGS[plat] -- init configure - p.init(config) + p.init(configs) end -- ok? - return config + return configs end -- init platform function platform.init() -- init the current platform - return platform._config(config.get("plat")) + return platform._configs(config.get("plat")) end -- get the given configure @@ -71,10 +78,10 @@ function platform.get(name) assert(platform._CONFIGS) -- get the current platform configure - local config = platform._config(config.get("plat")) - if config then + local configs = platform._configs(config.get("plat")) + if configs then -- get it - return config[name] + return configs[name] end end @@ -96,7 +103,7 @@ function platform.dump() -- dump if xmake._OPTIONS.verbose then - utils.dump(platform._config(config.get("plat"))) + utils.dump(platform._configs(config.get("plat"))) end end @@ -132,9 +139,9 @@ function platform.archs(plat) -- load all platform configs local archs = {} - local config = platform._config(plat) - if config and config.archs then - for arch, _ in pairs(config.archs) do + local configs = platform._configs(plat) + if configs and configs.archs then + for arch, _ in pairs(configs.archs) do archs[table.getn(archs) + 1] = arch end end @@ -142,6 +149,64 @@ function platform.archs(plat) -- ok return archs end + +-- get the option menu for action: xmake config or global +function platform.menu(action) + + -- check + assert(action) + + -- get all platforms + local plats = platform.plats() + assert(plats) + + -- load and merge all platform menus + local menus = {} + local exist = {} + for _, plat in ipairs(plats) do + + -- load platform + local p = platform._load(plat) + if p and p.menu then + + -- get the platform menu + local menu = p.menu(action) + if menu then + + -- exists options? + local exists = false + for _, option in ipairs(menu) 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 menu option + for _, option in ipairs(menu) do + + -- merge it and remove repeat + local name = option[2] + if name then + if not exist[name] then + menus[table.getn(menus) + 1] = option + exist[name] = true + end + else + menus[table.getn(menus) + 1] = option + end + end + end + end + end + end + + -- get all platform menus + return menus +end -- return module: platform return platform diff --git a/xmake/scripts/platform/windows/_windows.lua b/xmake/scripts/platform/windows/_windows.lua index 56304ee51..7a31eabaa 100644 --- a/xmake/scripts/platform/windows/_windows.lua +++ b/xmake/scripts/platform/windows/_windows.lua @@ -39,6 +39,31 @@ function _windows.init(configs) configs.archs.x64 = {} end +-- get the option menu for action: xmake config or global +function _windows.menu(action) + + -- init config option menu + _windows._MENU_CONFIG = _windows._MENU_CONFIG or + { {} + , {nil, "vs", "kv", "auto", "The Microsoft Visual Studio directory" } + , {nil, "vs_sdk", "kv", "auto", "The Microsoft Visual Studio SDK directory" } + , } + + -- init global option menu + _windows._MENU_GLOBAL = _windows._MENU_GLOBAL or + { {} + , {nil, "vs", "kv", "auto", "The Microsoft Visual Studio directory" } + , {nil, "vs_sdk", "kv", "auto", "The Microsoft Visual Studio SDK directory" } + , } + + -- get the option menu + if action == "config" then + return _windows._MENU_CONFIG + elseif action == "global" then + return _windows._MENU_GLOBAL + end +end + -- return module: _windows return _windows |
