Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:goupilmtos:Printing
manufacturer-PPDs
manufacturer-PPDs.spec
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File manufacturer-PPDs.spec of Package manufacturer-PPDs
# # spec file for package manufacturer-PPDs # # Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: manufacturer-PPDs BuildRequires: cups # for automatic printer driver requires %if 0%{?suse_version} >= 1500 BuildRequires: cups-rpm-helper %endif Summary: PPD Files from Printer Manufacturers License: GPL-2.0-or-later AND MIT Group: Hardware/Printing BuildArch: noarch # Howto make Source0: # Visit http://www.linuxprinting.org/download/PPD/HP/ and note the directories # which contain PPD files - for example: # http://www.linuxprinting.org/download/PPD/HP/all_in_one/ # http://www.linuxprinting.org/download/PPD/HP/business_inkjet/ # http://www.linuxprinting.org/download/PPD/HP/color_laser/ # http://www.linuxprinting.org/download/PPD/HP/designjet/ # http://www.linuxprinting.org/download/PPD/HP/mono_laser/ # Download only *.ppd files and ignore the Robot Exclusion Standard via /robots.txt # and without --user-agent="" www.linuxprinting.org rejects it with "ERROR 403: Forbidden": # for d in all_in_one business_inkjet color_laser designjet mono_laser # do wget --user-agent="" --execute robots=off \ # --recursive --level=1 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=hp \ # http://www.linuxprinting.org/download/PPD/HP/$d/ # done # Now all PPDs are in the same sub-directory "hp" (duplicates with *.ppd.1, *.ppd.2, ...). # Remove old version PPDs (according to the file or directory-date at LinuxPrinting.org). # Rename all PPDs to have the suffix .ppd (and not .ppd.1, .ppd.2, ...). # Some PPDs may have MAC style cr line breaks. Recode or translate them to nl. # Make a bzip2 compressed tar-archive of the remaining PPDs: # tar -cjvf hp.ppd.tar.bz2 hp/*.ppd Source0: hp.ppd.tar.bz2 # Howto make Source1: # Visit http://www.linuxprinting.org/download/PPD/Oce/ and note the directory structure # which contain PPD files - for example: # http://www.linuxprinting.org/download/PPD/Oce/*/1/ # http://www.linuxprinting.org/download/PPD/Oce/Others/ # Download them (see Source0): # wget --user-agent="" --execute robots=off \ # --recursive --level=3 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=oce \ # http://www.linuxprinting.org/download/PPD/Oce/ # Accept "*.ppd*" and "*.PPD*" otherwise newer vesions like "*.ppd.1" would be deleted. # Now all PPDs are in the same sub-directory "oce". # Newer versions of *.ppd are stored as *.ppd.1 # and some old versions of *.ppd are stored as *.PPD # Some PPDs may have non-latin1 encoding. Recode them to lat1 (e.g.: "recode ibmpc..lat1"). # The "Others" PPDs are older versions. # Keep only those "Others" PPDs for which there is no newer PPD. # Make a bzip2 compressed tar-archive of them: # tar -cjvf oce.ppd.tar.bz2 oce/*.ppd Source1: oce.ppd.tar.bz2 # Howto make Source2: # We got the initial PPDs as attachments in mails from Jens Stark <j.stark@esbc.sharp-eu.com>. # After unpacking them store all PPDs in the same sub-directory "sharp". # Some of the PPDs have identical NickName entries (i.e. are for the same models) # and identical other entries except that the default media size options are different: # Letter for the normal PPD and A4 for a Japanese version (with a "j" somehow in the file name). # As the default media size options are changed to A4 during build, the Japanese version is removed # if there is another PPD with identical NickName. # New PPDs and updates of existing PPDs are at LinuxPrinting.org. # Download the PPDs from LinuxPrinting.org: # wget --user-agent="" --execute robots=off \ # --recursive --level=1 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=sharp.new \ # http://www.linuxprinting.org/foomatic-db/db/source/PPD//Sharp/ # Some PPDs may have non-latin1 encoding. Recode them to lat1 (e.g.: "recode ibmpc..lat1"). # Some PPDs may have CR LF line break. Remove the CR (e.g.: "tr -d '\r'"). # Copy the new PPDs into the directory "sharp". # Check that all NickName entries are different to avoid duplicate PPDs # (e.g. PPDs with same NickName entries but slightly different file names). # Make a bzip2 compressed tar-archive of them: # tar -cjvf sharp.ppd.tar.bz2 sharp/*.ppd Source2: sharp.ppd.tar.bz2 # Howto make Source3: # We got the PPDs as attachment in two mails from Vipa Nichapanich: # 1. mail (new release because before they had a modified non-free MIT license): # From: vipa <vipa@eitc.epson.com> # Date: Wed, 3 Mar 2004 11:44:14 -0800 # Subject: New Release of PostScriptTM printer description (PPD) files for Epson laser printers # 2. mail: # From: "Nichapanich, Vipaporn" <vipaporn.nichapanich@eitc.epson.com> # Date: Mon, 27 Jun 2005 15:57:55 -0700 # Subject: New Epson PPD Files Available for Your Linux Distribution # Additionally the epalc420.ppd was downloaded from # http://www.avasys.jp/english/linux_e/dl_laser.html # as http://lx1.avasys.jp/ppd/v111/epson_ppd-1.1.1.run which must be run as root, # then it installs PPDs into /usr/share/cups/model/epson_ppd/ where only epalc420.ppd was new. # After unpacking them and storing all PPDs in the same sub-directory "epson": # Add a trailing blank to "are " in the license text in epalc260.ppd to have it same in all PPDs. # Make a bzip2 compressed tar-archive of them: # tar -cjvf epson.ppd.tar.bz2 epson/*.ppd Source3: epson.ppd.tar.bz2 # Howto make Source4: # We got the initial PPDs as attachment in a mail from Markus Brauer <markus.brauer@ktde.de>. # After unpacking them store all PPDs in the same sub-directory "kyocera". # New PPDs and updates of existing PPDs are at LinuxPrinting.org. # Download the PPDs from LinuxPrinting.org: # wget --user-agent="" --execute robots=off \ # --recursive --level=1 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=kyocera.new \ # http://www.linuxprinting.org/foomatic-db/db/source/PPD/Kyocera/en/ # Copy the new PPDs into the directory "kyocera". # Check that all NickName entries are different to avoid duplicate PPDs # (e.g. PPDs with same NickName entries but slightly different file names). # Make a bzip2 compressed tar-archive of them: # tar -cjvf kyocera.ppd.tar.bz2 kyocera/*.ppd Source4: kyocera.ppd.tar.bz2 # Howto make Source5: # We got this PPDs as attachment in a mail from Toshiyuki Ito <jrito@oki.com>. # The archive contains the PPDs and a COPYING file which contains the GPL. # After unpacking them and storing all PPDs in the same sub-directory "oki": # Make a bzip2 compressed tar-archive of them: # tar -cjvf oki.ppd.tar.bz2 oki/*.ppd Source5: oki.ppd.tar.bz2 # Howto make Source6, Source7, Source8, Source9, Source10, Source11: # All those PPDs are in fact Ricoh PPDs (but using different printer brand names). # The PostScript PPDs are in the sub-directory "PS", # the PCLXL PPDs are in the sub-directory "PXL". # Almost all those PPDs require the foomatic-rip filter # (even the PostScript PPDs to support usercode and secure print features). # In http://www.linuxprinting.org/download/oldPPDs/ there are plain PostScript PPDs # which do not require the foomatic-rip filter. # Download the PPDs from LinuxPrinting.org: # for d in Ricoh Gestetner Infotec Lanier NRG Savin # do dp=$( echo $d | tr '[:upper:]' '[:lower:]' ) # for sd in PS PXL # do wget --user-agent="" --execute robots=off \ # --recursive --level=1 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=$dp \ # http://www.linuxprinting.org/download/PPD/$d/$sd/ # done # wget --user-agent="" --execute robots=off \ # --recursive --level=1 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=$dp.old \ # http://www.linuxprinting.org/download/oldPPDs/$d/PS/ # done # Now all PPDs are in the sub-directories ricoh, gestetner, infotec, lanier, nrg, savin # and ricoh.old, gestetner.old, infotec.old, lanier.old, nrg.old, savin.old. # Almost all PostScript PPDs have same file names. # Rename the *.ppd files in the *.old sub-directories to *.plainPS.ppd files. # Make a bzip2 compressed tar-archive of them: # for d in ricoh gestetner infotec lanier nrg savin # do tar -cjvf $d.ppd.tar.bz2 $d/*.ppd # done Source6: ricoh.ppd.tar.bz2 Source7: gestetner.ppd.tar.bz2 Source8: infotec.ppd.tar.bz2 Source9: lanier.ppd.tar.bz2 Source10: nrg.ppd.tar.bz2 Source11: savin.ppd.tar.bz2 # Howto make Source12: # Download the PPDs from LinuxPrinting.org: # wget --user-agent="" --execute robots=off \ # --recursive --level=1 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=brother \ # http://www.linuxprinting.org/download/PPD/Brother/ # Now all PPDs are in the sub-directory brother. # Some PPDs may have non-latin1 encoding. Recode them to lat1 (e.g.: "recode ibmpc..lat1"). # Make a bzip2 compressed tar-archive of them: # tar -cjvf brother.ppd.tar.bz2 brother/*.ppd Source12: brother.ppd.tar.bz2 # Howto make Source13: # Download the PPDs from LinuxPrinting.org: # wget --user-agent="" --execute robots=off \ # --recursive --level=1 \ # --no-host-directories --no-directories --no-parent \ # --accept "*.ppd*,*.PPD*" --directory-prefix=toshiba \ # http://www.linuxprinting.org/download/PPD/Toshiba/ # Now all PPDs are in the sub-directory toshiba. # Some PPDs may have non-latin1 encoding. Recode them to lat1 (e.g.: "recode ibmpc..lat1"). # Make a bzip2 compressed tar-archive of them: # tar -cjvf toshiba.ppd.tar.bz2 toshiba/*.ppd Source13: toshiba.ppd.tar.bz2 # Source1000,...Source1999 are for license testing. # There may be several licenses for one manufacturer therefore the numbering is: # Source1000,...,Source1009 for licenses which belong to Source0 # ... # Source1990,...,Source1999 for licenses which belong to Source99 # The *license files are extracted from the PPD files in the matching Source[0-99]. # If new PPD files have a different license then the license test below should detect them. Source1000: hp.license Source1010: oce.license Source1020: sharp.license Source1030: epson.license Source1040: kyocera.license Source1050: oki.license # The Ricoh license applies also for Gestetner, Infotec, Lanier, NRG, Savin: Source1060: ricoh.license Source1120: brother.license Source1130: toshiba.license # The package version matches to the openSUSE version: Version: 10.2 Release: 0 # Install into this non-root directory (required when norootforbuild is used): BuildRoot: %{_tmppath}/%{name}-%{version}-build %prep # Create the build directory and change into it without unpacking anything # then unpack the Sources one by one: %setup -c -n %{name}-%{version} -T -a 0 -a 1 -a 2 -a 3 -a 4 -a 5 -a 6 -a 7 -a 8 -a 9 -a 10 -a 11 -a 12 -a 13 %build # There is nothing to "make" as the sources contain plain PPD files. # Neverteless some conversion and testing must be done. # Only keep files where the license is o.k.: # Test the license of HP's PPDs: for p in hp/*.ppd do grep -A 21 'Copyright [12][90][90][24]-200[356] Hewlett-Packard' $p | tail -n 20 | diff -q - %{SOURCE1000} || rm -v $p done # Test the license of OCE's PPDs: for p in oce/*.ppd do grep -A 19 'Permission is hereby granted' $p | diff -q - %{SOURCE1010} || rm -v $p done # Test the license of Sharp's PPDs: for p in sharp/*.ppd do grep -A 13 'This software is free software; you can redistribute it and/or' $p | diff -q - %{SOURCE1020} || rm -v $p done # Test the license of EPSON's PPDs: for p in epson/*.ppd do grep -A 25 'Copyright (C) 2003 Seiko Epson Corporation' $p | diff -q --strip-trailing-cr - %{SOURCE1030} || rm -v $p done # Test the licenses of Kyocera's PPDs: for p in kyocera/*.ppd do grep -A 24 "Copyright (C) 2000 KYOCERA CORPORATION" $p | tail -n 22 | diff -q - %{SOURCE1040} || rm -v $p done # Test the license of Oki's PPDs: for p in oki/*.ppd do grep -A 20 'This PostScript Printer Description(PPD) file is free software' $p | diff -q - %{SOURCE1050} || rm -v $p done # Test the license of Ricoh's PPDs: for d in ricoh gestetner infotec lanier nrg savin do for p in $d/*.ppd do grep -A 19 'Permission is hereby granted, free of charge, to any person obtaining' $p | diff -q - %{SOURCE1060} || rm -v $p done done # Test the license of Brother's PPDs: for p in brother/*.ppd do grep -A 8 'This program is free software' $p | diff -q - %{SOURCE1120} || rm -v $p done # Test the licenses of Toshiba's PPDs: for p in toshiba/*.ppd do grep -A 24 "Copyright (c) 2006 TOSHIBA TEC Corporation" $p | tail -n 23 | diff -q - %{SOURCE1130} || rm -v $p done # Make some general tests and adjustments for all PPDs: # - Add a line-feed to the end of all PPDs to fix those PPDs where it is missing. # See Novell/Suse Bugzilla bug #309832: Unix/Linux text files must end with a line-feed. # Otherwise reading the last line results EOF and then some programs may ignore the last line. # - Only keep files which are really PPD files (test file's output). # - Only keep files which are of '*LanguageVersion: English'. # - Remove whitespaces (except \n) from lines which contain only whitespaces # ('\n \n' is not allowed but '\n\n' is), # - Change default media size to A4 if this is an available choice in the PPD and then # set DefaultPageSize, DefaultPageRegion, DefaultImageableArea, DefaultPaperDimension to A4. for d in hp oce sharp epson kyocera oki ricoh gestetner infotec lanier nrg savin brother toshiba do for p in $d/*.ppd do echo -en '\n' >>$p file $p | grep -q 'PPD file, ve' || { rm -v $p ; continue ; } grep -q '^\*LanguageVersion:[[:space:]]*English' $p || { rm -v $p ; continue ; } perl -pi -e 's/^[ \t]+$//' $p for i in PageSize PageRegion ImageableArea PaperDimension do if grep -q "^\*$i[[:space:]]*A4[:/]" $p then grep -q "^\*Default$i:[[:space:]]*A4\$" $p || perl -pi -e "s/^\*Default$i:.*/\*Default$i: A4/" $p fi done done done # Fix trivial bugs for particular PPDs: # Fix bugs in HP PPDs: # Some PPDs contain "1284DeviceId" which must be "1284DeviceID". # Some PPDs contain "* PageRegion" which must be "*PageRegion". for p in hp/*.ppd do perl -pi -e 's/1284DeviceId/1284DeviceID/;' $p perl -pi -e 's/\* PageRegion/*PageRegion/;' $p done # Correct problematic HP PPDs: # HP_LaserJet_5Si.ppd works only when this printer has the optional PostScript module: sed -i -e '/^\*NickName:/s/ (recommended)//' hp/HP_LaserJet_5Si.ppd sed -i -e '/^\*ModelName:/s/5Si/5Si MX/' hp/HP_LaserJet_5Si.ppd # HP_LaserJet_5MP.ppd works only for the model with the built-in PostScript module ("MP"): sed -i -e '/^\*ModelName:/s/5P/5MP/' hp/HP_LaserJet_5MP.ppd # For Epson PPDs: # In epson/epl5800.ppd there is "DefaultMediaType: Normal" but no "MediaType Normal" # but there is "MediaType None/Plain": perl -pi -e 's/^\*MediaType None(.*)$/\*MediaType Normal$1/;' epson/epl5800.ppd # For Kyocera PPDs: # Some have an entry *1284DeviceID: "MFG:Kyocera Mita:Model:... # which should be *1284DeviceID: "MFG:Kyocera Mita;Model:... # (i.e. wrong field seperator ':' instead of ';') for p in kyocera/*.ppd do sed -i -e 's/^\*1284DeviceID: "MFG:Kyocera Mita:Model:/*1284DeviceID: "MFG:Kyocera Mita;Model:/' $p done # For Ricoh PPDs: for p in ricoh/Ricoh-DDP_92_PS.ppd ricoh/Ricoh-DDP_92_PS.plainPS.ppd do sed -i -e 's/^\*UIConstraints: \*HKTrimming \*Option2 OneContainerStackerwithAdvancedFinisher \*HKTrimming$/*UIConstraints: *HKTrimming *Option2 OneContainerStackerwithAdvancedFinisher/' $p done # For Ricoh family PPDs: # Add some info which kind of "driver" is used by the PPD. # Mark all PCLXL PPDs to be "(recommended)" so that YaST selects them preferred # because those models do not understand PostScript by default but only optionally. # Mark a Foomatic PS.ppd to be "(recommended)" only if there is no matching PCLXL PPD # so that YaST prefers the Foomatic PS.ppd with its additional features. for d in ricoh gestetner infotec lanier nrg savin do for p in $d/*_PXL.ppd do grep -q -i '^\*NickName:.*recommended' $p || perl -pi -e 's/^(\*NickName:.*)"$/$1 Foomatic\/pxlmono (recommended)"/;' $p done for p in $d/*_PS.plainPS.ppd do grep -q -i '^\*NickName:.*PostScript' $p || perl -pi -e 's/^(\*NickName:.*)"$/$1 plain PostScript"/;' $p done for p in $d/*_PS.ppd do if test -e $( echo $p | sed -e 's/_PS.ppd/_PXL.ppd/' ) then grep -q -i '^\*NickName:.*Foomatic' $p || perl -pi -e 's/^(\*NickName:.*)"$/$1 PostScript+Foomatic"/;' $p else grep -q -i '^\*NickName:.*Foomatic' $p || perl -pi -e 's/^(\*NickName:.*)"$/$1 PostScript+Foomatic (recommended)"/;' $p fi done done # Final test by cupstestppd: # Only keep files which don't FAIL for cupstestppd (therefore cups is needed for build), # to save disk space gzip the files (gzipped PPDs can also be used by CUPS). # Ignore FAILs because of errors in UIConstraints and/or NonUIConstraints # which are detected since cupstestppd in CUPS > 1.2.7 (i.e. in openSUSE 10.3). # See Novell/Suse Bugzilla bug #309822: When this bug is fixed, cupstestppd would # no longer result zero exit code. # In the long run the PPDs should be fixed but as far as we know there have been # no problems because of such UIConstraints errors so that it should be o.k. # let those PPDs pass even if they are not strictly compliant. # Keep all PPDs even if cupstestppd FAILs. # Reason: # With each CUPS version upgrade cupstestppd finds more and more errors # so that more and more PPDs would be no longer included in the RPM # which have been included before which results a regression. # As far as we know there have been no problems at all because of # not strictly compliant PPDs so that it is much better # to provide all PPDs so that the matching printers can be used # than to be rigorous regarding enforcing compliance to the PPD specification: for d in hp oce epson kyocera oki ricoh gestetner infotec lanier nrg savin brother toshiba do for p in $d/*.ppd do grep -E -v '^\*UIConstraints:|^\*NonUIConstraints:' $p | cupstestppd - || true gzip -n -9 $p done done # Apply a special test for Sharp PPDs: # Several Sharp PPDs include additional special Duplex option choices # DuplexBookletLeft and DuplexBookletRight which are not in compliance # to the Adobe PPD specification (section 5.17) which lists the # allowed Duplex option choices. # As those additional choices should not cause real problems # (perhaps some printing frontends may not show them to the user), # we let those PPDs pass even if they are not strictly compliant. # Keep all PPDs even if cupstestppd FAILs. # Reason: # With each CUPS version upgrade cupstestppd finds more and more errors # so that more and more PPDs would be no longer included in the RPM # which have been included before which results a regression. # As far as we know there have been no problems at all because of # not strictly compliant PPDs so that it is much better # to provide all PPDs so that the matching printers can be used # than to be rigorous regarding enforcing compliance to the PPD specification: for p in sharp/*.ppd do grep -E -v '^\*UIConstraints:|^\*NonUIConstraints:|DuplexBooklet' $p | cupstestppd - || true gzip -n -9 $p done # For each manufacturer check and warn for duplicate NickName entries. # Usually the NickName entry is shown to the user to let him select a PPD # and then PPDs with same NickName entries are undistinguishable for the user. # Nevertheless we keep them because e.g. in YaST or when using "lpadmin" # the user can alternatively select a PPD via its file name. for d in hp oce sharp epson kyocera oki ricoh gestetner infotec lanier nrg savin brother toshiba do zgrep -h '^\*NickName:' $d/*.ppd.gz | grep -o '"[^"]*"' | sort -f | uniq -dci | grep '.*' && echo "duplicate NickName entries for $d" || : done %install # Make the install directories and install the matching PPDs: for d in hp oce sharp epson kyocera oki ricoh gestetner infotec lanier nrg savin brother toshiba do mkdir -p %{buildroot}/usr/share/cups/model/%{name}/$d install -m 644 $d/*.ppd.gz %{buildroot}/usr/share/cups/model/%{name}/$d done %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %dir /usr/share/cups %dir /usr/share/cups/model /usr/share/cups/model/%{name} %description PPD files from printer manufacturers that are under a free license. For example, the original MIT license, shown for example under http://www.opensource.org/licenses/mit-license.php, is okay but not an often used modified MIT license, which does not allow redistribution if the file was altered in any way from its original form. If you have a PostScript printer and there is no PPD file included in this package, ask your printer manufacturer for a PPD file or visit http://www.linuxprinting.org/ppd-doc.html. %changelog
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor