Ludovic Courtès <l...@gnu.org> writes: > There’s no such function, which is unfortunate. But I agree it’s nicer > to preserve symlinks in this case. > > Perhaps we should actually do: > > (with-directory-excursion libdir > (symlink … "libbz2.so"))
Thanks for the feedback everyone. I settled on a slightly different solution, that first extracts the (full) soversion from the built library, then creates symlinks for each "sub-version". It assumes that the major version is "1". That could be circumvented with a regex, but I'm not sure if it's worth the effort. As an added bonus, this also creates "libbz2.so.1" which was missing too. WDYT of this approach? Can it be made simpler?
From 6c903b1da1ab64c4f52581c7debb82b65a6afb0e Mon Sep 17 00:00:00 2001 From: Marius Bakke <mba...@fastmail.com> Date: Mon, 26 Mar 2018 19:24:59 +0200 Subject: [PATCH] gnu: bzip2: Provide libbz2.so and libbz2.so.1. Fixes <https://bugs.gnu.org/30006>. * gnu/packages/compression.scm (bzip2)[arguments]: Rework INSTALL-SHARED-LIBS-PHASE to manage all library symlinks. --- gnu/packages/compression.scm | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index 3bcc09bd3..7c853e432 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -271,15 +271,28 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in (add-after 'install 'install-shared-lib (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (libdir (string-append out "/lib"))) - (for-each (lambda (file) - (let ((base (basename file))) - (format #t "installing `~a' to `~a'~%" - base libdir) - (copy-file file - (string-append libdir "/" base)))) - (find-files "." "^libbz2\\.so"))) - #t)) + (libdir (string-append out "/lib")) + ;; Find the actual library (e.g. "libbz2.so.1.0.6"). + (lib (string-drop + (car (find-files + "." + (lambda (file stat) + (and (string-prefix? "./libbz2.so.1" file) + (eq? 'regular (stat:type stat)))))) + 2)) + (soversion (string-drop lib (string-length "libbz2.so.")))) + ;; The Makefile above does not have an 'install' target, nor + ;; does it create the versioned symlinks, so we handle it here. + (install-file lib libdir) + (with-directory-excursion libdir + (let ((libs (string-split soversion #\.)) + (base "libbz2.so")) + (map (lambda (so) + (let ((next (string-append base "." so))) + (symlink next base) + (set! base next))) + libs))) + #t))) (add-after 'install-shared-lib 'patch-scripts (lambda* (#:key outputs inputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out"))) -- 2.16.2
signature.asc
Description: PGP signature