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 md5check 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 359 360 361 362
		fi
	done
}

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

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

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

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

404 405 406 407 408 409 410 411 412 413 414 415 416
# 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=
417
		. $i
418
		dir=${i%/APKBUILD}
419
		for j in $pkgname $subpackages; do
420 421 422 423 424 425 426 427 428
			echo "o ${j%%:*} $dir"
			set -- $depends $makedepends
			echo -n "d ${j%%:*} $1"
			shift
			while [ $# -gt 0 ]; do
				echo -n ",$1"
				shift
			done
			echo
429 430
		done
	done
431
	)
432 433
}

434 435 436 437 438
deptrace() {
	( 	depparse_aports 
		if [ -z "$upgrade" ]; then
			# list installed pkgs and prefix with 'i '
			apk_info | sed 's/-[0-9].*//; s/^/i /'
439
		fi
440 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
	) | 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"
484 485 486
	done
}

Natanael Copa's avatar
Natanael Copa committed
487 488 489 490 491 492 493 494 495 496
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\""
}

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

513 514 515 516 517 518 519 520
# 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
521
usage() {
522
	echo "$(basename $0) $abuild_ver"
523
	echo "usage: $0 [options] [-i PKG] [-p PKGDEST] [-s SRCDEST] [cmd] ..."
Natanael Copa's avatar
Natanael Copa committed
524 525
	echo "Options:"
	echo " -f  Force specified cmd, even if they are already done"
526 527
	echo " -h  Show this help"
	echo " -i  Install PKG after successul build"
528
	echo " -k  Keep built packages, even if APKBUILD or sources are newer"
529
	echo " -p  Set package destination directory"
Natanael Copa's avatar
Natanael Copa committed
530
	echo " -q  Quiet"
531
	echo " -r  Recursively build and install missing dependencies (using sudo)"
532
	echo " -s  Set source package destination directory"
533
	echo " -u  Recursively build and upgrade dependencies (using sudo)"
Natanael Copa's avatar
Natanael Copa committed
534 535
	echo ""
	echo "Commands:"
536 537 538 539 540 541
	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"
542
	echo "  listpkg     List target packages"
543 544 545
	echo "  package     Create package in \$PKGDEST"
	echo "  rootpkg     Run '$0 build package' as fakeroot"
	echo "  clean       Remove temp build and install dirs"
546
	echo "  cleanoldpkg Remove binary packages except current version"
547 548 549 550
	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
551 552 553 554
	echo ""
	exit 0
}

555 556

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

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

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

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


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

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

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
606
cleanup
Natanael Copa's avatar
Natanael Copa committed
607