blob: 2be50e1f7838201cc9b53f00c12d420382b34602 (
plain) (
blame)
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
|
#!/bin/sh
program=${0##*/}
aportsdir=${APORTSDIR:-$HOME/aports}
repodir=${REPODIR:-$HOME/packages}
usage() {
echo "usage: $program [-a APORTSDIR] [-d REPODIR] [-hp] [-l LOGPREFIX ]"
echo " [-r DEPREPO] REPOSITORY..."
echo "options:"
echo " -a Set the aports base dir to APORTSDIR instead of $aportsdir"
echo " -d Set destination repository base dir to REPODIR instead of $repodir"
echo " -h Show this help and exit"
echo " -l Send build to logfile, prefixed by LOGPREFIX"
echo " -p Purge obsolete packages from REPODIR after build"
echo " -r Dependencies are found in DEPREPO"
exit 1
}
listpackages() {
cd "$aportsdir/$1"
for i in */APKBUILD; do
APKBUILD=$i abuild listpkg
done
}
all_exist() {
while [ $# -gt 0 ]; do
[ -e "$1" ] || return 1
shift 1
done
return 0
}
build() {
local repo="$1" i indexupdate needbuild
cd "$aportsdir/$repo" || return 1
mkdir -p "$repodir/$repo"
if ! [ -f "$repodir/$repo"/APK_INDEX.gz ]; then
indexupdate="APK_INDEX.gz"
fi
# first we try copy everything possible and find out which we need
# to rebuild. By doing this we might save us for rebuilding
# needed when running 'abuild -R'
for i in */APKBUILD; do
export REPODEST="$repodir"
cd "$aportsdir/$repo"/${i%/*} || return 1
if abuild -k -q up2date 2>/dev/null; then
continue
fi
indexupdate="$indexupdate $i"
# try link or copy the files if they are in the ports dir
pkgs=$(abuild listpkg)
if all_exist $pkgs; then
echo ">>> Copying " $pkgs
cp -p -l $pkgs "$repodir/$repo"/ 2>/dev/null \
|| cp -p $pkgs "$repodir/$repo"/ \
|| needbuild="$needbuild $i"
else
needbuild="$needbuild $i"
fi
done
# build the postponed packages if any
if [ -n "$needbuild" ]; then
for i in $needbuild; do
cd "$aportsdir/$repo"/${i%/*} || return 1
abuild -k -R || return 1
done
fi
# kill old packages in repo
if [ -n "$dopurge" ]; then
local tmp=$(mktemp /tmp/$program-XXXXXX)
local purgefiles
cd "$repodir/$1" || return 1
trap 'rm -f "$tmp"; exit 1' INT
( listpackages "$1") >$tmp
purge=$(ls *.apk 2>/dev/null | grep -v -w -f $tmp)
if [ -n "$purge" ]; then
rm -f $purge
indexupdate="$indexupdate $purge"
fi
rm -f "$tmp"
fi
# check if we have any .apk newer than our index
cd "$repodir/$repo"
if [ -z "$indexupdate" ]; then
for i in *.apk; do
if [ $i -nt APK_INDEX.gz ]; then
indexupdate=1
break;
fi
done
fi
# generate the repository index if needed
if [ -z "$indexupdate" ]; then
echo ">>> Index for $repo is up-to-date"
else
echo ">>> Generating Index for $repo..."
if which apk >/dev/null; then
local deps
for i in $deprepo; do
deps="--repo $repodir/$i"
done
apk $deps index *.apk | gzip -9 > APK_INDEX.gz
fi
fi
}
while getopts "a:d:hl:pr:" opt; do
case "$opt" in
a) aportsdir=$OPTARG;;
d) repodir=$OPTARG;;
h) usage >&2;;
l) logprefix=$OPTARG;;
p) dopurge=1;;
r) deprepo="$deprepo $OPTARG";;
esac
done
shift $(($OPTIND - 1))
[ $# -eq 0 ] && usage >&2
while [ $# -gt 0 ]; do
if [ -n "$logprefix" ]; then
build $1 >$logprefix.$1.log 2>&1 || exit 1
else
build $1 || exit 1
fi
deprepo="$deprepo $1"
shift
done
|