aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/java.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/java.scm')
-rw-r--r--gnu/packages/java.scm1000
1 files changed, 436 insertions, 564 deletions
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 1abdf607f5..cf4ba69d6a 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -335,463 +335,6 @@ and is best suited to building Java projects. Ant uses XML to describe the
build process and its dependencies, whereas Make uses Makefile format.")
(license license:asl2.0)))
-(define-public icedtea-6
- (package
- (name "icedtea")
- (version "1.13.13")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "http://icedtea.wildebeest.org/download/source/icedtea6-"
- version ".tar.xz"))
- (sha256
- (base32
- "0bg9sb4f7qbq77c0zf9m17p47ga0kf0r9622g9p12ysg26jd1ksg"))
- (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)
- (outputs '("out" ; Java Runtime Environment
- "jdk" ; Java Development Kit
- "doc")) ; all documentation
- (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
-
- ;; The DSOs use $ORIGIN to refer to each other, but (guix build
- ;; gremlin) doesn't support it yet, so skip this phase.
- #:validate-runpath? #f
-
- #:modules ((guix build utils)
- (guix build gnu-build-system)
- (ice-9 popen)
- (ice-9 rdelim)
- (srfi srfi-19))
-
- #: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
- "--with-openjdk-src-dir=./openjdk.src"
- ,(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
- (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"))))
- #t))
- (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"))))
-
- ;; fix path to alsa header
- (substitute* "openjdk.src/jdk/make/common/shared/Sanity.gmk"
- (("ALSA_INCLUDE=/usr/include/alsa/version.h")
- (string-append "ALSA_INCLUDE="
- (assoc-ref %build-inputs "alsa-lib")
- "/include/alsa/version.h")))
-
- ;; 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")))))
- (add-before 'configure 'set-additional-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (let* ((gcjdir (assoc-ref %build-inputs "gcj"))
- (gcjlib (string-append gcjdir "/lib"))
- ;; Get target-specific include directory so that
- ;; libgcj-config.h is found when compiling hotspot.
- (gcjinclude (let* ((port (open-input-pipe "gcj -print-file-name=include"))
- (str (read-line port)))
- (close-pipe port)
- str)))
- (setenv "CPATH"
- (string-append gcjinclude ":"
- (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")))))
- (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 (extract-cert file target)
- (call-with-input-file file
- (lambda (in)
- (call-with-output-file target
- (lambda (out)
- (let loop ((line (read-line in 'concat))
- (copying? #f))
- (cond
- ((eof-object? line) #t)
- ((string-prefix? "-----BEGIN" line)
- (display line out)
- (loop (read-line in 'concat) #t))
- ((string-prefix? "-----END" line)
- (display line out)
- #t)
- (else
- (when copying? (display line out))
- (loop (read-line in 'concat) copying?)))))))))
- (define (import-cert cert)
- (format #t "Importing certificate ~a\n" (basename cert))
- (let ((temp "tmpcert"))
- (extract-cert cert temp)
- (let ((port (open-pipe* OPEN_WRITE keytool
- "-import"
- "-alias" (basename cert)
- "-keystore" keystore
- "-storepass" "changeit"
- "-file" temp)))
- (display "yes\n" port)
- (when (not (zero? (status:exit-val (close-pipe port))))
- (format #t "failed to import ~a\n" cert)))
- (delete-file temp)))
-
- ;; 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"))
-
- ;; The cacerts files we are going to overwrite are chmod'ed as
- ;; read-only (444) in icedtea-8 (which derives from this
- ;; package). We have to change this so we can overwrite them.
- (chmod (string-append (assoc-ref outputs "out")
- "/lib/security/" keystore) #o644)
- (chmod (string-append (assoc-ref outputs "jdk")
- "/jre/lib/security/" keystore) #o644)
-
- (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)
- ("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)
- ("nss-certs" ,nss-certs)
- ("libx11" ,libx11)
- ("libxcomposite" ,libxcomposite)
- ("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-b41-04_jan_2017.tar.xz")
- (sha256
- (base32
- "058szix0j280g14jzajvsixx1j2dxmc10r848f5swpy6rr8x8d4f"))))
- ("lcms" ,lcms)
- ("zlib" ,zlib)
- ("gtk" ,gtk+-2)
- ("fontconfig" ,fontconfig)
- ("freetype" ,freetype)
- ("gcj" ,gcj)))
- (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+)))
-
(define-public icedtea-7
(let* ((version "2.6.9")
(drop (lambda (name hash)
@@ -801,7 +344,8 @@ build process and its dependencies, whereas Make uses Makefile format.")
"http://icedtea.classpath.org/download/drops/"
"/icedtea7/" version "/" name ".tar.bz2"))
(sha256 (base32 hash))))))
- (package (inherit icedtea-6)
+ (package
+ (name "icedtea")
(version version)
(source (origin
(method url-fetch)
@@ -820,6 +364,10 @@ build process and its dependencies, whereas Make uses Makefile format.")
;; do not leak information about the build host
(("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
"DISTRIBUTION_ID=\"\\\"guix\\\"\"")))))
+ (build-system gnu-build-system)
+ (outputs '("out" ; Java Runtime Environment
+ "jdk" ; Java Development Kit
+ "doc")) ; all documentation
(arguments
`(;; There are many test failures. Some are known to
;; fail upstream, others relate to not having an X
@@ -830,110 +378,390 @@ build process and its dependencies, whereas Make uses Makefile format.")
;; langtools: passed: 1,934; failed: 26
;; jdk: unknown
#:tests? #f
+
+ ;; The DSOs use $ORIGIN to refer to each other, but (guix build
+ ;; gremlin) doesn't support it yet, so skip this phase.
+ #:validate-runpath? #f
+
;; Apparently, the C locale is needed for some of the tests.
#:locale "C"
- ,@(substitute-keyword-arguments (package-arguments icedtea-6)
- ((#:modules modules)
- `((ice-9 match)
- (srfi srfi-26)
- ,@modules))
- ((#:configure-flags flags)
- ;; TODO: package pcsc and sctp, and add to inputs
- `(append '("--disable-system-pcsc"
- "--disable-system-sctp")
- ,flags))
- ((#:phases phases)
- `(modify-phases ,phases
- (replace 'unpack
- (lambda* (#:key source inputs #:allow-other-keys)
- (let ((target (string-append "icedtea-" ,version))
- (unpack (lambda* (name #:optional dir)
- (let ((dir (or dir
- (string-drop-right name 5))))
- (mkdir dir)
- (zero? (system* "tar" "xvf"
- (assoc-ref inputs name)
- "-C" dir
- "--strip-components=1"))))))
- (mkdir target)
- (and
- (zero? (system* "tar" "xvf" source
- "-C" target "--strip-components=1"))
- (chdir target)
- (unpack "openjdk-src" "openjdk.src")
- (with-directory-excursion "openjdk.src"
- (for-each unpack
- (filter (cut string-suffix? "-drop" <>)
- (map (match-lambda
- ((name . _) name))
- inputs))))
- #t))))
- (replace
- 'set-additional-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (let (;; Get target-specific include directory so that
- ;; libgcj-config.h is found when compiling hotspot.
- (gcjinclude (let* ((port (open-input-pipe "gcj -print-file-name=include"))
- (str (read-line port)))
- (close-pipe port)
- str)))
- (substitute* "openjdk.src/jdk/make/common/shared/Sanity.gmk"
- (("ALSA_INCLUDE=/usr/include/alsa/version.h")
- (string-append "ALSA_INCLUDE="
- (assoc-ref inputs "alsa-lib")
- "/include/alsa/version.h")))
- (setenv "CC" "gcc")
- (setenv "CPATH"
- (string-append gcjinclude ":"
- (assoc-ref inputs "libxcomposite")
- "/include/X11/extensions" ":"
- (assoc-ref inputs "libxrender")
- "/include/X11/extensions" ":"
- (assoc-ref inputs "libxtst")
- "/include/X11/extensions" ":"
- (assoc-ref inputs "libxinerama")
- "/include/X11/extensions" ":"
- (or (getenv "CPATH") "")))
- (setenv "ALT_OBJCOPY" (which "objcopy"))
- (setenv "ALT_CUPS_HEADERS_PATH"
- (string-append (assoc-ref inputs "cups")
- "/include"))
- (setenv "ALT_FREETYPE_HEADERS_PATH"
- (string-append (assoc-ref inputs "freetype")
- "/include"))
- (setenv "ALT_FREETYPE_LIB_PATH"
- (string-append (assoc-ref inputs "freetype")
- "/lib")))))
- (add-after
- 'unpack 'fix-x11-extension-include-path
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk"
- (((string-append "\\$\\(firstword \\$\\(wildcard "
- "\\$\\(OPENWIN_HOME\\)"
- "/include/X11/extensions\\).*$"))
- (string-append (assoc-ref inputs "libxrender")
- "/include/X11/extensions"
- " -I" (assoc-ref inputs "libxtst")
- "/include/X11/extensions"
- " -I" (assoc-ref inputs "libxinerama")
- "/include/X11/extensions"))
- (("\\$\\(wildcard /usr/include/X11/extensions\\)\\)") ""))
- #t))
- (replace
- 'fix-test-framework
- (lambda _
- ;; Fix PATH in test environment
- (substitute* "test/jtreg/com/sun/javatest/regtest/Main.java"
- (("PATH=/bin:/usr/bin")
- (string-append "PATH=" (getenv "PATH"))))
- (substitute* "test/jtreg/com/sun/javatest/util/SysEnv.java"
- (("/usr/bin/env") (which "env")))
- (substitute* "openjdk.src/hotspot/test/test_env.sh"
- (("/bin/rm") (which "rm"))
- (("/bin/cp") (which "cp"))
- (("/bin/mv") (which "mv")))
- #t))
- (delete 'patch-patches))))))
+
+ #:modules ((guix build utils)
+ (guix build gnu-build-system)
+ (ice-9 match)
+ (ice-9 popen)
+ (ice-9 rdelim)
+ (srfi srfi-19)
+ (srfi srfi-26))
+
+ #: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")))
+ ;; TODO: package pcsc and sctp, and add to inputs
+ `("--disable-system-pcsc"
+ "--disable-system-sctp"
+ "--enable-bootstrap"
+ "--enable-nss"
+ "--without-rhino"
+ "--disable-downloading"
+ "--disable-tests" ;they are run in the check phase instead
+ "--with-openjdk-src-dir=./openjdk.src"
+ ,(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
+ (modify-phases %standard-phases
+ (replace 'unpack
+ (lambda* (#:key source inputs #:allow-other-keys)
+ (let ((target (string-append "icedtea-" ,version))
+ (unpack (lambda* (name #:optional dir)
+ (let ((dir (or dir
+ (string-drop-right name 5))))
+ (mkdir dir)
+ (zero? (system* "tar" "xvf"
+ (assoc-ref inputs name)
+ "-C" dir
+ "--strip-components=1"))))))
+ (mkdir target)
+ (and
+ (zero? (system* "tar" "xvf" source
+ "-C" target "--strip-components=1"))
+ (chdir target)
+ (unpack "openjdk-src" "openjdk.src")
+ (with-directory-excursion "openjdk.src"
+ (for-each unpack
+ (filter (cut string-suffix? "-drop" <>)
+ (map (match-lambda
+ ((name . _) name))
+ inputs))))
+ #t))))
+ (add-after 'unpack 'fix-x11-extension-include-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk"
+ (((string-append "\\$\\(firstword \\$\\(wildcard "
+ "\\$\\(OPENWIN_HOME\\)"
+ "/include/X11/extensions\\).*$"))
+ (string-append (assoc-ref inputs "libxrender")
+ "/include/X11/extensions"
+ " -I" (assoc-ref inputs "libxtst")
+ "/include/X11/extensions"
+ " -I" (assoc-ref inputs "libxinerama")
+ "/include/X11/extensions"))
+ (("\\$\\(wildcard /usr/include/X11/extensions\\)\\)") ""))
+ #t))
+ (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"))))
+
+ ;; fix path to alsa header
+ (substitute* "openjdk.src/jdk/make/common/shared/Sanity.gmk"
+ (("ALSA_INCLUDE=/usr/include/alsa/version.h")
+ (string-append "ALSA_INCLUDE="
+ (assoc-ref %build-inputs "alsa-lib")
+ "/include/alsa/version.h")))
+
+ ;; 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")))
+ #t))
+ (add-before 'configure 'set-additional-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ( ;; Get target-specific include directory so that
+ ;; libgcj-config.h is found when compiling hotspot.
+ (gcjinclude (let* ((port (open-input-pipe "gcj -print-file-name=include"))
+ (str (read-line port)))
+ (close-pipe port)
+ str)))
+ (substitute* "openjdk.src/jdk/make/common/shared/Sanity.gmk"
+ (("ALSA_INCLUDE=/usr/include/alsa/version.h")
+ (string-append "ALSA_INCLUDE="
+ (assoc-ref inputs "alsa-lib")
+ "/include/alsa/version.h")))
+ (setenv "CC" "gcc")
+ (setenv "CPATH"
+ (string-append gcjinclude ":"
+ (assoc-ref inputs "libxcomposite")
+ "/include/X11/extensions" ":"
+ (assoc-ref inputs "libxrender")
+ "/include/X11/extensions" ":"
+ (assoc-ref inputs "libxtst")
+ "/include/X11/extensions" ":"
+ (assoc-ref inputs "libxinerama")
+ "/include/X11/extensions" ":"
+ (or (getenv "CPATH") "")))
+ (setenv "ALT_OBJCOPY" (which "objcopy"))
+ (setenv "ALT_CUPS_HEADERS_PATH"
+ (string-append (assoc-ref inputs "cups")
+ "/include"))
+ (setenv "ALT_FREETYPE_HEADERS_PATH"
+ (string-append (assoc-ref inputs "freetype")
+ "/include"))
+ (setenv "ALT_FREETYPE_LIB_PATH"
+ (string-append (assoc-ref inputs "freetype")
+ "/lib")))
+ #t))
+ (add-before 'check 'fix-test-framework
+ (lambda _
+ ;; Fix PATH in test environment
+ (substitute* "test/jtreg/com/sun/javatest/regtest/Main.java"
+ (("PATH=/bin:/usr/bin")
+ (string-append "PATH=" (getenv "PATH"))))
+ (substitute* "test/jtreg/com/sun/javatest/util/SysEnv.java"
+ (("/usr/bin/env") (which "env")))
+ (substitute* "openjdk.src/hotspot/test/test_env.sh"
+ (("/bin/rm") (which "rm"))
+ (("/bin/cp") (which "cp"))
+ (("/bin/mv") (which "mv")))
+ #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))
+ #t))
+ ;; 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 (extract-cert file target)
+ (call-with-input-file file
+ (lambda (in)
+ (call-with-output-file target
+ (lambda (out)
+ (let loop ((line (read-line in 'concat))
+ (copying? #f))
+ (cond
+ ((eof-object? line) #t)
+ ((string-prefix? "-----BEGIN" line)
+ (display line out)
+ (loop (read-line in 'concat) #t))
+ ((string-prefix? "-----END" line)
+ (display line out)
+ #t)
+ (else
+ (when copying? (display line out))
+ (loop (read-line in 'concat) copying?)))))))))
+ (define (import-cert cert)
+ (format #t "Importing certificate ~a\n" (basename cert))
+ (let ((temp "tmpcert"))
+ (extract-cert cert temp)
+ (let ((port (open-pipe* OPEN_WRITE keytool
+ "-import"
+ "-alias" (basename cert)
+ "-keystore" keystore
+ "-storepass" "changeit"
+ "-file" temp)))
+ (display "yes\n" port)
+ (when (not (zero? (status:exit-val (close-pipe port))))
+ (format #t "failed to import ~a\n" cert)))
+ (delete-file temp)))
+
+ ;; 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"))
+
+ ;; The cacerts files we are going to overwrite are chmod'ed as
+ ;; read-only (444) in icedtea-8 (which derives from this
+ ;; package). We have to change this so we can overwrite them.
+ (chmod (string-append (assoc-ref outputs "out")
+ "/lib/security/" keystore) #o644)
+ (chmod (string-append (assoc-ref outputs "jdk")
+ "/jre/lib/security/" keystore) #o644)
+
+ (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
`(("openjdk-src"
,(drop "openjdk"
@@ -956,11 +784,55 @@ build process and its dependencies, whereas Make uses Makefile format.")
("hotspot-drop"
,(drop "hotspot"
"16ijxy8br8dla339m4i90wr9xpf7s8z3nrhfyxm7jahr8injpzyl"))
- ,@(fold alist-delete (package-native-inputs icedtea-6)
- '("openjdk6-src"))))
+ ("ant" ,ant)
+ ("attr" ,attr)
+ ("autoconf" ,autoconf)
+ ("automake" ,automake)
+ ("coreutils" ,coreutils)
+ ("diffutils" ,diffutils) ;for tests
+ ("gawk" ,gawk)
+ ("grep" ,grep)
+ ("libtool" ,libtool)
+ ("pkg-config" ,pkg-config)
+ ("wget" ,wget)
+ ("which" ,which)
+ ("cpio" ,cpio)
+ ("zip" ,zip)
+ ("unzip" ,unzip)
+ ("fastjar" ,fastjar)
+ ("libxslt" ,libxslt) ;for xsltproc
+ ("nss-certs" ,nss-certs)
+ ("perl" ,perl)
+ ("procps" ,procps) ;for "free", even though I'm not sure we should use it
+ ("gcj" ,gcj)))
(inputs
- `(("libxcomposite" ,libxcomposite)
- ,@(package-inputs icedtea-6))))))
+ `(("alsa-lib" ,alsa-lib)
+ ("cups" ,cups)
+ ("libx11" ,libx11)
+ ("libxcomposite" ,libxcomposite)
+ ("libxt" ,libxt)
+ ("libxtst" ,libxtst)
+ ("libxi" ,libxi)
+ ("libxinerama" ,libxinerama)
+ ("libxrender" ,libxrender)
+ ("libjpeg" ,libjpeg)
+ ("libpng" ,libpng)
+ ("mit-krb5" ,mit-krb5)
+ ("nss" ,nss)
+ ("giflib" ,giflib)
+ ("fontconfig" ,fontconfig)
+ ("freetype" ,freetype)
+ ("lcms" ,lcms)
+ ("zlib" ,zlib)
+ ("gtk" ,gtk+-2)))
+ (home-page "http://icedtea.classpath.org")
+ (synopsis "Java development kit")
+ (description
+ "This package provides the Java development kit 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+))))
(define-public icedtea-8
(let* ((version "3.3.0")