-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·182 lines (148 loc) · 3.92 KB
/
build.sh
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/usr/local/bin/zsh
set -e
source $(dirname $0)/build.env
logdir="buildlog"
portsroot=/usr/ports
mkdir -p $logdir
for f in $(ls $logdir)
do
rm $logdir/$f
done
pkgtype=$1
function build {
local origin=$1
log2 "preparing $origin"
local logfile="$(originlog $origin)"
log3 "pre-cleaning $origin"
(cd $portsroot/$origin && make clean) >> /dev/null || log3 'pre-cleaning failed - ignoring that'
log3 "building $origin"
if ! (cd $portsroot/$origin && make build 2>&1) >> $logfile
then
log3 "package $origin failed build step - see $logfile"
return
else
rm $logfile
fi
log3 "installing $origin"
if ! (cd $portsroot/$origin && make install 2>&1) >> $logfile
then
log3 "package $origin failed install step - see $logfile"
return
else
rm $logfile
fi
log3 "packaging $origin"
if ! (cd $portsroot/$origin && make package 2>&1) >> $logfile
then
log3 "package $origin failed package step - see $logfile"
return
else
rm $logfile
fi
log3 "cleaning $origin"
# this seems to return non-successfully often for some reason; without
# any actual error
(cd $portsroot/$origin && make clean) >> /dev/null || log3 "cleaning failed - ignoring that"
#if (cd $portsroot/$origin && make clean 2>&1) >> $logfile
#then
# log3 "package $origin failed clean step - see $logfile"
# return
#else
# rm $logfile
#fi
}
function originlog {
echo "$logdir/$(echo $origin | sed -e s,/,_,g).log"
}
function originfailed {
local origin=$1
[ -e "$(originlog $origin)" ]
}
function buildrecursively {
local origin=$1
local level=$2
log "processing $origin (pkgname: $(packagename $origin))"
if packageisinstalled $origin
then
log3 "$origin is already installed"
return
fi
if [ "$level" -gt "20" ]
then
log "ERROR: recursion level exceeds 20 (cyclic dependencies?) - bailing; let's not fork bomb the machine"
exit 1
fi
local failed="false"
local dep
for dep in $(cd $portsroot/$origin && make all-depends-list | sed -e "s,$portsroot/,,g")
do
if ! packageisinstalled $dep
then
log3 "$origin depends on $dep which is not installed"
if originfailed $dep
then
log3 "dependency $dep seems to have failed a previous build attempt - skipping"
failed="true"
else
buildrecursively $dep $(($level + 1))
if originfailed $dep
then
log3 "dependency $dep failed to build - skipping"
failed="true"
fi
fi
else
log3 "$origin depends on $dep which is already installed"
fi
done
if packageisinstalled $origin
then
log3 "$origin is already installed"
else
if [ "$failed" = "false" ]
then
if originfailed $origin
then
log3 "not building $origin because it has already been attempted and failed"
else
build $origin
fi
else
log3 "not building $origin due to failed dependencies"
echo "building of this origin was not attempted due to failed dependencies" >> $(originlog $origin)
fi
fi
}
function buildpackage {
local origin=$1
log "processing $origin"
if packageisinstalled $origin
then
log2 "$origin already installed - skipping"
else
builddeps $origin
# if ! (cd /usr/ports/$origin && make clean package-recursive)
local logfile="$(originlog $origin)"
log2 "building $origin and dependencies"
if script -t 0 $logfile portinstall -pr $origin 1>/dev/null 2>/dev/null
then
rm $logfile
else
log2 "package $origin failed to build - see $logfile"
(cd /usr/ports/$origin && make clean) || log2 "(cleaning of $origin failed)"
fi
fi
}
local origin
for origin in $(cat packages.${pkgtype})
do
if ! originexists $origin
then
die "$origin does not exist or has no Makefile - adjust package list?"
fi
done
for origin in $(cat packages.${pkgtype})
do
#buildpackage $origin
buildrecursively $origin 0 || log "$origin failed - continuing with next item"
done