summaryrefslogtreecommitdiff
path: root/pkgs/tools/misc/system-config-printer/default.nix
blob: ef000562d4068bb38b1a062ed5245254017b2806 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
{
  lib,
  stdenv,
  fetchFromGitHub,
  udev,
  pkg-config,
  glib,
  xmlto,
  wrapGAppsHook3,
  docbook_xml_dtd_412,
  docbook_xsl,
  libxml2,
  desktop-file-utils,
  libusb1,
  cups,
  gdk-pixbuf,
  pango,
  atk,
  libnotify,
  gobject-introspection,
  libsecret,
  packagekit,
  libcupsfilters,
  gettext,
  libtool,
  autoconf-archive,
  python3Packages,
  autoreconfHook,
  bash,
  fetchpatch,
}:

stdenv.mkDerivation rec {
  pname = "system-config-printer";
  version = "1.5.18";

  src = fetchFromGitHub {
    owner = "openPrinting";
    repo = pname;
    rev = "v${version}";
    sha256 = "sha256-l3HEnYycP56vZWREWkAyHmcFgtu09dy4Ds65u7eqNZk=";
  };

  prePatch = ''
    # for automake
    touch README ChangeLog
    # for tests
    substituteInPlace Makefile.am --replace /bin/bash ${bash}/bin/bash
  '';

  patches = [
    ./detect_serverbindir.patch
    # fix typeerror, remove on next release
    (fetchpatch {
      url = "https://github.com/OpenPrinting/system-config-printer/commit/399b3334d6519639cfe7f1c0457e2475b8ee5230.patch";
      sha256 = "sha256-JCdGmZk2vRn3X1BDxOJaY3Aw8dr0ODVzi0oY20ZWfRs=";
      excludes = [ "NEWS" ];
    })

    # switch to pep517 build tools
    ./pep517.patch

    # FIXME: remove when gettext is fixed
    ./gettext-0.25.patch
  ];

  buildInputs = [
    glib
    udev
    libusb1
    cups
    python3Packages.python
    libnotify
    gdk-pixbuf
    pango
    atk
    packagekit
    libsecret
  ];

  nativeBuildInputs = [
    pkg-config
    gettext
    libtool
    autoconf-archive
    xmlto
    libxml2
    docbook_xml_dtd_412
    docbook_xsl
    desktop-file-utils
    python3Packages.wrapPython
    python3Packages.build
    python3Packages.installer
    python3Packages.setuptools
    python3Packages.wheel
    wrapGAppsHook3
    autoreconfHook
    gobject-introspection
  ];

  pythonPath =
    with python3Packages;
    requiredPythonModules [
      pycups
      pycurl
      dbus-python
      pygobject3
      pycairo
      pysmbc
    ];

  configureFlags = [
    "--with-udev-rules"
    "--with-udevdir=${placeholder "out"}/etc/udev"
    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
  ];

  stripDebugList = [
    "bin"
    "lib"
    "etc/udev"
  ];

  doCheck = true;
  doInstallCheck = true;

  postInstall = ''
    buildPythonPath "$out ''${pythonPath[*]}"
    gappsWrapperArgs+=(
      --prefix PATH : "$program_PATH"
      --set CUPS_DATADIR "${libcupsfilters}/share/cups"
    )

    find $out/share/system-config-printer -name \*.py -type f -perm -0100 -print0 | while read -d "" f; do
      patchPythonScript "$f"
    done
    patchPythonScript $out/etc/udev/udev-add-printer

    substituteInPlace $out/etc/udev/rules.d/70-printers.rules \
      --replace "udev-configure-printer" "$out/etc/udev/udev-configure-printer"
  '';

  meta = {
    homepage = "https://github.com/openprinting/system-config-printer";
    platforms = lib.platforms.linux;
    license = lib.licenses.gpl2Plus;
  };
}