#!/bin/sh help () { cat <&2 "$0: FATAL: programs/test/metatest not found" exit 120 fi LIST_ONLY= while getopts hl OPTLET; do case $OPTLET in h) help; exit;; l) LIST_ONLY=1;; \?) help >&2; exit 120;; esac done shift $((OPTIND - 1)) list_matches () { while read name platform junk; do for pattern in "$@"; do case $platform in $pattern) echo "$name"; break;; esac done done } count=0 errors=0 run_metatest () { ret=0 "$METATEST_PROGRAM" "$1" || ret=$? if [ $ret -eq 0 ]; then echo >&2 "$0: Unexpected success: $1" errors=$((errors + 1)) fi count=$((count + 1)) } # Don't pipe the output of metatest so that if it fails, this script exits # immediately with a failure status. full_list=$("$METATEST_PROGRAM" list) matching_list=$(printf '%s\n' "$full_list" | list_matches "$@") if [ -n "$LIST_ONLY" ]; then printf '%s\n' $matching_list exit fi for name in $matching_list; do run_metatest "$name" done if [ $errors -eq 0 ]; then echo "Ran $count metatests, all good." exit 0 else echo "Ran $count metatests, $errors unexpected successes." exit 1 fi