abuild 13.4 KB
Newer Older
Natanael Copa's avatar
Natanael Copa committed
1 2 3 4 5 6 7 8 9 10
#!/bin/sh

# script to build apk packages (light version og makepkg)
# Copyright (c) 2008 Natanael Copa <natanael.copa@gmail.com>
#
# Distributed under GPL-2
#
# Depends on: busybox utilities, fakeroot, 
#

Natanael Copa's avatar
Natanael Copa committed
11
abuild_ver=1.1.1
Natanael Copa's avatar
Natanael Copa committed
12 13 14 15 16

# read config
MAKEAPK_CONF=${MAKEAPK_CONF:-/etc/abuild.conf}
[ -f "$MAKEAPK_CONF" ] && . "$MAKEAPK_CONF"

17 18 19 20 21 22 23 24 25 26 27 28 29 30
# source functions
# if abuild was not run from PATH, then look for func lib at same location
if [ -z "$FUNCLIB" ]; then
	FUNCLIB="${0##/*}/functions.sh"
	[ -f "$FUNCLIB"	] || FUNCLIB=/usr/share/abuild/functions.sh
fi

if ! [ -f "$FUNCLIB" ]; then
	echo "$FUNCLIB: not found" >&2
	exit 1
fi
. "$FUNCLIB"
	

Natanael Copa's avatar
Natanael Copa committed
31 32 33 34 35 36 37 38
startdir="$PWD"
srcdir=${srcdir:-"$startdir/src"}
pkgdir=${pkgdir:-"$startdir/pkg"}
pkgrel=0

# defaults
SRCDEST=${SRCDEST:-$startdir}
PKGDEST=${PKGDEST:-$startdir}
39
BUILD_BASE="binutils gcc make patch uclibc-dev"
Natanael Copa's avatar
Natanael Copa committed
40

41
default_cmds="sanitycheck builddeps clean fetch unpack rootpkg"
Natanael Copa's avatar
Natanael Copa committed
42

Linux User's avatar
Linux User committed
43 44
set_xterm_title() {
	if [ "$TERM" = xterm ]; then
45
		 printf "\033]0;$1\007" >&2
Linux User's avatar
Linux User committed
46 47 48 49 50
	fi
} 

cleanup() {
	set_xterm_title ""
51 52 53
	if [ -z "$install_after" ] && [ -n "$uninstall_after" ]; then
		sudo apk_delete $uninstall_after
	fi
Linux User's avatar
Linux User committed
54 55
}

Natanael Copa's avatar
Natanael Copa committed
56
die() {
Linux User's avatar
Linux User committed
57
	error "$@"
Linux User's avatar
Linux User committed
58
	cleanup
Natanael Copa's avatar
Natanael Copa committed
59 60 61
	exit 1
}

62 63
# check if apkbuild is basicly sane
sanitycheck() {
64
	msg "Checking sanity of $APKBUILD..."
65 66 67
	[ -z "$pkgname" ] && die "Missing pkgname in APKBUILD"
	[ -z "${pkgname##* *}" ] && die "pkgname contains spaces"
	[ -z "$pkgver" ] && die "Missing pkgver in APKBUILD"
Natanael Copa's avatar
Natanael Copa committed
68
	[  "${pkgver##[0-9]}" == "$pkgver" ] && \
69 70 71 72 73 74
		die "pkgver does not start with a digit"
	[ -z "$pkgrel" ] && warning "Missing pkgrel in APKBUILD. Using pkgrel=0"
	[ -z "$pkgdesc" ] && die "Missing pkgdesc in APKBUILD"
	[ -z "$url" ] && die "Missing url in APKBUILD"
	[ -z "$license" ] && die "Missing license in APKBULID"

75 76 77 78
	if [ "$(echo $source | wc -l)" -ne "$(echo $md5sums | wc -l)" ]; then
		die "Number of md5sums does not correspond to number of sources"
	fi

79 80 81 82 83 84 85
	# common spelling errors
	[ -n "$depend" ] && die "APKBUILD contains 'depend'. It should be depends"
	[ -n "$makedepend" ] && die "APKBUILD contains 'makedepend'. It should be makedepends"
	return 0
}

md5check() {
86 87 88
	if [ -z "$source" ]; then
		return 0
	fi
89 90 91
	if [ -z "$md5sums" ]; then
		die "Use 'abuild checksum >>$APKBUILD' to generate a checksum"
	fi
92 93 94 95

	if [ "$(echo $source | wc -l)" -ne "$(echo $md5sums | wc -l)" ]; then
		die "Number of md5sums does not correspond to number of sources"
	fi
96
	fetch
97
	msg "Checking md5sums..."
98
	cd "$srcdir" && echo "$md5sums" | md5sum -c 
Natanael Copa's avatar
Natanael Copa committed
99 100 101 102 103
}

uri_fetch() {
	local uri="$1"
	local d="${s##*/}"	# $(basename $s)
104 105 106 107
	local opts
	[ -n "$quiet" ] && opts="-q"
	[ -f "$SRCDEST/$d" ] && return 0

Natanael Copa's avatar
Natanael Copa committed
108
	mkdir -p "$SRCDEST"
109 110 111
	if [ -f "$SRCDEST/$d.part" ]; then
		msg "Partial download found. Trying to resume"
		opts="$opts -c"
Natanael Copa's avatar
Natanael Copa committed
112
	fi
Linux User's avatar
Linux User committed
113
	msg "Fetching $uri"
114 115
	wget $opts -O "$SRCDEST/$d.part" "$uri" \
		&& mv "$SRCDEST/$d.part" "$SRCDEST/$d"
Natanael Copa's avatar
Natanael Copa committed
116 117
}

118 119 120 121 122 123 124 125
is_remote() {
	case "$1" in
		http://*|ftp://*)
			return 0;;
	esac
	return 1
}

Natanael Copa's avatar
Natanael Copa committed
126 127 128
fetch() {
	local s
	mkdir -p "$srcdir"
129 130 131 132 133 134 135
	for s in $source; do
		if is_remote "$s"; then
			uri_fetch "$s" || return 1
			ln -sf "$SRCDEST/${s##*/}" "$srcdir"/
		else		
			ln -sf "$startdir/$s" "$srcdir/"
		fi
Natanael Copa's avatar
Natanael Copa committed
136 137 138 139 140 141
	done
}

# unpack the sources
unpack() {
	local u
142
	md5check
Natanael Copa's avatar
Natanael Copa committed
143 144 145 146
	mkdir -p "$srcdir"
	for u in $source; do
		local s="$SRCDEST/${u##*/}"	# $(basename $s)
		case "$s" in
Natanael Copa's avatar
Natanael Copa committed
147
			*.tar.gz|*.tgz)
148
				msg "Unpacking $s..."
Natanael Copa's avatar
Natanael Copa committed
149 150
				tar -C "$srcdir" -zxf "$s" || return 1;;
			*.tar.bz2)
151
				msg "Unpacking $s..."
Natanael Copa's avatar
Natanael Copa committed
152
				tar -C "$srcdir" -jxf "$s" || return 1;;
153 154 155 156
			*.tar.lzma)
				msg "Unpacking $s..."
				unlzma -c "$s" | tar -C "$srcdir" -x  \
					|| return 1;;
Natanael Copa's avatar
Natanael Copa committed
157 158 159 160 161 162
		esac
	done
}

# cleanup source and package dir
clean() {
163
	msg "Cleaning temporary build dirs..."
Natanael Copa's avatar
Natanael Copa committed
164 165 166
	rm -rf "$srcdir"
	rm -rf "$pkgdir"
	local i
Natanael Copa's avatar
Natanael Copa committed
167 168
	for i in $subpackages; do
		rm -rf "$pkgdir-$(get_split_func $i)"
Natanael Copa's avatar
Natanael Copa committed
169 170 171 172 173 174 175
	done
}

# cleanup fetched sources
cleancache() {
	local s
	for s in $source; do
176 177 178 179
		if is_remote "$s"; then
			msg "Cleaning downloaded ${s##*/}..."
			rm -f "$SRCDEST/${s##*/}"
		fi
Natanael Copa's avatar
Natanael Copa committed
180 181 182 183 184
	done
}

cleanpkg() {
	local i
185
	msg "Cleaning built packages..."
186
	for i in $pkgname $subpackages; do
187
		local p="$i-$pkgver-r$pkgrel"
188
		rm -f "$PKGDEST/$p.apk" "$PKGDEST/$p.src.tar.gz"
Natanael Copa's avatar
Natanael Copa committed
189 190 191
	done
}

192 193 194 195 196 197 198 199 200 201 202 203 204
# clean all packages except current
cleanoldpkg() {
	local i j
	msg "Cleaning all packages except $pkgver-r$pkgrel..."
	for i in $pkgname $subpackages; do
		for j in "$PKGDEST"/${i%:*}-[0-9]*.apk; do
			[ "$j" != "$PKGDEST/${i%:*}-$pkgver-r$pkgrel.apk" ] \
				&& rm -f "$j"
		done
	done
	return 0
}
	
Natanael Copa's avatar
Natanael Copa committed
205 206
runpart() {
	local part=$1
207
	[ -n "$DEBUG" ] && msg "$part"
Natanael Copa's avatar
Natanael Copa committed
208 209 210 211 212 213 214 215
	$part || die "$part failed"
}

# override those in your build script
build() {
	die "No build() function found in $APKBUILD"
}

Natanael Copa's avatar
Natanael Copa committed
216 217 218 219 220 221 222 223 224
get_split_func() {
	# get the 'func' from "sub-pkg:func"
	local func=${1##*:}

	# get 'func' from "sub-pkg-func" if there was no :func
	[ "$func" = "$1" ] && func=${func##*-}
	echo $func
}

Natanael Copa's avatar
Natanael Copa committed
225
subpkg() {
Natanael Copa's avatar
Natanael Copa committed
226
	if [ -z "$subpackages" ]; then
227 228
		return 0
	fi
Natanael Copa's avatar
Natanael Copa committed
229 230
	local i
	cd "$startdir"
231
	for i in $subpackages; do
Natanael Copa's avatar
Natanael Copa committed
232 233
		local func=$(get_split_func $i)
		# call abuild recursively, setting subpkg{dir,name}
234
		msg "Running split function $func..."
235
		subpkgdir="$startdir/pkg-$func" subpkgname="${i%:*}" \
Natanael Copa's avatar
Natanael Copa committed
236
			$0 $func package || return 1
Natanael Copa's avatar
Natanael Copa committed
237 238 239 240
	done
}

package_apk() {
241 242
	local name=${subpkgname:-$pkgname}
	[ -z "${name##* *}" ] && die "package name contains spaces"
243
	local dir=${subpkgdir:-$pkgdir}
244
	local pkg="$name-$pkgver-r$pkgrel.apk"
245
	local sub
Natanael Copa's avatar
Natanael Copa committed
246 247 248
	
	[ ! -d "$dir" ] && die "Missing $dir"
	cd "$dir"
249
	msg "Creating ${subpkgname:+sub}package $pkg..."
Natanael Copa's avatar
Natanael Copa committed
250 251 252
	local builddate=$(date -u "+%s")
	local size=$(du -sk | awk '{print $1 * 1024}')

253
	echo "# Generated by $(basename $0) $abuild_ver" >.PKGINFO
Natanael Copa's avatar
Natanael Copa committed
254 255 256 257 258
	if [ -n "$FAKEROOTKEY" ]; then
		echo "# using $(fakeroot -v)" >> .PKGINFO
	fi
	echo "# $(date -u)" >> .PKGINFO
	cat >> .PKGINFO <<EOF
259
pkgname = $name
260
pkgver = $pkgver-r$pkgrel
Natanael Copa's avatar
Natanael Copa committed
261 262 263 264 265 266
pkgdesc = $pkgdesc
url = $url
builddate = $builddate
packager = ${PACKAGER:-"Unknown"}
size = $size
EOF
Natanael Copa's avatar
Natanael Copa committed
267
	local i
Natanael Copa's avatar
Natanael Copa committed
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288

	for i in $license; do
		echo "license = $i" >>.PKGINFO
	done
	for i in $replaces; do
		echo "replaces = $i" >>.PKGINFO
	done
	for i in $depends; do
		echo "depend = $i" >>.PKGINFO
	done
	for i in $conflicts; do
		echo "conflict = $i" >>.PKGINFO
	done
	for i in $provides; do
		echo "provides = $i" >>.PKGINFO
	done
	for i in $backup; do
		echo "backup = $i" >>.PKGINFO
	done

	local metafiles=".PKGINFO"
Natanael Copa's avatar
Natanael Copa committed
289 290 291
	if [ -n "$install" ]; then
		cp "$srcdir/$install" "$dir/.INSTALL" || return 1
		chmod +x "$dir/.INSTALL"
Natanael Copa's avatar
Natanael Copa committed
292
		metafiles="$metafiles .INSTALL"
Natanael Copa's avatar
Natanael Copa committed
293
	fi
Natanael Copa's avatar
Natanael Copa committed
294 295 296 297 298 299 300 301

#	for i in pre-install post-install pre-deinstall post-deinstall; do
#		[ -f ../$i ] && cp ../$i "$db"/
#	done
	
	set *
	[ "$1" = '*' ] && set --
	( cd "$dir" && tar -zcf "$PKGDEST/$pkg" $metafiles $@ )
Natanael Copa's avatar
Natanael Copa committed
302 303 304
}

package() {
305
	stripbin
Natanael Copa's avatar
Natanael Copa committed
306 307 308
	package_apk
}

309
# predefined splitfunc doc
Natanael Copa's avatar
Natanael Copa committed
310
doc() {
311
	depends="$depends_doc"
Natanael Copa's avatar
Natanael Copa committed
312 313
	local i
	for i in doc man info html sgml; do
314 315 316
		if [ -d "$pkgdir/usr/share/$i" ]; then
			mkdir -p "$subpkgdir/usr/share"
			mv "$pkgdir/usr/share/$i" "$subpkgdir/usr/share/"
Natanael Copa's avatar
Natanael Copa committed
317 318
		fi
	done
319 320 321
	
	rm -f "$subpkgdir/usr/share/info/dir"

322 323 324
#	# compress info and man pages
#	find "$subpkgdir/usr/share" \( -name '*.info' -o -name '*.info-[1-9]' \
#		-o -name '*.[1-9]' \) -exec gzip {} \;
325 326 327 328

	# remove if empty, ignore error (not empty)
	rmdir "$pkgdir/usr/share" "$pkgdir/usr" 2>/dev/null

Natanael Copa's avatar
Natanael Copa committed
329
#	[ -d "$subpkgdir/usr/share/man" ] && depends="man"
Natanael Copa's avatar
Natanael Copa committed
330 331 332
	return 0
}

333
# predefined splitfunc mod
Natanael Copa's avatar
Natanael Copa committed
334
mod() {
335
	depends="$kernel $depends_mod"
Natanael Copa's avatar
Natanael Copa committed
336
	for i in firmware modules; do
337 338 339
		if [ -d "$pkgdir/lib/$i" ]; then
			rm -rf "$subpkgdir/lib"
			mkdir -p "$subpkgdir/lib"
340
			mv "$pkgdir/lib/$i" "$subpkgdir/lib"
Natanael Copa's avatar
Natanael Copa committed
341 342 343 344
		fi
	done
}

345
# predefined splitfunc dev
Natanael Copa's avatar
Natanael Copa committed
346
dev() {
347
	depends="$pkgname $depends_dev"
348
	cd "$pkgdir" || return 0
349
	for i in cd $(find usr/ -name '*.[acho]' -o -name '*.la' 2>/dev/null)\
350
			usr/include usr/lib/pkgconfig usr/share/aclocal \
351
			usr/share/gettext usr/bin/*-config ; do
352 353
		if [ -e "$pkgdir/$i" ] || [ -L "$pkgdir/$i" ]; then
			d="$subpkgdir/${i%/*}"	# dirname $i
Natanael Copa's avatar
Natanael Copa committed
354
			mkdir -p "$d"
355
			mv "$pkgdir/$i" "$d"
356
			rmdir "$pkgdir/${i%/*}" 2>/dev/null
Natanael Copa's avatar
Natanael Copa committed
357 358
		fi
	done
Natanael Copa's avatar
Natanael Copa committed
359
	return 0
Natanael Copa's avatar
Natanael Copa committed
360 361 362 363
}

# build and package in fakeroot
rootpkg() {
Natanael Copa's avatar
Natanael Copa committed
364
	cd "$startdir"
365
	msg "Entering fakeroot..."
Natanael Copa's avatar
Natanael Copa committed
366 367 368 369
	fakeroot $0 build subpkg package
}

srcpkg() {
370
	local p="$pkgname-$pkgver-$pkgrel"
Natanael Copa's avatar
Natanael Copa committed
371
	local prefix="${startdir##*/}"
Natanael Copa's avatar
Natanael Copa committed
372 373 374 375 376
	local i files="$prefix/APKBUILD"
	for i in $source; do
		files="$files $prefix/${i##*/}"
	done
	mkdir -p "$PKGDEST"
377
	msg "Creating source package $p.src.tar.gz..."
378
	(cd .. && tar -zcf "$PKGDEST/$p.src.tar.gz" $files) 
Natanael Copa's avatar
Natanael Copa committed
379 380
}

381 382
# check if package is up to date
up2date() {
383
	local pkg="$PKGDEST/$pkgname-$pkgver-r$pkgrel.apk"
384
	local i s
Natanael Copa's avatar
Natanael Copa committed
385
	cd "$startdir"
386 387 388 389 390
	for i in $pkgname $subpackages; do
		[ -f "$PKGDEST/$pkgname-$pkgver-r$pkgrel.apk" ] || return 1
	done
	[ -n "$keep" ] && return 0

391
	for i in $source APKBUILD; do
392 393 394 395 396 397
		local s
		if is_remote "$i"; then
			s="$SRCDEST/${i##*/}"	# $(basename $i)
		else
			s="$startdir/${i##*/}"
		fi
398 399 400 401 402 403 404
		if [ "$s" -nt "$pkg" ]; then
			return 1
		fi
	done
	return 0
}

405 406 407 408 409 410 411 412 413 414 415 416 417
# source all APKBUILDs and output:
#  1) origin of package
#  2) all dependencies
# the output is i in a format easy parseable for awk
depparse_aports() {
	# lets run this in a subshell since we source all APKBUILD here
	(
	aportsdir=$(realpath ${APKBUILD%/APKBUILD}/../..)
	for i in $aportsdir/*/*/APKBUILD; do
		pkgname=
		subpackages=
		depends=
		makedepends=
418
		. $i
419
		dir=${i%/APKBUILD}
420
		for j in $pkgname $subpackages; do
421 422 423 424 425 426 427 428 429
			echo "o ${j%%:*} $dir"
			set -- $depends $makedepends
			echo -n "d ${j%%:*} $1"
			shift
			while [ $# -gt 0 ]; do
				echo -n ",$1"
				shift
			done
			echo
430 431
		done
	done
432
	)
433 434
}

435 436 437 438 439
deptrace() {
	( 	depparse_aports 
		if [ -z "$upgrade" ]; then
			# list installed pkgs and prefix with 'i '
			apk_info | sed 's/-[0-9].*//; s/^/i /'
440
		fi
441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484
	) | awk -v pkgs="$BUILD_BASE $depends $makedepends" '

	function depgraph(pkg,	a, i) {
		if (visited[pkg])
			return 0;
		visited[pkg] = 1;
		split(deps[pkg], a, ",");
		for (i in a)
			depgraph(a[i]);
		print pkg ":" origin[pkg];

	}

	$1 == "i" { visited[$2] = 1 }
	$1 == "o" { origin[$2] = $3 }
	$1 == "d" { deps[$2] = $3 }
	END {
		split(pkgs, pkgarray);
		for (i in pkgarray)
			depgraph(pkgarray[i]);
	}
	'
}

# build and install dependencies
builddeps() {
	local deps alldeps pkg i dir ver
	msg "Building dependencies..."
	deps="$BUILD_BASE $depends $makedepends"
	if [ -z "$recursive" ]; then
		for i in $deps; do
			apk_info -e $i || die "Missing dependency $i. Use -r to build recursively"
		done
		return 0
	fi

	for i in $(deptrace); do
		# i = pkg:dir
		local dir=${i#*:}
		local pkg=${i%:*}
		msg "Entering $dir"
		cd "$dir" || return 1
		$0 -i $pkg || return 1
		uninstall_after="$pkg $uninstall_after"
485 486 487
	done
}

Natanael Copa's avatar
Natanael Copa committed
488 489 490 491 492 493 494 495 496 497
checksum() {
	local s files
	fetch
	for s in $source; do
		files="$files ${s##*/}"
	done
	md5sums="$(cd "$srcdir" && md5sum $files)" || die "md5sum failed"
	echo "md5sums=\"$md5sums\""
}

498
stripbin() {
499
	local bin
500 501
	cd "${subpkgdir:-$pkgdir}" || return 1
	msg "Stripping binaries"
502
	find . -type f 2>/dev/null | while read bin; do
503 504 505 506 507 508 509 510 511 512 513
		local opt=
		case "$(file -biz "$bin")" in
			*/x-sharedlib*|*/x-archive*)
				strip --strip-debug "$bin";;
			*/x-executable*)
				strip "$bin";;
		esac
	done
	return 0
}

514 515 516 517 518 519 520 521
# simply list target apks
listpkg() {
	local i 
	for i in $pkgname $subpackages; do
		echo "${i%:*}-$pkgver-r$pkgrel.apk"
	done
}

Natanael Copa's avatar
Natanael Copa committed
522
usage() {
523
	echo "$(basename $0) $abuild_ver"
524
	echo "usage: $0 [options] [-i PKG] [-p PKGDEST] [-s SRCDEST] [cmd] ..."
Natanael Copa's avatar
Natanael Copa committed
525 526
	echo "Options:"
	echo " -f  Force specified cmd, even if they are already done"
527 528
	echo " -h  Show this help"
	echo " -i  Install PKG after successul build"
529
	echo " -k  Keep built packages, even if APKBUILD or sources are newer"
530
	echo " -p  Set package destination directory"
Natanael Copa's avatar
Natanael Copa committed
531
	echo " -q  Quiet"
532
	echo " -r  Recursively build and install missing dependencies (using sudo)"
533
	echo " -s  Set source package destination directory"
534
	echo " -u  Recursively build and upgrade dependencies (using sudo)"
Natanael Copa's avatar
Natanael Copa committed
535 536
	echo ""
	echo "Commands:"
537 538 539 540 541 542
	echo "  checksum    Generate checksum to be included in $APKBUILD"
	echo "  fetch       Fetch sources to \$SRCDEST and verify checksums"
	echo "  sanitycheck Basic sanity check of APKBUILD"
	echo "  md5check    Check md5sums"
	echo "  unpack      Unpack sources to \$srcdir"
	echo "  build       Compile and install package into \$pkgdir"
543
	echo "  listpkg     List target packages"
544 545 546
	echo "  package     Create package in \$PKGDEST"
	echo "  rootpkg     Run '$0 build package' as fakeroot"
	echo "  clean       Remove temp build and install dirs"
547
	echo "  cleanoldpkg Remove binary packages except current version"
548 549 550 551
	echo "  cleanpkg    Remove already built binary and source package"
	echo "  cleancache  Remove downloaded files from \$SRCDEST"
	echo "  srcpkg      Make a source package"
	echo "  up2date     Compare target and sources dates"
Natanael Copa's avatar
Natanael Copa committed
552 553 554 555
	echo ""
	exit 0
}

556 557

# source the buildfile
Natanael Copa's avatar
Natanael Copa committed
558
APKBUILD="${APKBUILD:-./APKBUILD}"
559 560
[ -f "$APKBUILD" ] || die "Could not find $APKBUILD (PWD=$PWD)"
. "$APKBUILD"
Natanael Copa's avatar
Natanael Copa committed
561

562 563
unset force
unset recursive
564
while getopts "fhi:kip:qrs:u" opt; do
Natanael Copa's avatar
Natanael Copa committed
565 566
	case $opt in
		'f') force=1;;
567 568
		'h') usage;;
		'i') install_after="$install_after $OPTARG";;
569
		'k') keep=1;;
570
		'p') PKGDEST=$OPTARG;;
Natanael Copa's avatar
Natanael Copa committed
571
		'q') quiet=1;;
572
		'r') recursive=1;;
573
		's') SRCDEST=$OPTARG;;
574 575
		'u') upgrade=1
		     recursive=1;;
Natanael Copa's avatar
Natanael Copa committed
576 577 578 579
	esac
done
shift $(( $OPTIND - 1 ))

Natanael Copa's avatar
Natanael Copa committed
580
# If we are handling a sub package then reset subpackages
581 582 583
if [ -n "$subpkgname" ]; then
	subpackages=
fi
Natanael Copa's avatar
Natanael Copa committed
584 585

trap 'die "Aborted by user"' INT
Linux User's avatar
Linux User committed
586
set_xterm_title "abuild: $pkgname"
Natanael Copa's avatar
Natanael Copa committed
587 588 589


if [ -z "$1" ]; then
Natanael Copa's avatar
Natanael Copa committed
590
	if up2date && [ -z "$force" ]; then
Natanael Copa's avatar
Natanael Copa committed
591
		msg "Package is up to date"
592 593 594
	else
		set $default_cmds
	fi
Natanael Copa's avatar
Natanael Copa committed
595 596 597 598 599 600
fi

while [ $# -gt 0 ]; do
	runpart $1
	shift
done
601 602 603 604 605 606

for i in $install_after; do
	sudo apk_add -s -u $PKGDEST/$i-$pkgver-r$pkgrel.apk \
		|| die "Failed to install $i"
done

Linux User's avatar
Linux User committed
607
cleanup
Natanael Copa's avatar
Natanael Copa committed
608