#!/bin/sh PROG=injectdigs if [ $# -eq 0 ] then digs="md5 sha512" else digs=$* fi openssl=0 for dig in $digs do if ! which "${dig}sum" >/dev/null 2>&1 then openssl=1 break fi done case $openssl in 1) if ! which openssl >/dev/null 2>&1 then echo "$PROG: [`echo $digs | tr ' ' /`]sum or openssl need to be installed" exit 2 fi esac awk -v digstr="$digs" -v openssl="$openssl" -v prog="$PROG" ' BEGIN { diglen = split(digstr, digalgs) FS = "\n"; RS = ""; ORS = "\n\n" } function calcdigs(alg, files) { if(0+openssl){ return openssldigs(alg, files) }else{ return sumdigs(alg, files) } } function sumdigs(alg, files) { cmd = alg "sum " files digests = "" while(cmd | getline > 0){ digests = digests $1 "\n" } close(cmd) return digests } function openssldigs(alg, files) { cmd = "openssl " alg " " files digests = "" while(cmd | getline > 0){ digests = digests $2 "\n" } close(cmd) return digests } 1 $1 == "source" { for(i = 2; i <= NF; i++){ file = $i sub(/.*\//, "", file) if(system("test -f " file) != 0){ print prog ": source file " file " is missing!" | "cat 1>&2" exit 1 } files = files file " " filelen++ } } END { FS = " "; RS = "\n" OFS = ORS = "\n" if(!filelen) exit 0 for(i = 1; i <= diglen; i++){ alg = digalgs[i] print alg "sums", calcdigs(alg, files) } } '