abuild: initial support for new apk format

This commit is contained in:
Natanael Copa 2009-07-20 14:56:01 +00:00
parent 58cb2bc3fb
commit be9fa503bc

View File

@ -295,19 +295,21 @@ prepare_metafiles() {
[ -z "${name##* *}" ] && die "package name contains spaces" [ -z "${name##* *}" ] && die "package name contains spaces"
local dir=${subpkgdir:-$pkgdir} local dir=${subpkgdir:-$pkgdir}
local pkg="$name-$pkgver-r$pkgrel.apk" local pkg="$name-$pkgver-r$pkgrel.apk"
local pkginfo="$controldir"/.PKGINFO
local sub local sub
[ ! -d "$dir" ] && die "Missing $dir" [ ! -d "$dir" ] && die "Missing $dir"
cd "$dir" cd "$dir"
mkdir -p "$controldir"
local builddate=$(date -u "+%s") local builddate=$(date -u "+%s")
local size=$(du -sk | awk '{print $1 * 1024}') local size=$(du -sk | awk '{print $1 * 1024}')
echo "# Generated by $(basename $0) $abuild_ver" >.PKGINFO echo "# Generated by $(basename $0) $abuild_ver" >"$pkginfo"
if [ -n "$FAKEROOTKEY" ]; then if [ -n "$FAKEROOTKEY" ]; then
echo "# using $(fakeroot -v)" >> .PKGINFO echo "# using $(fakeroot -v)" >> "$pkginfo"
fi fi
echo "# $(date -u)" >> .PKGINFO echo "# $(date -u)" >> "$pkginfo"
cat >> .PKGINFO <<EOF cat >> "$pkginfo" <<EOF
pkgname = $name pkgname = $name
pkgver = $pkgver-r$pkgrel pkgver = $pkgver-r$pkgrel
pkgdesc = $pkgdesc pkgdesc = $pkgdesc
@ -329,32 +331,28 @@ EOF
fi fi
for i in $license; do for i in $license; do
echo "license = $i" >>.PKGINFO echo "license = $i" >> "$pkginfo"
done done
for i in $replaces; do for i in $replaces; do
echo "replaces = $i" >>.PKGINFO echo "replaces = $i" >> "$pkginfo"
done done
for i in $deps; do for i in $deps; do
echo "depend = $i" >>.PKGINFO echo "depend = $i" >> "$pkginfo"
done done
for i in $conflicts; do for i in $conflicts; do
echo "conflict = $i" >>.PKGINFO echo "conflict = $i" >> "$pkginfo"
done done
for i in $provides; do for i in $provides; do
echo "provides = $i" >>.PKGINFO echo "provides = $i" >> "$pkginfo"
done done
for i in $backup; do for i in $backup; do
echo "backup = $i" >>.PKGINFO echo "backup = $i" >> "$pkginfo"
done done
local metafiles=".PKGINFO" local metafiles=".PKGINFO"
for i in $install; do for i in $install; do
script=${i#$name} script=${i#$name}
case "$script" in case "$script" in
.install)
warning "Deprecated .install script found."
script=.INSTALL
;;
.pre-install|.post-install|.pre-upgrade|.post-upgrade|.pre-deinstall|.post-deinstall) .pre-install|.post-install|.pre-upgrade|.post-upgrade|.pre-deinstall|.post-deinstall)
msg "Adding $script" msg "Adding $script"
;; ;;
@ -362,23 +360,24 @@ EOF
return 1 return 1
;; ;;
esac esac
cp "$srcdir/$i" "$dir/$script" || return 1 cp "$srcdir/$i" "$controldir/$script" || return 1
chmod +x "$dir/$script" chmod +x "$controldir/$script"
metafiles="$metafiles $script" metafiles="$metafiles $script"
done done
echo $metafiles | tr ' ' '\n' > "$dir"/.metafiles echo $metafiles | tr ' ' '\n' > "$controldir"/.metafiles
} }
prepare_tracedeps() { prepare_tracedeps() {
local dir=${subpkgdir:-$pkgdir} local dir=${subpkgdir:-$pkgdir}
options_has "!tracedeps" && return 0 options_has "!tracedeps" && return 0
find -name '*.so' -o -name '*.so.[0-9]*' | sed 's:.*/::' >"$dir"/.provides-so find -name '*.so' -o -name '*.so.[0-9]*' | sed 's:.*/::' \
>"$controldir"/.provides-so
scanelf -Rn "$dir" | awk -F "\ " '$1 == "ET_DYN" || $1 == "ET_EXEC" {print $2}' \ scanelf -Rn "$dir" | awk -F "\ " '$1 == "ET_DYN" || $1 == "ET_EXEC" {print $2}' \
| sed 's:,:\n:g' | sort | uniq \ | sed 's:,:\n:g' | sort | uniq \
| while read i; do | while read i; do
# only add files that are not self provided # only add files that are not self provided
grep "^$i$" "$dir"/.provides-so >/dev/null \ grep "^$i$" "$controldir"/.provides-so >/dev/null \
|| echo $i >> "$dir"/.needs-so || echo $i >> "$controldir"/.needs-so
done done
} }
@ -403,10 +402,10 @@ trace_apk_deps() {
for i in $(cat "$dir"/.needs-so 2>/dev/null); do for i in $(cat "$dir"/.needs-so 2>/dev/null); do
found= found=
# first check if its provide by same apkbuild # first check if its provide by same apkbuild
for j in "$dir"/../*/.provides-so; do for j in "$dir"/../.control.*/.provides-so; do
grep -w "$i" "$j" >/dev/null || continue grep -w "$i" "$j" >/dev/null || continue
found=${j%/.provides-so} found=${j%/.provides-so}
found=${found##*/} found=${found##*/.control.}
break break
done done
# check apk db if not provided by a subpackage # check apk db if not provided by a subpackage
@ -433,37 +432,33 @@ trace_apk_deps() {
create_apks() { create_apks() {
local file local file
for file in "$pkgbasedir"/*/.PKGINFO; do for file in "$pkgbasedir"/.control.*/.PKGINFO; do
local dir="${file%/.PKGINFO}" local dir="${file%/.PKGINFO}"
local name=$(pkginfo_val pkgname $file) local name=$(pkginfo_val pkgname $file)
local ver=$(pkginfo_val pkgver $file) local ver=$(pkginfo_val pkgver $file)
local apk=$name-$ver.apk local apk=$name-$ver.apk
local datadir="$pkgbasedir"/$name
trace_apk_deps "$name" "$dir" || return 1 trace_apk_deps "$name" "$dir" || return 1
msg "Creating $apk..." msg "Creating $apk..."
( (
cd "$dir" cd "$datadir"
set * # data.tar.gz
[ "$1" = '*' ] && set -- tar -c . | abuild-tar --hash | gzip -9 >"$dir"/data.tar.gz
tar -zcf "$PKGDEST"/$apk $(cat .metafiles) $@
)
done
}
update_apkcache_index() { # append the hash for data.tar.gz
local index="$apkcache"/APK_INDEX.gz local sha256=$(sha256sum "$dir"/data.tar.gz | cut -f1 -d' ')
local opt= echo "datahash = $sha256" >> "$dir"/.PKGINFO
(
for i in "$@"; do # control.tar.gz
pkg=${i##*/} cd "$dir"
todelete="$todelete ${pkg%-[0-9]*.apk}" tar -c $(cat "$dir"/.metafiles) | abuild-tar --cut \
| gzip -9 > control.tar.gz
# create the final apk
cat control.tar.gz data.tar.gz > "$PKGDEST"/$apk
)
done done
if [ -f "$index" ]; then
apk index -q -d "$index" $todelete || exit 1
fi
apk index -q "$@" || exit 1
) > "$apkcache"/APK_INDEX.new || return 1
gzip "$apkcache"/APK_INDEX.new && mv "$apkcache/APK_INDEX.new.gz" "$index"
} }
apkcache() { apkcache() {
@ -475,12 +470,11 @@ apkcache() {
set -- set --
for apk in $(listpkg); do for apk in $(listpkg); do
ln -sf "$PKGDEST"/$apk "$apkcache"/$apk ln -sf "$PKGDEST"/$apk "$apkcache"/$apk
set -- "$@" "$apkcache"/$apk
done done
# update the apkcache cache here # update the apkcache cache here
msg "Updating the cached abuild repository index..." msg "Updating the cached abuild repository index..."
update_apkcache_index "$@" apk index -o "$apkcache"/APKINDEX.tar.gz "$apkcache"/*.apk
} }
# predefined splitfunc doc # predefined splitfunc doc
@ -960,6 +954,7 @@ if [ -n "$subpkgname" ]; then
install= install=
fi fi
pkgdir="$pkgbasedir/$pkgname" pkgdir="$pkgbasedir/$pkgname"
controldir="$pkgbasedir"/.control.${subpkgname:-$pkgname}
trap 'die "Aborted by user"' INT trap 'die "Aborted by user"' INT
set_xterm_title "abuild: $pkgname" set_xterm_title "abuild: $pkgname"