#!/bin/sh set -eu while getopts 'p:x:l:f:u' flag; do case "$flag" in p) PREFIX="$OPTARG" ;; x) EXECUTABLES_EXPECTED="$OPTARG" ;; l) SYMLINKS_EXPECTED="$OPTARG" ;; f) FILES_EXPECTED="$OPTARG" ;; u) UNINSTALL=1 ;; *) exit 2 ;; esac done shift $((OPTIND - 1)) if [ -n "${UNINSTALL:-}" ]; then if [ "$(find "$PREFIX" -type f | wc -l)" != 0 ]; then printf 'When uninstalling, left over files in the' printf 'PREFIX directory:\n' find "$PREFIX" -type f exit 1 fi exit fi EXECUTABLES_ACTUAL="$(find "$PREFIX" -type f -perm -a=x | wc -l)" if [ "${EXECUTABLES_EXPECTED:-0}" != "$EXECUTABLES_ACTUAL" ]; then printf 'Expected %s executables, found %s:\n' \ "$EXECUTABLES_EXPECTED" "$EXECUTABLES_ACTUAL" >&2 find "$PREFIX" -type f -perm -a=x exit 1 fi SYMLINKS_ACTUAL="$(find "$PREFIX" -type l | wc -l)" if [ "${SYMLINKS_EXPECTED:-0}" != "$SYMLINKS_ACTUAL" ]; then printf 'Expected %s symlinks, found %s:\n' \ "$SYMLINKS_EXPECTED" "$SYMLINKS_ACTUAL" >&2 find "$PREFIX" -type l exit 1 fi FILES_ACTUAL="$(find "$PREFIX" -type f | wc -l)" if [ "${FILES_EXPECTED:-0}" != "$FILES_ACTUAL" ]; then printf 'Expected %s files, found %s:\n' \ "$FILES_EXPECTED" "$FILES_ACTUAL" >&2 find "$PREFIX" -type f exit 1 fi