[bug#34230] gnu: Add openjdk 11.

Message ID 20190128075030.13331-1-boskovits@gmail.com
State Accepted
Commit 95bc85b7da0cd5177d1b1bd27f0533edca7e414e
Headers show
Series [bug#34230] gnu: Add openjdk 11. | expand

Checks

Context Check Description
cbaines/applying patch success Successfully applied

Commit Message

Gábor Boskovits Jan. 28, 2019, 7:50 a.m. UTC
* gnu/packages/java.scm (openjdk11): New variable.
---
 gnu/packages/java.scm | 225 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 225 insertions(+)

Comments

Julien Lepiller Jan. 28, 2019, 8:28 a.m. UTC | #1
Le 28 janvier 2019 08:50:30 GMT+01:00, "Gábor Boskovits" <boskovits@gmail.com> a écrit :
>* gnu/packages/java.scm (openjdk11): New variable.
>---
> gnu/packages/java.scm | 225 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 225 insertions(+)
>
>diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
>index 163c29627..a314dc995 100644
>--- a/gnu/packages/java.scm
>+++ b/gnu/packages/java.scm
>@@ -1860,6 +1860,231 @@ new Date();"))
>        ("which" ,which)
>        ("zip" ,zip)))))
> 
>+(define-public openjdk11
>+  (package
>+    (name "openjdk")
>+    (version "11.28")
>+    (source (origin
>+              (method url-fetch)
>+              (uri
>"http://hg.openjdk.java.net/jdk/jdk/archive/76072a077ee1.tar.bz2")
>+              (file-name (string-append name "-" version ".tar.bz2"))
>+              (sha256
>+               (base32
>+               
>"0v705w1s9lrqalzahir78pk397rkk9gfvzq821yv8h3xha0bqi6w"))
>+              (modules '((guix build utils)))
>+              (snippet
>+                `(begin
>+                   (for-each delete-file (find-files "." ".*.bin$"))
>+                   (for-each delete-file (find-files "." ".*.exe$"))
>+                   (for-each delete-file (find-files "." ".*.jar$"))
>+                   #t))))
>+    (build-system gnu-build-system)
>+    (outputs '("out" "jdk" "doc"))
>+    (arguments
>+     `(#:imported-modules
>+       ((guix build syscalls)
>+        (ice-9 binary-ports)
>+        (rnrs bytevectors)
>+        ,@%gnu-build-system-modules)
>+       #:tests? #f; requires jtreg
>+       ;; TODO package jtreg
>+       ;; disable parallel builds, as the openjdk build system does
>not like -j
>+       #:parallel-build? #f
>+       #:parallel-tests? #f
>+       ;; reenable parallel builds and tests by adding the flags
>manually
>+       #:make-flags (list (string-append "JOBS=" (number->string
>(parallel-job-count))))
>+       #:configure-flags
>+       `("--disable-option-checking" ; --enable-fast-install default
>flag errors otherwise
>+         "--disable-warnings-as-errors"
>+         ;; make validate-runpath pass, see:
>http://issues.guix.info/issue/32894
>+         "--with-native-debug-symbols=zipped"
>+         ;; do not use the bundled libraries
>+         "--with-giflib=system"
>+         "--with-lcms=system"
>+         "--with-libjpeg=system"
>+         "--with-libpng=system"
>+         ;; allow the build system to locate the system freetype
>+         ,(string-append "--with-freetype-include="
>+                         (assoc-ref %build-inputs "freetype")
>"/include")
>+         ,(string-append "--with-freetype-lib="
>+                         (assoc-ref %build-inputs "freetype") "/lib"))
>+       ;; TODO
>+       #:phases
>+       (modify-phases %standard-phases
>+         (add-after 'patch-source-shebangs 'fix-java-shebangs
>+           (lambda _
>+             ;; This file was "fixed" by patch-source-shebangs, but it
>requires
>+             ;; this exact first line.
>+             (substitute*
>"make/data/blacklistedcertsconverter/blacklisted.certs.pem"
>+               (("^#!.*") "#! java BlacklistedCertsConverter
>SHA-256\n"))
>+             #t))
>+         (replace 'build
>+           (lambda _
>+             (with-output-to-file ".src-rev"
>+               (lambda _
>+                 (display ,version)))
>+             (setenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES" "yes")
>+             (invoke "make" "all")
>+             #t))
>+         ;; jdk 11 does not build jre by default any more
>+         ;; building it anyways
>+         ;; for further information see:
>+         ;; https://github.com/AdoptOpenJDK/openjdk-build/issues/356
>+         (add-after 'build 'build-jre
>+           (lambda _
>+             (invoke "make" "legacy-jre-image")
>+             #t))
>+         (replace 'install
>+           (lambda* (#:key outputs #:allow-other-keys)
>+             (let ((out (assoc-ref outputs "out"))
>+                   (jdk (assoc-ref outputs "jdk"))
>+                   (doc (assoc-ref outputs "doc"))
>+                   (images (car (find-files "build"
>".*-server-release"
>+                                            #:directories? #t))))
>+               (copy-recursively (string-append images "/images/jdk")
>jdk)
>+               (copy-recursively (string-append images "/images/jre")
>out)
>+               (copy-recursively (string-append images "/images/docs")
>doc))
>+             #t))
>+         ;; Some of the libraries in the lib/ folder link to
>libjvm.so.
>+         ;; But that shared object is located in the server/ folder,
>so it
>+         ;; cannot be found.  This phase creates a symbolic link in
>the
>+         ;; lib/ folder so that the other libraries can find it.
>+         ;;
>+         ;; See:
>+         ;;
>https://lists.gnu.org/archive/html/guix-devel/2017-10/msg00169.html
>+         ;;
>+         ;; FIXME: Find the bug in the build system, so that this
>symlink is
>+         ;; not needed.
>+         (add-after 'install 'install-libjvm
>+           (lambda* (#:key inputs outputs #:allow-other-keys)
>+             (let* ((lib-out (string-append (assoc-ref outputs "out")
>+                                             "/lib"))
>+                    (lib-jdk (string-append (assoc-ref outputs "jdk")
>+                                             "/lib")))
>+               (symlink (string-append lib-jdk "/server/libjvm.so")
>+                        (string-append lib-jdk "/libjvm.so"))
>+               (symlink (string-append lib-out "/server/libjvm.so")
>+                        (string-append lib-out "/libjvm.so")))
>+             #t))
>+         (add-after 'install 'strip-character-data-timestamps
>+           (lambda* (#:key outputs #:allow-other-keys)
>+             (use-modules (guix build syscalls))
>+             (let ((archive (string-append
>+                             (assoc-ref outputs "jdk")
>"/lib/src.zip"))
>+                   (dir (mkdtemp! "zip-contents.XXXXXX")))
>+               (with-directory-excursion dir
>+                 (invoke "unzip" archive))
>+               (delete-file archive)
>+               (with-directory-excursion dir
>+                 (let ((char-data-files (find-files "."
>"CharacterData.*")))
>+                   (for-each (lambda (file)
>+                               (substitute* file
>+                                 (((string-append "This file was
>generated "
>+                                                 "AUTOMATICALLY from a
>template "
>+                                                 "file.*"))
>+                                  (string-append "This file was
>generated "
>+                                                 "AUTOMATICALLY from a
>template "
>+                                                 "file"))))
>+                             char-data-files)))
>+               (with-directory-excursion dir
>+                 (let ((files (find-files "." ".*" #:directories?
>#t)))
>+                   (apply invoke "zip" "-0" "-X" archive files))))))
>+         (add-after 'strip-character-data-timestamps
>'strip-archive-timestamps
>+           (lambda* (#:key outputs #:allow-other-keys)
>+             (use-modules (guix build syscalls)
>+                          (ice-9 binary-ports)
>+                          (rnrs bytevectors))
>+             (letrec ((repack-archive
>+                    (lambda (archive)
>+                      (let ((dir (mkdtemp! "zip-contents.XXXXXX")))
>+                        (with-directory-excursion dir
>+                          (invoke "unzip" archive))
>+                        (delete-file archive)
>+                        (for-each (compose repack-archive
>canonicalize-path)
>+                                  (find-files dir "(ct.sym|.*.jar)$"))
>+                        (let ((reset-file-timestamp
>+                               (lambda (file)
>+                                 (let ((s (lstat file)))
>+                                   (unless (eq? (stat:type s)
>'symlink)
>+                                     (format #t "reset ~a~%" file)
>+                                     (utime file 0 0 0 0))))))
>+                          (for-each reset-file-timestamp
>+                                    (find-files dir #:directories?
>#t)))
>+                        (with-directory-excursion dir
>+                          (let ((files (find-files "." ".*"
>#:directories? #t)))
>+                            (apply invoke "zip" "-0" "-X" archive
>files)))))))
>+               (for-each repack-archive
>+                         (find-files (assoc-ref outputs "doc")
>".*.zip$"))
>+               (for-each repack-archive
>+                         (find-files (assoc-ref outputs "jdk")
>+                                     ".*.(zip|jar|diz)$"))
>+               (repack-archive (string-append (assoc-ref outputs
>"jdk") "/lib/ct.sym"))
>+               (let ((repack-jmod
>+                      (lambda (file-name)
>+                        (call-with-input-file file-name
>+                          (lambda (file)
>+                            (let ((header #vu8(#x4a #x4d #x01 #x00)))
>+                              (if (equal? (get-bytevector-n
>+                                           file (bytevector-length
>header))
>+                                          header)
>+                                  (let* ((header-length
>(bytevector-length header))
>+                                         (temp-file (mkstemp!
>+                                                     (string-copy
>+                                                     
>"temp-file.XXXXXX")))
>+                                         (temp-filename (port-filename
>temp-file))
>+                                         (content-length
>+                                          (- (stat:size (stat file))
>+                                             header-length)))
>+                             (sendfile temp-file file content-length
>header-length)
>+                             (delete-file file-name)
>+                             (close-port temp-file)
>+                             (repack-archive (canonicalize-path
>temp-filename))
>+                             (call-with-output-file file-name
>+                               (lambda (file)
>+                                 (put-bytevector file header)
>+                                 (call-with-input-file temp-filename
>+                                   (lambda (temp-file)
>+                                     (sendfile
>+                                      file temp-file
>+                                      (stat:size (stat temp-file))
>0)))))))))))))
>+                 (for-each repack-jmod
>+                           (find-files (assoc-ref outputs "jdk")
>".*.jmod$")))
>+             #t)))
>+         (add-after 'install 'remove-timestamp-from-api-summary
>+           (lambda* (#:key outputs #:allow-other-keys)
>+             (substitute* (string-append (assoc-ref outputs "doc")
>+                                         "/api/overview-summary.html")
>+               (("Generated by javadoc \\(11-internal\\).*$")
>+                "Generated by javadoc (11-internal) -->\n"))
>+             #t)))))
>+    (inputs
>+     `(("alsa-lib" ,alsa-lib)
>+       ("cups" ,cups)
>+       ("fontconfig" ,fontconfig)
>+       ("freetype" ,freetype)
>+       ("giflib" ,giflib)
>+       ("lcms" ,lcms)
>+       ("libjpeg" ,libjpeg)
>+       ("libpng" ,libpng)
>+       ("libx11" ,libx11)
>+       ("libxext" ,libxext)
>+       ("libxrender" ,libxrender)
>+       ("libxt" ,libxt)
>+       ("libxtst" ,libxtst)))
>+    (native-inputs
>+     `(("autoconf" ,autoconf)
>+       ("openjdk10" ,openjdk10)
>+       ("openjdk10:jdk" ,openjdk10 "jdk")
>+       ("pkg-config" ,pkg-config)
>+       ("unzip" ,unzip)
>+       ("which" ,which)
>+       ("zip" ,zip)))
>+    (home-page "https://openjdk.java.net/projects/jdk/11/")
>+    (synopsis "Java development kit")
>+    (description
>+     "This package provides the Java development kit OpenJDK.")
>+    (license license:gpl2+)))
>+
> (define-public icedtea icedtea-8)
> 
> >

Great job! I didn't test it yet, is it reproducible? If so you're wonderful! If not, you're still fine :p
Julien Lepiller Jan. 28, 2019, 10:16 p.m. UTC | #2
Pushed as 95bc85b7da0cd5177d1b1bd27f0533edca7e414e

Thank you!

Patch

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 163c29627..a314dc995 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -1860,6 +1860,231 @@  new Date();"))
        ("which" ,which)
        ("zip" ,zip)))))
 
+(define-public openjdk11
+  (package
+    (name "openjdk")
+    (version "11.28")
+    (source (origin
+              (method url-fetch)
+              (uri "http://hg.openjdk.java.net/jdk/jdk/archive/76072a077ee1.tar.bz2")
+              (file-name (string-append name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0v705w1s9lrqalzahir78pk397rkk9gfvzq821yv8h3xha0bqi6w"))
+              (modules '((guix build utils)))
+              (snippet
+                `(begin
+                   (for-each delete-file (find-files "." ".*.bin$"))
+                   (for-each delete-file (find-files "." ".*.exe$"))
+                   (for-each delete-file (find-files "." ".*.jar$"))
+                   #t))))
+    (build-system gnu-build-system)
+    (outputs '("out" "jdk" "doc"))
+    (arguments
+     `(#:imported-modules
+       ((guix build syscalls)
+        (ice-9 binary-ports)
+        (rnrs bytevectors)
+        ,@%gnu-build-system-modules)
+       #:tests? #f; requires jtreg
+       ;; TODO package jtreg
+       ;; disable parallel builds, as the openjdk build system does not like -j
+       #:parallel-build? #f
+       #:parallel-tests? #f
+       ;; reenable parallel builds and tests by adding the flags manually
+       #:make-flags (list (string-append "JOBS=" (number->string (parallel-job-count))))
+       #:configure-flags
+       `("--disable-option-checking" ; --enable-fast-install default flag errors otherwise
+         "--disable-warnings-as-errors"
+         ;; make validate-runpath pass, see: http://issues.guix.info/issue/32894
+         "--with-native-debug-symbols=zipped"
+         ;; do not use the bundled libraries
+         "--with-giflib=system"
+         "--with-lcms=system"
+         "--with-libjpeg=system"
+         "--with-libpng=system"
+         ;; allow the build system to locate the system freetype
+         ,(string-append "--with-freetype-include="
+                         (assoc-ref %build-inputs "freetype") "/include")
+         ,(string-append "--with-freetype-lib="
+                         (assoc-ref %build-inputs "freetype") "/lib"))
+       ;; TODO
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-source-shebangs 'fix-java-shebangs
+           (lambda _
+             ;; This file was "fixed" by patch-source-shebangs, but it requires
+             ;; this exact first line.
+             (substitute* "make/data/blacklistedcertsconverter/blacklisted.certs.pem"
+               (("^#!.*") "#! java BlacklistedCertsConverter SHA-256\n"))
+             #t))
+         (replace 'build
+           (lambda _
+             (with-output-to-file ".src-rev"
+               (lambda _
+                 (display ,version)))
+             (setenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES" "yes")
+             (invoke "make" "all")
+             #t))
+         ;; jdk 11 does not build jre by default any more
+         ;; building it anyways
+         ;; for further information see:
+         ;; https://github.com/AdoptOpenJDK/openjdk-build/issues/356
+         (add-after 'build 'build-jre
+           (lambda _
+             (invoke "make" "legacy-jre-image")
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (jdk (assoc-ref outputs "jdk"))
+                   (doc (assoc-ref outputs "doc"))
+                   (images (car (find-files "build" ".*-server-release"
+                                            #:directories? #t))))
+               (copy-recursively (string-append images "/images/jdk") jdk)
+               (copy-recursively (string-append images "/images/jre") out)
+               (copy-recursively (string-append images "/images/docs") doc))
+             #t))
+         ;; Some of the libraries in the lib/ folder link to libjvm.so.
+         ;; But that shared object is located in the server/ folder, so it
+         ;; cannot be found.  This phase creates a symbolic link in the
+         ;; lib/ folder so that the other libraries can find it.
+         ;;
+         ;; See:
+         ;; https://lists.gnu.org/archive/html/guix-devel/2017-10/msg00169.html
+         ;;
+         ;; FIXME: Find the bug in the build system, so that this symlink is
+         ;; not needed.
+         (add-after 'install 'install-libjvm
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((lib-out (string-append (assoc-ref outputs "out")
+                                             "/lib"))
+                    (lib-jdk (string-append (assoc-ref outputs "jdk")
+                                             "/lib")))
+               (symlink (string-append lib-jdk "/server/libjvm.so")
+                        (string-append lib-jdk "/libjvm.so"))
+               (symlink (string-append lib-out "/server/libjvm.so")
+                        (string-append lib-out "/libjvm.so")))
+             #t))
+         (add-after 'install 'strip-character-data-timestamps
+           (lambda* (#:key outputs #:allow-other-keys)
+             (use-modules (guix build syscalls))
+             (let ((archive (string-append
+                             (assoc-ref outputs "jdk") "/lib/src.zip"))
+                   (dir (mkdtemp! "zip-contents.XXXXXX")))
+               (with-directory-excursion dir
+                 (invoke "unzip" archive))
+               (delete-file archive)
+               (with-directory-excursion dir
+                 (let ((char-data-files (find-files "." "CharacterData.*")))
+                   (for-each (lambda (file)
+                               (substitute* file
+                                 (((string-append "This file was generated "
+                                                 "AUTOMATICALLY from a template "
+                                                 "file.*"))
+                                  (string-append "This file was generated "
+                                                 "AUTOMATICALLY from a template "
+                                                 "file"))))
+                             char-data-files)))
+               (with-directory-excursion dir
+                 (let ((files (find-files "." ".*" #:directories? #t)))
+                   (apply invoke "zip" "-0" "-X" archive files))))))
+         (add-after 'strip-character-data-timestamps 'strip-archive-timestamps
+           (lambda* (#:key outputs #:allow-other-keys)
+             (use-modules (guix build syscalls)
+                          (ice-9 binary-ports)
+                          (rnrs bytevectors))
+             (letrec ((repack-archive
+                    (lambda (archive)
+                      (let ((dir (mkdtemp! "zip-contents.XXXXXX")))
+                        (with-directory-excursion dir
+                          (invoke "unzip" archive))
+                        (delete-file archive)
+                        (for-each (compose repack-archive canonicalize-path)
+                                  (find-files dir "(ct.sym|.*.jar)$"))
+                        (let ((reset-file-timestamp
+                               (lambda (file)
+                                 (let ((s (lstat file)))
+                                   (unless (eq? (stat:type s) 'symlink)
+                                     (format #t "reset ~a~%" file)
+                                     (utime file 0 0 0 0))))))
+                          (for-each reset-file-timestamp
+                                    (find-files dir #:directories? #t)))
+                        (with-directory-excursion dir
+                          (let ((files (find-files "." ".*" #:directories? #t)))
+                            (apply invoke "zip" "-0" "-X" archive files)))))))
+               (for-each repack-archive
+                         (find-files (assoc-ref outputs "doc") ".*.zip$"))
+               (for-each repack-archive
+                         (find-files (assoc-ref outputs "jdk")
+                                     ".*.(zip|jar|diz)$"))
+               (repack-archive (string-append (assoc-ref outputs "jdk") "/lib/ct.sym"))
+               (let ((repack-jmod
+                      (lambda (file-name)
+                        (call-with-input-file file-name
+                          (lambda (file)
+                            (let ((header #vu8(#x4a #x4d #x01 #x00)))
+                              (if (equal? (get-bytevector-n
+                                           file (bytevector-length header))
+                                          header)
+                                  (let* ((header-length (bytevector-length header))
+                                         (temp-file (mkstemp!
+                                                     (string-copy
+                                                      "temp-file.XXXXXX")))
+                                         (temp-filename (port-filename temp-file))
+                                         (content-length
+                                          (- (stat:size (stat file))
+                                             header-length)))
+                             (sendfile temp-file file content-length header-length)
+                             (delete-file file-name)
+                             (close-port temp-file)
+                             (repack-archive (canonicalize-path temp-filename))
+                             (call-with-output-file file-name
+                               (lambda (file)
+                                 (put-bytevector file header)
+                                 (call-with-input-file temp-filename
+                                   (lambda (temp-file)
+                                     (sendfile
+                                      file temp-file
+                                      (stat:size (stat temp-file)) 0)))))))))))))
+                 (for-each repack-jmod
+                           (find-files (assoc-ref outputs "jdk") ".*.jmod$")))
+             #t)))
+         (add-after 'install 'remove-timestamp-from-api-summary
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* (string-append (assoc-ref outputs "doc")
+                                         "/api/overview-summary.html")
+               (("Generated by javadoc \\(11-internal\\).*$")
+                "Generated by javadoc (11-internal) -->\n"))
+             #t)))))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("cups" ,cups)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("giflib" ,giflib)
+       ("lcms" ,lcms)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxrender" ,libxrender)
+       ("libxt" ,libxt)
+       ("libxtst" ,libxtst)))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("openjdk10" ,openjdk10)
+       ("openjdk10:jdk" ,openjdk10 "jdk")
+       ("pkg-config" ,pkg-config)
+       ("unzip" ,unzip)
+       ("which" ,which)
+       ("zip" ,zip)))
+    (home-page "https://openjdk.java.net/projects/jdk/11/")
+    (synopsis "Java development kit")
+    (description
+     "This package provides the Java development kit OpenJDK.")
+    (license license:gpl2+)))
+
 (define-public icedtea icedtea-8)