1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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
|