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
132
133
134
135
136
137
138
139
140
141
142
143
|
--!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) 2009 - 2015, ruki All rights reserved.
--
-- @author ruki
-- @file install.lua
--
-- define module: install
local install = install or {}
-- load modules
local os = require("base/os")
local io = require("base/io")
local rule = require("base/rule")
local path = require("base/path")
local utils = require("base/utils")
local config = require("base/config")
local platform = require("platform/platform")
-- install target from the project script
function install._done_from_project(target)
-- check
assert(target)
-- install it using the project script first
local installscript = target.installscript
if type(installscript) == "function" then
-- remove it
target.installscript = nil
-- install it
return installscript(target)
end
-- continue
return 0
end
-- install target from the platform script
function install._done_from_platform(target)
-- check
assert(target)
-- the platform install script file
local installscript = nil
local scriptfile = platform.directory() .. "/install.lua"
if os.isfile(scriptfile) then
-- load the install script
local script, errors = loadfile(scriptfile)
if script then
installscript = script()
if type(installscript) == "table" and installscript.main then
installscript = installscript.main
end
else
utils.error(errors)
end
end
-- install it
if type(installscript) == "function" then
return installscript(target)
end
-- continue
return 0
end
-- install target from the given target configure
function install._done(target)
-- check
assert(target)
-- install it from the project script
local ok = install._done_from_project(target)
if ok ~= 0 then return utils.ifelse(ok == 1, true, false) end
-- install it from the platform script
local ok = install._done_from_platform(target)
if ok ~= 0 then return utils.ifelse(ok == 1, true, false) end
-- ok
return true
end
-- get the configure file
function install._file()
-- get it
return config.directory() .. "/install.conf"
end
-- done install from the configure
function install.done(configs)
-- check
assert(configs)
-- install targets
for _, target in pairs(configs) do
-- install it
if not install._done(target) then
-- errors
utils.error("install %s failed!", target.name)
return false
end
end
-- save to the configure file
return io.save(install._file(), configs)
end
-- load the install configure
function install.load()
-- load it
return io.load(install._file())
end
-- return module: install
return install
|