diff options
| author | ruki <[email protected]> | 2016-05-30 09:21:58 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2016-05-30 09:21:58 +0800 |
| commit | 23acb023758b0b47cb5083d0d800fc48fc96d920 (patch) | |
| tree | ec5af9f5185aafb2dd7f7d6d46494f838a602b75 /xmake/actions/install/main.lua | |
| parent | 4b86a4104d8076636ffa9a778b244f698aec5a49 (diff) | |
impl install action
Diffstat (limited to 'xmake/actions/install/main.lua')
| -rwxr-xr-x | xmake/actions/install/main.lua | 131 |
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 |
