diff options
author | Doron Behar <doron.behar@gmail.com> | 2022-11-06 22:25:55 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-06 22:25:55 +0000 |
commit | c568890eb8092999ecc1c762945e3bdc4621d7ef (patch) | |
tree | a107475342c15ed6eaedbe1fa82d4f42539978f3 /pkgs/misc | |
parent | b8a57555e58b438459d86d24d4dccba1ca55b33d (diff) | |
parent | 0d36fdc66bb40f9471e63d41c4f2246da1e8e5ea (diff) |
Merge pull request #133537 from Yarny0/foomatic-db
foomatic-db ppd files
Diffstat (limited to 'pkgs/misc')
-rw-r--r-- | pkgs/misc/cups/drivers/cups-drv-rastertosag-gdi/default.nix | 9 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/foomatic-db-engine/default.nix | 94 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/foomatic-db-nonfree/default.nix | 86 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/foomatic-db-ppds/default.nix | 122 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/foomatic-db/default.nix | 102 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/kyocera/default.nix | 21 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/samsung/1.00.36/default.nix | 3 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/samsung/1.00.37.nix | 3 | ||||
-rw-r--r-- | pkgs/misc/cups/drivers/samsung/4.01.17.nix | 27 |
9 files changed, 452 insertions, 15 deletions
diff --git a/pkgs/misc/cups/drivers/cups-drv-rastertosag-gdi/default.nix b/pkgs/misc/cups/drivers/cups-drv-rastertosag-gdi/default.nix index d491436554593..4f1ad6c9911e5 100644 --- a/pkgs/misc/cups/drivers/cups-drv-rastertosag-gdi/default.nix +++ b/pkgs/misc/cups/drivers/cups-drv-rastertosag-gdi/default.nix @@ -3,6 +3,7 @@ , fetchpatch , cups , python3Packages +, patchPpdFilesHook }: python3Packages.buildPythonApplication rec { @@ -20,9 +21,9 @@ python3Packages.buildPythonApplication rec { }) ]; format = "other"; - nativeBuildInputs = [ (lib.getBin cups) ]; + nativeBuildInputs = [ (lib.getBin cups) patchPpdFilesHook ]; # The source image also brings pre-built ppd files, - # be we prefer to generate from source where possible, so + # but we prefer to generate from source where possible, so # the following line generates ppd files from the drv file. postBuild = '' ppdc -v -d . -I "${cups}/share/cups/ppdc" rastertosag-gdi.drv @@ -35,6 +36,10 @@ python3Packages.buildPythonApplication rec { ln -vst "${placeholder "out"}/lib/cups/filter/" "${placeholder "out"}/bin/rastertosag-gdi" runHook postInstall ''; + ppdFileCommands = [ "rastertosag-gdi" ]; + postFixup = '' + gzip -9nv "${placeholder "out"}/share/cups/model/rastertosag-gdi"/*.ppd + ''; meta = { description = "CUPS driver for Ricoh Aficio SP 1000S and SP 1100S printers"; downloadPage = "https://www.openprinting.org/download/printing/rastertosag-gdi/"; diff --git a/pkgs/misc/cups/drivers/foomatic-db-engine/default.nix b/pkgs/misc/cups/drivers/foomatic-db-engine/default.nix new file mode 100644 index 0000000000000..b5e107ebf37f4 --- /dev/null +++ b/pkgs/misc/cups/drivers/foomatic-db-engine/default.nix @@ -0,0 +1,94 @@ +{ lib +, perlPackages +, fetchFromGitHub +, withCupsAccess ? false # needed to access local cups server +, cups +, cups-filters +, curl +, withSocketAccess ? false # needed to access network printers +, netcat-gnu +, withSMBAccess ? false # needed to access SMB-connected printers +, samba +, autoconf +, automake +, file +, makeWrapper +}: + +perlPackages.buildPerlPackage { + pname = "foomatic-db-engine"; + version = "unstable-2022-05-03"; + + src = fetchFromGitHub { + # there is also a daily snapshot at the `downloadPage`, + # but it gets deleted quickly and would provoke 404 errors + owner = "OpenPrinting"; + repo = "foomatic-db-engine"; + rev = "2e6f14b54748fa121a4d2e3d480010e10b070c5a"; + hash = "sha256-m7FQTxWmawbtm24h8UqznGKXgX41JhOtyyFMRwEhm5k="; + }; + + outputs = [ "out" ]; + + propagatedBuildInputs = [ + perlPackages.Clone + perlPackages.DBI + perlPackages.XMLLibXML + ]; + + buildInputs = + # provide some "cups-*" commands to `foomatic-{configure,printjob}` + # so that they can manage a local cups server (add queues, add jobs...) + lib.optionals withCupsAccess [ cups cups-filters curl ] + # the commands `foomatic-{configure,getpjloptions}` need + # netcat if they are used to query or alter a network + # printer via AppSocket/HP JetDirect protocol + ++ lib.optional withSocketAccess netcat-gnu + # `foomatic-configure` can be used to access printers that are + # shared via the SMB protocol, but it needs the `smbclient` binary + ++ lib.optional withSMBAccess samba + ; + + nativeBuildInputs = [ autoconf automake file makeWrapper ]; + + # sed-substitute indirection is more robust against + # characters in paths that might need escaping + prePatch = '' + sed -Ei 's|^(S?BINSEARCHPATH=).+$|\1"@PATH@"|g' configure.ac + substituteInPlace configure.ac --subst-var PATH + touch Makefile.PL # `buildPerlPackage` fails unless this exists + ''; + + preConfigure = '' + ./make_configure + ''; + + configureFlags = [ + "--sysconfdir=${placeholder "out"}/etc" + "LIBDIR=${placeholder "out"}/share/foomatic" + "PERLPREFIX=${placeholder "out"}" + ]; + + postFixup = '' + for bin in "${placeholder "out"}/bin"/*; do + test '!' -L "$bin" || continue # skip symlink + wrapProgram "$bin" --set PERL5LIB "$PERL5LIB" + done + ''; + + doCheck = false; # no tests, would fail + + meta = { + description = "OpenPrinting printer support database engine"; + downloadPage = "https://www.openprinting.org/download/foomatic/"; + homepage = "https://openprinting.github.io/projects/02-foomatic/"; + license = lib.licenses.gpl2Only; + maintainers = [ lib.maintainers.yarny ]; + longDescription = '' + Foomatic's database engine generates PPD files + from the data in Foomatic's XML database. + It also contains scripts to directly + generate print queues and handle jobs. + ''; + }; +} diff --git a/pkgs/misc/cups/drivers/foomatic-db-nonfree/default.nix b/pkgs/misc/cups/drivers/foomatic-db-nonfree/default.nix new file mode 100644 index 0000000000000..1c38ae38b98a8 --- /dev/null +++ b/pkgs/misc/cups/drivers/foomatic-db-nonfree/default.nix @@ -0,0 +1,86 @@ +{ lib +, stdenv +, fetchFromGitHub +, autoconf +, automake +, perl +}: + +stdenv.mkDerivation { + pname = "foomatic-db-nonfree"; + version = "unstable-2015-06-05"; + + src = fetchFromGitHub { + # there is also a daily snapshot at the `downloadPage`, + # but it gets deleted quickly and would provoke 404 errors + owner = "OpenPrinting"; + repo = "foomatic-db-nonfree"; + rev = "6ddae02ac89240c019f8b5026cfe70e30fd2b3db"; + hash = "sha256-cRZH0CXg03FEqUJdxaNnPVXjf8+ct86PjhL59WQbw60="; + }; + + nativeBuildInputs = [ autoconf automake perl ]; + + # sed-substitute indirection is more robust against + # characters in paths that might need escaping + postPatch = '' + sed -Ei -e 's|^(S?BINSEARCHPATH=).+$|\1"@PATH@"|g' \ + -e 's|^(DATASEARCHPATH=).+$|\1"@DATA@"|g' configure.ac + substituteInPlace configure.ac \ + --subst-var PATH \ + --subst-var-by DATA "${placeholder "out"}/share" + ''; + + preConfigure = '' + mkdir -p "${placeholder "out"}/share/foomatic/db/source" + ./make_configure + ''; + + # make ppd files available to cups, + # use a package-specific subdirectory to avoid + # conflicts with other ppd-containing packages + postInstall = '' + if ! [[ -d "${placeholder "out"}/share/foomatic/db/source/PPD" ]]; then + echo "failed to create share/foomatic/db/source/PPD" + exit 1 + fi + mkdir -p "${placeholder "out"}/share/cups/model" + ln -s "${placeholder "out"}/share/foomatic/db/source/PPD" \ + "${placeholder "out"}/share/cups/model/foomatic-db-nonfree" + ''; + + # we might patch ppd file commands with `patchPpdFilesHook`, + # but the only command "rastertophaser6100" isn't packaged yet + + # compress ppd files + postFixup = '' + echo 'compressing ppd files' + find -H "${placeholder "out"}/share/cups/model/foomatic-db-nonfree" -type f -iname '*.ppd' -print0 \ + | xargs -0r -n 64 -P "$NIX_BUILD_CORES" gzip -9n + ''; + + meta = { + description = "OpenPrinting printer support database (unfree content)"; + downloadPage = "https://www.openprinting.org/download/foomatic/"; + homepage = "https://openprinting.github.io/projects/02-foomatic/"; + license = lib.licenses.unfree; + maintainers = [ lib.maintainers.yarny ]; + # list printer manufacturers here so people + # searching for ppd files can find this package + longDescription = '' + The collected knowledge about printers, + drivers, and driver options in XML files, + used by `foomatic-db-engine` to generate PPD files. + This is a package of PPD and Foomatic XML files + that may have restrictions that keep them + from being used on a variety of machines + for licensing and other non-technical reasons. + The XML files in this package enable `foomatic-db-ppds` + to create about 120 additional PPD files, for printer from + Dell, Genicom, Lexmark, Oce, Tektronix and Xerox. + Besides the XML files, this package contains + about 130 PPD files, for printers from + Dell, Genicom, Lexmark, Oce and Xerox. + ''; + }; +} diff --git a/pkgs/misc/cups/drivers/foomatic-db-ppds/default.nix b/pkgs/misc/cups/drivers/foomatic-db-ppds/default.nix new file mode 100644 index 0000000000000..bdc1e0a9b5feb --- /dev/null +++ b/pkgs/misc/cups/drivers/foomatic-db-ppds/default.nix @@ -0,0 +1,122 @@ +{ lib +, foomatic-db +, foomatic-db-nonfree +, buildEnv +, foomatic-db-engine +, stdenv +, cups-filters +, ghostscript +, netpbm +, perl +, psutils +, patchPpdFilesHook +, withNonfreeDb ? false # include foomatic-db-nonfree ppd files +}: + +let + foomatic-db-packages = [ foomatic-db ] ++ + lib.lists.optional withNonfreeDb foomatic-db-nonfree; + + foomatic-db-combined = buildEnv { + name = "foomatic-db-combined"; + paths = foomatic-db-packages; + pathsToLink = [ "/share/foomatic" ]; + # `foomatic-db-combined` is a nativeBuildInput of `foomatic-db-ppds`. + # The setup hook defined here helps scripts in + # `foomatic-db-engine` to find the database. + postBuild = '' + mkdir -p "${placeholder "out"}"/{etc/cups,nix-support} + cat >> "${placeholder "out"}/nix-support/setup-hook" << eof + export FOOMATICDB="${placeholder "out"}/share/foomatic" + eof + ''; + }; + + # the effective license is `free` if all database + # packages have free licenses, `unfree` otherwise + isFree = lib.trivial.pipe foomatic-db-packages [ + (lib.lists.map (lib.attrsets.attrByPath [ "meta" "license" ] lib.licenses.unfree)) + (lib.lists.all (lib.attrsets.attrByPath [ "free" ] true)) + ]; +in + +stdenv.mkDerivation { + pname = "foomatic-db-ppds"; + # the effective version is simply the + # highest version of all database packages + version = lib.trivial.pipe foomatic-db-packages [ + (lib.lists.map (lib.attrsets.getAttr "version")) + (lib.lists.sort lib.strings.versionOlder) + lib.lists.reverseList + lib.lists.head + ]; + + buildInputs = [ + cups-filters + ghostscript + netpbm + perl + psutils + ]; + + nativeBuildInputs = [ + foomatic-db-combined + foomatic-db-engine + patchPpdFilesHook + ]; + + dontUnpack = true; + + installPhase = '' + runHook preInstall + mkdir -p "${placeholder "out"}/share/cups/model" + foomatic-compiledb -j "$NIX_BUILD_CORES" -d "${placeholder "out"}/share/cups/model/foomatic-db-ppds" + runHook postInstall + ''; + + # Comments indicate the respective + # package the command is contained in. + ppdFileCommands = [ + "cat" "echo" # coreutils + "foomatic-rip" # cups-filters or foomatic-filters + "gs" # ghostscript + "pnmflip" "pnmgamma" "pnmnoraw" # netpbm + "perl" # perl + "psresize" # psutils + # These commands aren't packaged yet. + # ppd files using these likely won't work. + #"c2050" "c2070" "cjet" "lm1100" + #"pbm2l2030" "pbm2lwxl" "rastertophaser6100" + ]; + + # compress ppd files + postFixup = '' + echo 'compressing ppd files' + find -H "${placeholder "out"}/share/cups/model/foomatic-db-ppds" -type f -iname '*.ppd' -print0 \ + | xargs -0r -n 64 -P "$NIX_BUILD_CORES" gzip -9n + ''; + + meta = { + description = "OpenPrinting ppd files"; + homepage = "https://openprinting.github.io/projects/02-foomatic/"; + license = if isFree then lib.licenses.free else lib.licenses.unfree; + maintainers = [ lib.maintainers.yarny ]; + # list printer manufacturers here so people + # searching for ppd files can find this package + longDescription = '' + All PPD files available in + OpenPrinting's Foomatic database. + This package contains about 8,800 PPD files, + for printers from + Alps, Anitech, Apollo, Apple, Avery, Brother, Canon, + Citizen, CItoh, Compaq, DEC, Dell, Dymo-CoStar, Epson, + Fujitsu, FujiXerox, Generic, Genicom, Gestetner, + Heidelberg, Hitachi, HP, IBM, Imagen, Imagistics, + InfoPrint, Infotec, Kodak, KONICAMINOLTA, Kyocera, Lanier, + Lexmark, Minolta, MinoltaQMS, Mitsubishi, NEC, NRG, Oce, + Oki, Olivetti, Panasonic, PCPI, Pentax, QMS, Raven, Ricoh, + Samsung, Savin, Seiko, Sharp, SiPix, Sony, Star, Tally, + Tektronix, TexasInstruments, Toshiba, Xante and Xerox. + ''; + }; +} diff --git a/pkgs/misc/cups/drivers/foomatic-db/default.nix b/pkgs/misc/cups/drivers/foomatic-db/default.nix new file mode 100644 index 0000000000000..dd76fb1ee05b4 --- /dev/null +++ b/pkgs/misc/cups/drivers/foomatic-db/default.nix @@ -0,0 +1,102 @@ +{ lib +, stdenv +, fetchFromGitHub +, cups +, cups-filters +, ghostscript +, gnused +, perl +, autoconf +, automake +, patchPpdFilesHook +}: + +stdenv.mkDerivation { + pname = "foomatic-db"; + version = "unstable-2022-10-03"; + + src = fetchFromGitHub { + # there is also a daily snapshot at the `downloadPage`, + # but it gets deleted quickly and would provoke 404 errors + owner = "OpenPrinting"; + repo = "foomatic-db"; + rev = "2a3c4d1bf7eadc42f936ce8989c1dd2973ea9669"; + hash = "sha256-in0/j1nAQvM0NowBIBx3jj5WVMPIfZAeAk1SkuA3tjA="; + }; + + buildInputs = [ cups cups-filters ghostscript gnused perl ]; + + nativeBuildInputs = [ autoconf automake patchPpdFilesHook perl ]; + + # sed-substitute indirection is more robust + # against characters in paths that might need escaping + postPatch = '' + sed -Ei -e 's|^(S?BINSEARCHPATH=).+$|\1"@PATH@"|g' \ + -e 's|^(DATASEARCHPATH=).+$|\1"@DATA@"|g' configure.ac + substituteInPlace configure.ac \ + --subst-var PATH \ + --subst-var-by DATA "${placeholder "out"}/share" + ''; + + preConfigure = '' + mkdir -p "${placeholder "out"}/share/foomatic/db/source" + ./make_configure + ''; + + # don't let the intaller gzip ppd files as we would + # have to unzip them later in order to patch them + configureFlags = [ "--disable-gzip-ppds" ]; + + # make ppd files available to cups, + # use a package-specific subdirectory to avoid + # conflicts with other ppd-containing packages + postInstall = '' + if ! [[ -d "${placeholder "out"}/share/foomatic/db/source/PPD" ]]; then + echo "failed to create share/foomatic/db/source/PPD" + exit 1 + fi + mkdir -p "${placeholder "out"}/share/cups/model" + ln -s "${placeholder "out"}/share/foomatic/db/source/PPD" \ + "${placeholder "out"}/share/cups/model/foomatic-db" + ''; + + # Comments indicate the respective + # package the command is contained in. + ppdFileCommands = [ + "cat" "date" "printf" # coreutils + "rastertohp" # cups + "foomatic-rip" # cups-filters or foomatic-filters + "gs" # ghostscript + "sed" # gnused + "perl" # perl + ]; + + # compress ppd files + postFixup = '' + echo 'compressing ppd files' + find -H "${placeholder "out"}/share/cups/model/foomatic-db" -type f -iname '*.ppd' -print0 \ + | xargs -0r -n 64 -P "$NIX_BUILD_CORES" gzip -9n + ''; + + meta = { + description = "OpenPrinting printer support database (free content)"; + downloadPage = "https://www.openprinting.org/download/foomatic/"; + homepage = "https://openprinting.github.io/projects/02-foomatic/"; + license = lib.licenses.free; # mostly GPL and MIT, see README in source dir + maintainers = [ lib.maintainers.yarny ]; + # list printer manufacturers here so people + # searching for ppd files can find this package + longDescription = '' + The collected knowledge about printers, + drivers, and driver options in XML files, + used by `foomatic-db-engine` to generate PPD files. + PPD files generated from the XML files in this package + are contained in the package 'foomatic-db-ppds'. + Besides the XML files, this package contains + about 6,600 PPD files, for printers from + Brother, Canon, Epson, Gestetner, HP, InfoPrint, + Infotec, KONICA_MINOLTA, Kyocera, Lanier, Lexmark, NRG, + Oce, Oki, Ricoh, Samsung, Savin, Sharp, Toshiba and Utax. + ''; + }; +} diff --git a/pkgs/misc/cups/drivers/kyocera/default.nix b/pkgs/misc/cups/drivers/kyocera/default.nix index 28b2a1281761e..0a560e3188f63 100644 --- a/pkgs/misc/cups/drivers/kyocera/default.nix +++ b/pkgs/misc/cups/drivers/kyocera/default.nix @@ -1,4 +1,9 @@ -{ stdenv, lib, fetchzip, cups }: +{ lib +, stdenv +, cups +, fetchzip +, patchPpdFilesHook +}: let platform = @@ -23,7 +28,11 @@ stdenv.mkDerivation { sha256 = "0z1pbgidkibv4j21z0ys8cq1lafc6687syqa07qij2qd8zp15wiz"; }; + nativeBuildInputs = [ patchPpdFilesHook ]; + installPhase = '' + runHook preInstall + tar -xvf ${platform}/Global/English.tar.gz install -Dm755 English/rastertokpsl $out/lib/cups/filter/rastertokpsl patchelf \ @@ -33,13 +42,13 @@ stdenv.mkDerivation { mkdir -p $out/share/cups/model/Kyocera cd English - for i in *.ppd; do - sed -i $i -e \ - "s,/usr/lib/cups/filter/rastertokpsl,$out/lib/cups/filter/rastertokpsl,g" - cp $i $out/share/cups/model/Kyocera - done; + cp *.ppd $out/share/cups/model/Kyocera + + runHook postInstall ''; + ppdFileCommands = [ "rastertokpsl" ]; + meta = with lib; { description = "CUPS drivers for several Kyocera FS-{1020,1025,1040,1060,1120,1125} printers"; homepage = "https://www.kyoceradocumentsolutions.ru/index/service_support/download_center.false.driver.FS1040._.EN.html#"; diff --git a/pkgs/misc/cups/drivers/samsung/1.00.36/default.nix b/pkgs/misc/cups/drivers/samsung/1.00.36/default.nix index fac3dfccba620..47700265231f2 100644 --- a/pkgs/misc/cups/drivers/samsung/1.00.36/default.nix +++ b/pkgs/misc/cups/drivers/samsung/1.00.36/default.nix @@ -23,6 +23,7 @@ in stdenv.mkDerivation rec { ]; installPhase = '' + runHook preInstall mkdir -p $out/bin cp -R ${arch}/{gettext,pstosecps,rastertospl,smfpnetdiscovery,usbresetter} $out/bin @@ -82,6 +83,8 @@ in stdenv.mkDerivation rec { cd $out/share/cups ln -s ../ppd . ln -s ppd model + + runHook postInstall ''; preFixup = '' diff --git a/pkgs/misc/cups/drivers/samsung/1.00.37.nix b/pkgs/misc/cups/drivers/samsung/1.00.37.nix index 0aab52eac5dac..59a210e6f534e 100644 --- a/pkgs/misc/cups/drivers/samsung/1.00.37.nix +++ b/pkgs/misc/cups/drivers/samsung/1.00.37.nix @@ -22,6 +22,7 @@ in stdenv.mkDerivation rec { ]; installPhase = '' + runHook preInstall mkdir -p $out/bin cp -R ${arch}/{gettext,pstosecps,rastertospl,smfpnetdiscovery,usbresetter} $out/bin @@ -65,6 +66,8 @@ in stdenv.mkDerivation rec { cd $out/share/cups ln -s ../ppd . ln -s ppd model + + runHook postInstall ''; preFixup = '' diff --git a/pkgs/misc/cups/drivers/samsung/4.01.17.nix b/pkgs/misc/cups/drivers/samsung/4.01.17.nix index 12cfcde82f76a..3347030174783 100644 --- a/pkgs/misc/cups/drivers/samsung/4.01.17.nix +++ b/pkgs/misc/cups/drivers/samsung/4.01.17.nix @@ -11,7 +11,13 @@ # } # (This advice was tested on the 1st November 2016.) -{ lib, stdenv, fetchurl, cups, libusb-compat-0_1 }: +{ lib +, stdenv +, cups +, libusb-compat-0_1 +, fetchurl +, patchPpdFilesHook +}: # Do not bump lightly! Visit <http://www.bchemnet.com/suldr/supported.html> # to see what will break when upgrading. Consider a new versioned attribute. @@ -28,10 +34,14 @@ in stdenv.mkDerivation rec { sha256 = "1vv3pzvqpg1dq3xjr8161x2yp3v7ca75vil56ranhw5pkjwq66x0"; }; + nativeBuildInputs = [ patchPpdFilesHook ]; + dontPatchELF = true; dontStrip = true; installPhase = '' + runHook preInstall + cd Linux/${installationPath} mkdir -p $out/lib/cups/{backend,filter} install -Dm755 mfp $out/lib/cups/backend/ @@ -63,15 +73,18 @@ in stdenv.mkDerivation rec { mkdir -p $out/share/cups/model/samsung cd - cd ../noarch/at_opt/share/ppd - for i in *.ppd; do - sed -i $i -e \ - "s,pstosecps,$out/lib/cups/filter/pstosecps,g; \ - s,pstospl,$out/lib/cups/filter/pstospl,g; \ - s,rastertospl,$out/lib/cups/filter/rastertospl,g" - done; cp -r ./* $out/share/cups/model/samsung + + runHook postInstall ''; + ppdFileCommands = [ + "pstosecps" + "pstospl" + "pstosplc" + "rastertospl" + ]; + meta = with lib; { description = "Samsung's Linux printing drivers; includes binaries without source code"; homepage = "http://www.samsung.com/"; |