]> pd.if.org Git - zpackage/blobdiff - bin/zpm-pkgdeps
move programs to bin for build
[zpackage] / bin / zpm-pkgdeps
diff --git a/bin/zpm-pkgdeps b/bin/zpm-pkgdeps
new file mode 100755 (executable)
index 0000000..4a0528f
--- /dev/null
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+add=
+remove=
+setlist=
+quiet=0
+clearlist=0
+includelibs=1
+resolvelibs=0
+
+while getopts :f:s:a:r:qcLR opt; do
+       case $opt in
+               f) pkgfile="$OPTARG" ;;
+               s) setlist="$setlist $OPTARG"; clearlist=1 ;;
+               a) add="$add $OPTARG"; ;;
+               r) remove="$remove $OPTARG" ;;
+               q) quiet=1 ;;
+               c) clearlist=1 ;;
+               L) includelibs=0 ;;
+               R) resolvelibs=1 ;;
+       esac
+done
+shift $(( OPTIND - 1))
+
+: ${pkgfile:=${ZPMDB:-/var/lib/zpm/local.db}}
+
+if [ -z "$pkgfile" ]; then
+       echo "must specify package file"
+       exit 1
+fi
+
+pkgid=$(zpm findpkg -f $pkgfile "$1")
+if [ -z "$pkgid" ]; then
+       echo "cannot find pkgid for $1"
+       exit 1
+fi
+
+eval $(zpm parse -E "$pkgid")
+package=$(zpm quote -q "$name")
+version=$(zpm quote -q "$version")
+pkgselector="P.package = $package and P.version = $version and P.release = $release"
+selector="package = $package and version = $version and release = $release"
+listdeps="select requires from packagedeps P where %s;\n"
+adddep='insert or ignore into packagedeps (package,version,release,requires) values (%s,%s,%d,%s);\n'
+rmdep='delete from packagedeps where %s and requires = %s;\n'
+cleardeps='delete from packagedeps where %s;\n'
+libdeps="select distinct EN.needed from elfneeded EN join packagefiles P on P.hash = EN.file where %s;\n"
+resolvelibs="select distinct EN.needed from elfneeded EN join packagefiles PF on PF.hash = EN.file left join where %s;\n"
+
+{
+       printf ".bail on\n"
+       printf ".log stderr\n"
+       printf "begin;\n";
+if [ $clearlist -eq 1 ]; then
+       printf "$cleardeps" "$selector"
+fi
+if [ -n "$setlist" ]; then
+       for dep in $setlist; do
+               qdep=$(zpm quote -q "$dep")
+               printf "$adddep" "$package" "$version" "$release" "$qdep"
+       done
+fi
+if [ -n "$add" ]; then
+       for dep in $add; do
+               qdep=$(zpm quote -q "$dep")
+               printf "$adddep" "$package" "$version" "$release" "$qdep"
+       done
+fi
+if [ -n "$remove" ]; then
+       for dep in $remove; do
+               qdep=$(zpm quote -q "$dep")
+               printf "$rmdep" "$selector" "$qdep"
+       done
+fi
+if [ $quiet -eq 0 ]; then
+       printf "$listdeps" "$pkgselector"
+       if [ $includelibs -eq 1 ]; then
+               printf "$libdeps" "$pkgselector"
+       fi
+fi
+       printf "commit;\n";
+} | zpm shell $pkgfile