[= autogen5 template sh=check.sh =]
[=
#
#  This file contains the shell template to run tests on the fixes
#
=]#!/bin/sh

set -e
TESTDIR=tests
TESTBASE=`cd $1;${PWDCMD-pwd}`

[ -d ${TESTDIR} ] || mkdir ${TESTDIR}
cd ${TESTDIR}
TESTDIR=`${PWDCMD-pwd}`

TARGET_MACHINE='*'
DESTDIR=`${PWDCMD-pwd}`/res
SRCDIR=`${PWDCMD-pwd}`/inc
FIND_BASE='.'
VERBOSE=[=` echo ${VERBOSE-1} `=]
INPUT=`${PWDCMD-pwd}`
ORIGDIR=${INPUT}

export TARGET_MACHINE DESTDIR SRCDIR FIND_BASE VERBOSE INPUT ORIGDIR

rm -rf ${DESTDIR} ${SRCDIR}
mkdir ${DESTDIR} ${SRCDIR}
(
[=
  (shellf
    "for f in %s
     do case $f in
        */* ) echo $f | sed 's;/[^/]*$;;' ;;
        esac
     done | sort -u | \
     while read g
     do echo \"  mkdir \\${SRCDIR}/$g || mkdir -p \\${SRCDIR}/$g || exit 1\"
     done" (join " " (stack "fix.files"))  ) =]
) 2> /dev/null[= # suppress 'No such file or directory' messages =]
cd inc
[=
(define sfile "")
(define HACK  "")
(define dfile "")              =][=

FOR fix                        =][=

  IF (> (count "test_text") 1) =][=
    (set! HACK (string-upcase! (get "hackname")))
    (set! sfile (if (exist? "files") (get "files[]") "testing.h"))
    (set! dfile (string-append
          (if (*==* sfile "/")
              (shellf "echo \"%s\"|sed 's,/[^/]*,/,'" sfile )
              "" )
          (string-tr! (get "hackname") "_A-Z" "-a-z")
    )           )              =][=

    FOR test_text (for-from 1) =]
cat >> [=(. sfile)=] <<_HACK_EOF_


#if defined( [=(. HACK)=]_CHECK_[=(for-index)=] )
[=test_text=]
#endif  /* [=(. HACK)=]_CHECK_[=(for-index)=] */
_HACK_EOF_
echo [=(. sfile)=] | ../../fixincl
mv -f [=(. sfile)=] [=(. dfile)=]-[=(for-index)=].h
[ -f ${DESTDIR}/[=(. sfile)=] ] && [=#
   =]mv ${DESTDIR}/[=(. sfile)=] ${DESTDIR}/[=(. dfile)=]-[=(for-index)=].h[=

    ENDFOR  test_text =][=

  ENDIF  multi-test   =][=

ENDFOR  fix

=][=

FOR fix  =][=
  (set! HACK (string-upcase! (get "hackname")))  =][=

  IF (not (exist? "test_text")) =][=
    (if (not (exist? "replace"))
        (error (sprintf "include fix '%s' has no test text"
                        (get "hackname") )) )
         =][=
  ELSE   =]
cat >> [= (raw-shell-str (if (exist? "files") (get "files[0]") "testing.h"))
         =] <<_HACK_EOF_


#if defined( [=(. HACK)=]_CHECK )
[=test_text=]
#endif  /* [=(. HACK)=]_CHECK */
_HACK_EOF_
[=ENDIF =][=

ENDFOR  fix

=]

export TEST_MODE=true
find . -type f | sed 's;^\./;;' | sort | ../../fixincl
cd ${DESTDIR}

exitok=true

find * -type f -print > ${TESTDIR}/LIST

#  Special hack for sys/types.h:  the #define-d types for size_t,
#  ptrdiff_t and wchar_t are different for each port.  Therefore,
#  strip off the defined-to type so that the test results are the
#  same for all platforms.
#
sed 's/\(#define __[A-Z_]*_TYPE__\).*/\1/' sys/types.h > XX
mv -f XX sys/types.h

#  The following subshell weirdness is for saving an exit
#  status from within a while loop that reads input.  If you can
#  think of a cleaner way, suggest away, please...
#
exitok=`
exec < ${TESTDIR}/LIST
while read f
do
  if [ -n "$MSYSTEM" -o -n "$DJGPP" ]
  then
    # On MinGW and DJGPP convert line endings to avoid false positives
    mv $f $f.dos; tr -d '\r' < $f.dos > $f; rm $f.dos
  fi
  if [ ! -f ${TESTBASE}/$f ]
  then
    echo "Newly fixed header:  $f" >&2
    exitok=false

  elif cmp $f ${TESTBASE}/$f >&2
  then
    :

  else
    ${DIFF:-diff} -c $f ${TESTBASE}/$f >&2 || :
    exitok=false
  fi
done
echo $exitok`

cd $TESTBASE

find * -type f ! -name .DS_Store ! -name CVS ! -name .svn -print \
> ${TESTDIR}/LIST

exitok=`
exec < ${TESTDIR}/LIST
while read f
do
  if [ -s $f ] && [ ! -f ${DESTDIR}/$f ]
  then
    echo "Missing header fix:  $f" >&2
    exitok=false
  fi
done
echo $exitok`

echo
if $exitok
then
  cd ${TESTDIR}
  rm -rf inc res LIST
  cd ..
  rmdir ${TESTDIR} > /dev/null 2>&1 || :
  echo All fixinclude tests pass >&2
else
  echo There were fixinclude test FAILURES  >&2
fi
$exitok[=

(if (defined? 'set-writable) (set-writable))

=]
