diff options
Diffstat (limited to 'gnu/packages/java.scm')
-rw-r--r-- | gnu/packages/java.scm | 479 |
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") |