#!/bin/bash error() { echo $* >&2 exit 1 } check_requisite() { case "$2" in program) [ -x "$(which $1 2>/dev/null)" ] ;; lib) ldconfig -p | grep -q "^[[:space:]]*$1 " ;; header) [ -n "$(find /usr/include/ /usr/local/include/ -path "*/$1" 2>/dev/null)" ] ;; *) error "Unknown requisite type: $2" ;; esac } failed_requisite() { local required if $3; then required="WARNING" else required="ERROR" fi case "$2" in program) echo "$required: The program $1 was not found in path." ;; lib) echo "$required: The library $1 was not found in /etc/ld.so.cache." ;; header) echo "$required: The header file $1 was not found in /usr/(local/)include." ;; *) error "Unknown requisite type: $2" ;; esac } declare -a req parser= warn=false while [ $# -gt 0 ]; do case "$1" in -h|--header) parser=header warn=false ;; -l|--lib) parser=lib warn=false ;; -p|--program) parser=program warn=false ;; -w|--warn) [ -n "$parser" ] && warn=true ;; *) [ -z "$parser" ] && error "Invalid argument: $1" req[${#req[*]}]="$1" req[${#req[*]}]=$parser req[${#req[*]}]=$warn warn=false esac shift done err=0 i=0 while [ $i -lt ${#req[*]} ]; do if ! check_requisite "${req[$i]}" ${req[$((i+1))]} ${req[$((i+2))]}; then failed_requisite "${req[$i]}" ${req[$((i+1))]} ${req[$((i+2))]} ${req[$((i+2))]} || err=1 fi i=$((i+3)) done exit $err