gnu: hplip: Use gexps.
* gnu/packages/cups.scm (hplip) [arguments]: Use gexps. * gnu/packages/cups.scm (hplip-minimal): Likewise.master
parent
da923bc122
commit
298d0d381e
|
@ -542,127 +542,119 @@ should only be used as part of the Guix cups-pk-helper service.")
|
|||
(outputs (list "out" "ppd"))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:imported-modules ((guix build python-build-system)
|
||||
(list
|
||||
#:imported-modules `((guix build python-build-system)
|
||||
,@%gnu-build-system-modules)
|
||||
#:modules ((guix build gnu-build-system)
|
||||
#:modules '((guix build gnu-build-system)
|
||||
(guix build utils)
|
||||
((guix build python-build-system) #:prefix python:))
|
||||
#:configure-flags
|
||||
`("--disable-imageProcessor-build"
|
||||
"--disable-network-build"
|
||||
,(string-append "--prefix=" (assoc-ref %outputs "out"))
|
||||
,(string-append "--sysconfdir=" (assoc-ref %outputs "out") "/etc")
|
||||
,(string-append "LDFLAGS=-Wl,-rpath="
|
||||
(assoc-ref %outputs "out") "/lib")
|
||||
;; Disable until mime.types merging works (FIXME).
|
||||
"--disable-fax-build"
|
||||
"--enable-new-hpcups"
|
||||
;; TODO add foomatic drv install eventually.
|
||||
;; TODO --enable-policykit eventually.
|
||||
,(string-append "--with-cupsfilterdir="
|
||||
(assoc-ref %outputs "out") "/lib/cups/filter")
|
||||
,(string-append "--with-cupsbackenddir="
|
||||
(assoc-ref %outputs "out") "/lib/cups/backend")
|
||||
,(string-append "--with-hpppddir="
|
||||
(assoc-ref %outputs "ppd") "/share/ppd/HP")
|
||||
,(string-append "--with-icondir="
|
||||
(assoc-ref %outputs "out") "/share/applications")
|
||||
,(string-append "--with-systraydir="
|
||||
(assoc-ref %outputs "out") "/etc/xdg")
|
||||
"--enable-qt5" "--disable-qt4")
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'fix-hard-coded-file-names
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let ((out (assoc-ref outputs "out"))
|
||||
;; FIXME: use merged ppds (I think actually only
|
||||
;; drvs need to be merged).
|
||||
(cupsdir (assoc-ref inputs "cups-minimal")))
|
||||
(substitute* (find-files "." "\\.py$")
|
||||
;; Refer to the correct default configuration file name.
|
||||
(("/etc/hp/hplip.conf")
|
||||
(string-append out "/etc/hp/hplip.conf")))
|
||||
(substitute* "base/g.py"
|
||||
(("'/usr/share;[^']*'")
|
||||
(string-append "'" cupsdir "/share'"))
|
||||
(("'/etc/hp/hplip.conf'")
|
||||
(string-append "'" out
|
||||
"/etc/hp/hplip.conf" "'")))
|
||||
#:configure-flags
|
||||
#~(list "--disable-imageProcessor-build"
|
||||
"--disable-network-build"
|
||||
(string-append "--prefix=" #$output)
|
||||
(string-append "--sysconfdir=" #$output "/etc")
|
||||
(string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
|
||||
;; Disable until mime.types merging works (FIXME).
|
||||
"--disable-fax-build"
|
||||
"--enable-new-hpcups"
|
||||
;; TODO add foomatic drv install eventually.
|
||||
;; TODO --enable-policykit eventually.
|
||||
(string-append "--with-cupsfilterdir=" #$output
|
||||
"/lib/cups/filter")
|
||||
(string-append "--with-cupsbackenddir=" #$output
|
||||
"/lib/cups/backend")
|
||||
(string-append "--with-hpppddir=" #$output:ppd "/share/ppd/HP")
|
||||
(string-append "--with-icondir=" #$output "/share/applications")
|
||||
(string-append "--with-systraydir=" #$output "/etc/xdg")
|
||||
"--enable-qt5"
|
||||
"--disable-qt4")
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'fix-hard-coded-file-names
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let ((out #$output)
|
||||
;; FIXME: use merged ppds (I think actually only
|
||||
;; drvs need to be merged).
|
||||
(cupsdir #$(this-package-input "cups-minimal")))
|
||||
(substitute* (find-files "." "\\.py$")
|
||||
;; Refer to the correct default configuration file name.
|
||||
(("/etc/hp/hplip.conf")
|
||||
(string-append out "/etc/hp/hplip.conf")))
|
||||
(substitute* "base/g.py"
|
||||
(("'/usr/share;[^']*'")
|
||||
(string-append "'" cupsdir "/share'"))
|
||||
(("'/etc/hp/hplip.conf'")
|
||||
(string-append "'" out "/etc/hp/hplip.conf" "'")))
|
||||
|
||||
(substitute* "Makefile.in"
|
||||
(("[[:blank:]]check-plugin\\.py[[:blank:]]") " ")
|
||||
;; FIXME Use beginning-of-word in regexp.
|
||||
(("[[:blank:]]plugin\\.py[[:blank:]]") " ")
|
||||
(("/usr/include/libusb-1.0")
|
||||
(search-input-directory inputs "/include/libusb-1.0"))
|
||||
(("hplip_statedir =.*$")
|
||||
;; Don't bail out while trying to create
|
||||
;; /var/lib/hplip. We can safely change its value
|
||||
;; here because it's hard-coded in the code anyway.
|
||||
"hplip_statedir = $(prefix)\n")
|
||||
(("hplip_confdir = /etc/hp")
|
||||
;; This is only used for installing the default config.
|
||||
(string-append "hplip_confdir = " out
|
||||
"/etc/hp"))
|
||||
(("halpredir = /usr/share/hal/fdi/preprobe/10osvendor")
|
||||
;; We don't use hal.
|
||||
(string-append "halpredir = " out
|
||||
"/share/hal/fdi/preprobe/10osvendor"))
|
||||
(("rulesdir = /etc/udev/rules.d")
|
||||
;; udev rules will be merged by base service.
|
||||
(string-append "rulesdir = " out
|
||||
"/lib/udev/rules.d"))
|
||||
(("rulessystemdir = /usr/lib/systemd/system")
|
||||
;; We don't use systemd.
|
||||
(string-append "rulessystemdir = " out
|
||||
"/lib/systemd/system"))
|
||||
(("/etc/sane.d")
|
||||
(string-append out "/etc/sane.d"))))))
|
||||
(add-before 'configure 'fix-build-with-python-3.8
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(let ((python (assoc-ref inputs "python")))
|
||||
;; XXX: The configure script looks for Python headers in the
|
||||
;; wrong places as of version 3.20.3. Help it by adding the
|
||||
;; include directory on C_INCLUDE_PATH.
|
||||
(when python
|
||||
(setenv "C_INCLUDE_PATH"
|
||||
(string-append python "/include/python"
|
||||
(python:python-version python)
|
||||
":" (getenv "C_INCLUDE_PATH")))))))
|
||||
(add-after 'install 'install-models-dat
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(models-dir (string-append out
|
||||
"/share/hplip/data/models")))
|
||||
(install-file "data/models/models.dat" models-dir))))
|
||||
(add-after 'install 'wrap-binaries
|
||||
;; Scripts in /bin are all symlinks to .py files in /share/hplip.
|
||||
;; Symlinks are immune to the Python build system's 'WRAP phase,
|
||||
;; and the .py files can't be wrapped because they are reused as
|
||||
;; modules. Replacing the symlinks in /bin with copies and
|
||||
;; wrapping them also doesn't work (“ModuleNotFoundError:
|
||||
;; No module named 'base'”). Behold: a custom WRAP-PROGRAM.
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(bin (string-append out "/bin"))
|
||||
(site (python:site-packages inputs outputs)))
|
||||
(with-directory-excursion bin
|
||||
(for-each (lambda (file)
|
||||
(let ((target (readlink file)))
|
||||
(delete-file file)
|
||||
(with-output-to-file file
|
||||
(lambda _
|
||||
(format #t
|
||||
"#!~a~@
|
||||
(substitute* "Makefile.in"
|
||||
(("[[:blank:]]check-plugin\\.py[[:blank:]]") " ")
|
||||
;; FIXME Use beginning-of-word in regexp.
|
||||
(("[[:blank:]]plugin\\.py[[:blank:]]") " ")
|
||||
(("/usr/include/libusb-1.0")
|
||||
(search-input-directory inputs "/include/libusb-1.0"))
|
||||
(("hplip_statedir =.*$")
|
||||
;; Don't bail out while trying to create
|
||||
;; /var/lib/hplip. We can safely change its value
|
||||
;; here because it's hard-coded in the code anyway.
|
||||
"hplip_statedir = $(prefix)\n")
|
||||
(("hplip_confdir = /etc/hp")
|
||||
;; This is only used for installing the default config.
|
||||
(string-append "hplip_confdir = " out "/etc/hp"))
|
||||
(("halpredir = /usr/share/hal/fdi/preprobe/10osvendor")
|
||||
;; We don't use hal.
|
||||
(string-append "halpredir = " out
|
||||
"/share/hal/fdi/preprobe/10osvendor"))
|
||||
(("rulesdir = /etc/udev/rules.d")
|
||||
;; udev rules will be merged by base service.
|
||||
(string-append "rulesdir = " out "/lib/udev/rules.d"))
|
||||
(("rulessystemdir = /usr/lib/systemd/system")
|
||||
;; We don't use systemd.
|
||||
(string-append "rulessystemdir = " out "/lib/systemd/system"))
|
||||
(("/etc/sane.d")
|
||||
(string-append out "/etc/sane.d"))))))
|
||||
(add-before 'configure 'fix-build-with-python-3.8
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(let ((python (assoc-ref inputs "python")))
|
||||
;; XXX: The configure script looks for Python headers in the
|
||||
;; wrong places as of version 3.20.3. Help it by adding the
|
||||
;; include directory on C_INCLUDE_PATH.
|
||||
(when python
|
||||
(setenv "C_INCLUDE_PATH"
|
||||
(string-append python "/include/python"
|
||||
(python:python-version python)
|
||||
":" (getenv "C_INCLUDE_PATH")))))))
|
||||
(add-after 'install 'install-models-dat
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(install-file "data/models/models.dat"
|
||||
(string-append #$output "/share/hplip/data/models"))))
|
||||
(add-after 'install 'wrap-binaries
|
||||
;; Scripts in /bin are all symlinks to .py files in /share/hplip.
|
||||
;; Symlinks are immune to the Python build system's 'WRAP phase,
|
||||
;; and the .py files can't be wrapped because they are reused as
|
||||
;; modules. Replacing the symlinks in /bin with copies and
|
||||
;; wrapping them also doesn't work (“ModuleNotFoundError:
|
||||
;; No module named 'base'”). Behold: a custom WRAP-PROGRAM.
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(bin (string-append out "/bin"))
|
||||
(site (python:site-packages inputs outputs)))
|
||||
(with-directory-excursion bin
|
||||
(for-each (lambda (file)
|
||||
(let ((target (readlink file)))
|
||||
(delete-file file)
|
||||
(with-output-to-file file
|
||||
(lambda _
|
||||
(format #t
|
||||
"#!~a~@
|
||||
export GUIX_PYTHONPATH=\"~a:~a\"~@
|
||||
exec -a \"$0\" \"~a/~a\" \"$@\"~%"
|
||||
(which "bash")
|
||||
site
|
||||
(getenv "GUIX_PYTHONPATH")
|
||||
bin target)))
|
||||
(chmod file #o755)))
|
||||
(find-files "." (lambda (file stat)
|
||||
(eq? 'symlink (stat:type stat))))))))))))
|
||||
(which "bash")
|
||||
site
|
||||
(getenv "GUIX_PYTHONPATH")
|
||||
bin target)))
|
||||
(chmod file #o755)))
|
||||
(find-files "." (lambda (file stat)
|
||||
(eq? 'symlink (stat:type stat))))))))))))
|
||||
;; Note that the error messages printed by the tools in the case of
|
||||
;; missing dependencies are often downright misleading.
|
||||
;; TODO: hp-toolbox still fails to start with:
|
||||
|
@ -694,17 +686,17 @@ should only be used as part of the Guix cups-pk-helper service.")
|
|||
(package/inherit hplip
|
||||
(name "hplip-minimal")
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments hplip)
|
||||
((#:configure-flags cf)
|
||||
;; Produce a "light build", meaning that only the printer (CUPS) and
|
||||
;; scanner (SANE) support gets built, without all the 'hp-*'
|
||||
;; command-line tools.
|
||||
`(cons "--enable-lite-build"
|
||||
(delete "--enable-qt5" ,cf)))
|
||||
((#:phases phases)
|
||||
;; The 'wrap-binaries' is not needed here since the 'hp-*' programs
|
||||
;; are not installed.
|
||||
`(alist-delete 'wrap-binaries ,phases))))
|
||||
(substitute-keyword-arguments (package-arguments hplip)
|
||||
((#:configure-flags cf)
|
||||
;; Produce a "light build", meaning that only the printer (CUPS) and
|
||||
;; scanner (SANE) support gets built, without all the 'hp-*'
|
||||
;; command-line tools.
|
||||
#~(cons "--enable-lite-build"
|
||||
(delete "--enable-qt5" #$cf)))
|
||||
((#:phases phases)
|
||||
;; The 'wrap-binaries' is not needed here since the 'hp-*' programs
|
||||
;; are not installed.
|
||||
#~(alist-delete 'wrap-binaries #$phases))))
|
||||
(inputs (remove (match-lambda
|
||||
((label . _)
|
||||
(string-prefix? "python" label)))
|
||||
|
|
Reference in New Issue