abuild: initial support for new apk format
This commit is contained in:
parent
58cb2bc3fb
commit
be9fa503bc
85
abuild.in
85
abuild.in
@ -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"
|
||||||
|
Reference in New Issue
Block a user