X-Git-Url: https://pd.if.org/git/?p=zpackage;a=blobdiff_plain;f=bin%2Fzpm-pkgdeps;fp=bin%2Fzpm-pkgdeps;h=4a0528fa5e987d076641b0c78bc10a1de9da8762;hp=0000000000000000000000000000000000000000;hb=0419c62f964b259df1c1816f5870ef62eb97ed7c;hpb=0c2216d1e0dc8565a6bf61c9572e47bb1ae1c1fb diff --git a/bin/zpm-pkgdeps b/bin/zpm-pkgdeps new file mode 100755 index 0000000..4a0528f --- /dev/null +++ b/bin/zpm-pkgdeps @@ -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