abuild: support subpackages="pkg:split:arch" syntax
For proper cross-build support, the subpackage arch needs to be known before invoking the split function. This implements a way to do that. This also changes to write the actual subpkg arch to .PKGINFO - apk index --rewrite-arch still overwrites index to have machine arch for noarch packages.
This commit is contained in:
parent
26ec31c6c2
commit
b217bbb2ea
84
abuild.in
84
abuild.in
|
@ -441,6 +441,28 @@ cleancache() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subpkg_unset() {
|
||||||
|
unset subpkgname subpkgsplit subpkgarch
|
||||||
|
}
|
||||||
|
|
||||||
|
subpkg_set() {
|
||||||
|
subpkgname=${1%%:*}
|
||||||
|
|
||||||
|
local _splitarch=${1#*:}
|
||||||
|
[ "$_splitarch" = "$1" ] && _splitarch=""
|
||||||
|
|
||||||
|
subpkgsplit=${_splitarch%%:*}
|
||||||
|
[ -z "$subpkgsplit" ] && subpkgsplit="${subpkgname##*-}"
|
||||||
|
|
||||||
|
subpkgarch=${_splitarch#*:}
|
||||||
|
if [ "$subpkgarch" = "$_splitarch" -o -z "$subpkgarch" ]; then
|
||||||
|
case "$subpkgname" in
|
||||||
|
*-doc | *-lang | *-lang-*) subpkgarch="noarch" ;;
|
||||||
|
*) subpkgarch="$pkgarch" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
listpkgnames() {
|
listpkgnames() {
|
||||||
local i
|
local i
|
||||||
for i in $pkgname $subpackages; do
|
for i in $pkgname $subpackages; do
|
||||||
|
@ -575,18 +597,6 @@ targz() {
|
||||||
tar -czf "$PKGDEST"/$pkgname-$pkgver-r$pkgrel.tar.gz *
|
tar -czf "$PKGDEST"/$pkgname-$pkgver-r$pkgrel.tar.gz *
|
||||||
}
|
}
|
||||||
|
|
||||||
get_split_func() {
|
|
||||||
# get the 'func' from "sub-pkg:func:arch"
|
|
||||||
local _splitarch=${1#*:}
|
|
||||||
[ "$_splitarch" = "$1" ] && _splitarch=""
|
|
||||||
local _split=${_splitarch%:*}
|
|
||||||
if [ -z "$_split" ]; then
|
|
||||||
local _name=${1%%:*}
|
|
||||||
_split="${_name##*-}"
|
|
||||||
fi
|
|
||||||
echo $_split
|
|
||||||
}
|
|
||||||
|
|
||||||
postcheck() {
|
postcheck() {
|
||||||
local dir="$1" name="$2" i=
|
local dir="$1" name="$2" i=
|
||||||
msg "Running postcheck for $name"
|
msg "Running postcheck for $name"
|
||||||
|
@ -678,20 +688,17 @@ pre_split() {
|
||||||
# the subpackages should not inherit those form main package
|
# the subpackages should not inherit those form main package
|
||||||
provides=""
|
provides=""
|
||||||
install_if=""
|
install_if=""
|
||||||
apkbuild_arch="$arch"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_subpackages() {
|
prepare_subpackages() {
|
||||||
local i
|
local i
|
||||||
cd "$startdir"
|
cd "$startdir"
|
||||||
for i in $subpackages; do
|
for i in $subpackages; do
|
||||||
local func=$(get_split_func $i)
|
|
||||||
# call abuild recursively, setting subpkg{dir,name}
|
# call abuild recursively, setting subpkg{dir,name}
|
||||||
msg "Running split function $func..."
|
( subpkg_set "$i"; msg "Running split function $subpkgsplit..."; \
|
||||||
local dir="$pkgbasedir/${i%%:*}" name="${i%%:*}"
|
subpkgdir="$pkgbasedir/$subpkgname" subpkgname="$subpkgname" subpkgarch="$subpkgarch" \
|
||||||
( subpkgdir="$dir" subpkgname="$name" \
|
$0 pre_split $subpkgsplit prepare_package \
|
||||||
$0 pre_split $func prepare_package \
|
&& postcheck "$pkgbasedir/$subpkgname" "$subpkgname" ) || return 1
|
||||||
&& postcheck "$dir" "$name" ) || return 1
|
|
||||||
done
|
done
|
||||||
postcheck "$pkgdir" "$pkgname" || return 1
|
postcheck "$pkgdir" "$pkgname" || return 1
|
||||||
# post check for /usr/share/locale
|
# post check for /usr/share/locale
|
||||||
|
@ -704,7 +711,7 @@ prepare_subpackages() {
|
||||||
default_lang() {
|
default_lang() {
|
||||||
pkgdesc="Languages for package $pkgname"
|
pkgdesc="Languages for package $pkgname"
|
||||||
install_if="$pkgname=$pkgver-r$pkgrel lang"
|
install_if="$pkgname=$pkgver-r$pkgrel lang"
|
||||||
arch="noarch"
|
|
||||||
local dir
|
local dir
|
||||||
for dir in ${langdir:-/usr/share/locale}; do
|
for dir in ${langdir:-/usr/share/locale}; do
|
||||||
mkdir -p "$subpkgdir"/${dir%/*}
|
mkdir -p "$subpkgdir"/${dir%/*}
|
||||||
|
@ -722,8 +729,8 @@ default_lang_subpkg() {
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
pkgdesc="$pkgname language pack for $lang"
|
pkgdesc="$pkgname language pack for $lang"
|
||||||
arch="noarch"
|
|
||||||
install_if="$pkgname=$pkgver-r$pkgrel lang-$lang"
|
install_if="$pkgname=$pkgver-r$pkgrel lang-$lang"
|
||||||
|
|
||||||
local dir
|
local dir
|
||||||
for dir in ${langdir:-/usr/share/locale}; do
|
for dir in ${langdir:-/usr/share/locale}; do
|
||||||
mkdir -p "$subpkgdir"/$dir
|
mkdir -p "$subpkgdir"/$dir
|
||||||
|
@ -787,7 +794,7 @@ check_depends_dev() {
|
||||||
fi
|
fi
|
||||||
local i
|
local i
|
||||||
for i in $pkgname $subpackages; do
|
for i in $pkgname $subpackages; do
|
||||||
case "$i" in
|
case "${i%%:*}" in
|
||||||
*-dev) return 0 ;;
|
*-dev) return 0 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -808,16 +815,12 @@ prepare_metafiles() {
|
||||||
mkdir -p "$controldir"
|
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}')
|
||||||
local parch="$CARCH"
|
|
||||||
|
|
||||||
# we need to wait with setting noarch til our build infra can handle it
|
if [ "$arch" != "$apkbuild_arch" ]; then
|
||||||
# if [ "$arch" = "noarch" ]; then
|
local msg="Split function set arch=\"$arch\" for $name, use subpackages=pkg:split:arch format instead"
|
||||||
# parch="noarch"
|
[ "$arch" != "noarch" ] && die "$msg"
|
||||||
# fi
|
warning "$msg"
|
||||||
|
subpkgarch="$arch"
|
||||||
# save arch incase subpackages set it different than main pkg
|
|
||||||
if [ "${apkbuild_arch:-$arch}" != "$arch" ]; then
|
|
||||||
echo "$arch" > "$controldir"/.arch
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "# Generated by $(basename $0) $program_version" >"$pkginfo"
|
echo "# Generated by $(basename $0) $program_version" >"$pkginfo"
|
||||||
|
@ -833,7 +836,7 @@ url = $url
|
||||||
builddate = $builddate
|
builddate = $builddate
|
||||||
packager = ${PACKAGER:-"Unknown"}
|
packager = ${PACKAGER:-"Unknown"}
|
||||||
size = $size
|
size = $size
|
||||||
arch = $parch
|
arch = ${subpkgarch:-$pkgarch}
|
||||||
origin = $pkgname
|
origin = $pkgname
|
||||||
EOF
|
EOF
|
||||||
local i deps
|
local i deps
|
||||||
|
@ -904,7 +907,7 @@ EOF
|
||||||
prepare_trace_rpaths() {
|
prepare_trace_rpaths() {
|
||||||
local dir=${subpkgdir:-$pkgdir}
|
local dir=${subpkgdir:-$pkgdir}
|
||||||
local etype= soname= file= sover=
|
local etype= soname= file= sover=
|
||||||
[ "$arch" = "noarch" ] && return 0
|
[ "${subpkgarch:-$pkgarch}" = "noarch" ] && return 0
|
||||||
options_has "!tracedeps" && return 0
|
options_has "!tracedeps" && return 0
|
||||||
# lets tell all the places we should look for .so files - all rpaths
|
# lets tell all the places we should look for .so files - all rpaths
|
||||||
scanelf --quiet --recursive --rpath "$dir" \
|
scanelf --quiet --recursive --rpath "$dir" \
|
||||||
|
@ -974,10 +977,10 @@ is_doc_pkg() {
|
||||||
archcheck() {
|
archcheck() {
|
||||||
options_has "!archcheck" && return 0
|
options_has "!archcheck" && return 0
|
||||||
if dir_has_arch_binaries "${subpkgdir:-$pkgdir}"; then
|
if dir_has_arch_binaries "${subpkgdir:-$pkgdir}"; then
|
||||||
[ "$arch" != "noarch" ] && return 0
|
[ "${subpkgarch:-$pkgarch}" != "noarch" ] && return 0
|
||||||
error "Arch specific binaries found so arch must not be set to \"noarch\""
|
error "Arch specific binaries found so arch must not be set to \"noarch\""
|
||||||
return 1
|
return 1
|
||||||
elif [ "$arch" != "noarch" ] && ! is_dev_pkg; then
|
elif [ "${subpkgarch:-$pkgarch}" != "noarch" ] && ! is_dev_pkg; then
|
||||||
# we dont want -dev package go to noarch
|
# we dont want -dev package go to noarch
|
||||||
warning "No arch specific binaries found so arch should probably be set to \"noarch\""
|
warning "No arch specific binaries found so arch should probably be set to \"noarch\""
|
||||||
fi
|
fi
|
||||||
|
@ -1042,6 +1045,7 @@ trace_apk_deps() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
local dir="$2"
|
local dir="$2"
|
||||||
local i= found= autodeps= deppkgs= missing=
|
local i= found= autodeps= deppkgs= missing=
|
||||||
|
|
||||||
msg "Tracing dependencies..."
|
msg "Tracing dependencies..."
|
||||||
# add pkgconfig if usr/lib/pkgconfig is found
|
# add pkgconfig if usr/lib/pkgconfig is found
|
||||||
if [ -d "$pkgbasedir"/$name/usr/lib/pkgconfig ] \
|
if [ -d "$pkgbasedir"/$name/usr/lib/pkgconfig ] \
|
||||||
|
@ -1153,7 +1157,7 @@ scan_shared_objects() {
|
||||||
local name="$1" controldir="$2" datadir="$3"
|
local name="$1" controldir="$2" datadir="$3"
|
||||||
local opt= i=
|
local opt= i=
|
||||||
|
|
||||||
if [ "$arch" = "noarch" ] && ! [ -e "$controldir"/.arch ]; then
|
if [ "${subpkgarch:-$pkgarch}" = "noarch" ]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1430,7 +1434,6 @@ update_abuildrepo_index() {
|
||||||
default_doc() {
|
default_doc() {
|
||||||
depends="$depends_doc"
|
depends="$depends_doc"
|
||||||
pkgdesc="$pkgdesc (documentation)"
|
pkgdesc="$pkgdesc (documentation)"
|
||||||
arch=${arch_doc:-"noarch"}
|
|
||||||
install_if="docs $pkgname=$pkgver-r$pkgrel"
|
install_if="docs $pkgname=$pkgver-r$pkgrel"
|
||||||
|
|
||||||
local i
|
local i
|
||||||
|
@ -1927,7 +1930,7 @@ checksum() {
|
||||||
|
|
||||||
stripbin() {
|
stripbin() {
|
||||||
local bin
|
local bin
|
||||||
if options_has "!strip" || [ "$arch" = "noarch" ]; then
|
if options_has "!strip" || [ "${subpkgarch:-$pkgarch}" = "noarch" ]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
cd "${subpkgdir:-$pkgdir}" || return 1
|
cd "${subpkgdir:-$pkgdir}" || return 1
|
||||||
|
@ -2271,7 +2274,12 @@ if [ -n "$subpkgname" ]; then
|
||||||
origsubpackages="$subpackages"
|
origsubpackages="$subpackages"
|
||||||
subpackages=
|
subpackages=
|
||||||
fi
|
fi
|
||||||
|
apkbuild_arch="$arch"
|
||||||
pkgdir="$pkgbasedir/$pkgname"
|
pkgdir="$pkgbasedir/$pkgname"
|
||||||
|
if [ -z "$pkgarch" ]; then
|
||||||
|
pkgarch=$CARCH
|
||||||
|
list_has noarch $arch && pkgarch=noarch
|
||||||
|
fi
|
||||||
controldir="$pkgbasedir"/.control.${subpkgname:-$pkgname}
|
controldir="$pkgbasedir"/.control.${subpkgname:-$pkgname}
|
||||||
|
|
||||||
trap 'die "Aborted by user"' INT
|
trap 'die "Aborted by user"' INT
|
||||||
|
|
Loading…
Reference in New Issue