summaryrefslogtreecommitdiff
path: root/src/cups/test-rastertogutenprint.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/cups/test-rastertogutenprint.in')
-rwxr-xr-xsrc/cups/test-rastertogutenprint.in158
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