Merge branch 'amove-noerror' into 'master'

abuild: improve amove

See merge request alpine/abuild!273
This commit is contained in:
Sertonix 2024-04-29 17:11:26 +00:00
commit 08db6a875c
2 changed files with 54 additions and 75 deletions

101
abuild.in
View File

@ -74,28 +74,28 @@ error() {
amove() {
[ -n "$subpkgdir" ] || return 1
# store directory
d="$(pwd -L)"
local olddir="$(pwd -L)"
cd "$pkgdir"
local pattern f IFS=""
local ret=0 IFS="" pattern f d
for pattern; do
for f in ${pattern#/}; do # let shell expand the pattern
# strip trailing /
f=${f%/}
if [ "${f%/*}" != "$f" ]; then
mkdir -p "$subpkgdir/${f%/*}"
mv -v "$pkgdir/$f" "$subpkgdir/${f%/*}"
else
mkdir -p "$subpkgdir"
mv -v "$pkgdir/$f" "$subpkgdir/"
fi
# cleanup
rmdir -p "$f" 2>/dev/null || rmdir -p "${f%/*}" 2>/dev/null || true
for f in ${pattern#"${pattern%%[!/]*}"}; do # let shell expand the pattern
[ -L "$f" ] || [ -e "$f" ] || {
ret=1
continue
}
# strip all trailing /
f=${f%"${f##*[!/]}"}
d=${f%/*}
[ "$d" = "$f" ] && d=.
mkdir -p "$subpkgdir/$d"
mv -v "$f" "$subpkgdir/$d"
rmdir -p "$d" 2>/dev/null || :
done
done
cd "$d"
cd "$olddir"
return $ret
}
cross_creating() {
@ -966,11 +966,7 @@ default_lang() {
install_if="$pkgname=$pkgver-r$pkgrel lang"
depends="$depends_lang"
local dir
for dir in ${langdir:-/usr/share/locale}; do
mkdir -p "$subpkgdir"/${dir%/*}
mv "$pkgdir"/"$dir" "$subpkgdir"/"$dir" || return 1
done
amove ${langdir:-/usr/share/locale}
}
lang() {
@ -987,10 +983,7 @@ default_lang_subpkg() {
local dir
for dir in ${langdir:-/usr/share/locale}; do
mkdir -p "$subpkgdir"/$dir
mv "$pkgdir"/$dir/$lang* \
"$subpkgdir"/$dir/ \
|| return 1
amove "$dir/$lang*"
done
}
@ -1962,10 +1955,7 @@ default_doc() {
local i
for i in doc man info html sgml licenses gtk-doc ri help; do
if [ -d "$pkgdir/usr/share/$i" ]; then
mkdir -p "$subpkgdir/usr/share"
mv "$pkgdir/usr/share/$i" "$subpkgdir/usr/share/"
fi
amove usr/share/"$i" || :
done
# compress man pages
@ -2002,9 +1992,6 @@ default_doc() {
done
rm -f "$subpkgdir/usr/share/info/dir"
# remove if empty, ignore error (not empty)
rmdir "$pkgdir/usr/share" "$pkgdir/usr" 2>/dev/null || :
}
doc() {
@ -2065,18 +2052,12 @@ default_dev() {
$(find $libdirs -name '*.[cho]' \
-o -name '*.prl' 2>/dev/null); do
if [ -e "$pkgdir/$i" ] || [ -L "$pkgdir/$i" ]; then
d="$subpkgdir/${i%/*}" # dirname $i
mkdir -p "$d"
mv "$pkgdir/$i" "$d"
rmdir "$pkgdir/${i%/*}" 2>/dev/null || :
amove "$i"
fi
done
# move *.so links needed when linking the apps to -dev packages
for i in lib/*.so usr/lib/*.so; do
if [ -L "$i" ]; then
mkdir -p "$subpkgdir"/"${i%/*}"
mv "$i" "$subpkgdir/$i" || return 1
fi
[ -L "$i" ] && amove "$i"
done
return 0
}
@ -2107,10 +2088,8 @@ default_static() {
[ -d lib/ ] && libdirs="lib/ $libdirs"
# move *.a static library
for i in $(find $libdir -name '*.a'); do
mkdir -p "$subpkgdir"/"${i%/*}"
mv "$i" "$subpkgdir/$i" || return 1
done
amove $(find $libdir -name '*.a')
return 0
}
@ -2122,14 +2101,8 @@ static() {
default_libs() {
depends="$depends_libs"
pkgdesc="$pkgdesc (libraries)"
local dir= file=
for dir in lib usr/lib; do
for file in "$pkgdir"/$dir/lib*.so.[0-9]*; do
[ -f "$file" ] || continue
mkdir -p "$subpkgdir"/$dir
mv "$file" "$subpkgdir"/$dir/
done
done
amove 'lib/lib*.so.[0-9]*' 'usr/lib/lib*.so.[0-9]*'
}
libs() {
@ -2141,14 +2114,8 @@ default_openrc() {
depends="$depends_openrc"
pkgdesc="$pkgdesc (OpenRC init scripts)"
install_if="openrc ${subpkgname%-openrc}=$pkgver-r$pkgrel"
local dir file
for dir in conf.d init.d; do
if [ -d "$pkgdir/etc/$dir" ]; then
mkdir -p "$subpkgdir"/etc
mv "$pkgdir/etc/$dir" "$subpkgdir"/etc/
fi
done
return 0
amove etc/conf.d etc/init.d || :
}
openrc() {
@ -2159,6 +2126,7 @@ default_devhelp() {
depends=""
pkgdesc="$pkgname - devhelp files"
install_if="$pkgname=$pkgver-r$pkgrel devhelp"
amove usr/share/devhelp
}
@ -2197,15 +2165,12 @@ default_fishcomp() {
install_if="$pkgname=$pkgver-r$pkgrel fish"
cd "$pkgdir" || return 0
amove usr/share/fish/vendor_completions.d || :
if [ -d usr/share/fish/vendor_completions.d ]; then
amove usr/share/fish/vendor_completions.d
fi
if [ -d usr/share/fish/completions ]; then
amove usr/share/fish/completions &&
warning "fish completions for programs should be in /usr/share/fish/vendor_completions.d"
amove usr/share/fish/completions
fi
return 0
}
fishcomp() {

View File

@ -87,7 +87,7 @@ abuild_simple_pkg_without_deps_body() {
init_keys
cp -r "$testrepo"/pkg1 .
cd pkg1
atf_check -s exit:0 \
atf_check -s exit:0 -o ignore \
-e not-match:"WARNING" \
-e not-match:"fatal" \
abuild
@ -503,7 +503,7 @@ abuild_large_doc_subpackage_body() {
init_keys
cp -ra "$testrepo"/large-doc-subpkg .
cd large-doc-subpkg
atf_check -s exit:0 \
atf_check -s exit:0 -o ignore \
-e match:"-doc subpackage is unusually large" \
abuild all
}
@ -512,7 +512,7 @@ abuild_bigdocs_body() {
init_keys
cp -ra "$testrepo"/large-doc-subpkg .
cd large-doc-subpkg
options=bigdocs atf_check -s exit:0 \
options=bigdocs atf_check -s exit:0 -o ignore \
-e not-match:"-doc subpackage is unusually large" \
abuild all
}
@ -688,6 +688,7 @@ abuild_amove_body() {
\$pkgname-etc:_etc
\$pkgname-bin:_bin
\$pkgname-sbin:_sbin
\$pkgname-root:_root
\$pkgname-var:_var
\$pkgname-usr:_usr
\$pkgname-space:_space"
@ -702,26 +703,35 @@ abuild_amove_body() {
"\$pkgdir"/etc/\$pkgname.conf \
"\$pkgdir"/bin/hello \
"\$pkgdir"/sbin/shello \
"\$pkgdir"/root \
"\$pkgdir"/sbin/space' ' \
"\$pkgdir"/var/lib/\$pkgname/testfile \
"\$pkgdir"/usr/share/a \
"\$pkgdir"/usr/share/b
ln -s dangling "\$pkgdir"/symlink
}
_file() {
amove etc/file
}
_etc() {
# leading and trailing /
amove /etc/
amove ///etc/
}
_bin() {
# trailing /
amove bin/
amove bin///
}
_sbin() {
# no /
# no leading and trailing /
amove sbin/shello
}
_root() {
# no /
amove root
# symlink without existing target
amove symlink
}
_var() {
# leading /
amove /var/lib
@ -729,6 +739,8 @@ abuild_amove_body() {
_usr() {
# glob *
amove usr/share/*
amove no-glob-match/* && return 1
return 0
}
_space() {
# with space
@ -742,12 +754,14 @@ abuild_amove_body() {
test-amove-etc/etc/test-amove.conf \
test-amove-bin/bin/hello \
test-amove-sbin/sbin/shello \
test-amove-root/root \
test-amove-root/symlink \
test-amove-var/var/lib/test-amove/testfile \
test-amove-usr/usr/share/a \
test-amove-usr/usr/share/b \
test-amove-space/sbin/space' ' \
; do \
test -f pkg/"$i" || atf_fail "$i failed"
[ -L pkg/"$i" ] || [ -e pkg/"$i" ] || atf_fail "$i failed"
done
}