mkpk (1349B)
1 #!/bin/sh 2 3 usage() 4 { 5 cat <<! >&2 6 Usage: ${0##*/} [operation] [package] 7 operations: [ build | fetch | info | install | list | uninstall | update | upgrade ] 8 ! 9 } 10 11 error() 12 { 13 local format=$1 args 14 shift 15 printf "%s: ${format}\n" "${0##*/}" $* >&2 16 exit 1 17 } 18 19 if [ "$(id -u)" -ne 0 ]; then 20 case "$1" in 21 list|info|"") ;; 22 *) error "You must be root to $1";; 23 esac 24 fi 25 case "$1" in 26 update) ;; 27 *) if [ $# -lt 2 ]; then 28 usage 29 exit 1 30 fi;; 31 esac 32 33 command=$1 34 package=$2 35 version=$3 36 mkpklib=${mkpklib:-/lib/mkpk} 37 MK=${MK:-/plan9/bin/mk} 38 eval $("${MK}" -f "${mkpklib}"/vars.mk mkpklib="${mkpklib}") 39 40 files=defaults 41 case ${command} in 42 update) files=update;; 43 fetch) files=fetch;; 44 build) files=build;; 45 list) files=listfiles;; 46 info) files=info;; 47 install) files=install;; 48 upgrade) files="fetch build uninstall install";; 49 uninstall) files=uninstall;; 50 *) usage 51 exit 1;; 52 esac 53 54 for file in $files 55 do 56 if [ "${package}" = "mkpk" ] && [ "${file}" = "uninstall" ]; then 57 eval $("${MK}" -f "${mkpklib}"/vars.mk mkpklib="${mkpklib}") 58 ln -sf "$(find ${SRCBASEDIR} -name 'mkpk-*' -type d -prune \ 59 | sed 's,'${SRCBASEDIR}'/,,g' | recent)" "${SRCBASEDIR}/mkpk" 60 mkpklib=${SRCBASEDIR}/mkpk/lib 61 RECENT=${SRCBASEDIR}/mkpk/recent 62 export mkpklib RECENT 63 fi 64 "${MK}" -f "${mkpklib}"/${file}.mk mkpklib="${mkpklib}" \ 65 PKGBASE="${package}" 66 done