From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ricardo Wurmus Subject: [PATCH]: Add IcedTea 6 Date: Tue, 27 Jan 2015 16:33:04 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:54314) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YG88l-00065M-81 for guix-devel@gnu.org; Tue, 27 Jan 2015 10:33:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YG88h-0001eh-0b for guix-devel@gnu.org; Tue, 27 Jan 2015 10:33:19 -0500 Received: from venus.bbbm.mdc-berlin.de ([141.80.25.30]:38335) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YG88g-0001eL-A0 for guix-devel@gnu.org; Tue, 27 Jan 2015 10:33:14 -0500 Received: from localhost (localhost [127.0.0.1]) by venus.bbbm.mdc-berlin.de (Postfix) with ESMTP id 18AAC380A4B for ; Tue, 27 Jan 2015 16:33:12 +0100 (CET) Received: from venus.bbbm.mdc-berlin.de ([127.0.0.1]) by localhost (venus.bbbm.mdc-berlin.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id csHzqzWpYzGm for ; Tue, 27 Jan 2015 16:33:05 +0100 (CET) Received: from HTCATWO.mdc-berlin.net (mab.citx.mdc-berlin.de [141.80.36.102]) by venus.bbbm.mdc-berlin.de (Postfix) with ESMTP for ; Tue, 27 Jan 2015 16:33:05 +0100 (CET) List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel --=-=-= Content-Type: text/plain Hi Guix, attached is a patch that gives us the liberated OpenJDK in the form of IcedTea (version 6). IcedTea 6 is built with GCJ. Unfortunately, it needs Ant, which cannot be built with GCJ, so it depends on a binary bootstrap Ant. There are a couple of issues with this patch set that I'm aware of: * IcedTea 6 is built without JavaScript support as this would require Rhino. * I'm not happy with replacing the unpack phase and I don't like to refer to the OpenJDK source tarball by its full name "openjdk-6-src-b34-20_jan_2015.tar.xz". Is there a way around this? * The test suite has been disabled. I have been able to fix most issues relating to the build environment (mostly hardcoded paths and corrupted PATH variable), but even then many tests fail. One group of tests depends on a shell wrapper around Xvfb, which is currently not part of the xorg-server package. A considerable number of tests fails upstream (see http://builder.classpath.org/icedtea/icedtea6/test/ for logs). * All this patching of tests is really not pretty. I'm not sure if there's a better or more concise way to achieve this. I also don't know which of these steps should better be implemented as snippets. * The patch to openjdk/jdk/src/share/classes/java/util/CurrencyData.properties really should be implemented upstream. * the make check-* targets do not return a non-zero status code upon failure. This doesn't affect us now because tests are disabled anyway, but using (and (zero? ...)) is just wishful thinking. * the synopsis tells us about IcedTea (the build harness), but actually what we get after the build is a liberated OpenJDK. The same problem affects the description, which probably should describe the purpose of OpenJDK instead. I would be happy to receive comments on the above issues (or others that you find with the patch). ~~ Ricardo --=-=-= Content-Type: text/x-patch; charset="utf-8" Content-Disposition: attachment; filename="0001-gnu-Add-IcedTea-6.patch" Content-Transfer-Encoding: quoted-printable >From 13490591fe7ad774e8ec95626113138d828366fb Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Tue, 23 Dec 2014 12:32:25 +0100 Subject: [PATCH] gnu: Add IcedTea 6 * gnu/packages/java.scm: New file. * gnu-system.am (GNU_SYSTEM_MODULES): Add it. --- gnu-system.am | 1 + gnu/packages/java.scm | 407 ++++++++++++++++++++++++++++++++++++++++++++= ++++++ 2 files changed, 408 insertions(+) create mode 100644 gnu/packages/java.scm diff --git a/gnu-system.am b/gnu-system.am index 5fc42ba..6e6e221 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -147,6 +147,7 @@ GNU_SYSTEM_MODULES =3D \ 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 0000000..f0ac63e --- /dev/null +++ b/gnu/packages/java.scm @@ -0,0 +1,407 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright =C2=A9 2015 Ricardo Wurmus +;;; +;;; 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 (a= t +;;; 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 . + +(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/icedt= ea6-" + version ".tar.xz")) + (sha256 + (base32 + "16ac3f7kkln5skg202vllagkhjxrwd47h56diwzhfidhwjlz7410"))= )) + (build-system gnu-build-system) + (arguments + `(;; There are many failing tests. + ;; + ;; * 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 + ;; =3D> Test results: passed: 161; failed: 4 + ;; + ;; * langtools tests: + ;; FAILED: com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDe= finitionListTag.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 + ;; =3D> 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=3D21= 88 + ;; + ;; The tests require xvfb-run, a wrapper script around Xvfb, wh= ich + ;; 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 le= ast + ;; 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=3D" "./openjdk") + ,(string-append "--with-javac=3D" jdk "/bin/javac") + ,(string-append "--with-ecj-jar=3D" ecj) + ,(string-append "--with-gcj=3D" gcj) + ,(string-append "--with-jdk-home=3D" jdk) + ,(string-append "--with-java=3D" jdk "/bin/java"))) + #:phases + (alist-replace + 'unpack + (lambda* (#:key source inputs #:allow-other-keys) + (let ((target (string-append ,name "-" ,version))) + (and (zero? (system* "tar" "xvf" source)) + (zero? (system* "tar" "xvjf" (assoc-ref inputs "ant-boo= tstrap"))) + (chdir target)) + (mkdir "openjdk") + (with-directory-excursion "openjdk" + (copy-file (assoc-ref inputs "openjdk6-src") + "openjdk-6-src-b34-20_jan_2015.tar.xz") + (system* "tar" "xvf" "openjdk-6-src-b34-20_jan_2015.tar.xz= ")))) + (alist-cons-after + 'unpack 'patch-paths + (lambda _ + (patch-shebang "../apache-ant-1.9.4/bin/ant") + + (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=3D\"\\$\\(DIST_ID\\)\"") + "DISTRIBUTION_ID=3D\"\\\"guix\\\"\"")) + + ;; shebang in patches so that they apply cleanly + (substitute* '("patches/jtreg-jrunscript.patch" + "patches/hotspot/hs23/drop_unlicensed_test.pat= ch") + (("#!/bin/sh") (string-append "#!" (which "sh")))) + + ;; fix path to alsa header in patch + (substitute* "patches/openjdk/6799141-split_out_versions.patc= h" + (("ALSA_INCLUDE=3D/usr/include/alsa/version.h") + (string-append "ALSA_INCLUDE=3D" + (assoc-ref %build-inputs "alsa-lib") + "/include/alsa/version.h"))) + + ;; buildtree.make generates shell scripts, so we need to repl= ace + ;; the generated shebang + (substitute* '("openjdk/hotspot/make/linux/makefiles/buildtre= e.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.g= mk" + "openjdk/corba/make/common/shared/Defs-linux= .gmk") + (("UNIXCOMMAND_PATH =3D /bin/") + (string-append "UNIXCOMMAND_PATH =3D " corebin)) + (("USRBIN_PATH =3D /usr/bin/") + (string-append "USRBIN_PATH =3D " corebin)) + (("DEVTOOLS_PATH *=3D */usr/bin/") + (string-append "DEVTOOLS_PATH =3D " corebin)) + (("COMPILER_PATH *=3D */usr/bin/") + (string-append "COMPILER_PATH =3D " + (assoc-ref %build-inputs "gcc") "/bin/"))= ) + + ;; fix hard-coded utility paths + (substitute* '("openjdk/jdk/make/common/shared/Defs-utils.g= mk" + "openjdk/corba/make/common/shared/Defs-utils= .gmk") + (("ECHO *=3D.*echo") + (string-append "ECHO =3D " (which "echo"))) + (("^GREP *=3D.*grep") + (string-append "GREP =3D " (which "grep"))) + (("EGREP *=3D.*egrep") + (string-append "EGREP =3D " (which "egrep"))) + (("CPIO *=3D.*cpio") + (string-append "CPIO =3D " (which "cpio"))) + (("READELF *=3D.*readelf") + (string-append "READELF =3D " (which "readelf"))) + (("^ *AR *=3D.*ar") + (string-append "AR =3D " (which "ar"))) + (("^ *TAR *=3D.*tar") + (string-append "TAR =3D " (which "tar"))) + (("AS *=3D.*as") + (string-append "AS =3D " (which "as"))) + (("LD *=3D.*ld") + (string-append "LD =3D " (which "ld"))) + (("STRIP *=3D.*strip") + (string-append "STRIP =3D " (which "strip"))) + (("NM *=3D.*nm") + (string-append "NM =3D " (which "nm"))) + (("^SH *=3D.*sh") + (string-append "SH =3D " (which "bash"))) + (("^FIND *=3D.*find") + (string-append "FIND =3D " (which "find"))) + (("LDD *=3D.*ldd") + (string-append "LDD =3D " (which "ldd"))) + (("NAWK *=3D.*nawk") + (string-append "NAWK =3D " (which "gawk"))) + (("NAWK *=3D.*gawk") + (string-append "NAWK =3D " (which "gawk"))) + (("XARGS *=3D.*xargs") + (string-append "XARGS =3D " (which "xargs"))) + (("UNZIP *=3D.*unzip") + (string-append "UNZIP =3D " (which "unzip"))) + (("ZIPEXE *=3D.*zip") + (string-append "ZIPEXE =3D " (which "zip"))) + (("SED *=3D.*sed") + (string-append "SED =3D " (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.p= roperties" + (("AZ=3DAZM;2005-12-31-20-00-00;AZN") "AZ=3DAZN") + (("MZ=3DMZM;2006-06-30-22-00-00;MZN") "MZ=3DMZN") + (("RO=3DROL;2005-06-30-21-00-00;RON") "RO=3DRON") + (("TR=3DTRL;2004-12-31-22-00-00;TRY") "TR=3DTRY")))) + (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 "libxrend= er") + "/include/X11/extensions" ":" + (assoc-ref %build-inputs "libxtst"= ) + "/include/X11/extensions" ":" + (assoc-ref %build-inputs "libxiner= ama") + "/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=3D/bin:/usr/bin") + (string-append "PATH=3D" (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=3D\"\\$\\{path4sdk\\}\"") + (string-append "PATH=3D" (getenv "PATH"))) + (("make=3D/usr/bin/make") + (string-append "make=3D" (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/StreamsSurviveDestr= oy.java" + (("/bin/cat") (which "cat"))) + (substitute* "java/rmi/activation/CommandEnvironment/Set= ChildEnv.java" + (("/bin/chmod") (which "chmod"))) + (substitute* "java/util/zip/ZipFile/Assortment.java" + (("/bin/sh") (which "sh"))))) + (alist-replace + 'check + (lambda _ + (and (zero? (system* "make" "check-hotspot")) + (zero? (system* "make" "check-langtools")) + (zero? (system* "make" "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 shoul= d use it + ("openjdk6-src" + ,(origin + (method url-fetch) + (uri "https://java.net/downloads/openjdk6/openjdk-6-src-b34-2= 0_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 "A harness to build OpenJDK using Free Software build tool= s") + (description + "The IcedTea project provides a harness to build the source code fr= om +http://openjdk.java.net using Free Software build tools along with addit= ional +features such as a Free Software plugin and web start implementation and= an +LLVM-based JIT.") + ;; IcedTea is released under the GPL2 + Classpath exception, which i= s the + ;; same license as both GNU Classpath and OpenJDK. + (license license:gpl2+))) --=20 1.9.3 --=-=-=--