--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/foomatic/fppd/supportedonly.sh Wed Jun 22 13:27:13 2011 -0700
@@ -0,0 +1,234 @@
+#!/bin/bash
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+#
+
+# Find the PPD files delivered by foomatic that Solaris does not support.
+# There are two reasons for non-support:
+#
+# 1. license/patent issues with the driver (listed in file nolicense). These
+# files are removed and not delivered
+# 2. The driver used by the PPD file must be brought downand compiled and
+# Solaris has not chosen to do so. In that case the PPD file is delivered,
+# but not included in the generated cache file.
+#
+# The unsupported PPD file should be listed in $BUILD_DIR/ppdunsupported for
+# review. The catchall file, ppdsnomatch, should be empty. If not, a new
+# case is needed in this script. The other files are there for debugging
+# purposes.
+
+# Notes:
+# drivers come in several flavors: gs built in, gs uniprint, postscript,
+# hpijs, and then the several other drivers.
+# Drivers are noted in many PPD files with driverType. To sort these, look
+# for: driverType G/GhostScript built-in:
+# driverType U/GhostScript Uniprint:
+# driverType F/Filter: ""
+# Drivers are also noted in the name of the ppd file. This is used
+# to cull out postscript, hpijs, and pxlmono . These do not reliably
+# use driverType. note: pxlmono driver is a gs built-in but many of the
+# ppd files that use this driver do not utilize the driverType line.
+# driverType I/IJS: "" is not reliable for hpijs as not used in many ppds.
+
+# driverType F/Filter: "" denotes ppd files that use GhostScript and
+# then pipe that output to one or more other drivers. These will only be
+# supported if Solaris compiles and delivers these drivers.
+
+# Make sure that there are no undefined variables
+set -ue
+
+# Sanitize PATH
+PATH=/usr/bin:/bin
+
+if [ -z "${1-}" ] || [ -z "${2-}" ] ||
+ [ -z "${3-}" ] || [ -z "${4-}" ]; then
+ echo "Usage: $0 build-dir tree-of-ppds cache-file nolicense-file"
+ exit 1
+fi
+
+# Build directory
+BUILD_DIR="$1"
+# Where PPD files are located
+BASE="$2"
+# Cache file to be created
+CACHE="$3"
+# File listing PPDs with no/invalid license
+NOLICENSE="$4"
+# Base install path for PPD files
+IPATH=/usr/share/ppd/SUNWfoomatic
+
+# Script will fail if set
+FAIL_LATER=""
+
+mkdir -p "$( dirname "$CACHE" )"
+/bin/rm -f ${BUILD_DIR}/ppdunsupported \
+ ${BUILD_DIR}/ppdsupported \
+ ${BUILD_DIR}/ppdsnomatch \
+ "$CACHE"
+
+# files which should be included in the cache
+
+
+#-----
+##
+## add_to_cache
+##
+## That means the PPD will be included in ## generated cache. Function uses
+## global variables $i and $j. Function expects that we are already in
+## directory $i
+##
+#-----
+add_to_cache() {
+ typeset SRCFILE
+ typeset PPDFILE
+
+ # Add the file to the cache
+ case "$j" in
+ *.gz)
+ SRCFILE=${BUILD_DIR}/ppd.$$
+ gzcat $BASE/$i/$j >${SRCFILE}
+ PPDFILE="${IPATH}/$i/$j"
+ ;;
+ *)
+ SRCFILE=$BASE/$i/$j
+ PPDFILE="${IPATH}/$i/$j.gz"
+ ;;
+ esac
+
+ typeset MANU=$i
+ typeset MODEL
+ MODEL=`grep "*ModelName:" $SRCFILE | cut -d '"' -f2`
+ typeset NICKN
+ NICKN=`grep "*NickName:" $SRCFILE | cut -d '"' -f2`
+
+ typeset k
+ for k in ${MODEL}
+ do
+ # change / to \/ for sed
+ typeset i_clean=$(echo $k | sed -e 's/\//\\\//g')
+ NICKN=$( echo $NICKN |
+ sed -e "s/$i_clean//" | sed -e "s/^ //" )
+ done
+
+ echo ${MANU}:${MODEL}:${NICKN}:::${PPDFILE} >> ${CACHE}
+}
+
+
+#-----
+##
+## supported
+##
+## process PPD supported file.
+##
+#-----
+supported() {
+ echo "$i/$j" >> ${BUILD_DIR}/ppdsupported
+ add_to_cache
+}
+
+#-----
+##
+## unsupported
+##
+## Handle PPD files NOT supported and thus included in the cache
+##
+#-----
+unsupported() {
+ echo "$i/$j - $1" >> ${BUILD_DIR}/ppdunsupported
+}
+
+#-----
+##
+## nomatch
+##
+## Handle PPD files for which we don't know how to decide whether it's
+## supported or not
+##
+#-----
+nomatch() {
+ echo "$i/$j" >> ${BUILD_DIR}/ppdsnomatch
+ echo "file '$i/$j' did not match any rule"
+ FAIL_LATER=1
+}
+
+# Go to directory with PPD files
+cd "$BASE"
+
+# Walk through all the PPD files available
+for i in *
+do
+ cd "$i"
+ for j in *
+ do
+ # First detect all files listed in the "nolicense" file
+ if ls $j | /usr/xpg4/bin/grep -f "$NOLICENSE" >/dev/null ; then
+ echo "Removing file '$j' because it is listed in 'nolicense' file"
+ /bin/rm $j
+ continue
+ fi
+
+ # The following cases pull out supported drivers
+ if ls $j | grep Postscript > /dev/null; then
+ supported
+ continue
+ fi
+
+ if grep "driverType G/GhostScript built-in: " $j >> /dev/null; then
+ supported
+ continue
+ fi
+
+ if grep "driverType U/GhostScript Uniprint: " $j >> /dev/null; then
+ supported
+ continue
+ fi
+
+ # HPLIP (hpijs) supplies it's own Foomatic PPD files
+ if ls $j | grep hpijs > /dev/null; then
+ unsupported 'hpijs'
+ continue
+ fi
+
+ if ls $j | grep pxlmono > /dev/null; then
+ supported 'pxlmono'
+ continue
+ fi
+
+ # These are the unsupported printers unless
+ # we build and deliver the drivers
+ if grep "driverType F/Filter: """ $j >> /dev/null; then
+ unsupported 'driverType F/Filter'
+ continue
+ fi
+
+ # No match : this should not happen
+ nomatch
+ done
+ cd ..
+done
+
+if [ -n "$FAIL_LATER" ]; then
+ exit 1
+else
+ exit 0
+fi