From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: Nicolas Graves <ngraves@ngraves.fr>
Cc: 74517@debbugs.gnu.org
Subject: [bug#74517] [PATCH 2/8] gnu: zbar: Split outputs.
Date: Mon, 25 Nov 2024 12:04:39 +0900 [thread overview]
Message-ID: <87bjy4m2t4.fsf@gmail.com> (raw)
In-Reply-To: <20241124222934.524-2-ngraves@ngraves.fr> (Nicolas Graves's message of "Sun, 24 Nov 2024 23:29:09 +0100")
Hi,
Nicolas Graves <ngraves@ngraves.fr> writes:
> * 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(-)
[...]
> (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.
As an alternative to packaging broken outputs, perhaps we could simply
tell the build system to not build with Qt, or wholly remove it from the
inputs?
> + (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")))
This can be rewritten using the gexp variabls #$output and #$output: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"))))))))
That is clever, perhaps too clever (in comparison to the simple brute
force approach of using a distinct minimal package variant built without
the extra inputs) :-).
> (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))
Could be done in a separate commit; this entangles concern and makes it
easier if in the future a revert needs to be made.
--
Thanks,
Maxim
next prev parent reply other threads:[~2024-11-25 3:06 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 ` [bug#74517] [PATCH 2/8] gnu: zbar: Split outputs Nicolas Graves via Guix-patches via
2024-11-25 3:04 ` Maxim Cournoyer [this message]
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=87bjy4m2t4.fsf@gmail.com \
--to=maxim.cournoyer@gmail.com \
--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.