Subject: bug#51693: [patch] Add Java 17

From: "Dr. Arne Babenhauserheide" <[email-masked]>
Date: Sun, 14 Nov 2021 21:59:44 +0100

Julien Lepiller <[email-masked]> writes:

> Le Mon, 08 Nov 2021 21:32:16 +0100,
> "Dr. Arne Babenhauserheide" <[email-masked]> a écrit :
>
>> the attached patch adds openjdk@17
>> 
>> Take care with updating packages depending on this, because the
>> changes to the module system can cause runtime failures.

> sorry for the delay.

No problems — thank you for checking my patch!

> I tried your patch, but the build fails for me
> because it goes "out of file descriptors" and "unix resources". Does it
> work for you?

It works for me, yes.

./pre-inst-env guix environment --ad-hoc openjdk@17:jdk -- java -version
…
openjdk version "17.0.1" 2021-10-19
OpenJDK Runtime Environment (build 17.0.1+0-adhoc..source)
OpenJDK 64-Bit Server VM (build 17.0.1+0-adhoc..source, mixed mode, sharing)

> I tried with various levels of parallelism, but it did not
> change anything.
>
> also about your patch, could you replace (invoke "chmod" "u+w" file)
> with a call to make-writable?

Do you mean `make-file-writable` ? I switched to that now.

> It's available by default in the build
> environment, it comes from (guix build utils). I wonder also why you
> inherit arguments from openjdk15 instead of openjdk16?

That was a mistake — thank you!

I attached a new patch.

From 5d9d3e96163798fe9b8146f134e47311b4e0ac77 Mon Sep 17 00:00:00 2001
From: Arne Babenhauserheide <[email-masked]>
Date: Mon, 8 Nov 2021 21:21:41 +0100
Subject: [PATCH] gnu: openjdk17: add Java 17.0.1.

* gnu/packages/java.scm (openjdk17): 17.0.1

Thanks to Julien Lepiller for feedback!
---
 gnu/packages/java.scm | 48 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index da72dbb38c..b62d730fc4 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2566,6 +2566,42 @@ (define-public openjdk16
        ("zip" ,zip)))
     (arguments
      (substitute-keyword-arguments (package-arguments openjdk15)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'make-templates-writable
+             (lambda _
+               ;; The build system copies a few .template files from the
+               ;; source directory into the build directory and then modifies
+               ;; them in-place.  So these files have to be writable.
+               (for-each make-file-writable
+                (find-files "src/java.base/share/classes/jdk/internal/misc/"
+                            "\\.template$"))
+               #t))))))
+    (home-page "https://openjdk.java.net/projects/jdk/16")))
+
+(define-public openjdk17
+  (package
+    (inherit openjdk16)
+    (name "openjdk")
+    (version "17.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/openjdk/jdk17u")
+                    (commit (string-append "jdk-" version "-ga"))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1l1jgbz8q7zq66npfg88r0l5xga427vrz35iys09j44b6qllrldd"))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("openjdk16:jdk" ,openjdk16 "jdk")
+       ("pkg-config" ,pkg-config)
+       ("unzip" ,unzip)
+       ("which" ,which)
+       ("zip" ,zip)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments openjdk16)
        ((#:phases phases)
         `(modify-phases ,phases
            (add-after 'unpack 'make-templates-writable
@@ -2578,8 +2614,16 @@ (define-public openjdk16
                   (invoke "chmod" "u+w" file))
                 (find-files "src/java.base/share/classes/jdk/internal/misc/"
                             "\\.template$"))
-               #t))))))
-    (home-page "https://openjdk.java.net/projects/jdk/16")))
+               #t))
+           (replace 'fix-java-shebangs
+             (lambda _
+               ;; This file was "fixed" by patch-source-shebangs, but it requires
+               ;; this exact first line.
+               (substitute* "make/data/blockedcertsconverter/blocked.certs.pem"
+                 (("^#!.*") "#! java BlockedCertsConverter SHA-256\n"))
+               #t))
+           ))))
+    (home-page "https://openjdk.java.net/projects/jdk/17")))
 
 (define-public icedtea icedtea-8)
 
-- 
2.33.1

Liebe Grüße,
Arne
-- 
Unpolitisch sein
heißt politisch sein,
ohne es zu merken.
draketo.de