blob: ebf75da7b723f7f702028a987fc2765b66c7ec9e (
plain)
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
|
#!/bin/sh
# shellcheck source=./default.conf
. "./default.conf"
# builds and installs one package for stage 1
if test "$(id -u)" = 0; then
sudo -u cross "$0" "$1"
exit 0
fi
PACKAGE=$1
# draw in default values for build variables
. "$SCRIPT_DIR/$TARGET_CPU-stage2/template/DESCR"
if test "$(find "$STAGE2_PACKAGES" -regex ".*/$PACKAGE-.*pkg\\.tar\\.xz"n | wc -l)" = 0; then
echo "Building package $PACKAGE."
cd $STAGE2_BUILD || exit 1
# clean up old build
sudo rm -rf "$PACKAGE"
rm -f "$STAGE2_PACKAGES/$PACKAGE"-*pkg.tar.xz
ssh -i $CROSS_HOME/.ssh/id_rsa root@$STAGE1_MACHINE_IP rm -rf "/build/$PACKAGE"
# check out the package build information from the upstream git rep
# using asp (or from the AUR using yaourt)
PACKAGE_DIR="$SCRIPT_DIR/$TARGET_CPU-stage2/$PACKAGE"
PACKAGE_CONF="$PACKAGE_DIR/DESCR"
if test -f "$PACKAGE_CONF"; then
if test "$(grep -c FETCH_METHOD "$PACKAGE_CONF")" = 1; then
FETCH_METHOD=$(grep FETCH_METHOD "$PACKAGE_CONF" | cut -f 2 -d = | tr -d '"')
fi
fi
case $FETCH_METHOD in
"asp")
$ASP export "$PACKAGE"
;;
"yaourt")
yaourt -G "$PACKAGE"
;;
"packages32")
# (we assume, we only take core packages)
cp -a "$ARCHLINUX32_PACKAGES/core/$PACKAGE" .
;;
*)
print "ERROR: unknown FETCH_METHOD '$FETCH_METHOD'.." >&2
exit 1
esac
cd "$PACKAGE" || exit 1
# attach our destination platform to be a supported architecture
sed -i "/^arch=[^#]*any/!{/^arch=(/s/(/($TARGET_CPU /}" PKGBUILD
# if there is a packages32 diff-PKGBUILD, attach it at the end
# (we assume, we build only 'core' packages during stage1)
DIFF_PKGBUILD="$ARCHLINUX32_PACKAGES/core/$PACKAGE/PKGBUILD"
if test -f "$DIFF_PKGBUILD"; then
cat "$DIFF_PKGBUILD" >> PKGBUILD
fi
# copy all other files from Archlinux32, if they exist
# (we assume, we only take core packages during stage1)
if test -f "$DIFF_PKGBUILD"; then
find "$ARCHLINUX32_PACKAGES/core/$PACKAGE"/* ! -name PKGBUILD \
-exec cp {} . \;
fi
# source package descriptions, sets variables for this script
# and executes whatever is needed to build the package
if test -f "$PACKAGE_CONF"; then
. "$PACKAGE_CONF"
fi
# copy all files into the build area on the target machine
# (but the package DESCR file)
if test -d "$PACKAGE_DIR"; then
find "$PACKAGE_DIR"/* ! -name DESCR \
-exec cp {} . \;
fi
# execute makepkg on the host, we don't have git on the stage 1 machine (yet)
makepkg --nobuild
# copy everything to the stage 1 machine
scp -i $CROSS_HOME/.ssh/id_rsa -rC "$STAGE2_BUILD/$PACKAGE" build@$STAGE1_MACHINE_IP:/build/.
# TODO:
# building the actual package
#$STAGE1_BUILD/makepkg-$TARGET_CPU -C --config $STAGE1_BUILD/makepkg-$TARGET_CPU.conf \
# --skipchecksums --skippgpcheck --nocheck > "$PACKAGE.log" 2>&1
# RES=$?
fi
|