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.
This commit is contained in:
Yarny0 2021-07-07 20:51:01 +02:00
parent cd4c8d63f5
commit 90a8a78e7c
2 changed files with 100 additions and 0 deletions

View file

@ -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.
'';
};
}

View file

@ -36319,6 +36319,7 @@ with pkgs;
epson-workforce-635-nx625-series = callPackage ../misc/drivers/epson-workforce-635-nx625-series { }; 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 {}; foomatic-db-engine = callPackage ../misc/cups/drivers/foomatic-db-engine {};
gutenprint = callPackage ../misc/drivers/gutenprint { }; gutenprint = callPackage ../misc/drivers/gutenprint { };