summary refs log tree commit diff
path: root/gnu/packages/java.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/java.scm')
-rw-r--r--gnu/packages/java.scm479
1 files changed, 258 insertions, 221 deletions
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 753fb7726c..2d50ad84fa 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -30,6 +30,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages certs)
   #:use-module (gnu packages cpio)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages compression)
@@ -262,7 +263,8 @@ build process and its dependencies, whereas Make uses Makefile format.")
        #:modules ((guix build utils)
                   (guix build gnu-build-system)
                   (ice-9 popen)
-                  (ice-9 rdelim))
+                  (ice-9 rdelim)
+                  (srfi srfi-19))
 
        #:configure-flags
        (let* ((gcjdir (assoc-ref %build-inputs "gcj"))
@@ -281,111 +283,108 @@ build process and its dependencies, whereas Make uses Makefile format.")
            ,(string-append "--with-jdk-home=" jdk)
            ,(string-append "--with-java=" jdk "/bin/java")))
        #:phases
-       (alist-replace
-        'unpack
-        (lambda* (#:key source inputs #:allow-other-keys)
-          (and (zero? (system* "tar" "xvf" source))
-               (begin
-                 (chdir (string-append "icedtea6-" ,version))
-                 (mkdir "openjdk.src")
-                 (with-directory-excursion "openjdk.src"
-                   (copy-file (assoc-ref inputs "openjdk6-src")
-                              "openjdk6-src.tar.xz")
-                   (zero? (system* "tar" "xvf" "openjdk6-src.tar.xz"))))))
-        (alist-cons-after
-         'unpack 'patch-patches
-         (lambda _
-           ;; shebang in patches so that they apply cleanly
-           (substitute* '("patches/jtreg-jrunscript.patch"
-                          "patches/hotspot/hs23/drop_unlicensed_test.patch")
-             (("#!/bin/sh") (string-append "#!" (which "sh"))))
+       (modify-phases %standard-phases
+         (replace 'unpack
+           (lambda* (#:key source inputs #:allow-other-keys)
+             (and (zero? (system* "tar" "xvf" source))
+                  (begin
+                    (chdir (string-append "icedtea6-" ,version))
+                    (mkdir "openjdk.src")
+                    (with-directory-excursion "openjdk.src"
+                      (copy-file (assoc-ref inputs "openjdk6-src")
+                                 "openjdk6-src.tar.xz")
+                      (zero? (system* "tar" "xvf" "openjdk6-src.tar.xz")))))))
+         (add-after 'unpack 'patch-patches
+           (lambda _
+             ;; shebang in patches so that they apply cleanly
+             (substitute* '("patches/jtreg-jrunscript.patch"
+                            "patches/hotspot/hs23/drop_unlicensed_test.patch")
+               (("#!/bin/sh") (string-append "#!" (which "sh"))))
 
-           ;; fix path to alsa header in patch
-           (substitute* "patches/openjdk/6799141-split_out_versions.patch"
-             (("ALSA_INCLUDE=/usr/include/alsa/version.h")
-              (string-append "ALSA_INCLUDE="
-                             (assoc-ref %build-inputs "alsa-lib")
-                             "/include/alsa/version.h"))))
-         (alist-cons-after
-          'unpack 'patch-paths
-          (lambda _
-            ;; buildtree.make generates shell scripts, so we need to replace
-            ;; the generated shebang
-            (substitute* '("openjdk.src/hotspot/make/linux/makefiles/buildtree.make")
-              (("/bin/sh") (which "bash")))
+             ;; fix path to alsa header in patch
+             (substitute* "patches/openjdk/6799141-split_out_versions.patch"
+               (("ALSA_INCLUDE=/usr/include/alsa/version.h")
+                (string-append "ALSA_INCLUDE="
+                               (assoc-ref %build-inputs "alsa-lib")
+                               "/include/alsa/version.h")))))
+         (add-after 'unpack 'patch-paths
+           (lambda _
+             ;; buildtree.make generates shell scripts, so we need to replace
+             ;; the generated shebang
+             (substitute* '("openjdk.src/hotspot/make/linux/makefiles/buildtree.make")
+               (("/bin/sh") (which "bash")))
 
-            (let ((corebin (string-append
-                            (assoc-ref %build-inputs "coreutils") "/bin/"))
-                  (binbin  (string-append
-                            (assoc-ref %build-inputs "binutils") "/bin/"))
-                  (grepbin (string-append
-                            (assoc-ref %build-inputs "grep") "/bin/")))
-              (substitute* '("openjdk.src/jdk/make/common/shared/Defs-linux.gmk"
-                             "openjdk.src/corba/make/common/shared/Defs-linux.gmk")
-                (("UNIXCOMMAND_PATH  = /bin/")
-                 (string-append "UNIXCOMMAND_PATH = " corebin))
-                (("USRBIN_PATH  = /usr/bin/")
-                 (string-append "USRBIN_PATH = " corebin))
-                (("DEVTOOLS_PATH *= */usr/bin/")
-                 (string-append "DEVTOOLS_PATH = " corebin))
-                (("COMPILER_PATH *= */usr/bin/")
-                 (string-append "COMPILER_PATH = "
-                                (assoc-ref %build-inputs "gcc") "/bin/"))
-                (("DEF_OBJCOPY *=.*objcopy")
-                 (string-append "DEF_OBJCOPY = " (which "objcopy"))))
+             (let ((corebin (string-append
+                             (assoc-ref %build-inputs "coreutils") "/bin/"))
+                   (binbin  (string-append
+                             (assoc-ref %build-inputs "binutils") "/bin/"))
+                   (grepbin (string-append
+                             (assoc-ref %build-inputs "grep") "/bin/")))
+               (substitute* '("openjdk.src/jdk/make/common/shared/Defs-linux.gmk"
+                              "openjdk.src/corba/make/common/shared/Defs-linux.gmk")
+                 (("UNIXCOMMAND_PATH  = /bin/")
+                  (string-append "UNIXCOMMAND_PATH = " corebin))
+                 (("USRBIN_PATH  = /usr/bin/")
+                  (string-append "USRBIN_PATH = " corebin))
+                 (("DEVTOOLS_PATH *= */usr/bin/")
+                  (string-append "DEVTOOLS_PATH = " corebin))
+                 (("COMPILER_PATH *= */usr/bin/")
+                  (string-append "COMPILER_PATH = "
+                                 (assoc-ref %build-inputs "gcc") "/bin/"))
+                 (("DEF_OBJCOPY *=.*objcopy")
+                  (string-append "DEF_OBJCOPY = " (which "objcopy"))))
 
-              ;; fix hard-coded utility paths
-              (substitute* '("openjdk.src/jdk/make/common/shared/Defs-utils.gmk"
-                             "openjdk.src/corba/make/common/shared/Defs-utils.gmk")
-                (("ECHO *=.*echo")
-                 (string-append "ECHO = " (which "echo")))
-                (("^GREP *=.*grep")
-                 (string-append "GREP = " (which "grep")))
-                (("EGREP *=.*egrep")
-                 (string-append "EGREP = " (which "egrep")))
-                (("CPIO *=.*cpio")
-                 (string-append "CPIO = " (which "cpio")))
-                (("READELF *=.*readelf")
-                 (string-append "READELF = " (which "readelf")))
-                (("^ *AR *=.*ar")
-                 (string-append "AR = " (which "ar")))
-                (("^ *TAR *=.*tar")
-                 (string-append "TAR = " (which "tar")))
-                (("AS *=.*as")
-                 (string-append "AS = " (which "as")))
-                (("LD *=.*ld")
-                 (string-append "LD = " (which "ld")))
-                (("STRIP *=.*strip")
-                 (string-append "STRIP = " (which "strip")))
-                (("NM *=.*nm")
-                 (string-append "NM = " (which "nm")))
-                (("^SH *=.*sh")
-                 (string-append "SH = " (which "bash")))
-                (("^FIND *=.*find")
-                 (string-append "FIND = " (which "find")))
-                (("LDD *=.*ldd")
-                 (string-append "LDD = " (which "ldd")))
-                (("NAWK *=.*(n|g)awk")
-                 (string-append "NAWK = " (which "gawk")))
-                (("XARGS *=.*xargs")
-                 (string-append "XARGS = " (which "xargs")))
-                (("UNZIP *=.*unzip")
-                 (string-append "UNZIP = " (which "unzip")))
-                (("ZIPEXE *=.*zip")
-                 (string-append "ZIPEXE = " (which "zip")))
-                (("SED *=.*sed")
-                 (string-append "SED = " (which "sed"))))
+               ;; fix hard-coded utility paths
+               (substitute* '("openjdk.src/jdk/make/common/shared/Defs-utils.gmk"
+                              "openjdk.src/corba/make/common/shared/Defs-utils.gmk")
+                 (("ECHO *=.*echo")
+                  (string-append "ECHO = " (which "echo")))
+                 (("^GREP *=.*grep")
+                  (string-append "GREP = " (which "grep")))
+                 (("EGREP *=.*egrep")
+                  (string-append "EGREP = " (which "egrep")))
+                 (("CPIO *=.*cpio")
+                  (string-append "CPIO = " (which "cpio")))
+                 (("READELF *=.*readelf")
+                  (string-append "READELF = " (which "readelf")))
+                 (("^ *AR *=.*ar")
+                  (string-append "AR = " (which "ar")))
+                 (("^ *TAR *=.*tar")
+                  (string-append "TAR = " (which "tar")))
+                 (("AS *=.*as")
+                  (string-append "AS = " (which "as")))
+                 (("LD *=.*ld")
+                  (string-append "LD = " (which "ld")))
+                 (("STRIP *=.*strip")
+                  (string-append "STRIP = " (which "strip")))
+                 (("NM *=.*nm")
+                  (string-append "NM = " (which "nm")))
+                 (("^SH *=.*sh")
+                  (string-append "SH = " (which "bash")))
+                 (("^FIND *=.*find")
+                  (string-append "FIND = " (which "find")))
+                 (("LDD *=.*ldd")
+                  (string-append "LDD = " (which "ldd")))
+                 (("NAWK *=.*(n|g)awk")
+                  (string-append "NAWK = " (which "gawk")))
+                 (("XARGS *=.*xargs")
+                  (string-append "XARGS = " (which "xargs")))
+                 (("UNZIP *=.*unzip")
+                  (string-append "UNZIP = " (which "unzip")))
+                 (("ZIPEXE *=.*zip")
+                  (string-append "ZIPEXE = " (which "zip")))
+                 (("SED *=.*sed")
+                  (string-append "SED = " (which "sed"))))
 
-              ;; Some of these timestamps cause problems as they are more than
-              ;; 10 years ago, failing the build process.
-              (substitute*
-                  "openjdk.src/jdk/src/share/classes/java/util/CurrencyData.properties"
-                (("AZ=AZM;2005-12-31-20-00-00;AZN") "AZ=AZN")
-                (("MZ=MZM;2006-06-30-22-00-00;MZN") "MZ=MZN")
-                (("RO=ROL;2005-06-30-21-00-00;RON") "RO=RON")
-                (("TR=TRL;2004-12-31-22-00-00;TRY") "TR=TRY"))))
-          (alist-cons-before
-           'configure 'set-additional-paths
+               ;; Some of these timestamps cause problems as they are more than
+               ;; 10 years ago, failing the build process.
+               (substitute*
+                   "openjdk.src/jdk/src/share/classes/java/util/CurrencyData.properties"
+                 (("AZ=AZM;2005-12-31-20-00-00;AZN") "AZ=AZN")
+                 (("MZ=MZM;2006-06-30-22-00-00;MZN") "MZ=MZN")
+                 (("RO=ROL;2005-06-30-21-00-00;RON") "RO=RON")
+                 (("TR=TRL;2004-12-31-22-00-00;TRY") "TR=TRY")))))
+         (add-before 'configure 'set-additional-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (let* ((gcjdir  (assoc-ref %build-inputs "gcj"))
                     (gcjlib  (string-append gcjdir "/lib"))
@@ -412,125 +411,159 @@ build process and its dependencies, whereas Make uses Makefile format.")
                                       "/include"))
                (setenv "ALT_FREETYPE_LIB_PATH"
                        (string-append (assoc-ref %build-inputs "freetype")
-                                      "/lib"))))
-           (alist-cons-before
-            'check 'fix-test-framework
-            (lambda _
-              ;; Fix PATH in test environment
-              (substitute* "src/jtreg/com/sun/javatest/regtest/Main.java"
-                (("PATH=/bin:/usr/bin")
-                 (string-append "PATH=" (getenv "PATH"))))
-              (substitute* "src/jtreg/com/sun/javatest/util/SysEnv.java"
-                (("/usr/bin/env") (which "env")))
-              #t)
-            (alist-cons-before
-             'check 'fix-hotspot-tests
-             (lambda _
-               (with-directory-excursion "openjdk.src/hotspot/test/"
-                 (substitute* "jprt.config"
-                   (("PATH=\"\\$\\{path4sdk\\}\"")
-                    (string-append "PATH=" (getenv "PATH")))
-                   (("make=/usr/bin/make")
-                    (string-append "make=" (which "make"))))
-                 (substitute* '("runtime/6626217/Test6626217.sh"
-                                "runtime/7110720/Test7110720.sh")
-                   (("/bin/rm") (which "rm"))
-                   (("/bin/cp") (which "cp"))
-                   (("/bin/mv") (which "mv"))))
-               #t)
-             (alist-cons-before
-              'check 'fix-jdk-tests
-              (lambda _
-                (with-directory-excursion "openjdk.src/jdk/test/"
-                  (substitute* "com/sun/jdi/JdbReadTwiceTest.sh"
-                    (("/bin/pwd") (which "pwd")))
-                  (substitute* "com/sun/jdi/ShellScaffold.sh"
-                    (("/bin/kill") (which "kill")))
-                  (substitute* "start-Xvfb.sh"
-                    ;;(("/usr/bin/X11/Xvfb") (which "Xvfb"))
-                    (("/usr/bin/nohup")    (which "nohup")))
-                  (substitute* "javax/security/auth/Subject/doAs/Test.sh"
-                    (("/bin/rm") (which "rm")))
-                  (substitute* "tools/launcher/MultipleJRE.sh"
-                    (("echo \"#!/bin/sh\"")
-                     (string-append "echo \"#!" (which "rm") "\""))
-                    (("/usr/bin/zip") (which "zip")))
-                  (substitute* "com/sun/jdi/OnThrowTest.java"
-                    (("#!/bin/sh") (string-append "#!" (which "sh"))))
-                  (substitute* "java/lang/management/OperatingSystemMXBean/GetSystemLoadAverage.java"
-                    (("/usr/bin/uptime") (which "uptime")))
-                  (substitute* "java/lang/ProcessBuilder/Basic.java"
-                    (("/usr/bin/env") (which "env"))
-                    (("/bin/false") (which "false"))
-                    (("/bin/true") (which "true"))
-                    (("/bin/cp") (which "cp"))
-                    (("/bin/sh") (which "sh")))
-                  (substitute* "java/lang/ProcessBuilder/FeelingLucky.java"
-                    (("/bin/sh") (which "sh")))
-                  (substitute* "java/lang/ProcessBuilder/Zombies.java"
-                    (("/usr/bin/perl") (which "perl"))
-                    (("/bin/ps") (which "ps"))
-                    (("/bin/true") (which "true")))
-                  (substitute* "java/lang/Runtime/exec/ConcurrentRead.java"
-                    (("/usr/bin/tee") (which "tee")))
-                  (substitute* "java/lang/Runtime/exec/ExecWithDir.java"
-                    (("/bin/true") (which "true")))
-                  (substitute* "java/lang/Runtime/exec/ExecWithInput.java"
-                    (("/bin/cat") (which "cat")))
-                  (substitute* "java/lang/Runtime/exec/ExitValue.java"
-                    (("/bin/sh") (which "sh"))
-                    (("/bin/true") (which "true"))
-                    (("/bin/kill") (which "kill")))
-                  (substitute* "java/lang/Runtime/exec/LotsOfDestroys.java"
-                    (("/usr/bin/echo") (which "echo")))
-                  (substitute* "java/lang/Runtime/exec/LotsOfOutput.java"
-                    (("/usr/bin/cat") (which "cat")))
-                  (substitute* "java/lang/Runtime/exec/SleepyCat.java"
-                    (("/bin/cat") (which "cat"))
-                    (("/bin/sleep") (which "sleep"))
-                    (("/bin/sh") (which "sh")))
-                  (substitute* "java/lang/Runtime/exec/StreamsSurviveDestroy.java"
-                    (("/bin/cat") (which "cat")))
-                  (substitute* "java/rmi/activation/CommandEnvironment/SetChildEnv.java"
-                    (("/bin/chmod") (which "chmod")))
-                  (substitute* "java/util/zip/ZipFile/Assortment.java"
-                    (("/bin/sh") (which "sh"))))
-                #t)
-              (alist-replace
-               'check
-               (lambda _
-                 ;; The "make check-*" targets always return zero, so we need to
-                 ;; check for errors in the associated log files to determine
-                 ;; whether any tests have failed.
-                 (use-modules (ice-9 rdelim))
-                 (let* ((error-pattern (make-regexp "^(Error|FAILED):.*"))
-                        (checker (lambda (port)
-                                   (let loop ()
-                                     (let ((line (read-line port)))
-                                       (cond
-                                        ((eof-object? line) #t)
-                                        ((regexp-exec error-pattern line) #f)
-                                        (else (loop)))))))
-                        (run-test (lambda (test)
-                                    (system* "make" test)
-                                    (call-with-input-file
-                                        (string-append "test/" test ".log")
-                                      checker))))
-                   (or #t ; skip tests
-                       (and (run-test "check-hotspot")
-                            (run-test "check-langtools")
-                            (run-test "check-jdk")))))
-               (alist-replace
-                'install
-                (lambda* (#:key outputs #:allow-other-keys)
-                  (let ((doc (string-append (assoc-ref outputs "doc")
-                                            "/share/doc/icedtea"))
-                        (jre (assoc-ref outputs "out"))
-                        (jdk (assoc-ref outputs "jdk")))
-                    (copy-recursively "openjdk.build/docs" doc)
-                    (copy-recursively "openjdk.build/j2re-image" jre)
-                    (copy-recursively "openjdk.build/j2sdk-image" jdk)))
-                %standard-phases)))))))))))
+                                      "/lib")))))
+         (add-before 'check 'fix-test-framework
+           (lambda _
+             ;; Fix PATH in test environment
+             (substitute* "src/jtreg/com/sun/javatest/regtest/Main.java"
+               (("PATH=/bin:/usr/bin")
+                (string-append "PATH=" (getenv "PATH"))))
+             (substitute* "src/jtreg/com/sun/javatest/util/SysEnv.java"
+               (("/usr/bin/env") (which "env")))
+             #t))
+         (add-before 'check 'fix-hotspot-tests
+           (lambda _
+             (with-directory-excursion "openjdk.src/hotspot/test/"
+               (substitute* "jprt.config"
+                 (("PATH=\"\\$\\{path4sdk\\}\"")
+                  (string-append "PATH=" (getenv "PATH")))
+                 (("make=/usr/bin/make")
+                  (string-append "make=" (which "make"))))
+               (substitute* '("runtime/6626217/Test6626217.sh"
+                              "runtime/7110720/Test7110720.sh")
+                 (("/bin/rm") (which "rm"))
+                 (("/bin/cp") (which "cp"))
+                 (("/bin/mv") (which "mv"))))
+             #t))
+         (add-before 'check 'fix-jdk-tests
+           (lambda _
+             (with-directory-excursion "openjdk.src/jdk/test/"
+               (substitute* "com/sun/jdi/JdbReadTwiceTest.sh"
+                 (("/bin/pwd") (which "pwd")))
+               (substitute* "com/sun/jdi/ShellScaffold.sh"
+                 (("/bin/kill") (which "kill")))
+               (substitute* "start-Xvfb.sh"
+                 ;;(("/usr/bin/X11/Xvfb") (which "Xvfb"))
+                 (("/usr/bin/nohup")    (which "nohup")))
+               (substitute* "javax/security/auth/Subject/doAs/Test.sh"
+                 (("/bin/rm") (which "rm")))
+               (substitute* "tools/launcher/MultipleJRE.sh"
+                 (("echo \"#!/bin/sh\"")
+                  (string-append "echo \"#!" (which "rm") "\""))
+                 (("/usr/bin/zip") (which "zip")))
+               (substitute* "com/sun/jdi/OnThrowTest.java"
+                 (("#!/bin/sh") (string-append "#!" (which "sh"))))
+               (substitute* "java/lang/management/OperatingSystemMXBean/GetSystemLoadAverage.java"
+                 (("/usr/bin/uptime") (which "uptime")))
+               (substitute* "java/lang/ProcessBuilder/Basic.java"
+                 (("/usr/bin/env") (which "env"))
+                 (("/bin/false") (which "false"))
+                 (("/bin/true") (which "true"))
+                 (("/bin/cp") (which "cp"))
+                 (("/bin/sh") (which "sh")))
+               (substitute* "java/lang/ProcessBuilder/FeelingLucky.java"
+                 (("/bin/sh") (which "sh")))
+               (substitute* "java/lang/ProcessBuilder/Zombies.java"
+                 (("/usr/bin/perl") (which "perl"))
+                 (("/bin/ps") (which "ps"))
+                 (("/bin/true") (which "true")))
+               (substitute* "java/lang/Runtime/exec/ConcurrentRead.java"
+                 (("/usr/bin/tee") (which "tee")))
+               (substitute* "java/lang/Runtime/exec/ExecWithDir.java"
+                 (("/bin/true") (which "true")))
+               (substitute* "java/lang/Runtime/exec/ExecWithInput.java"
+                 (("/bin/cat") (which "cat")))
+               (substitute* "java/lang/Runtime/exec/ExitValue.java"
+                 (("/bin/sh") (which "sh"))
+                 (("/bin/true") (which "true"))
+                 (("/bin/kill") (which "kill")))
+               (substitute* "java/lang/Runtime/exec/LotsOfDestroys.java"
+                 (("/usr/bin/echo") (which "echo")))
+               (substitute* "java/lang/Runtime/exec/LotsOfOutput.java"
+                 (("/usr/bin/cat") (which "cat")))
+               (substitute* "java/lang/Runtime/exec/SleepyCat.java"
+                 (("/bin/cat") (which "cat"))
+                 (("/bin/sleep") (which "sleep"))
+                 (("/bin/sh") (which "sh")))
+               (substitute* "java/lang/Runtime/exec/StreamsSurviveDestroy.java"
+                 (("/bin/cat") (which "cat")))
+               (substitute* "java/rmi/activation/CommandEnvironment/SetChildEnv.java"
+                 (("/bin/chmod") (which "chmod")))
+               (substitute* "java/util/zip/ZipFile/Assortment.java"
+                 (("/bin/sh") (which "sh"))))
+             #t))
+         (replace 'check
+           (lambda _
+             ;; The "make check-*" targets always return zero, so we need to
+             ;; check for errors in the associated log files to determine
+             ;; whether any tests have failed.
+             (use-modules (ice-9 rdelim))
+             (let* ((error-pattern (make-regexp "^(Error|FAILED):.*"))
+                    (checker (lambda (port)
+                               (let loop ()
+                                 (let ((line (read-line port)))
+                                   (cond
+                                    ((eof-object? line) #t)
+                                    ((regexp-exec error-pattern line) #f)
+                                    (else (loop)))))))
+                    (run-test (lambda (test)
+                                (system* "make" test)
+                                (call-with-input-file
+                                    (string-append "test/" test ".log")
+                                  checker))))
+               (or #t ; skip tests
+                   (and (run-test "check-hotspot")
+                        (run-test "check-langtools")
+                        (run-test "check-jdk"))))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((doc (string-append (assoc-ref outputs "doc")
+                                       "/share/doc/icedtea"))
+                   (jre (assoc-ref outputs "out"))
+                   (jdk (assoc-ref outputs "jdk")))
+               (copy-recursively "openjdk.build/docs" doc)
+               (copy-recursively "openjdk.build/j2re-image" jre)
+               (copy-recursively "openjdk.build/j2sdk-image" jdk))))
+         ;; By default IcedTea only generates an empty keystore.  In order to
+         ;; be able to use certificates in Java programs we need to generate a
+         ;; keystore from a set of certificates.  For convenience we use the
+         ;; certificates from the nss-certs package.
+         (add-after 'install 'install-keystore
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((keystore  "cacerts")
+                    (certs-dir (string-append (assoc-ref inputs "nss-certs")
+                                              "/etc/ssl/certs"))
+                    (keytool   (string-append (assoc-ref outputs "jdk")
+                                              "/bin/keytool")))
+               (define (import-cert cert)
+                 (format #t "Importing certificate ~a\n" (basename cert))
+                 (let* ((port (open-pipe* OPEN_WRITE keytool
+                                          "-import"
+                                          "-alias" (basename cert)
+                                          "-keystore" keystore
+                                          "-storepass" "changeit"
+                                          "-file" cert)))
+                   (display "yes\n" port)
+                   (when (not (zero? (status:exit-val (close-pipe port))))
+                     (error "failed to import" cert))))
+
+               ;; This is necessary because the certificate directory contains
+               ;; files with non-ASCII characters in their names.
+               (setlocale LC_ALL "en_US.utf8")
+               (setenv "LC_ALL" "en_US.utf8")
+
+               (for-each import-cert (find-files certs-dir "\\.pem$"))
+               (mkdir-p (string-append (assoc-ref outputs "out")
+                                       "/lib/security"))
+               (mkdir-p (string-append (assoc-ref outputs "jdk")
+                                       "/jre/lib/security"))
+               (install-file keystore
+                             (string-append (assoc-ref outputs "out")
+                                            "/lib/security"))
+               (install-file keystore
+                             (string-append (assoc-ref outputs "jdk")
+                                            "/jre/lib/security"))
+               #t))))))
     (native-inputs
      `(("ant" ,ant)
        ("alsa-lib" ,alsa-lib)
@@ -553,6 +586,7 @@ build process and its dependencies, whereas Make uses Makefile format.")
        ("libxslt" ,libxslt) ;for xsltproc
        ("mit-krb5" ,mit-krb5)
        ("nss" ,nss)
+       ("nss-certs" ,nss-certs)
        ("libx11" ,libx11)
        ("libxcomposite" ,libxcomposite)
        ("libxt" ,libxt)
@@ -798,6 +832,9 @@ build process and its dependencies, whereas Make uses Makefile format.")
              (delete 'patch-paths)
              (delete 'set-additional-paths)
              (delete 'patch-patches)
+             ;; FIXME: This phase is needed but fails with this version of
+             ;; IcedTea.
+             (delete 'install-keystore)
              (replace 'install
                (lambda* (#:key outputs #:allow-other-keys)
                  (let ((doc (string-append (assoc-ref outputs "doc")