summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2015-06-04 22:28:15 +0800
committerruki <[email protected]>2015-06-04 22:28:24 +0800
commit44fd11396d7b073e6b5227894c5db02b3585302f (patch)
treed755e4b6bd6c910559a3cb72dd32cd5d0d0e3f7c
parentf0f9b217ddb81084a411d09a4a23292716b20c46 (diff)
impl auto rebuild and fix some bug
-rw-r--r--install.bat1
-rw-r--r--xmake/scripts/action/_build.lua15
-rw-r--r--xmake/scripts/base/config.lua62
-rw-r--r--xmake/scripts/base/global.lua21
-rw-r--r--xmake/scripts/base/main.lua53
-rw-r--r--xmake/scripts/base/option.lua29
-rw-r--r--xmake/scripts/platform/iphoneos/prober.lua4
-rw-r--r--xmake/scripts/platform/macosx/prober.lua2
-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