summary refs log tree commit diff
diff options
context:
space:
mode:
authorRicardo Wurmus <ricardo.wurmus@mdc-berlin.de>2014-12-23 12:32:25 +0100
committerRicardo Wurmus <ricardo.wurmus@mdc-berlin.de>2015-01-29 10:32:42 +0100
commit0760e3a1aaf702ece1ac3c1ab588b87fef3c381e (patch)
tree763947c32cc9efbe1b786763d8748e90ed2f8942
parentb02c197cdff45ccd5add1bfeae42d634f812c884 (diff)
downloadguix-0760e3a1aaf702ece1ac3c1ab588b87fef3c381e.tar.gz
gnu: Add IcedTea 6
* gnu/packages/java.scm: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add it.
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/java.scm424
2 files changed, 425 insertions, 0 deletions
diff --git a/gnu-system.am b/gnu-system.am
index f09b5bd5c0..1ee1b3eb05 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -147,6 +147,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/inkscape.scm			\
   gnu/packages/irssi.scm			\
   gnu/packages/iso-codes.scm			\
+  gnu/packages/java.scm				\
   gnu/packages/jrnl.scm				\
   gnu/packages/kde.scm				\
   gnu/packages/ld-wrapper.scm			\
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
new file mode 100644
index 0000000000..4a86f63bdb
--- /dev/null
+++ b/gnu/packages/java.scm
@@ -0,0 +1,424 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages java)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages attr)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages cpio)
+  #:use-module (gnu packages cups)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gnuzilla) ;nss
+  #:use-module (gnu packages ghostscript) ;lcms
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages linux) ;alsa
+  #:use-module (gnu packages wget)
+  #:use-module (gnu packages which)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages mit-krb5)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages zip)
+  #:use-module (gnu packages texinfo))
+
+(define-public icedtea6
+  (package
+    (name "icedtea6")
+    (version "1.13.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://icedtea.wildebeest.org/download/source/icedtea6-"
+                    version ".tar.xz"))
+              (sha256
+               (base32
+                "16ac3f7kkln5skg202vllagkhjxrwd47h56diwzhfidhwjlz7410"))
+              (modules '((guix build utils)))
+              (snippet
+               '(substitute* "Makefile.in"
+                  ;; link against libgcj to avoid linker error
+                  (("-o native-ecj")
+                   "-lgcj -o native-ecj")
+                  ;; do not leak information about the build host
+                  (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
+                   "DISTRIBUTION_ID=\"\\\"guix\\\"\"")))))
+    (build-system gnu-build-system)
+    (arguments
+     `(;; There are many failing tests and many are known to fail upstream.
+       ;;
+       ;; * Hotspot VM tests:
+       ;;   FAILED: compiler/7082949/Test7082949.java
+       ;;   FAILED: compiler/7088020/Test7088020.java
+       ;;   FAILED: runtime/6929067/Test6929067.sh
+       ;;   FAILED: serviceability/sa/jmap-hashcode/Test8028623.java
+       ;;   => Test results: passed: 161; failed: 4
+       ;;
+       ;; * langtools tests:
+       ;;   FAILED: com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
+       ;;   FAILED: tools/javac/6627362/T6627362.java
+       ;;   FAILED: tools/javac/7003595/T7003595.java
+       ;;   FAILED: tools/javac/7024568/T7024568.java
+       ;;   FAILED: tools/javap/4111861/T4111861.java
+       ;;   FAILED: tools/javap/ListTest.java
+       ;;   FAILED: tools/javap/OptionTest.java
+       ;;   FAILED: tools/javap/T4884240.java
+       ;;   FAILED: tools/javap/T4975569.java
+       ;;     --> fails because of insignificant whitespace differences
+       ;;         in output of javap
+       ;;   FAILED: tools/javap/T6868539.java
+       ;;   => Test results: passed: 1,445; failed: 10
+       ;;
+       ;; * JDK tests:
+       ;;   Tests are incomplete because of a segfault after this test:
+       ;;     javax/crypto/spec/RC5ParameterSpec/RC5ParameterSpecEquals.java
+       ;;   A bug report has already been filed upstream:
+       ;;     http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=2188
+       ;;
+       ;;   The tests require xvfb-run, a wrapper script around Xvfb, which
+       ;;   has not been packaged yet.  Without it many AWT tests fail, so I
+       ;;   made no attempts to make a list of failing JDK tests.  At least
+       ;;   222 tests are failing of which at least 132 are AWT tests.
+       #:tests? #f
+       #:configure-flags
+       (let* ((gcjdir (assoc-ref %build-inputs "gcj"))
+              (ecj    (string-append gcjdir "/share/java/ecj.jar"))
+              (jdk    (string-append gcjdir "/lib/jvm/"))
+              (gcj    (string-append gcjdir "/bin/gcj")))
+         `("--enable-bootstrap"
+           "--enable-nss"
+           "--without-rhino"
+           "--disable-downloading"
+           "--disable-tests" ;they are run in the check phase instead
+           ,(string-append "--with-openjdk-src-dir=" "./openjdk")
+           ,(string-append "--with-javac=" jdk "/bin/javac")
+           ,(string-append "--with-ecj-jar=" ecj)
+           ,(string-append "--with-gcj=" gcj)
+           ,(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))
+               (zero? (system* "tar" "xvjf"
+                               (assoc-ref inputs "ant-bootstrap")))
+               (begin
+                 (chdir (string-append ,name "-" ,version))
+                 (mkdir "openjdk")
+                 (with-directory-excursion "openjdk"
+                   (copy-file (assoc-ref inputs "openjdk6-src")
+                              "openjdk6-src.tar.xz")
+                   (zero? (system* "tar" "xvf" "openjdk6-src.tar.xz"))))))
+        (alist-cons-after
+         'unpack 'patch-paths
+         (lambda _
+           (patch-shebang "../apache-ant-1.9.4/bin/ant")
+
+           ;; 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")))
+
+           ;; buildtree.make generates shell scripts, so we need to replace
+           ;; the generated shebang
+           (substitute* '("openjdk/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/jdk/make/common/shared/Defs-linux.gmk"
+                            "openjdk/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/")))
+
+             ;; fix hard-coded utility paths
+             (substitute* '("openjdk/jdk/make/common/shared/Defs-utils.gmk"
+                            "openjdk/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")))
+               ;; (("NAWK *=.*gawk")
+               ;;  (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/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-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((gcjdir  (assoc-ref %build-inputs "gcj"))
+                    (gcjlib  (string-append gcjdir "/lib"))
+                    (antpath (string-append (getcwd) "/../apache-ant-1.9.4")))
+               (setenv "CC" (which "gcc"))
+               (setenv "CPATH"
+                       (string-append (assoc-ref %build-inputs "libxrender")
+                                      "/include/X11/extensions" ":"
+                                      (assoc-ref %build-inputs "libxtst")
+                                      "/include/X11/extensions" ":"
+                                      (assoc-ref %build-inputs "libxinerama")
+                                      "/include/X11/extensions" ":"
+                                      (or (getenv "CPATH") "")))
+               (setenv "ALT_CUPS_HEADERS_PATH"
+                       (string-append (assoc-ref %build-inputs "cups")
+                                      "/include"))
+               (setenv "ALT_FREETYPE_HEADERS_PATH"
+                       (string-append (assoc-ref %build-inputs "freetype")
+                                      "/include"))
+               (setenv "ALT_FREETYPE_LIB_PATH"
+                       (string-append (assoc-ref %build-inputs "freetype")
+                                      "/lib"))
+               (setenv "LD_LIBRARY_PATH"
+                       (string-append antpath "/lib" ":" gcjlib))
+               (setenv "PATH" (string-append antpath "/bin:"
+                                             (getenv "PATH")))))
+           (alist-cons-before
+            'check 'fix-tests
+            (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")))
+
+              ;; Hotspot tests
+              (with-directory-excursion "openjdk/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"))))
+
+              ;; JDK tests
+              (with-directory-excursion "openjdk/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")))))
+            (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 _
+                (copy-recursively "openjdk.build" %output))
+              %standard-phases))))))))
+    (native-inputs
+     `(("ant-bootstrap"
+        ,(origin
+           (method url-fetch)
+           (uri "https://www.apache.org/dist/ant/binaries/apache-ant-1.9.4-bin.tar.bz2")
+           (sha256
+            (base32
+             "1kw801p8h5x4f0g8i5yknppssrj5a3xy1aqrkpfnk22bd1snbh90"))))
+       ("alsa-lib" ,alsa-lib)
+       ("attr" ,attr)
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("coreutils" ,coreutils)
+       ("diffutils" ,diffutils) ;for tests
+       ("gawk" ,gawk)
+       ("grep" ,grep)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("cups" ,cups)
+       ("wget" ,wget)
+       ("which" ,which)
+       ("cpio" ,cpio)
+       ("zip" ,zip)
+       ("unzip" ,unzip)
+       ("fastjar" ,fastjar)
+       ("libxslt" ,libxslt) ;for xsltproc
+       ("mit-krb5" ,mit-krb5)
+       ("nss" ,nss)
+       ("libx11" ,libx11)
+       ("libxt" ,libxt)
+       ("libxtst" ,libxtst)
+       ("libxi" ,libxi)
+       ("libxinerama" ,libxinerama)
+       ("libxrender" ,libxrender)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("giflib" ,giflib)
+       ("perl" ,perl)
+       ("procps" ,procps) ;for "free", even though I'm not sure we should use it
+       ("openjdk6-src"
+        ,(origin
+           (method url-fetch)
+           (uri "https://java.net/downloads/openjdk6/openjdk-6-src-b34-20_jan_2015.tar.xz")
+           (sha256
+            (base32
+             "0lafxvi255r22pjljkj9x6liacqdgin8smdmh6nzkdjjw7hv9l8k"))))
+       ("lcms" ,lcms)
+       ("zlib" ,zlib)
+       ("gtk" ,gtk+-2)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("gcj" ,gcj-4.8)))
+    (home-page "http://icedtea.classpath.org")
+    (synopsis "Java development kit")
+    (description
+     "The OpenJDK built with the IcedTea build harness.")
+    ;; IcedTea is released under the GPL2 + Classpath exception, which is the
+    ;; same license as both GNU Classpath and OpenJDK.
+    (license license:gpl2+)))