diff options
| author | ruki <[email protected]> | 2015-06-04 22:28:15 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-06-04 22:28:24 +0800 |
| commit | 44fd11396d7b073e6b5227894c5db02b3585302f (patch) | |
| tree | d755e4b6bd6c910559a3cb72dd32cd5d0d0e3f7c | |
| parent | f0f9b217ddb81084a411d09a4a23292716b20c46 (diff) | |
impl auto rebuild and fix some bug
| -rw-r--r-- | install.bat | 1 | ||||
| -rw-r--r-- | xmake/scripts/action/_build.lua | 15 | ||||
| -rw-r--r-- | xmake/scripts/base/config.lua | 62 | ||||
| -rw-r--r-- | xmake/scripts/base/global.lua | 21 | ||||
| -rw-r--r-- | xmake/scripts/base/main.lua | 53 | ||||
| -rw-r--r-- | xmake/scripts/base/option.lua | 29 | ||||
| -rw-r--r-- | xmake/scripts/platform/iphoneos/prober.lua | 4 | ||||
| -rw-r--r-- | xmake/scripts/platform/macosx/prober.lua | 2 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/prober.lua (renamed from xmake/scripts/platform/msvc/prober.lua) | 0 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/tools/cl.lua (renamed from xmake/scripts/platform/msvc/tools/cl.lua) | 0 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/tools/link.lua (renamed from xmake/scripts/platform/msvc/tools/link.lua) | 0 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/tools/nmake.lua (renamed from xmake/scripts/platform/msvc/tools/nmake.lua) | 0 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/windows.lua (renamed from xmake/scripts/platform/msvc/msvc.lua) | 26 |
13 files changed, 146 insertions, 67 deletions
diff --git a/install.bat b/install.bat index 4c39de496..625e94c43 100644 --- a/install.bat +++ b/install.bat @@ -28,6 +28,7 @@ if %PROCESSOR_ARCHITECTURE%==x86_64 ( echo please input the install directory
set /p xmake_dir_install=(default: %xmake_dir_install_default%):
if "%xmake_dir_install%"=="" set xmake_dir_install=%xmake_dir_install_default%
+if exist "%xmake_dir_install%" rmdir /s /q "%xmake_dir_install%"
if not exist "%xmake_dir_install%" mkdir "%xmake_dir_install%"
rem compile xmake-core
diff --git a/xmake/scripts/action/_build.lua b/xmake/scripts/action/_build.lua index d07005eab..288485fc1 100644 --- a/xmake/scripts/action/_build.lua +++ b/xmake/scripts/action/_build.lua @@ -37,7 +37,7 @@ function _build.done() local target_name = config.get("target") -- rebuild it? - if config.get("rebuild") then + if config.get("rebuild") or config.get("__rebuild") then clean.remove(target_name) -- update it? elseif config.get("update") then @@ -53,6 +53,19 @@ function _build.done() return false end + -- clear rebuild mark and save configure to file + if config.get("__rebuild") then + + -- clear it + config.set("__rebuild", nil) + + -- save the configure + if not config.savexconf() then + -- error + utils.error("update configure failed!") + end + end + -- ok print("build ok!") return true diff --git a/xmake/scripts/base/config.lua b/xmake/scripts/base/config.lua index 6c8a22f58..41db332c4 100644 --- a/xmake/scripts/base/config.lua +++ b/xmake/scripts/base/config.lua @@ -230,8 +230,12 @@ end function config.set(name, value) -- check - assert(config._CURRENT) - assert(name and value and type(value) ~= "table") + assert(config._CURRENT and name) + + -- invalid value + if value and type(value) == "table" then + assert(false) + end -- get the current target local target = config._target() @@ -326,17 +330,38 @@ function config.loadxconf() -- save configs config._CONFIGS = newenv._CONFIGS - -- clear configs if the host has been changed + -- clear configs and mark as "rebuild" and "reconfig" if the host has been changed local target = config._target() if target and target.host ~= xmake._HOST then - -- clear configs - config._CONFIGS = {} + + -- clear configs and mark as "rebuild" + config._CONFIGS = { __rebuild = true } + + -- mark as "reconfig" if the current action is not "config" + if options._ACTION ~= "config" then + config._RECONFIG = true + end end - -- clear configs if the plat has been changed + -- clear configs and mark as "rebuild" if the plat has been changed if target and target.plat and options.plat and target.plat ~= options.plat then - -- clear configs - config._CONFIGS = {} + + -- clear configs and mark as "rebuild" + config._CONFIGS = { __rebuild = true } + end + + -- mark as "rebuild" if the arch has been changed + if target and target.arch and options.arch and target.arch ~= options.arch then + + -- mark as "rebuild" + config._CONFIGS.__rebuild = true + end + + -- mark as "rebuild" if the mode has been changed + if target and target.mode and options.mode and target.mode ~= options.mode then + + -- mark as "rebuild" + config._CONFIGS.__rebuild = true end elseif errors then -- error @@ -377,18 +402,21 @@ function config.loadxconf() end end - -- merge xmake._OPTIONS._DEFAULTS to target - for k, v in pairs(options._DEFAULTS) do + -- merge the default configure options to target + local defaults = option.defaults("config") + if defaults then + for k, v in pairs(defaults) do - -- check - assert(type(k) == "string") + -- check + assert(type(k) == "string") - -- skip some options - if config._need(k) then + -- skip some options + if config._need(k) then - -- save the default option to the target - if not target[k] then - target[k] = v + -- save the default option to the target + if not target[k] then + target[k] = v + end end end end diff --git a/xmake/scripts/base/global.lua b/xmake/scripts/base/global.lua index 2b3582a23..5b2f774f5 100644 --- a/xmake/scripts/base/global.lua +++ b/xmake/scripts/base/global.lua @@ -269,18 +269,21 @@ function global.loadxconf() end end - -- merge xmake._OPTIONS._DEFAULTS to the global configure - for k, v in pairs(options._DEFAULTS) do + -- merge the default global configure options to the global configure + local defaults = option.defaults("global") + if defaults then + for k, v in pairs(defaults) do - -- check - assert(type(k) == "string") + -- check + assert(type(k) == "string") - -- need configure it? - if global._need(k) then + -- need configure it? + if global._need(k) then - -- save the default option - if not configs[k] then - configs[k] = v + -- save the default option + if not configs[k] then + configs[k] = v + end end end end diff --git a/xmake/scripts/base/main.lua b/xmake/scripts/base/main.lua index 2624c8d53..2bd243ac4 100644 --- a/xmake/scripts/base/main.lua +++ b/xmake/scripts/base/main.lua @@ -425,13 +425,30 @@ function main._prepare_project() -- load xmake.xconf file first local errors = config.loadxconf() - if not errors then - -- load xmake.xproj file - errors = project.loadxproj(options.file) + if errors then return errors end + + -- xmake config or marked as "reconfig"? + if options._ACTION == "config" or config._RECONFIG then + + -- wrap the configure for more convenient to get and set values + local config_wrapped = {} + setmetatable(config_wrapped, + { + __index = function(tbl, key) + return config.get(key) + end, + __newindex = function(tbl, key, val) + config.set(key, val) + end + }) + + -- probe the current platform configure + platform.probe(config_wrapped, false) + end - -- ok? - return errors + -- load xmake.xproj file + return project.loadxproj(options.file) end -- done help @@ -527,25 +544,6 @@ function main._done_option() return false end - -- xmake config? - if options._ACTION == "config" then - - -- wrap the global configure for more convenient to get and set values - local config_wrapped = {} - setmetatable(config_wrapped, - { - __index = function(tbl, key) - return config.get(key) - end, - __newindex = function(tbl, key, val) - config.set(key, val) - end - }) - - -- probe the current platform configure - platform.probe(config_wrapped, false) - end - -- make the current platform configure if not platform.make() then -- error @@ -566,6 +564,13 @@ function main._done_option() -- dump platform platform.dump() + -- reconfig it first if marked as "reconfig" + if config._RECONFIG and not action.done("config") then + -- error + utils.error("reconfig failed for the changed host!") + return false + end + -- done action return action.done(options._ACTION or "build") end diff --git a/xmake/scripts/base/option.lua b/xmake/scripts/base/option.lua index cdf82adb5..820ba4e6a 100644 --- a/xmake/scripts/base/option.lua +++ b/xmake/scripts/base/option.lua @@ -402,6 +402,35 @@ function option.find(argv, name, shortname) end end +-- get all default options from the given action +function option.defaults(action) + + -- make defaults + local defaults = {} + + -- init the default value + for _, o in ipairs(option._MENU[action or "main"].options) do + + -- key=value? + if o[3] == "kv" then + + -- the key + local key = o[2] or o[1] + assert(key) + + -- save the default value + defaults[key] = o[4] + -- value with name? + elseif o[3] == "v" and o[2] then + -- save the default value + defaults[o[2]] = o[4] + end + end + + -- ok? + return defaults +end + -- print the menu function option.print_menu(action) diff --git a/xmake/scripts/platform/iphoneos/prober.lua b/xmake/scripts/platform/iphoneos/prober.lua index 589e3a4b1..d5de4a7c5 100644 --- a/xmake/scripts/platform/iphoneos/prober.lua +++ b/xmake/scripts/platform/iphoneos/prober.lua @@ -135,12 +135,12 @@ function prober.config(configs) if not prober._probe_xcode(configs) then return end -- probe the xcode sdk version - if not is_global and not prober._probe_xcode_sdkver(configs) then return end + if not prober._probe_xcode_sdkver(configs) then return end end -- probe the global configure -function prober.config(configs) +function prober.global(configs) -- probe the xcode application directory if not prober._probe_xcode(configs) then return end diff --git a/xmake/scripts/platform/macosx/prober.lua b/xmake/scripts/platform/macosx/prober.lua index e917d6817..3a3615293 100644 --- a/xmake/scripts/platform/macosx/prober.lua +++ b/xmake/scripts/platform/macosx/prober.lua @@ -129,7 +129,7 @@ end function prober.config(configs) -- probe the architecture - if prober._probe_arch(configs) then return end + if not prober._probe_arch(configs) then return end -- probe the xcode application directory if not prober._probe_xcode(configs) then return end diff --git a/xmake/scripts/platform/msvc/prober.lua b/xmake/scripts/platform/windows/prober.lua index c730ad9f1..c730ad9f1 100644 --- a/xmake/scripts/platform/msvc/prober.lua +++ b/xmake/scripts/platform/windows/prober.lua diff --git a/xmake/scripts/platform/msvc/tools/cl.lua b/xmake/scripts/platform/windows/tools/cl.lua index a8ab807a7..a8ab807a7 100644 --- a/xmake/scripts/platform/msvc/tools/cl.lua +++ b/xmake/scripts/platform/windows/tools/cl.lua diff --git a/xmake/scripts/platform/msvc/tools/link.lua b/xmake/scripts/platform/windows/tools/link.lua index 52528ca6c..52528ca6c 100644 --- a/xmake/scripts/platform/msvc/tools/link.lua +++ b/xmake/scripts/platform/windows/tools/link.lua diff --git a/xmake/scripts/platform/msvc/tools/nmake.lua b/xmake/scripts/platform/windows/tools/nmake.lua index 6d6b21258..6d6b21258 100644 --- a/xmake/scripts/platform/msvc/tools/nmake.lua +++ b/xmake/scripts/platform/windows/tools/nmake.lua diff --git a/xmake/scripts/platform/msvc/msvc.lua b/xmake/scripts/platform/windows/windows.lua index 332b2b5f7..03e30864e 100644 --- a/xmake/scripts/platform/msvc/msvc.lua +++ b/xmake/scripts/platform/windows/windows.lua @@ -17,23 +17,23 @@ -- Copyright (C) 2009 - 2015, ruki All rights reserved. -- -- @author ruki --- @file msvc.lua +-- @file windows.lua -- --- define module: msvc -local msvc = msvc or {} +-- define module: windows +local windows = windows or {} -- load modules local config = require("base/config") -- init host -msvc._HOST = "windows" +windows._HOST = "windows" -- init architectures -msvc._ARCHS = {"x86", "x64"} +windows._ARCHS = {"x86", "x64"} -- make configure -function msvc.make(configs) +function windows.make(configs) -- init the file formats configs.formats = {} @@ -54,28 +54,28 @@ function msvc.make(configs) end -- get the option menu for action: xmake config or global -function msvc.menu(action) +function windows.menu(action) -- init config option menu - msvc._MENU_CONFIG = msvc._MENU_CONFIG or + windows._MENU_CONFIG = windows._MENU_CONFIG or { {} , {nil, "vs", "kv", "auto", "The Microsoft Visual Studio" } , } -- init global option menu - msvc._MENU_GLOBAL = msvc._MENU_GLOBAL or + windows._MENU_GLOBAL = windows._MENU_GLOBAL or { {} , {nil, "vs", "kv", "auto", "The Microsoft Visual Studio" } , } -- get the option menu if action == "config" then - return msvc._MENU_CONFIG + return windows._MENU_CONFIG elseif action == "global" then - return msvc._MENU_GLOBAL + return windows._MENU_GLOBAL end end --- return module: msvc -return msvc +-- return module: windows +return windows |
