Here's a patch that should clean up these runtime dependencies.
It's a bit specific to this particular case, but I think that
might be fine for now.
I think it would make more sense for native inputs to not have
their paths included in LIBRARY_PATH. Does it even make sense for
them to be there? I thought LIBRARY_PATH was for compilers to find
dependencies when compiling so they can link their output binaries
against them. Having native inputs show up there seems wrong.
I'm in the process of rebuilding Java from icedtea-8 upwards to
check, but I have already tested that modifying openjdk 9 and 10
leads to "guix gc --references" show that openjdk 10 does not
depend on openjdk 9. I have also tested that I can run some
complex Java programs on my machine using the openjdk 10 built
using this patch.
Carlo
>From f98dc5ad5662cc62f198d8f50e7dd719cf941315 Mon Sep 17 00:00:00 2001
From: Carlo Zancanaro <ca...@zancanaro.id.au>
Date: Sat, 17 Apr 2021 16:33:06 +1000
Subject: [PATCH] gnu: Clean up runtime dependencies between Java versions.
* gnu/packages/java.scm (icedtea-8, openjdk9, openjdk11): Don't consider
icedtea/openjdk input paths when rewriting JNI libraries.
---
gnu/packages/java.scm | 36 ++++++++++++++++++++++++++----------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 207f136513..3c4013ab6f 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2,7 +2,7 @@
;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rek...@elephly.net>
;;; Copyright © 2016 Leo Famulari <l...@famulari.name>
;;; Copyright © 2016, 2017 Roel Janssen <r...@gnu.org>
-;;; Copyright © 2017, 2019 Carlo Zancanaro <ca...@zancanaro.id.au>
+;;; Copyright © 2017, 2019, 2021 Carlo Zancanaro <ca...@zancanaro.id.au>
;;; Copyright © 2017-2020 Julien Lepiller <jul...@lepiller.eu>
;;; Copyright © 2017 Thomas Danckaert <p...@thomasdanckaert.be>
;;; Copyright © 2016, 2017, 2018 Alex Vong <alexvong1...@gmail.com>
@@ -1792,8 +1792,13 @@ new Date();"))
(add-after 'unpack 'patch-jni-libs
;; Hardcode dynamically loaded libraries.
(lambda _
- (let* ((library-path (search-path-as-string->list
- (getenv "LIBRARY_PATH")))
+ (use-modules (srfi srfi-1))
+ (define (icedtea-or-openjdk? path)
+ (or (string-contains path "openjdk")
+ (string-contains path "icedtea")))
+ (let* ((library-path (remove icedtea-or-openjdk?
+ (search-path-as-string->list
+ (getenv "LIBRARY_PATH"))))
(find-library (lambda (name)
(search-path
library-path
@@ -1931,12 +1936,18 @@ new Date();"))
(add-after 'unpack 'patch-jni-libs
;; Hardcode dynamically loaded libraries.
(lambda _
- (let* ((library-path (search-path-as-string->list
- (getenv "LIBRARY_PATH")))
+ (use-modules (srfi srfi-1))
+ (define (icedtea-or-openjdk? path)
+ (or (string-contains path "openjdk")
+ (string-contains path "icedtea")))
+ (let* ((library-path (remove icedtea-or-openjdk?
+ (search-path-as-string->list
+ (getenv "LIBRARY_PATH"))))
(find-library (lambda (name)
- (search-path
- library-path
- (string-append "lib" name ".so")))))
+ (or (search-path
+ library-path
+ (string-append "lib" name ".so"))
+ (string-append "lib" name ".so")))))
(for-each
(lambda (file)
(catch 'decoding-error
@@ -2139,8 +2150,13 @@ new Date();"))
(add-after 'unpack 'patch-jni-libs
;; Hardcode dynamically loaded libraries.
(lambda _
- (let* ((library-path (search-path-as-string->list
- (getenv "LIBRARY_PATH")))
+ (use-modules (srfi srfi-1))
+ (define (icedtea-or-openjdk? path)
+ (or (string-contains path "openjdk")
+ (string-contains path "icedtea")))
+ (let* ((library-path (remove icedtea-or-openjdk?
+ (search-path-as-string->list
+ (getenv "LIBRARY_PATH"))))
(find-library (lambda (name)
(search-path
library-path
--
2.31.1