summaryrefslogtreecommitdiff
path: root/xmake/scripts/action/_run.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2015-06-03 16:21:14 +0800
committerruki <[email protected]>2015-06-03 16:21:14 +0800
commitfc3638d5128d6f652d79df8985ca5efcb104d22f (patch)
tree87ddca12301de8a3e19b210708288ebfdee31f28 /xmake/scripts/action/_run.lua
parentbcb0d8e7eb53865f627cadd79eb181de34e86f5a (diff)
run the given target
Diffstat (limited to 'xmake/scripts/action/_run.lua')
-rw-r--r--xmake/scripts/action/_run.lua58
1 files changed, 55 insertions, 3 deletions
diff --git a/xmake/scripts/action/_run.lua b/xmake/scripts/action/_run.lua
index 92972aa0b..8de5ab5f1 100644
--- a/xmake/scripts/action/_run.lua
+++ b/xmake/scripts/action/_run.lua
@@ -24,15 +24,67 @@
local _run = _run or {}
-- load modules
+local rule = require("base/rule")
+local path = require("base/path")
local utils = require("base/utils")
local config = require("base/config")
+local project = require("base/project")
-- done the given config
function _run.done()
-
- -- ok
- return true
+ -- the options
+ local options = xmake._OPTIONS
+ assert(options and xmake._PROJECT_DIR)
+
+ -- the target name
+ local name = options.target
+ if not name then
+ -- error
+ utils.error("no runable target!")
+ return false
+ end
+
+ -- the targets
+ local targets = project.targets()
+ if not targets or not targets[name] then
+ -- error
+ utils.error("not found target: %s!", name)
+ return false
+ end
+
+ -- the target
+ local target = targets[name]
+ if not target.kind or type(target.kind) ~= "string" or target.kind ~= "binary" then
+ -- error
+ utils.error("the target %s is not executale!", name)
+ return false
+ end
+
+ -- the target file
+ local targetfile = rule.targetfile(name, target)
+ if targetfile and not path.is_absolute(targetfile) then
+ targetfile = path.absolute(targetfile, xmake._PROJECT_DIR)
+ end
+
+ -- check the target file
+ if not targetfile and not os.isfile(targetfile) then
+ -- error
+ utils.error("not found target file: %s!", targetfile)
+ return false
+ end
+
+ -- the arguments
+ local arguments = options.arguments or {}
+ if type(arguments) ~= "table" then
+ arguments = {}
+ end
+
+ -- done
+ local ok = os.execute(string.format("%s %s", targetfile, table.concat(arguments)))
+
+ -- ok?
+ return utils.ifelse(ok == 0, true, false)
end
-- return module: _run