projects/aports·blob v2.29.0 · refs

238 lines · 6.7 KiB

1# /usr/share/abuild/functions.sh
2
3sysconfdir=@sysconfdir@
4program=${0##*/}
5
6arch_to_hostspec() {
7 case "$1" in
8 aarch64) echo "aarch64-alpine-linux-musl" ;;
9 armhf) echo "armhf-alpine-linux-muslgnueabihf" ;;
10 armv7) echo "armv7-alpine-linux-musleabihf" ;;
11 s390x) echo "s390x-alpine-linux-musl" ;;
12 x86) echo "i586-alpine-linux-musl" ;;
13 x86_64) echo "x86_64-alpine-linux-musl" ;;
14 *) echo "unknown" ;;
15 esac
16}
17
18hostspec_to_arch() {
19 case "$1" in
20 aarch64*-*-*-*) echo "aarch64" ;;
21 arm*-*-*-*eabi) echo "armel" ;;
22 armv6*-*-*-*eabihf) echo "armhf" ;;
23 armv7*-*-*-*eabihf) echo "armv7" ;;
24 i[0-9]86-*-*-*) echo "x86" ;;
25 s390x-*-*-*) echo "s390x" ;;
26 x86_64-*-*-*) echo "x86_64" ;;
27 *) echo "unknown" ;;
28 esac
29}
30
31hostspec_to_libc() {
32 case "$1" in
33 *-*-*-uclibc*) echo "uclibc" ;;
34 *-*-*-musl*) echo "musl" ;;
35 *-*-*-gnu*) echo "glibc" ;;
36 *) echo "unknown" ;;
37 esac
38}
39
40readconfig() {
41 local _APORTSDIR _BUILDDIR _PKGDEST _SRCPKGDEST _REPODEST _SRCDEST
42 local _CARCH _CHOST _CTARGET _CPPFLAGS _CFLAGS _CXXFLAGS _LDFLAGS
43 local _JOBS _MAKEFLAGS _PACKAGER _USE_COLORS
44 local gitbase=
45 [ -n "${APORTSDIR+x}" ] && _APORTSDIR=$APORTSDIR
46 [ -n "${BUILDDIR+x}" ] && _BUILDDIR=$BUILDDIR
47 [ -n "${PKGDEST+x}" ] && _PKGDEST=$PKGDEST
48 [ -n "${SRCPKGDEST+x}" ] && _SRCPKGDEST=$SRCPKGDEST
49 [ -n "${REPODEST+x}" ] && _REPODEST=$REPODEST
50 [ -n "${SRCDEST+x}" ] && _SRCDEST=$SRCDEST
51 [ -n "${CARCH+x}" ] && _CARCH=$CARCH
52 [ -n "${CHOST+x}" ] && _CHOST=$CHOST
53 [ -n "${CTARGET+x}" ] && _CTARGET=$CTARGET
54 [ -n "${CPPFLAGS+x}" ] && _CPPFLAGS=$CPPFLAGS
55 [ -n "${CFLAGS+x}" ] && _CFLAGS=$CFLAGS
56 [ -n "${CXXFLAGS+x}" ] && _CXXFLAGS=$CXXFLAGS
57 [ -n "${LDFLAGS+x}" ] && _LDFLAGS=$LDFLAGS
58 [ -n "${JOBS+x}" ] && _JOBS=$JOBS
59 [ -n "${MAKEFLAGS+x}" ] && _MAKEFLAGS=$MAKEFLAGS
60 [ -n "${PACKAGER+x}" ] && _PACKAGER=$PACKAGER
61 [ -n "${USE_COLORS+x}" ] && _USE_COLORS="$USE_COLORS"
62 : ${ABUILD_CONF:=$sysconfdir/abuild.conf}
63 : ${ABUILD_USERDIR:=$HOME/.abuild}
64 : ${ABUILD_USERCONF:=$ABUILD_USERDIR/abuild.conf}
65 [ -f "$ABUILD_CONF" ] && . "$ABUILD_CONF"
66 [ -f "$ABUILD_USERCONF" ] && . "$ABUILD_USERCONF"
67 APORTSDIR=${_APORTSDIR-$APORTSDIR}
68 gitbase=$(git rev-parse --show-toplevel 2>/dev/null) # already is -P
69 if [ -d "$APORTSDIR" ]; then
70 APORTSDIR=$(cd "$APORTSDIR"; pwd -P)
71 elif [ -z "$APORTSDIR" ] && [ -d "$HOME/aports" ]; then
72 APORTSDIR=$(cd "$HOME/aports"; pwd -P)
73 else
74 if [ -n "$gitbase" ]; then
75 case $(git config remote.origin.url) in
76 */aports) APORTSDIR=$gitbase ;;
77 *) APORTSDIR= ;;
78 esac
79 else
80 APORTSDIR=
81 fi
82 fi
83 # source any .abuild file at the aports root, but only if we are currently in aports tree
84 [ -n "$APORTSDIR" ] && [ -f "$APORTSDIR/.abuild" ] && [ "$APORTSDIR" = "$gitbase" ] && . "$APORTSDIR/.abuild"
85 BUILDDIR=${_BUILDDIR-$BUILDDIR}
86 PKGDEST=${_PKGDEST-$PKGDEST}
87 SRCPKGDEST=${_SRCPKGDEST-$SRCPKGDEST}
88 REPODEST=${_REPODEST-$REPODEST}
89 SRCDEST=${_SRCDEST-$SRCDEST}
90 CARCH=${_CARCH-$CARCH}
91 CHOST=${_CHOST-$CHOST}
92 CTARGET=${_CTARGET-$CTARGET}
93 CPPFLAGS=${_CPPFLAGS-$CPPFLAGS}
94 CFLAGS=${_CFLAGS-$CFLAGS}
95 CXXFLAGS=${_CXXFLAGS-$CXXFLAGS}
96 LDFLAGS=${_LDFLAGS-$LDFLAGS}
97 JOBS=${_JOBS-$JOBS}
98 MAKEFLAGS=${_MAKEFLAGS-$MAKEFLAGS}
99 PACKAGER=${_PACKAGER-$PACKAGER}
100 USE_COLORS=${_USE_COLORS-$USE_COLORS}
101
102 [ -z "$CBUILD" ] && CBUILD="$(gcc -dumpmachine)"
103 [ -z "$CHOST" ] && CHOST="$CBUILD"
104 [ -z "$CTARGET" ] && CTARGET="$CHOST"
105 [ "$(arch_to_hostspec $CBUILD)" != "unknown" ] && CBUILD="$(arch_to_hostspec $CBUILD)"
106 [ "$(arch_to_hostspec $CHOST)" != "unknown" ] && CHOST="$(arch_to_hostspec $CHOST)"
107 [ "$(arch_to_hostspec $CTARGET)" != "unknown" ] && CTARGET="$(arch_to_hostspec $CTARGET)"
108
109 [ -z "$CARCH" ] && CARCH="$(hostspec_to_arch $CHOST)"
110 [ -z "$CLIBC" ] && CLIBC="$(hostspec_to_libc $CHOST)"
111 [ -z "$CBUILD_ARCH" ] && CBUILD_ARCH="$(hostspec_to_arch $CBUILD)"
112 [ -z "$CTARGET_ARCH" ] && CTARGET_ARCH="$(hostspec_to_arch $CTARGET)"
113 [ -z "$CTARGET_LIBC" ] && CTARGET_LIBC="$(hostspec_to_libc $CTARGET)"
114
115 if [ "$CHOST" != "$CTARGET" ]; then
116 # setup environment for creating cross compiler
117 [ -z "$CBUILDROOT" ] && export CBUILDROOT="$HOME/sysroot-$CTARGET_ARCH/"
118 elif [ "$CBUILD" != "$CHOST" ]; then
119 # setup build root
120 [ -z "$CBUILDROOT" ] && export CBUILDROOT="$HOME/sysroot-$CTARGET_ARCH/"
121 # prepare pkg-config for cross building
122 [ -z "$PKG_CONFIG_PATH" ] && export PKG_CONFIG_PATH="${CBUILDROOT}/usr/lib/pkgconfig/"
123 [ -z "$PKG_CONFIG_SYSROOT_DIR" ] && export PKG_CONFIG_SYSROOT_DIR="${CBUILDROOT}"
124 # libtool bug workaround for extra rpaths
125 [ -z "$lt_cv_sys_lib_dlsearch_path_spec" ] && \
126 export lt_cv_sys_lib_dlsearch_path_spec="${CBUILDROOT}/lib ${CBUILDROOT}/usr/lib /usr/lib /lib /usr/local/lib"
127 # setup cross-compiler
128 if [ -z "$CROSS_COMPILE" ]; then
129 export CROSS_COMPILE="${CHOST}-"
130 export CC=${CROSS_COMPILE}gcc
131 export CXX=${CROSS_COMPILE}g++
132 export LD=${CROSS_COMPILE}ld
133 export CPPFLAGS="--sysroot=${CBUILDROOT} $CPPFLAGS"
134 export CXXFLAGS="--sysroot=${CBUILDROOT} $CXXFLAGS"
135 export CFLAGS="--sysroot=${CBUILDROOT} $CFLAGS"
136 export LDFLAGS="--sysroot=${CBUILDROOT} $LDFLAGS"
137 fi
138 fi
139}
140readconfig
141
142# expects $1 to be a package directory in the aports tree ('foo' or 'main/foo')
143# outputs APKBUILD's path if successful
144aports_buildscript() {
145 [ -n "$APORTSDIR" ] || return 1
146 if [ "${1#*/}" != "$1" ]; then
147 ( cd "$APORTSDIR/$1" && [ -f APKBUILD ] && echo "$PWD/APKBUILD" )
148 else
149 ( cd "$APORTSDIR"/*/"$1" && [ -f APKBUILD ] && echo "$PWD/APKBUILD" )
150 fi
151}
152
153# expects $1 to be a file, or a directory containing an APKBUILD, or a package directory in the aports tree
154# outputs APKBUILD's path if successful (doesn't verify that it's a valid APKBUILD)
155any_buildscript() {
156 if [ -f "$1" ]; then
157 echo "$1"
158 elif [ -d "$1" ]; then
159 [ -f "$1/APKBUILD" ] || return 1
160 echo "$1/APKBUILD"
161 else
162 aports_buildscript "$1" || return 1
163 fi
164}
165
166# output functions
167msg() {
168 [ -n "$quiet" ] && return 0
169 local prompt="$GREEN>>>${NORMAL}"
170 printf "${prompt} %s\n" "$1" >&2
171}
172
173msg2() {
174 [ -n "$quiet" ] && return 0
175 # ">>> %s"
176 printf " %s\n" "$1" >&2
177}
178
179warning() {
180 local prompt="${YELLOW}>>> WARNING:${NORMAL}"
181 printf "${prompt} %s\n" "$1" >&2
182}
183
184warning2() {
185 # ">>> WARNING: %s\n"
186 printf " %s\n" "$1" >&2
187}
188
189error() {
190 local prompt="${RED}>>> ERROR:${NORMAL}"
191 printf "${prompt} %s\n" "$1" >&2
192}
193
194error2() {
195 # ">>> ERROR:
196 printf " %s\n" "$1" >&2
197}
198
199set_xterm_title() {
200 if [ "$TERM" = xterm ] && [ -n "$USE_COLORS" ]; then
201 printf "\033]0;$1\007" >&2
202 fi
203}
204
205disable_colors() {
206 NORMAL=""
207 STRONG=""
208 RED=""
209 GREEN=""
210 YELLOW=""
211 BLUE=""
212}
213
214enable_colors() {
215 NORMAL="\033[1;0m"
216 STRONG="\033[1;1m"
217 RED="\033[1;31m"
218 GREEN="\033[1;32m"
219 YELLOW="\033[1;33m"
220 BLUE="\033[1;34m"
221}
222
223if [ -n "$USE_COLORS" ] && [ -t 1 ]; then
224 enable_colors
225else
226 disable_colors
227fi
228
229# caller may override
230cleanup() {
231 return 0
232}
233
234die() {
235 error "$@"
236 cleanup
237 exit 1
238}