1#!@SHELL@ 2 3retval=0 4 5if [ -z "$srcdir" -o "$srcdir" = "." ] ; then 6 sdir=`pwd` 7elif [ -n "`echo $srcdir |grep '^/'`" ] ; then 8 sdir="$srcdir" 9else 10 sdir="`pwd`/$srcdir" 11fi 12 13if [ -z "$STP_DATA_PATH" ] ; then 14 STP_DATA_PATH="$sdir/../xml" 15 export STP_DATA_PATH 16fi 17 18if [ -z "$STP_MODULE_PATH" ] ; then 19 STP_MODULE_PATH="$sdir/../main:$sdir/../main/.libs" 20 export STP_MODULE_PATH 21fi 22 23single='' 24all_models='' 25verbose='' 26make_ppds=1 27md5dir='' 28outdir='' 29cupsargs='' 30 31usage() { 32 echo "Usage: test-rastertogutenprint [-s] [-v|--valgrind]" 33 exit 0; 34} 35 36set_args() { 37 while true ; do 38 case "$1" in 39 -s) single=1 ;; 40 -h*|--h*) usage ;; 41 -v|--valgrind) valopts='--tool=memcheck' ; valgrind=`expr $valgrind + 1` ;; 42 -c|--cachegrind) valopts='--tool=cachegrind'; valgrind=4 ;; 43 -g|--gdb-attach) valopts='--gdb-attach=yes' ;; 44 -V|--verbose) verbose=1 ;; 45 -n|--no-make-ppds) make_ppds='' ;; 46 -O|--output) shift; outdir="$1" ;; 47 -o|--option) shift; cupsargs="$cupsargs $1" ;; 48 -m|--md5dir) shift; md5dir="$1" ;; 49 --) shift; args="$@"; return ;; 50 *) return ;; 51 esac 52 shift 53 done 54} 55 56set_args `getopt vcgsVnO:m:o: "$@"` 57 58if [ -n "$outdir" -a ! -d "$outdir" ] ; then 59 mkdir -p "$outdir" 60fi 61if [ -n "$md5dir" -a ! -d "$md5dir" ] ; then 62 mkdir -p "$md5dir" 63fi 64 65version="@GUTENPRINT_MAJOR_VERSION@.@GUTENPRINT_MINOR_VERSION@"; 66cupsdir="@cups_conf_serverbin@/filter" 67if [ -x "$cupsdir/pstoraster" -o -x "$cupsdir/cgpdftoraster" ] ; then 68 pages='page-ranges=24-26 ' 69else 70 pages='' 71fi 72 73if [ ! -x "$cupsdir/cgpdftoraster" -a ! -x "$cupsdir/pdftops" ] ; then 74 echo 'CUPS does not appear to be installed, skipping test' 75 exit 0 76fi 77 78cleanup() { 79 if [ -f "$tfile" ] ; then 80 rm -f $tfile 81 fi 82 exit 1 83} 84 85pdftops="`type -p pdftops`" 86 87if [ ! -n "$pdftops" -o ! -x "$pdftops" ] ; then 88 pdftops="`whence pdftops`" 89fi 90 91if [ -n "$pdftops" -a ! -x "$cupsdir/cgpdftoraster" ] ; then 92 tfile=`mktemp` 93 trap cleanup 1 2 3 6 14 15 30 94 $pdftops -f 24 -l 26 "$sdir/../../doc/gutenprint-users-manual.pdf" $tfile 95fi 96 97if [ -z "$verbose" ] ; then 98 STP_SUPPRESS_MESSAGES=1 99 export STP_SUPPRESS_MESSAGES 100fi 101 102is_duplicate() { 103 model=`gunzip -c "$1" | grep '^.StpDriverModelFamily' | awk '{print $2}'` 104 for m in $all_models; do 105 if [ "$model" = "$m" ] ; then 106 skip=1 107 fi 108 done 109 all_models="$model $all_models" 110} 111 112# Note that using CUPS arguments may trigger valgrind memory leaks in 113# CUPS. 114#cupsargs='PageSize=Custom.400.00x500.00' 115#cupsargs='PageSize=Custom.324x495 Resolution=180dpi' 116#cupsargs='PageSize=w324h495 Resolution=180dpi' 117#cupsargs='PageSize=A8' 118 119run_rastertogp() { 120 case "$valgrind" in 121 1) valgrind $valopts -q --num-callers=100 --leak-check=yes --error-limit=no ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; 122 2) valgrind $valopts --num-callers=100 --leak-resolution=high --leak-check=yes --error-limit=no ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; 123 3) valgrind $valopts --error-limit=no --num-callers=100 --show-reachable=yes --leak-resolution=high --leak-check=yes ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; 124 4) valgrind $valopts ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; 125 *) ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; 126 esac 127 if [ $? -ne 0 ] ; then 128 retval=1 129 fi 130 exit $retval 131} 132 133get_ppds() { 134 args="$@" 135 if [ -n "$args" ] ; then 136 for f in "$@" ; do 137 if [ -r "$f" ] ; then 138 echo $f 139 elif [ -r "ppd/C/$f" ] ; then 140 echo "ppd/C/$f" 141 elif [ -f "ppd/C/${f}.ppd" ] ; then 142 echo "ppd/C/${f}.ppd" 143 elif [ -f "ppd/C/${f}.ppd.gz" ] ; then 144 echo "ppd/C/${f}.ppd.gz" 145 elif [ -f "ppd/C/${f}.ppd.GZ" ] ; then 146 echo "ppd/C/${f}.ppd.GZ" 147 elif [ -f "ppd/C/${f}.ppd.bz2" ] ; then 148 echo "ppd/C/${f}.ppd.bz2" 149 elif [ -f "ppd/C/${f}.ppd.BZ2" ] ; then 150 echo "ppd/C/${f}.ppd.BZ2" 151 elif [ -f "ppd/C/${f}.ppd.z" ] ; then 152 echo "ppd/C/${f}.ppd.z" 153 elif [ -f "ppd/C/${f}.ppd.Z" ] ; then 154 echo "ppd/C/${f}.ppd.Z" 155 elif [ -f "ppd/C/stp-${f}.ppd" ] ; then 156 echo "ppd/C/stp-${f}.ppd" 157 elif [ -f "ppd/C/stp-${f}.ppd.gz" ] ; then 158 echo "ppd/C/stp-${f}.ppd.gz" 159 elif [ -f "ppd/C/stp-${f}.ppd.GZ" ] ; then 160 echo "ppd/C/stp-${f}.ppd.GZ" 161 elif [ -f "ppd/C/stp-${f}.ppd.bz2" ] ; then 162 echo "ppd/C/stp-${f}.ppd.bz2" 163 elif [ -f "ppd/C/stp-${f}.ppd.BZ2" ] ; then 164 echo "ppd/C/stp-${f}.ppd.BZ2" 165 elif [ -f "ppd/C/stp-${f}.ppd.z" ] ; then 166 echo "ppd/C/stp-${f}.ppd.z" 167 elif [ -f "ppd/C/stp-${f}.ppd.Z" ] ; then 168 echo "ppd/C/stp-${f}.ppd.Z" 169 elif [ -f "ppd/C/stp-${f}.${version}.ppd" ] ; then 170 echo "ppd/C/stp-${f}.${version}.ppd" 171 elif [ -f "ppd/C/stp-${f}.${version}.ppd.gz" ] ; then 172 echo "ppd/C/stp-${f}.${version}.ppd.gz" 173 elif [ -f "ppd/C/stp-${f}.${version}.ppd.GZ" ] ; then 174 echo "ppd/C/stp-${f}.${version}.ppd.GZ" 175 elif [ -f "ppd/C/stp-${f}.${version}.ppd.bz2" ] ; then 176 echo "ppd/C/stp-${f}.${version}.ppd.bz2" 177 elif [ -f "ppd/C/stp-${f}.${version}.ppd.BZ2" ] ; then 178 echo "ppd/C/stp-${f}.${version}.ppd.BZ2" 179 elif [ -f "ppd/C/stp-${f}.${version}.ppd.z" ] ; then 180 echo "ppd/C/stp-${f}.${version}.ppd.z" 181 elif [ -f "ppd/C/stp-${f}.${version}.ppd.Z" ] ; then 182 echo "ppd/C/stp-${f}.${version}.ppd.Z" 183 fi 184 done 185 else 186 echo ppd/C/*.ppd* 187 fi 188} 189 190if [ -n "$make_ppds" -o ! -d ppd/C ] ; then 191 make ppd-nonls 192## Not all systems can work with gzipped PPDs 193 find ppd/C -name '*.ppd.gz' | xargs gunzip -f 194fi 195 196do_output() { 197 if [ -n "`echo "$PPD" |grep '\.gz$'`" ] ; then 198 driver=`gunzip -c "$PPD" | grep '^\*StpDriverName:' |awk '{print $2}' | sed 's/"//g'` 199 else 200 driver=`grep '^\*StpDriverName:' "$PPD" |awk '{print $2}' | sed 's/"//g'` 201 fi 202 if [ -n "$outdir" ] ; then 203 cat > "$outdir/$driver.prn" 204 if [ -n "$md5dir" ] ; then 205 (cd "$outdir"; cat "$driver.prn") | md5sum | sed "s/-/\*$driver/" > "$md5dir/$driver.md5" 206 fi 207 elif [ -n "$md5dir" ] ; then 208 cat | md5sum | sed "s/-/\*$driver/" > "$md5dir/$driver.md5" 209 else 210 cat > /dev/null 211 fi 212} 213 214if [ -d ppd/C ] ; then 215 for f in `get_ppds $args` ; do 216 skip='' 217 if [ -n "$single" ] ; then 218 is_duplicate $f 219 fi 220 if [ -z "$skip" ] ; then 221 echo "$f " 222 PPD=$f 223 export PPD 224 if [ -x "$cupsdir/cgpdftoraster" ] ; then 225 output="`($cupsdir/cgpdftoraster 1 1 1 1 $pages < $sdir/../../doc/gutenprint-users-manual.pdf 2>/dev/null | run_rastertogp | do_output) 2>&1`" 226 elif [ -f "$tfile" ] ; then 227 output="`($cupsdir/pstops 1 1 1 1 \"$cupsargs\" < $tfile 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp | do_output) 2>&1`" 228 elif [ -x "$cupsdir/pstoraster" ] ; then 229 output="`($cupsdir/pdftops 1 1 1 1 \"$pages$cupsargs\" < $sdir/../../doc/gutenprint-users-manual.pdf 2>/dev/null | $cupsdir/pstops 1 1 1 1 \"$pages$cupsargs\" 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp | do_output) 2>&1`" 230 else 231 output="`($cupsdir/imagetoraster 1 1 1 1 \"$pages$cupsargs\" < calibrate.ppm 2>/dev/null | run_rastertogp | do_output) 2>&1`" 232 fi 233 if [ $? -ne 0 ] ; then 234 retval=1 235 fi 236 echo "$output" 237 echo "$output" |grep ERROR 238 if [ $? -eq 0 ] ; then 239 retval=1 240 fi 241 fi 242 done 243fi 244if [ -f "$tfile" ] ; then 245 rm -f $tfile 246fi 247exit $retval 248