all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Nicolas Graves via Guix-patches via <guix-patches@gnu.org>
To: 74517@debbugs.gnu.org
Cc: Nicolas Graves <ngraves@ngraves.fr>
Subject: [bug#74517] [PATCH 2/8] gnu: zbar: Split outputs.
Date: Sun, 24 Nov 2024 23:29:09 +0100	[thread overview]
Message-ID: <20241124222934.524-2-ngraves@ngraves.fr> (raw)
In-Reply-To: <20241124222934.524-1-ngraves@ngraves.fr>

* gnu/packages/aidc.scm (zbar): Split outputs.
[build-system]: Switch to glib-or-gtk-build-system.
[arguments]<#:configure-flags>: Add --disable-static.
<#:modules>: Use srfi-26 and gremlin's file-runpath.
<#:phases>: Add phase 'split-outputs.
[native-inputs]: Improve style.
[inputs]: Improve style. Replace v4l-utils by v4l-utils-minimal.
---
 gnu/packages/aidc.scm | 94 +++++++++++++++++++++++++++++++++----------
 1 file changed, 73 insertions(+), 21 deletions(-)

diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index bc9c47a480..281f87dc78 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2018, 2019, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,6 +31,7 @@ (define-module (gnu packages aidc)
   #:use-module (guix git-download)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages elf)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -43,7 +45,8 @@ (define-module (gnu packages aidc)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages video)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system glib-or-gtk))
 
 (define-public zxing-cpp
   ;; Use the master branch as it includes unreleased build system improvements
@@ -184,32 +187,81 @@ (define-public zbar
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0rf3i7lx0fqzxsngird6l4d4dnl612nr32rm8sib699qqx67px8n"))))
-    (build-system gnu-build-system)
+        (base32 "0rf3i7lx0fqzxsngird6l4d4dnl612nr32rm8sib699qqx67px8n"))))
+    (build-system glib-or-gtk-build-system)
+    ;; XXX: qt output is broken: zbarcam-qt fails with segmentation fault, but
+    ;; this error happened before the output split.
+    (outputs '("out" "gtk" "qt"))
     (arguments
-     '(#:configure-flags (list "--with-gtk=auto"
+     (list
+      #:configure-flags '(list "--disable-static"
+                               "--with-gtk=auto"
                                "--with-python=auto"
                                (string-append "--with-dbusconfdir="
                                               (assoc-ref %outputs "out")
-                                              "/etc"))))
+                                              "/etc"))
+      #:modules `(((guix build gremlin) #:select (file-runpath))
+                  (srfi srfi-26)
+                  ,@%glib-or-gtk-build-system-modules)
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'split-outputs
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out"))
+                    (gtk (assoc-ref outputs "gtk")))
+
+                ;; XXX: Using set-file-runpath leads to runpath-too-long-error
+                (define (prepend-to-runpath path file)
+                  (invoke "patchelf" "--set-rpath"
+                          (string-join (cons* path (file-runpath file)) ":")
+                          file))
+
+                (define (move-output-file target file)
+                  (let* ((source (string-append out file))
+                         (destination (string-append target file)))
+                    (mkdir-p (dirname destination))
+                    (rename-file source destination)
+                    (when (and (eq? (stat:type (lstat destination)) 'regular)
+                               (elf-file? destination))
+                      (prepend-to-runpath
+                       (string-append out "/lib:" target "/lib")
+                       destination))))
+
+                (for-each
+                 (lambda (kind)
+                   (for-each
+                    (cut move-output-file (assoc-ref outputs kind) <>)
+                    (cons*
+                     (string-append "/lib/pkgconfig/zbar-" kind ".pc")
+                     (string-append "/bin/zbarcam-" kind)
+                     (map (cut string-drop <> 1)
+                          (with-directory-excursion out
+                            (find-files
+                             "./lib"
+                             (string-append "lib.*" kind "\\.so.*")))))))
+                 '("gtk" "qt"))
+
+                (for-each
+                 (cut move-output-file gtk <>)
+                 '("/share/gir-1.0" "/lib/girepository-1.0"))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("glib" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("python-wrapper" ,python-wrapper)))
+     (list autoconf
+           automake
+           gettext-minimal
+           `(,glib "bin")
+           gobject-introspection
+           libtool
+           patchelf
+           pkg-config
+           python-wrapper))
     (inputs
-     `(("dbus" ,dbus)
-       ("imagemagick" ,imagemagick)
-       ("libjpeg" ,libjpeg-turbo)
-       ("perl" ,perl)
-       ("python" ,python)
-       ("qtx11extras" ,qtx11extras)
-       ("v4l-utils" ,v4l-utils)))
+     (list dbus
+           imagemagick
+           libjpeg-turbo
+           perl
+           python
+           qtx11extras
+           v4l-utils-minimal))
     (propagated-inputs
      ;; These are in 'requires' field of .pc files.
      (list glib gtk+ qtbase-5))
-- 
2.46.0





  reply	other threads:[~2024-11-24 22:30 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-24 22:09 [bug#74517] [PATCH 0/8] Remove gtk@4 input dependency on qtbase@5 Nicolas Graves via Guix-patches via
2024-11-24 22:29 ` [bug#74517] [PATCH 1/8] gnu: Add v4l-utils-minimal Nicolas Graves via Guix-patches via
2024-11-24 22:29   ` Nicolas Graves via Guix-patches via [this message]
2024-11-25  3:04     ` [bug#74517] [PATCH 2/8] gnu: zbar: Split outputs Maxim Cournoyer
2024-11-24 22:29   ` [bug#74517] [PATCH 3/8] gnu: Add zbar-minimal Nicolas Graves via Guix-patches via
2024-11-25  3:08     ` Maxim Cournoyer
2024-11-24 22:29   ` [bug#74517] [PATCH 4/8] gnu: libde265: Remove unused qtbase-5 input Nicolas Graves via Guix-patches via
2024-11-25  3:08     ` Maxim Cournoyer
2024-11-24 22:29   ` [bug#74517] [PATCH 5/8] gnu: libde265: Update to 1.0.14 Nicolas Graves via Guix-patches via
2024-11-25  3:09     ` Maxim Cournoyer
2024-11-24 22:29   ` [bug#74517] [PATCH 6/8] gnu: libdc1394: Replace v4l-utils by v4l-utils-minimal Nicolas Graves via Guix-patches via
2024-11-24 22:29   ` [bug#74517] [PATCH 7/8] gnu: gst-plugins-bad: Replace inputs with -minimal variants Nicolas Graves via Guix-patches via
2024-11-24 22:29   ` [bug#74517] [PATCH 8/8] gnu: gst-plugins-good: Replace v4l-utils by v4l-utils-minimal Nicolas Graves via Guix-patches via
2024-11-25  2:54   ` [bug#74517] [PATCH 1/8] gnu: Add v4l-utils-minimal Maxim Cournoyer
2024-11-25  2:56   ` Maxim Cournoyer
2024-11-25  2:38 ` [bug#74517] [PATCH 0/8] Remove gtk@4 input dependency on qtbase@5 Maxim Cournoyer
2024-11-25  3:11 ` Maxim Cournoyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241124222934.524-2-ngraves@ngraves.fr \
    --to=guix-patches@gnu.org \
    --cc=74517@debbugs.gnu.org \
    --cc=ngraves@ngraves.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.