2013-05-28 Richard Biener <rguenther@suse.de>
[official-gcc.git] / fixincludes / check.tpl
blob0d1f44431fc55cc1bb265d25f4d6de22b717b4e3
1 [= autogen5 template sh=check.sh =]
2 [=
4 #  This file contains the shell template to run tests on the fixes
6 =]#!/bin/sh
8 set -e
9 TESTDIR=tests
10 TESTBASE=`cd $1;${PWDCMD-pwd}`
12 [ -d ${TESTDIR} ] || mkdir ${TESTDIR}
13 cd ${TESTDIR}
14 TESTDIR=`${PWDCMD-pwd}`
16 TARGET_MACHINE='*'
17 DESTDIR=`${PWDCMD-pwd}`/res
18 SRCDIR=`${PWDCMD-pwd}`/inc
19 FIND_BASE='.'
20 VERBOSE=[=` echo ${VERBOSE-1} `=]
21 INPUT=`${PWDCMD-pwd}`
22 ORIGDIR=${INPUT}
24 export TARGET_MACHINE DESTDIR SRCDIR FIND_BASE VERBOSE INPUT ORIGDIR
26 rm -rf ${DESTDIR} ${SRCDIR}
27 mkdir ${DESTDIR} ${SRCDIR}
30   (shellf
31     "for f in %s
32      do case $f in
33         */* ) echo $f | sed 's;/[^/]*$;;' ;;
34         esac
35      done | sort -u | \
36      while read g
37      do echo \"  mkdir \\${SRCDIR}/$g || mkdir -p \\${SRCDIR}/$g || exit 1\"
38      done" (join " " (stack "fix.files"))  ) =]
39 ) 2> /dev/null[= # suppress 'No such file or directory' messages =]
40 cd inc
42 (define sfile "")
43 (define HACK  "")
44 (define dfile "")              =][=
46 FOR fix                        =][=
48   IF (> (count "test_text") 1) =][=
49     (set! HACK (string-upcase! (get "hackname")))
50     (set! sfile (if (exist? "files") (get "files[]") "testing.h"))
51     (set! dfile (string-append
52           (if (*==* sfile "/")
53               (shellf "echo \"%s\"|sed 's,/[^/]*,/,'" sfile )
54               "" )
55           (string-tr! (get "hackname") "_A-Z" "-a-z")
56     )           )              =][=
58     FOR test_text (for-from 1) =]
59 cat >> [=(. sfile)=] <<_HACK_EOF_
62 #if defined( [=(. HACK)=]_CHECK_[=(for-index)=] )
63 [=test_text=]
64 #endif  /* [=(. HACK)=]_CHECK_[=(for-index)=] */
65 _HACK_EOF_
66 echo [=(. sfile)=] | ../../fixincl
67 mv -f [=(. sfile)=] [=(. dfile)=]-[=(for-index)=].h
68 [ -f ${DESTDIR}/[=(. sfile)=] ] && [=#
69    =]mv ${DESTDIR}/[=(. sfile)=] ${DESTDIR}/[=(. dfile)=]-[=(for-index)=].h[=
71     ENDFOR  test_text =][=
73   ENDIF  multi-test   =][=
75 ENDFOR  fix
77 =][=
79 FOR fix  =][=
80   (set! HACK (string-upcase! (get "hackname")))  =][=
82   IF (not (exist? "test_text")) =][=
83     (if (not (exist? "replace"))
84         (error (sprintf "include fix '%s' has no test text"
85                         (get "hackname") )) )
86          =][=
87   ELSE   =]
88 cat >> [= (raw-shell-str (if (exist? "files") (get "files[0]") "testing.h"))
89          =] <<_HACK_EOF_
92 #if defined( [=(. HACK)=]_CHECK )
93 [=test_text=]
94 #endif  /* [=(. HACK)=]_CHECK */
95 _HACK_EOF_
96 [=ENDIF =][=
98 ENDFOR  fix
102 export TEST_MODE=true
103 find . -type f | sed 's;^\./;;' | sort | ../../fixincl
104 cd ${DESTDIR}
106 exitok=true
108 find * -type f -print > ${TESTDIR}/LIST
110 #  Special hack for sys/types.h:  the #define-d types for size_t,
111 #  ptrdiff_t and wchar_t are different for each port.  Therefore,
112 #  strip off the defined-to type so that the test results are the
113 #  same for all platforms.
115 sed 's/\(#define __[A-Z_]*_TYPE__\).*/\1/' sys/types.h > XX
116 mv -f XX sys/types.h
118 #  The following subshell weirdness is for saving an exit
119 #  status from within a while loop that reads input.  If you can
120 #  think of a cleaner way, suggest away, please...
122 exitok=`
123 exec < ${TESTDIR}/LIST
124 while read f
126   if [ ! -f ${TESTBASE}/$f ]
127   then
128     echo "Newly fixed header:  $f" >&2
129     exitok=false
131   elif cmp $f ${TESTBASE}/$f >&2
132   then
133     :
135   else
136     ${DIFF:-diff} -c $f ${TESTBASE}/$f >&2 || :
137     exitok=false
138   fi
139 done
140 echo $exitok`
142 cd $TESTBASE
144 find * -type f -print | \
145 fgrep -v 'CVS/' | \
146 fgrep -v '.svn/' > ${TESTDIR}/LIST
148 exitok=`
149 exec < ${TESTDIR}/LIST
150 while read f
152   if [ -s $f ] && [ ! -f ${DESTDIR}/$f ]
153   then
154     echo "Missing header fix:  $f" >&2
155     exitok=false
156   fi
157 done
158 echo $exitok`
160 echo
161 if $exitok
162 then
163   cd ${TESTDIR}
164   rm -rf inc res LIST
165   cd ..
166   rmdir ${TESTDIR} > /dev/null 2>&1 || :
167   echo All fixinclude tests pass >&2
168 else
169   echo There were fixinclude test FAILURES  >&2
171 $exitok[=
173 (if (defined? 'set-writable) (set-writable))