summaryrefslogtreecommitdiff
path: root/xmake/actions/install/main.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2016-05-30 09:21:58 +0800
committerruki <[email protected]>2016-05-30 09:21:58 +0800
commit23acb023758b0b47cb5083d0d800fc48fc96d920 (patch)
treeec5af9f5185aafb2dd7f7d6d46494f838a602b75 /xmake/actions/install/main.lua
parent4b86a4104d8076636ffa9a778b244f698aec5a49 (diff)
impl install action
Diffstat (limited to 'xmake/actions/install/main.lua')
-rwxr-xr-xxmake/actions/install/main.lua131
1 files changed, 131 insertions, 0 deletions
diff --git a/xmake/actions/install/main.lua b/xmake/actions/install/main.lua
new file mode 100755
index 000000000..34e4f15eb
--- /dev/null
+++ b/xmake/actions/install/main.lua
@@ -0,0 +1,131 @@
+--!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 main.lua
+--
+
+-- imports
+import("core.base.option")
+import("core.project.task")
+import("core.project.config")
+import("core.project.global")
+import("core.project.project")
+import("core.platform.platform")
+
+-- install package
+function _install_package(target)
+
+ -- make the package directory first if not exists
+ os.mkdir("$(packagedir)")
+
+ -- copy the package to the output directory
+ os.cp(format("$(buildir)/%s.pkg", target:name()), "$(packagedir)")
+end
+
+-- install target
+function _install_target(target)
+
+ -- get kind
+ local kind = target:get("kind")
+
+ -- get script
+ local scripts =
+ {
+ binary = _install_package
+ , static = _install_package
+ , shared = _install_package
+ }
+
+ -- check
+ assert(scripts[kind], "this target(%s) with kind(%s) can not be installd!", target:name(), kind)
+
+ -- install it
+ scripts[kind](target)
+end
+
+-- install the given target
+function _install(target)
+
+ -- enter project directory
+ os.cd(project.directory())
+
+ -- the target scripts
+ local scripts =
+ {
+ target:get("install_before")
+ , target:get("install") or _install_target
+ , target:get("install_after")
+ }
+
+ -- install the target scripts
+ for i = 1, 3 do
+ local script = scripts[i]
+ if script ~= nil then
+ script(target)
+ end
+ end
+
+ -- leave project directory
+ os.cd("-")
+end
+
+-- install the given target and deps
+function _install_target_and_deps(target)
+
+ -- this target have been finished?
+ if _g.finished[target:name()] then
+ return
+ end
+
+ -- install for all dependent targets
+ for _, depname in ipairs(target:get("deps")) do
+ _install_target_and_deps(project.target(depname))
+ end
+
+ -- install target
+ _install_target(target)
+
+ -- finished
+ _g.finished[target:name()] = true
+end
+
+-- main
+function main()
+
+ -- get the target name
+ local targetname = option.get("target")
+
+ -- init finished states
+ _g.finished = {}
+
+ -- package it first
+ task.run("package", {target = targetname})
+
+ -- install all?
+ if targetname == "all" then
+ for _, target in pairs(project.targets()) do
+ _install_target_and_deps(target)
+ end
+ else
+ _install_target_and_deps(project.target(targetname))
+ end
+
+ -- trace
+ print("install ok!")
+end