diff options
Diffstat (limited to 'src/cups/test-rastertogutenprint.in')
-rwxr-xr-x | src/cups/test-rastertogutenprint.in | 158 |
1 files changed, 144 insertions, 14 deletions
diff --git a/src/cups/test-rastertogutenprint.in b/src/cups/test-rastertogutenprint.in index afa38d7..8582037 100755 --- a/src/cups/test-rastertogutenprint.in +++ b/src/cups/test-rastertogutenprint.in @@ -1,9 +1,9 @@ -#!/bin/sh +#!@SHELL@ retval=0 if [ -z "$STP_DATA_PATH" ] ; then - STP_DATA_PATH=`pwd`/../main + STP_DATA_PATH=`pwd`/../xml export STP_DATA_PATH fi @@ -14,6 +14,11 @@ fi single='' all_models='' +verbose='' +make_ppds=1 +md5dir='' +outdir='' +cupsargs='' usage() { echo "Usage: test-rastertogutenprint [-s] [-v|--valgrind]" @@ -28,6 +33,11 @@ set_args() { -v|--valgrind) valopts='--tool=memcheck' ; valgrind=`expr $valgrind + 1` ;; -c|--cachegrind) valopts='--tool=cachegrind'; valgrind=4 ;; -g|--gdb-attach) valopts='--gdb-attach=yes' ;; + -V|--verbose) verbose=1 ;; + -n|--no-make-ppds) make_ppds='' ;; + -O|--output) shift; outdir="$1" ;; + -o|--option) shift; cupsargs="$cupsargs $1" ;; + -m|--md5dir) shift; md5dir="$1" ;; --) shift; args="$@"; return ;; *) return ;; esac @@ -35,20 +45,47 @@ set_args() { done } +set_args `getopt vcgsVnO:m:o: "$@"` -set_args `getopt vcgs "$@"` +if [ -n "$outdir" -a ! -d "$outdir" ] ; then + mkdir -p "$outdir" +fi +if [ -n "$md5dir" -a ! -d "$md5dir" ] ; then + mkdir -p "$md5dir" +fi version="@GUTENPRINT_MAJOR_VERSION@.@GUTENPRINT_MINOR_VERSION@"; cupsdir="@cups_conf_serverbin@/filter" -pages='24-26' +if [ -x "$cupsdir/pstoraster" ] ; then + pages='page-ranges=24-26 ' +else + pages='' +fi if [ ! -x "$cupsdir/cgpdftoraster" -a ! -x "$cupsdir/pdftops" ] ; then echo 'CUPS does not appear to be installed, skipping test' exit 0 fi -STP_SUPPRESS_MESSAGES=1 -export STP_SUPPRESS_MESSAGES +cleanup() { + if [ -f "$tfile" ] ; then + rm -f $tfile + fi + exit 1 +} + +pdftops="`type -p pdftops`" + +if [ -n "$pdftops" -a ! -x "$cupsdir/cgpdftoraster" ] ; then + tfile=`mktemp` + trap cleanup 1 2 3 6 14 15 30 + $pdftops -f 24 -l 26 ../../doc/gutenprint-users-manual.pdf $tfile +fi + +if [ -z "$verbose" ] ; then + STP_SUPPRESS_MESSAGES=1 + export STP_SUPPRESS_MESSAGES +fi is_duplicate() { model=`gunzip -c "$1" | grep '^.StpDriverModelFamily' | awk '{print $2}'` @@ -60,13 +97,20 @@ is_duplicate() { all_models="$model $all_models" } +# Note that using CUPS arguments may trigger valgrind memory leaks in +# CUPS. +#cupsargs='PageSize=Custom.400.00x500.00' +#cupsargs='PageSize=Custom.324x495 Resolution=180dpi' +#cupsargs='PageSize=w324h495 Resolution=180dpi' +#cupsargs='PageSize=A8' + run_rastertogp() { case "$valgrind" in - 1) valgrind $valopts -q --num-callers=100 --leak-check=yes --error-limit=no ./rastertogutenprint.$version 1 1 1 1 '' ;; - 2) valgrind $valopts --num-callers=100 --leak-resolution=high --leak-check=yes --error-limit=no ./rastertogutenprint.$version 1 1 1 1 '' ;; - 3) valgrind $valopts --error-limit=no --num-callers=100 --show-reachable=yes --leak-resolution=high --leak-check=yes ./rastertogutenprint.$version 1 1 1 1 '' ;; - 4) valgrind $valopts ./rastertogutenprint.$version 1 1 1 1 '' ;; - *) ./rastertogutenprint.$version 1 1 1 1 '' ;; + 1) valgrind $valopts -q --num-callers=100 --leak-check=yes --error-limit=no ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; + 2) valgrind $valopts --num-callers=100 --leak-resolution=high --leak-check=yes --error-limit=no ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; + 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" ;; + 4) valgrind $valopts ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; + *) ./rastertogutenprint.$version 1 1 1 1 "$cupsargs" ;; esac if [ $? -ne 0 ] ; then retval=1 @@ -74,8 +118,87 @@ run_rastertogp() { exit $retval } +get_ppds() { + args="$@" + if [ -n "$args" ] ; then + for f in "$@" ; do + if [ -r "$f" ] ; then + echo $f + elif [ -r "ppd/C/$f" ] ; then + echo "ppd/C/$f" + elif [ -f "ppd/C/${f}.ppd" ] ; then + echo "ppd/C/${f}.ppd" + elif [ -f "ppd/C/${f}.ppd.gz" ] ; then + echo "ppd/C/${f}.ppd.gz" + elif [ -f "ppd/C/${f}.ppd.GZ" ] ; then + echo "ppd/C/${f}.ppd.GZ" + elif [ -f "ppd/C/${f}.ppd.bz2" ] ; then + echo "ppd/C/${f}.ppd.bz2" + elif [ -f "ppd/C/${f}.ppd.BZ2" ] ; then + echo "ppd/C/${f}.ppd.BZ2" + elif [ -f "ppd/C/${f}.ppd.z" ] ; then + echo "ppd/C/${f}.ppd.z" + elif [ -f "ppd/C/${f}.ppd.Z" ] ; then + echo "ppd/C/${f}.ppd.Z" + elif [ -f "ppd/C/stp-${f}.ppd" ] ; then + echo "ppd/C/stp-${f}.ppd" + elif [ -f "ppd/C/stp-${f}.ppd.gz" ] ; then + echo "ppd/C/stp-${f}.ppd.gz" + elif [ -f "ppd/C/stp-${f}.ppd.GZ" ] ; then + echo "ppd/C/stp-${f}.ppd.GZ" + elif [ -f "ppd/C/stp-${f}.ppd.bz2" ] ; then + echo "ppd/C/stp-${f}.ppd.bz2" + elif [ -f "ppd/C/stp-${f}.ppd.BZ2" ] ; then + echo "ppd/C/stp-${f}.ppd.BZ2" + elif [ -f "ppd/C/stp-${f}.ppd.z" ] ; then + echo "ppd/C/stp-${f}.ppd.z" + elif [ -f "ppd/C/stp-${f}.ppd.Z" ] ; then + echo "ppd/C/stp-${f}.ppd.Z" + elif [ -f "ppd/C/stp-${f}.${version}.ppd" ] ; then + echo "ppd/C/stp-${f}.${version}.ppd" + elif [ -f "ppd/C/stp-${f}.${version}.ppd.gz" ] ; then + echo "ppd/C/stp-${f}.${version}.ppd.gz" + elif [ -f "ppd/C/stp-${f}.${version}.ppd.GZ" ] ; then + echo "ppd/C/stp-${f}.${version}.ppd.GZ" + elif [ -f "ppd/C/stp-${f}.${version}.ppd.bz2" ] ; then + echo "ppd/C/stp-${f}.${version}.ppd.bz2" + elif [ -f "ppd/C/stp-${f}.${version}.ppd.BZ2" ] ; then + echo "ppd/C/stp-${f}.${version}.ppd.BZ2" + elif [ -f "ppd/C/stp-${f}.${version}.ppd.z" ] ; then + echo "ppd/C/stp-${f}.${version}.ppd.z" + elif [ -f "ppd/C/stp-${f}.${version}.ppd.Z" ] ; then + echo "ppd/C/stp-${f}.${version}.ppd.Z" + fi + done + else + echo ppd/C/*.ppd* + fi +} + +if [ -n "$make_ppds" -o ! -d ppd/C ] ; then + make ppd-nonls +fi + +do_output() { + if [ -n "`echo "$PPD" |grep '\.gz$'`" ] ; then + driver=`gunzip -c "$PPD" | grep '^\*StpDriverName:' |awk '{print $2}' | sed 's/"//g'` + else + driver=`grep '^\*StpDriverName:' "$PPD" |awk '{print $2}' | sed 's/"//g'` + fi + if [ -n "$outdir" ] ; then + cat > "$outdir/$driver.prn" + if [ -n "$md5dir" ] ; then + (cd "$outdir"; cat "$driver.prn") | md5sum | sed "s/-/\*$driver/" > "$md5dir/$driver.md5" + fi + elif [ -n "$md5dir" ] ; then + cat | md5sum | sed "s/-/\*$driver/" > "$md5dir/$driver.md5" + else + cat > /dev/null + fi +} + if [ -d ppd/C ] ; then - for f in ppd/C/*.ppd* ; do + for f in `get_ppds $args` ; do skip='' if [ -n "$single" ] ; then is_duplicate $f @@ -85,9 +208,13 @@ if [ -d ppd/C ] ; then PPD=$f export PPD if [ -x "$cupsdir/cgpdftoraster" ] ; then - output="`($cupsdir/cgpdftoraster 1 1 1 1 page-ranges=$pages < ../../doc/gutenprint-users-manual.pdf 2>/dev/null | run_rastertogp > /dev/null) 2>&1`" + output="`($cupsdir/cgpdftoraster 1 1 1 1 $pages < ../../doc/gutenprint-users-manual.pdf 2>/dev/null | run_rastertogp | do_output) 2>&1`" + elif [ -f "$tfile" ] ; then + output="`($cupsdir/pstops 1 1 1 1 \"$cupsargs\" < $tfile 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp | do_output) 2>&1`" + elif [ -x "$cupsdir/pstoraster" ] ; then + output="`($cupsdir/pdftops 1 1 1 1 \"$pages$cupsargs\" < ../../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`" else - output="`($cupsdir/pdftops 1 1 1 1 page-ranges=$pages < ../../doc/gutenprint-users-manual.pdf 2>/dev/null | $cupsdir/pstops 1 1 1 1 page-ranges=$pages 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp > /dev/null) 2>&1`" + output="`($cupsdir/imagetoraster 1 1 1 1 \"$pages$cupsargs\" < calibrate.ppm 2>/dev/null | run_rastertogp | do_output) 2>&1`" fi if [ $? -ne 0 ] ; then retval=1 @@ -100,4 +227,7 @@ if [ -d ppd/C ] ; then fi done fi +if [ -f "$tfile" ] ; then + rm -f $tfile +fi exit $retval |