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:
parent
cd4c8d63f5
commit
90a8a78e7c
2 changed files with 100 additions and 0 deletions
99
pkgs/misc/cups/drivers/foomatic-db/default.nix
Normal file
99
pkgs/misc/cups/drivers/foomatic-db/default.nix
Normal 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.
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -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 { };
|
||||
|
|
Loading…
Reference in a new issue