Home | History | Annotate | Line # | Download | only in fixincludes
      1 [= autogen5 template sh=check.sh =]
      2 [=
      3 #
      4 #  This file contains the shell template to run tests on the fixes
      5 #
      6 =]#!/bin/sh
      7 
      8 set -e
      9 TESTDIR=tests
     10 TESTBASE=`cd $1;${PWDCMD-pwd}`
     11 
     12 [ -d ${TESTDIR} ] || mkdir ${TESTDIR}
     13 cd ${TESTDIR}
     14 TESTDIR=`${PWDCMD-pwd}`
     15 
     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}
     23 
     24 export TARGET_MACHINE DESTDIR SRCDIR FIND_BASE VERBOSE INPUT ORIGDIR
     25 
     26 rm -rf ${DESTDIR} ${SRCDIR}
     27 mkdir ${DESTDIR} ${SRCDIR}
     28 (
     29 [=
     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
     41 [=
     42 (define sfile "")
     43 (define HACK  "")
     44 (define dfile "")              =][=
     45 
     46 FOR fix                        =][=
     47 
     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     )           )              =][=
     57 
     58     FOR test_text (for-from 1) =]
     59 cat >> [=(. sfile)=] <<_HACK_EOF_
     60 
     61 
     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[=
     70 
     71     ENDFOR  test_text =][=
     72 
     73   ENDIF  multi-test   =][=
     74 
     75 ENDFOR  fix
     76 
     77 =][=
     78 
     79 FOR fix  =][=
     80   (set! HACK (string-upcase! (get "hackname")))  =][=
     81 
     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_
     90 
     91 
     92 #if defined( [=(. HACK)=]_CHECK )
     93 [=test_text=]
     94 #endif  /* [=(. HACK)=]_CHECK */
     95 _HACK_EOF_
     96 [=ENDIF =][=
     97 
     98 ENDFOR  fix
     99 
    100 =]
    101 
    102 export TEST_MODE=true
    103 find . -type f | sed 's;^\./;;' | sort | ../../fixincl
    104 cd ${DESTDIR}
    105 
    106 exitok=true
    107 
    108 find * -type f -print > ${TESTDIR}/LIST
    109 
    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.
    114 #
    115 sed 's/\(#define __[A-Z_]*_TYPE__\).*/\1/' sys/types.h > XX
    116 mv -f XX sys/types.h
    117 
    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...
    121 #
    122 exitok=`
    123 exec < ${TESTDIR}/LIST
    124 while read f
    125 do
    126   if [ -n "$MSYSTEM" -o -n "$DJGPP" ]
    127   then
    128     # On MinGW and DJGPP convert line endings to avoid false positives
    129     mv $f $f.dos; tr -d '\r' < $f.dos > $f; rm $f.dos
    130   fi
    131   if [ ! -f ${TESTBASE}/$f ]
    132   then
    133     echo "Newly fixed header:  $f" >&2
    134     exitok=false
    135 
    136   elif cmp $f ${TESTBASE}/$f >&2
    137   then
    138     :
    139 
    140   else
    141     ${DIFF:-diff} -c $f ${TESTBASE}/$f >&2 || :
    142     exitok=false
    143   fi
    144 done
    145 echo $exitok`
    146 
    147 cd $TESTBASE
    148 
    149 find * -type f ! -name .DS_Store ! -name CVS ! -name .svn -print \
    150 > ${TESTDIR}/LIST
    151 
    152 exitok=`
    153 exec < ${TESTDIR}/LIST
    154 while read f
    155 do
    156   if [ -s $f ] && [ ! -f ${DESTDIR}/$f ]
    157   then
    158     echo "Missing header fix:  $f" >&2
    159     exitok=false
    160   fi
    161 done
    162 echo $exitok`
    163 
    164 echo
    165 if $exitok
    166 then
    167   cd ${TESTDIR}
    168   rm -rf inc res LIST
    169   cd ..
    170   rmdir ${TESTDIR} > /dev/null 2>&1 || :
    171   echo All fixinclude tests pass >&2
    172 else
    173   echo There were fixinclude test FAILURES  >&2
    174 fi
    175 $exitok[=
    176 
    177 (if (defined? 'set-writable) (set-writable))
    178 
    179 =]
    180