From 90a8a78e7c703ec6d9a4e9d5251f09823498bc12 Mon Sep 17 00:00:00 2001 From: Yarny0 <41838844+Yarny0@users.noreply.github.com> Date: Wed, 7 Jul 2021 20:51:01 +0200 Subject: [PATCH] foomatic-db (cups ppd files): init at unstable/2022-10-03 `foomatic-db` contains the collected knowledge about printers, drivers, and driver options from OpenPrinting in xml files. It also provides thousands of ppd files. The build process patches those files to reference executables in the nix store and gzips them to reduce storage (from about 670 MiB to 90 MiB installed). In contrast to the sister package `foomatic-db-nonfree` (packaged in a follow-up commit), this package only includes files published under a free license. Most files are published under the GPL, some under the MIT license. For details see https://github.com/OpenPrinting/foomatic-db/blob/master/COPYING . To encompass the different licenses, the package's license is set to "free" as the common denominator. ppd files can be found in `$out/share/cups/model/foomatic-db`. The subdirectory `foomatic-db` is used to avoid conflicts with other packages that might be combined with the package `foomatic-db` in `config.services.printing.drivers`. There is a daily snapshot of a source archive available at https://www.openprinting.org/download/foomatic/ . However, these files rotate daily and cannot be used as a stable download source. So we rely on OpenPrinting's Github repository instead and pinpoint a fresh commit. --- .../misc/cups/drivers/foomatic-db/default.nix | 99 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 100 insertions(+) create mode 100644 pkgs/misc/cups/drivers/foomatic-db/default.nix 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 000000000000..26cbc2942475 --- /dev/null +++ b/pkgs/misc/cups/drivers/foomatic-db/default.nix @@ -0,0 +1,99 @@ +{ 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. + 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/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 088bea97441a..ecfd91fd865c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -36319,6 +36319,7 @@ with pkgs; epson-workforce-635-nx625-series = callPackage ../misc/drivers/epson-workforce-635-nx625-series { }; + foomatic-db = callPackage ../misc/cups/drivers/foomatic-db {}; foomatic-db-engine = callPackage ../misc/cups/drivers/foomatic-db-engine {}; gutenprint = callPackage ../misc/drivers/gutenprint { };