#!/bin/bash

## exclusion list for faust errors
XLIST1="faust2md"

OSX="faust2au faust2caqt faust2csound faust2faustvst faust2jaqt faust2max6 faust2msp faust2puredata faust2supercollider faust2vst faust2vsti faust2ios"
OSXMIDI="faust2caqt faust2jaqt faust2max6 faust2msp faust2ios"
OSXPOLY="faust2caqt faust2jaqt faust2max6 faust2msp faust2ios"
OSXPOLYMIDI="faust2caqt faust2jaqt faust2max6 faust2msp faust2ios"
OSXOSCHTTPD="faust2caqt faust2jaqt"

LINUX="faust2alqt faust2alsa faust2alsaconsole faust2android faust2asmjs faust2bela   faust2csound faust2dssi faust2eps faust2faustvst faust2firefox faust2graph faust2graphviewer  faust2jack faust2jackconsole faust2jackinternal faust2jackserver faust2jaqt faust2ladspa faust2lv2 faust2mathdoc  faust2md  faust2netjackconsole faust2netjackqt faust2octave faust2owl faust2paqt faust2pdf faust2plot faust2png faust2puredata faust2raqt faust2ros faust2rosgtk faust2rpialsaconsole faust2rpinetjackconsole faust2sig faust2sigviewer faust2supercollider faust2svg faust2w32max6 faust2w32msp faust2w32puredata faust2w32vst faust2webaudioasm"
LINUXMIDI="faust2jaqt"
LINUXPOLY="faust2jaqt"
LINUXPOLYMIDI="faust2jaqt"
LINUXOSCHTTPD="faust2jaqt"

## test exclusion : notinlist "toto" "a b c d e"
notinlist() {
  for word in $2; do
    if [ $word = $1 ]; then
        return 1
    fi
  done
  return 0
}

if [ "$1" = "osx" ]; then
	echo
	echo "Test $OSX"

	for scriptname in $OSX; do
    	($scriptname good.dsp &> LOG)&&(echo "OK: $scriptname succeeded !")||(echo "ERROR: $scriptname failed")
	done

    for scriptname in $OSXMIDI; do
        ($scriptname -midi good.dsp &> LOG)&&(echo "OK: $scriptname -midi succeeded !")||(echo "ERROR: $scriptname -midi failed")
    done

    for scriptname in $OSXPOLY; do
        ($scriptname -poly good.dsp &> LOG)&&(echo "OK: $scriptname -poly succeeded !")||(echo "ERROR: $scriptname -poly failed")
    done

    for scriptname in $OSXPOLYMIDI; do
        ($scriptname -poly -midi good.dsp &> LOG)&&(echo "OK: $scriptname -poly -midi succeeded !")||(echo "ERROR: $scriptname -poly -midi failed")
    done

    for scriptname in $OSXOSCHTTPD; do
        ($scriptname -osc -httpd good.dsp &> LOG)&&(echo "OK: $scriptname -osc -httpd succeeded !")||(echo "ERROR: $scriptname -osc -httpd failed")
    done

    (faust2api -ios good.dsp &> LOG)&&(echo "OK: faust2api -ios succeeded !")||(echo "ERROR: faust2api -ios failed")

    (faust2api -ios -midi good.dsp &> LOG)&&(echo "OK: faust2api -ios -midi succeeded !")||(echo "ERROR: faust2api -ios -midi failed")


elif [ "$1" = "linux" ]; then
	echo
	echo "Test $LINUX"

	for scriptname in $LINUX; do
    	($scriptname good.dsp &> LOG)&&(echo "OK: $scriptname succeeded !")||(echo "ERROR: $scriptname failed")
	done

    for scriptname in $LINUXMIDI; do
        ($scriptname -midi good.dsp &> LOG)&&(echo "OK: $scriptname -midi succeeded !")||(echo "ERROR: $scriptname -midi failed")
    done

    for scriptname in $LINUXPOLY; do
        ($scriptname -poly good.dsp &> LOG)&&(echo "OK: $scriptname -poly succeeded !")||(echo "ERROR: $scriptname -poly failed")
    done

    for scriptname in $LINUXPOLYMIDI; do
        ($scriptname -poly -midi good.dsp &> LOG)&&(echo "OK: $scriptname -poly -midi succeeded !")||(echo "ERROR: $scriptname -poly -midi failed")
    done

    for scriptname in $LINUXOSCHTTPD; do
        ($scriptname -osc -httpd good.dsp &> LOG)&&(echo "OK: $scriptname -osc -httpd succeeded !")||(echo "ERROR: $scriptname -osc -httpd failed")
    done

    (faust2api -android good.dsp &> LOG)&&(echo "OK: faust2api -android succeeded !")||(echo "ERROR: faust2api -android failed")

    (faust2api -android -midi good.dsp &> LOG)&&(echo "OK: faust2api -android -midi succeeded !")||(echo "ERROR: faust2api -android -midi failed")

else
	echo
	echo "Test all Faust2xxx to work"
	echo
	for S in ../../tools/faust2appls/faust2*; do
		scriptname=`basename $S .in`
		if notinlist  $S "$XLIST1"; then
			($scriptname good.dsp &> LOG)&&(echo "OK: $scriptname succeeded !")||(echo "ERROR: $scriptname failed")
		fi
	done
fi
