#!/bin/bash SCRIPT="$(readlink -f $0)" PARENT="$(dirname ${SCRIPT%/*})" check_requisite() { case "$2" in pkgconf) [ -n "$(find /usr/lib*/pkgconfig/ /usr/local/lib*/pkgconfig/ /usr/lib/*/pkgconfig/ -name "$1" 2>/dev/null)" ] ;; pkgconf32) [ -n "$(find /usr/lib/pkgconfig/ /usr/local/lib/pkgconfig/ /usr/lib/*/pkgconfig/ -name "$1" 2>/dev/null | grep -v 'x86_64')" ] ;; program) [ -x "$(command -v $1)" ] ;; lib) ldconfig -p | grep -Eq "^[[:space:]]*$1(\.[01])* " ;; lib32) ldconfig -p | grep -v 'x86-64' | grep -Eq "^[[:space:]]*$1(\.[01])* " ;; header) [ -n "$(find /usr/include/ /usr/local/include/ -path "*/$1" 2>/dev/null)" ] ;; *) false ;; esac } failed_requisite() { case "$2" in pkgconf) echo "ERROR: The pkgconf '$1' was not found in /usr/(local/)lib*/(*/)pkgconfig/" ;; pkgconf32) echo "ERROR: The pkgconf '$1' (32-bit) was not found in /usr/(local/)lib/(*/)pkgconfig/" ;; program) echo "ERROR: The program '$1' was not found in path" ;; lib) echo "ERROR: The library '$1' was not found in /etc/ld.so.cache" ;; lib32) echo "ERROR: The library '$1' (32-bit) was not found in /etc/ld.so.cache" ;; header) echo "ERROR: The header file '$1' was not found in /usr/(local/)include" ;; *) echo "Unknown requisite type '$2' for '$1'." ;; esac } retval=0 while read parser file depends; do [ -z "$file" ] && continue # check dependencies MODE="or" [ "${depends%% *}" == 'and' ] && \ MODE="and" && \ depends="${depends#and }" depends="${depends#or }" [ "${#depends}" == '0' ] && mandatory='y' || mandatory='n' ands='y' for x in $depends; do grep -q "^$x=y$" "$PARENT/.config" 2>/dev/null && mandatory='y' || ands='n' done [ "$MODE" == "and" -a "$ands" != "y" ] && mandatory='n' [ "$mandatory" != 'y' ] && continue # check installed check_requisite "$file" "$parser" && continue failed_requisite "$file" "$parser" retval=1 done < <(sed 's/#.*//g;/^[ \t]*$/d' "$PARENT/.prerequisites" 2>/dev/null) exit $retval