projects/aports·blob v2.17.0 · refs

154 lines · 4.2 KiB

1# /usr/share/abuild/functions.sh
2
3sysconfdir=@sysconfdir@
4prog=${0##*/}
5
6readconfig() {
7 local _APORTSDIR _BUILDDIR _PKGDEST _SRCPKGDEST _REPODEST _SRCDEST
8 local _CARCH _CHOST _CTARGET _CPPFLAGS _CFLAGS _CXXFLAGS _LDFLAGS
9 local _JOBS _MAKEFLAGS _PACKAGER _USE_COLORS
10 local gitbase=
11 [ -n "${APORTSDIR+x}" ] && _APORTSDIR=$APORTSDIR
12 [ -n "${BUILDDIR+x}" ] && _BUILDDIR=$BUILDDIR
13 [ -n "${PKGDEST+x}" ] && _PKGDEST=$PKGDEST
14 [ -n "${SRCPKGDEST+x}" ] && _SRCPKGDEST=$SRCPKGDEST
15 [ -n "${REPODEST+x}" ] && _REPODEST=$REPODEST
16 [ -n "${SRCDEST+x}" ] && _SRCDEST=$SRCDEST
17 [ -n "${CARCH+x}" ] && _CARCH=$CARCH
18 [ -n "${CHOST+x}" ] && _CHOST=$CHOST
19 [ -n "${CTARGET+x}" ] && _CTARGET=$CTARGET
20 [ -n "${CPPFLAGS+x}" ] && _CPPFLAGS=$CPPFLAGS
21 [ -n "${CFLAGS+x}" ] && _CFLAGS=$CFLAGS
22 [ -n "${CXXFLAGS+x}" ] && _CXXFLAGS=$CXXFLAGS
23 [ -n "${LDFLAGS+x}" ] && _LDFLAGS=$LDFLAGS
24 [ -n "${JOBS+x}" ] && _JOBS=$JOBS
25 [ -n "${MAKEFLAGS+x}" ] && _MAKEFLAGS=$MAKEFLAGS
26 [ -n "${PACKAGER+x}" ] && _PACKAGER=$PACKAGER
27 [ -n "${USE_COLORS+x}" ] && _USE_COLORS="$USE_COLORS"
28 : ${ABUILD_CONF:=$sysconfdir/abuild.conf}
29 : ${ABUILD_USERDIR:=$HOME/.abuild}
30 : ${ABUILD_USERCONF:=$ABUILD_USERDIR/abuild.conf}
31 [ -f "$ABUILD_CONF" ] && . "$ABUILD_CONF"
32 [ -f "$ABUILD_USERCONF" ] && . "$ABUILD_USERCONF"
33 APORTSDIR=${_APORTSDIR-$APORTSDIR}
34 gitbase=$(git rev-parse --show-toplevel 2>/dev/null) # already is -P
35 if [ -d "$APORTSDIR" ]; then
36 APORTSDIR=$(cd "$APORTSDIR"; pwd -P)
37 elif [ -z "$APORTSDIR" ] && [ -d "$HOME/aports" ]; then
38 APORTSDIR=$(cd "$HOME/aports"; pwd -P)
39 else
40 if [ -n "$gitbase" ]; then
41 case $(git config remote.origin.url) in
42 */aports) APORTSDIR=$gitbase ;;
43 *) APORTSDIR= ;;
44 esac
45 else
46 APORTSDIR=
47 fi
48 fi
49 # source any .abuild file at the aports root, but only if we are currently in aports tree
50 [ -n "$APORTSDIR" ] && [ -f "$APORTSDIR/.abuild" ] && [ "$APORTSDIR" = "$gitbase" ] && . "$APORTSDIR/.abuild"
51 BUILDDIR=${_BUILDDIR-$BUILDDIR}
52 PKGDEST=${_PKGDEST-$PKGDEST}
53 SRCPKGDEST=${_SRCPKGDEST-$SRCPKGDEST}
54 REPODEST=${_REPODEST-$REPODEST}
55 SRCDEST=${_SRCDEST-$SRCDEST}
56 CARCH=${_CARCH-$CARCH}
57 CHOST=${_CHOST-$CHOST}
58 CTARGET=${_CTARGET-$CTARGET}
59 CPPFLAGS=${_CPPFLAGS-$CPPFLAGS}
60 CFLAGS=${_CFLAGS-$CFLAGS}
61 CXXFLAGS=${_CXXFLAGS-$CXXFLAGS}
62 LDFLAGS=${_LDFLAGS-$LDFLAGS}
63 JOBS=${_JOBS-$JOBS}
64 MAKEFLAGS=${_MAKEFLAGS-$MAKEFLAGS}
65 PACKAGER=${_PACKAGER-$PACKAGER}
66 USE_COLORS=${_USE_COLORS-$USE_COLORS}
67}
68readconfig
69
70
71# expects $1 to be a package directory in the aports tree ('foo' or 'main/foo')
72# outputs APKBUILD's path if successful
73aports_buildscript() {
74 [ -n "$APORTSDIR" ] || return 1
75 if [ "${1#*/}" != "$1" ]; then
76 ( cd "$APORTSDIR/$1" && [ -f APKBUILD ] && echo "$PWD/APKBUILD" )
77 else
78 ( cd "$APORTSDIR"/*/"$1" && [ -f APKBUILD ] && echo "$PWD/APKBUILD" )
79 fi
80}
81
82# expects $1 to be a file, or a directory containing an APKBUILD, or a package directory in the aports tree
83# outputs APKBUILD's path if successful (doesn't verify that it's a valid APKBUILD)
84any_buildscript() {
85 if [ -f "$1" ]; then
86 echo "$1"
87 elif [ -d "$1" ]; then
88 [ -f "$1/APKBUILD" ] || return 1
89 echo "$1/APKBUILD"
90 else
91 aports_buildscript "$1" || return 1
92 fi
93}
94
95
96# output functions
97case $prog in
98abuild)
99 if [ -n "$USE_COLORS" ]; then
100 NORMAL="\033[1;0m"
101 STRONG="\033[1;1m"
102 RED="\033[1;31m"
103 GREEN="\033[1;32m"
104 YELLOW="\033[1;33m"
105 BLUE="\033[1;34m"
106 fi
107
108 msg() {
109 local prompt="$GREEN>>>${NORMAL}"
110 local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
111 local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
112 if [ -z "$quiet" ]; then
113 printf "${prompt} ${name}${fake}: $@\n" >&2
114 fi
115 }
116
117 warning() {
118 local prompt="${YELLOW}>>> WARNING:${NORMAL}"
119 local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
120 local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
121 printf "${prompt} ${name}${fake}: $@\n" >&2
122 }
123
124 error() {
125 local prompt="${RED}>>> ERROR:${NORMAL}"
126 local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
127 local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
128 printf "${prompt} ${name}${fake}: $@\n" >&2
129 }
130 ;;
131*)
132 msg() {
133 # Here we write to stdout, but abuild's fancier messages write to stderr
134 if [ -z "$quiet" ]; then
135 echo "$@"
136 fi
137 }
138
139 error() {
140 echo "$prog: $@" >&2
141 }
142 ;;
143esac
144
145# caller may override
146cleanup() {
147 return 0
148}
149
150die() {
151 error "$@"
152 cleanup
153 exit 1
154}