xbps-src: add consistency check
`xbps-src consistency-check` iterates over all templates and looks for potentially broken dependencies.
This commit is contained in:
parent
ba1ef21f11
commit
096aac3603
2 changed files with 85 additions and 0 deletions
79
common/xbps-src/shutils/consistency_check.sh
Normal file
79
common/xbps-src/shutils/consistency_check.sh
Normal file
|
@ -0,0 +1,79 @@
|
|||
# vim: set ts=4 sw=4 et:
|
||||
|
||||
consistency_check_existing () {
|
||||
while IFS=" " read -r dep origname deplabel; do
|
||||
[ -f "$XBPS_SRCPKGDIR/$dep/template" ] && continue
|
||||
case "$deplabel" in
|
||||
makedepends|hostmakedepends)
|
||||
msg_warn "unsatisfied $deplabel in $origname: $dep does not exist\n";
|
||||
;;
|
||||
*) printf "%s %s %s\n" "$dep" "$origname" "$deplabel" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
consistency_convert_pkgname () {
|
||||
local origname= pkgname version= revision=
|
||||
while IFS=" " read -r dep origname deplabel; do
|
||||
case "$deplabel" in
|
||||
makedepends|hostmakedepends)
|
||||
printf "%s %s %s\n" "$dep" "$origname" "$deplabel"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
case "$dep" in
|
||||
*\<*|*\>*|*=*)
|
||||
printf "%s %s %s\n" "$dep" "$origname" "$deplabel"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
if pkgname=$(xbps-uhelper getpkgname "$dep" 2> /dev/null) && \
|
||||
version=$(xbps-uhelper getpkgversion "$dep" 2> /dev/null) && \
|
||||
revision=$(xbps-uhelper getpkgrevision "$dep" 2> /dev/null); then
|
||||
printf "%s %s %s\n" "${pkgname}>=${version}_${revision}" "$origname" "$deplabel"
|
||||
else
|
||||
printf "%s %s %s\n" "$dep>=0" "$origname" "$deplabel"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
consistency_check_smart () {
|
||||
local pkgname= depdef= dep=
|
||||
while IFS=" " read -r depdef origname deplabel; do
|
||||
case "$deplabel" in
|
||||
makedepends|hostmakedepends)
|
||||
printf "%s %s %s\n" "$depdef" "$origname" "$deplabel"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
dep=$(xbps-uhelper getpkgdepname "$depdef")
|
||||
|
||||
if [ ! -f "$XBPS_SRCPKGDIR/$dep/template" ]; then
|
||||
msg_warn "unsatisfied $deplabel in $origname: $dep does not exist\n";
|
||||
continue
|
||||
fi
|
||||
(
|
||||
XBPS_TARGET_PKG=$dep
|
||||
read_pkg
|
||||
xbps-uhelper pkgmatch "$depdef" "${pkgname}-${version}_${revision}" && continue
|
||||
msg_red "unsatisfied $deplabel in $origname: $dep is $version, but required is $depdef\n";
|
||||
)
|
||||
done
|
||||
}
|
||||
|
||||
consistency_check() {
|
||||
local pkg= pkgname=
|
||||
for pkg in "$XBPS_SRCPKGDIR"/*/template; do
|
||||
XBPS_TARGET_PKG=$(basename $(dirname $pkg))
|
||||
(
|
||||
read_pkg
|
||||
[ "$depends" ] && printf "%s $pkgname depends\n" $depends
|
||||
[ "$conflicts" ] && printf "%s $pkgname conflicts\n" $conflicts
|
||||
[ -L "$XBPS_SRCPKGDIR/$XBPS_TARGET_PKG" ] && continue
|
||||
[ "$makedepends" ] && printf "%s $pkgname makedepends\n" $makedepends
|
||||
[ "$hostmakedepends" ] && printf "%s $pkgname hostmakedepends\n" $hostmakedepends
|
||||
)
|
||||
done | grep -v "^virtual?" | sed "s/^[^ ]*?//" | consistency_check_existing | \
|
||||
consistency_convert_pkgname | consistency_check_smart
|
||||
}
|
6
xbps-src
6
xbps-src
|
@ -30,6 +30,9 @@ bootstrap-update
|
|||
build <pkgname>
|
||||
Build package source (fetch + extract + configure + build).
|
||||
|
||||
consistency-check
|
||||
Runs a consistency check on all packages
|
||||
|
||||
chroot
|
||||
Enter to the chroot in <masterdir>.
|
||||
|
||||
|
@ -677,6 +680,9 @@ case "$XBPS_TARGET" in
|
|||
remove_pkg $XBPS_CROSS_BUILD
|
||||
fi
|
||||
;;
|
||||
consistency-check)
|
||||
consistency_check
|
||||
;;
|
||||
remove-autodeps)
|
||||
if [ -n "$CHROOT_READY" -a -z "$IN_CHROOT" ]; then
|
||||
chroot_handler remove-autodeps
|
||||
|
|
Loading…
Reference in a new issue