180 lines
3.9 KiB
Smarty
180 lines
3.9 KiB
Smarty
|
[= 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))
|
||
|
|
||
|
=]
|