#!/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