#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix hg-download)
+ #:use-module (guix git-download)
#:use-module (guix utils)
#:use-module (guix build-system ant)
#:use-module (guix build-system gnu)
#:use-module (gnu packages compression)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gawk)
+ #:use-module (gnu packages gettext)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gl)
#:use-module (gnu packages gnuzilla) ;nss
#:use-module (gnu packages guile)
#:use-module (gnu packages icu4c)
#:use-module (gnu packages image)
+ #:use-module (gnu packages libffi)
#:use-module (gnu packages linux) ;alsa
#:use-module (gnu packages wget)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages perl)
+ #:use-module (gnu packages popt)
#:use-module (gnu packages kerberos)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
- #:use-module (gnu packages zip)
#:use-module (gnu packages texinfo)
#:use-module ((srfi srfi-1) #:select (fold alist-delete))
#:use-module (srfi srfi-11)
"1jyg4bsym6igz94wps5443c7wiwlzinqzkchcw972nz4kf1cql6g"))))
(build-system gnu-build-system)
(arguments
- `(#:phases
+ `(#:configure-flags
+ (list "--with-internal-libffi=no"
+ "--with-internal-libpopt=no")
+ #:phases
(modify-phases %standard-phases
+ (add-after 'unpack 'remove-timestamp-for-reproducibility
+ (lambda _
+ (substitute* "src/sablevm/Makefile.in"
+ (("\\$\\(SVMCOMPILETIME\\)") "(unknown)"))
+ #t))
+ (add-after 'unpack 'link-with-popt
+ (lambda _
+ (substitute* "src/sablevm/Makefile.in"
+ (("\\$\\(SVMADD\\)" match)
+ (string-append match " -lpopt")))
+ #t))
(add-after 'unpack 'patch-path-to-classpath
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "Makefile.in"
(inputs
`(("classpath" ,sablevm-classpath)
("jikes" ,jikes)
- ("zlib" ,zlib)))
+ ("zlib" ,zlib)
+ ("popt" ,popt)
+ ("libffi" ,libffi)))
(native-inputs
`(("libltdl" ,libltdl)))
(home-page "http://sablevm.org/")
the GNU Classpath library. They are executed by the JamVM virtual
machine.")))
-(define-public java-swt
- (package
- (name "java-swt")
- (version "4.6")
- (source
- ;; The types of many variables and procedures differ in the sources
- ;; dependent on whether the target architecture is a 32-bit system or a
- ;; 64-bit system. Instead of patching the sources on demand in a build
- ;; phase we download either the 32-bit archive (which mostly uses "int"
- ;; types) or the 64-bit archive (which mostly uses "long" types).
- (let ((hash32 "0jmx1h65wqxsyjzs64i2z6ryiynllxzm13cq90fky2qrzagcw1ir")
- (hash64 "0wnd01xssdq9pgx5xqh5lfiy3dmk60dzzqdxzdzf883h13692lgy")
- (file32 "x86")
- (file64 "x86_64"))
- (let-values (((hash file)
- (match (or (%current-target-system) (%current-system))
- ("x86_64-linux" (values hash64 file64))
- (_ (values hash32 file32)))))
- (origin
- (method url-fetch)
- (uri (string-append
- "http://ftp-stud.fht-esslingen.de/pub/Mirrors/"
- "eclipse/eclipse/downloads/drops4/R-" version
- "-201606061100/swt-" version "-gtk-linux-" file ".zip"))
- (sha256 (base32 hash))))))
- (build-system ant-build-system)
+(define ecj-javac-on-jamvm-wrapper
+ (package (inherit ecj-javac-wrapper)
+ (name "ecj-javac-on-jamvm-wrapper")
(arguments
- `(#:jar-name "swt.jar"
- #:tests? #f ; no "check" target
- #:phases
- (modify-phases %standard-phases
- (replace 'unpack
- (lambda* (#:key source #:allow-other-keys)
- (and (mkdir "swt")
- (zero? (system* "unzip" source "-d" "swt"))
- (chdir "swt")
- (mkdir "src")
- (zero? (system* "unzip" "src.zip" "-d" "src")))))
- ;; The classpath contains invalid icecat jars. Since we don't need
- ;; anything other than the JDK on the classpath, we can simply unset
- ;; it.
- (add-after 'configure 'unset-classpath
- (lambda _ (unsetenv "CLASSPATH") #t))
- (add-before 'build 'build-native
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
- ;; Build shared libraries. Users of SWT have to set the system
- ;; property swt.library.path to the "lib" directory of this
- ;; package output.
- (mkdir-p lib)
- (setenv "OUTPUT_DIR" lib)
- (with-directory-excursion "src"
- (zero? (system* "bash" "build.sh"))))))
- (add-after 'install 'install-native
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
- (for-each (lambda (file)
- (install-file file lib))
- (find-files "." "\\.so$"))
- #t))))))
- (inputs
- `(("xulrunner" ,icecat)
- ("gtk" ,gtk+-2)
- ("libxtst" ,libxtst)
- ("libxt" ,libxt)
- ("mesa" ,mesa)
- ("glu" ,glu)))
+ `(#:modules ((guix build utils))
+ #:builder
+ ;; TODO: This builder is exactly the same as in ecj-javac-wrapper,
+ ;; except that the backend is 'jamvm here. Can we reuse the same
+ ;; builder somehow?
+ (let ((backend 'jamvm))
+ (use-modules (guix build utils))
+ (let* ((bin (string-append (assoc-ref %outputs "out") "/bin"))
+ (target (string-append bin "/javac"))
+ (guile (string-append (assoc-ref %build-inputs "guile")
+ "/bin/guile"))
+ (ecj (string-append (assoc-ref %build-inputs "ecj-bootstrap")
+ "/share/java/ecj-bootstrap.jar"))
+ (java (case backend
+ ((sablevm)
+ (string-append (assoc-ref %build-inputs "sablevm")
+ "/lib/sablevm/bin/java"))
+ ((jamvm)
+ (string-append (assoc-ref %build-inputs "jamvm")
+ "/bin/jamvm"))))
+ (bootcp (case backend
+ ((sablevm)
+ (let ((jvmlib (string-append
+ (assoc-ref %build-inputs "sablevm-classpath")
+ "/lib/sablevm")))
+ (string-append jvmlib "/jre/lib/rt.jar")))
+ ((jamvm)
+ (let ((jvmlib (string-append (assoc-ref %build-inputs "classpath")
+ "/share/classpath")))
+ (string-append jvmlib "/lib/glibj.zip:"
+ jvmlib "/lib/tools.zip"))))))
+ (mkdir-p bin)
+ (with-output-to-file target
+ (lambda _
+ (format #t "#!~a --no-auto-compile\n!#\n" guile)
+ (write
+ `(begin (use-modules (ice-9 match)
+ (ice-9 receive)
+ (ice-9 hash-table)
+ (srfi srfi-1)
+ (srfi srfi-26))
+ (define defaults
+ '(("-bootclasspath" ,bootcp)
+ ("-source" "1.5")
+ ("-target" "1.5")
+ ("-cp" ".")))
+ (define (main args)
+ (let ((classpath (getenv "CLASSPATH")))
+ (setenv "CLASSPATH"
+ (string-append ,ecj
+ (if classpath
+ (string-append ":" classpath)
+ ""))))
+ (receive (vm-args other-args)
+ ;; Separate VM arguments from arguments to ECJ.
+ (partition (cut string-prefix? "-J" <>)
+ (fold (lambda (default acc)
+ (if (member (first default) acc)
+ acc (append default acc)))
+ args defaults))
+ (apply system* ,java
+ (append
+ ;; Remove "-J" prefix
+ (map (cut string-drop <> 2) vm-args)
+ '("org.eclipse.jdt.internal.compiler.batch.Main")
+ (cons "-nowarn" other-args)))))
+ ;; Entry point
+ (let ((args (cdr (command-line))))
+ (if (null? args)
+ (format (current-error-port) "javac: no arguments given!\n")
+ (main args)))))))
+ (chmod target #o755)
+ #t))))
(native-inputs
- `(("pkg-config" ,pkg-config)
- ("unzip" ,unzip)))
- (home-page "https://www.eclipse.org/swt/")
- (synopsis "Widget toolkit for Java")
- (description
- "SWT is a widget toolkit for Java designed to provide efficient, portable
-access to the user-interface facilities of the operating systems on which it
-is implemented.")
- ;; SWT code is licensed under EPL1.0
- ;; Gnome and Gtk+ bindings contain code licensed under LGPLv2.1
- ;; Cairo bindings contain code under MPL1.1
- ;; XULRunner 1.9 bindings contain code under MPL2.0
- (license (list
- license:epl1.0
- license:mpl1.1
- license:mpl2.0
- license:lgpl2.1+))))
-
-(define-public clojure
- (let* ((remove-archives '(begin
- (for-each delete-file
- (find-files "." ".*\\.(jar|zip)"))
- #t))
- (submodule (lambda (prefix version hash)
- (origin
- (method url-fetch)
- (uri (string-append "https://github.com/clojure/"
- prefix version ".tar.gz"))
- (sha256 (base32 hash))
- (modules '((guix build utils)))
- (snippet remove-archives)))))
- (package
- (name "clojure")
- (version "1.8.0")
- (source
- (origin
- (method url-fetch)
- (uri
- (string-append "http://repo1.maven.org/maven2/org/clojure/clojure/"
- version "/clojure-" version ".zip"))
- (sha256
- (base32 "1nip095fz5c492sw15skril60i1vd21ibg6szin4jcvyy3xr6cym"))
- (modules '((guix build utils)))
- (snippet remove-archives)))
- (build-system ant-build-system)
+ `(("guile" ,guile-2.2)
+ ("ecj-bootstrap" ,ecj-bootstrap)
+ ("jamvm" ,jamvm-bootstrap)
+ ("classpath" ,classpath-on-sablevm)))
+ (description "This package provides a wrapper around the @dfn{Eclipse
+compiler for Java} (ecj) with a command line interface that is compatible with
+the standard javac executable. The tool runs on JamVM instead of SableVM.")))
+
+;; The last release of GNU Classpath is 0.99 and it happened in 2012. Since
+;; then Classpath has gained much more support for Java 1.6.
+(define-public classpath-devel
+ (let ((commit "e7c13ee0cf2005206fbec0eca677f8cf66d5a103")
+ (revision "1"))
+ (package (inherit classpath-on-sablevm)
+ (version (string-append "0.99-" revision "." (string-take commit 9)))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.savannah.gnu.org/git/classpath.git")
+ (commit commit)))
+ (file-name (string-append "classpath-" version "-checkout"))
+ (sha256
+ (base32
+ "1v2rww76ww322mpg3s12a1kkc6gkp31bm9gcxs532h0wq285fiw4"))))
(arguments
- `(#:modules ((guix build ant-build-system)
- (guix build utils)
- (ice-9 ftw)
- (ice-9 regex)
- (srfi srfi-1)
- (srfi srfi-26))
- #:test-target "test"
+ `(#:make-flags
+ ;; Ensure that the initial heap size is smaller than the maximum
+ ;; size. By default only Xmx is set, which can lead to invalid
+ ;; memory settings on some machines with a lot of memory.
+ '("JAVAC_MEM_OPT=-J-Xms512M -J-Xmx768M")
+ #:configure-flags
+ (list (string-append "--with-ecj-jar="
+ (assoc-ref %build-inputs "ecj-bootstrap")
+ "/share/java/ecj-bootstrap.jar")
+ (string-append "--with-javac="
+ (assoc-ref %build-inputs "ecj-javac-wrapper")
+ "/bin/javac")
+ (string-append "JAVA="
+ (assoc-ref %build-inputs "jamvm")
+ "/bin/jamvm")
+ "GCJ_JAVAC_TRUE=no"
+ "ac_cv_prog_java_works=yes" ; trust me
+ "--disable-Werror"
+ "--disable-gmp"
+ "--disable-gtk-peer"
+ "--disable-gconf-peer"
+ "--disable-plugin"
+ "--disable-dssi"
+ "--disable-alsa"
+ "--disable-gjdoc")
#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'unpack-submodule-sources
- (lambda* (#:key inputs #:allow-other-keys)
- (for-each
- (lambda (name)
- (mkdir-p name)
- (with-directory-excursion name
- (or (zero? (system* "tar"
- ;; Use xz for repacked tarball.
- "--xz"
- "--extract"
- "--verbose"
- "--file" (assoc-ref inputs name)
- "--strip-components=1"))
- (error "failed to unpack tarball" name)))
- (copy-recursively (string-append name "/src/main/clojure/")
- "src/clj/"))
- '("data-generators-src"
- "java-classpath-src"
- "test-check-src"
- "test-generative-src"
- "tools-namespace-src"
- "tools-reader-src"))
- #t))
- ;; The javadoc target is not built by default.
- (add-after 'build 'build-doc
+ (add-after 'unpack 'bootstrap
(lambda _
- (zero? (system* "ant" "javadoc"))))
- ;; Needed since no install target is provided.
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((java-dir (string-append (assoc-ref outputs "out")
- "/share/java/")))
- ;; Install versioned to avoid collisions.
- (install-file (string-append "clojure-" ,version ".jar")
- java-dir)
- #t)))
- ;; Needed since no install-doc target is provided.
- (add-after 'install 'install-doc
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((doc-dir (string-append (assoc-ref outputs "out")
- "/share/doc/clojure-"
- ,version "/")))
- (copy-recursively "doc/clojure" doc-dir)
- (copy-recursively "target/javadoc/"
- (string-append doc-dir "javadoc/"))
- (for-each (cut install-file <> doc-dir)
- (filter (cut string-match
- ".*\\.(html|markdown|md|txt)"
- <>)
- (scandir "./")))
- #t))))))
- ;; The native-inputs below are needed to run the tests.
+ (zero? (system* "autoreconf" "-vif"))))
+ (add-after 'unpack 'remove-unsupported-annotations
+ (lambda _
+ (substitute* (find-files "java" "\\.java$")
+ (("@Override") ""))
+ #t))
+ (add-after 'install 'install-data
+ (lambda _ (zero? (system* "make" "install-data")))))))
(native-inputs
- `(("data-generators-src"
- ,(submodule "data.generators/archive/data.generators-"
- "0.1.2"
- "0kki093jp4ckwxzfnw8ylflrfqs8b1i1wi9iapmwcsy328dmgzp1"))
- ("java-classpath-src"
- ,(submodule "java.classpath/archive/java.classpath-"
- "0.2.3"
- "0sjymly9xh1lkvwn5ygygpsfwz4dabblnlq0c9bx76rkvq62fyng"))
- ("test-check-src"
- ,(submodule "test.check/archive/test.check-"
- "0.9.0"
- "0p0mnyhr442bzkz0s4k5ra3i6l5lc7kp6ajaqkkyh4c2k5yck1md"))
- ("test-generative-src"
- ,(submodule "test.generative/archive/test.generative-"
- "0.5.2"
- "1pjafy1i7yblc7ixmcpfq1lfbyf3jaljvkgrajn70sws9xs7a9f8"))
- ("tools-namespace-src"
- ,(submodule "tools.namespace/archive/tools.namespace-"
- "0.2.11"
- "10baak8v0hnwz2hr33bavshm7y49mmn9zsyyms1dwjz45p5ymhy0"))
- ("tools-reader-src"
- ,(submodule "tools.reader/archive/tools.reader-"
- "0.10.0"
- "09i3lzbhr608h76mhdjm3932gg9xi8sflscla3c5f0v1nkc28cnr"))))
- (home-page "https://clojure.org/")
- (synopsis "Lisp dialect running on the JVM")
- (description "Clojure is a dynamic, general-purpose programming language,
-combining the approachability and interactive development of a scripting
-language with an efficient and robust infrastructure for multithreaded
-programming. Clojure is a compiled language, yet remains completely dynamic
-– every feature supported by Clojure is supported at runtime. Clojure
-provides easy access to the Java frameworks, with optional type hints and type
-inference, to ensure that calls to Java can avoid reflection.
+ `(("autoconf" ,autoconf)
+ ("automake" ,automake)
+ ("libtool" ,libtool)
+ ("gettext" ,gettext-minimal)
+ ("texinfo" ,texinfo)
+ ("classpath-jamvm-wrappers" ,classpath-jamvm-wrappers) ; for javah
+ ("ecj-bootstrap" ,ecj-bootstrap)
+ ("ecj-javac-wrapper" ,ecj-javac-on-jamvm-wrapper)
+ ("fastjar" ,fastjar)
+ ("jamvm" ,jamvm-bootstrap)
+ ("libltdl" ,libltdl)
+ ("pkg-config" ,pkg-config))))))
-Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy
-and a powerful macro system. Clojure is predominantly a functional programming
-language, and features a rich set of immutable, persistent data structures.
-When mutable state is needed, Clojure offers a software transactional memory
-system and reactive Agent system that ensure clean, correct, multithreaded
-designs.")
- ;; Clojure is licensed under EPL1.0
- ;; ASM bytecode manipulation library is licensed under BSD-3
- ;; Guava Murmur3 hash implementation is licensed under APL2.0
- ;; src/clj/repl.clj is licensed under CPL1.0
- ;;
- ;; See readme.html or readme.txt for details.
- (license (list license:epl1.0
- license:bsd-3
- license:asl2.0
- license:cpl1.0)))))
+(define-public jamvm
+ (package (inherit jamvm-bootstrap)
+ (inputs
+ `(("classpath" ,classpath-devel)
+ ("ecj-javac-wrapper" ,ecj-javac-on-jamvm-wrapper)
+ ("zlib" ,zlib)))))
-(define-public ant
+(define ecj-javac-on-jamvm-wrapper-final
+ (package (inherit ecj-javac-on-jamvm-wrapper)
+ (native-inputs
+ `(("guile" ,guile-2.2)
+ ("ecj-bootstrap" ,ecj-bootstrap)
+ ("jamvm" ,jamvm)
+ ("classpath" ,classpath-devel)))))
+
+;; The bootstrap JDK consisting of jamvm, classpath-devel,
+;; ecj-javac-on-jamvm-wrapper-final cannot build Icedtea 2.x directly, because
+;; it's written in Java 7. It can, however, build the unmaintained Icedtea
+;; 1.x, which uses Java 6 only.
+(define-public icedtea-6
(package
- (name "ant")
- ;; The 1.9.x series is the last that can be built with GCJ. The 1.10.x
- ;; series requires Java 8.
- (version "1.9.9")
+ (name "icedtea")
+ (version "1.13.13")
(source (origin
(method url-fetch)
- (uri (string-append "mirror://apache/ant/source/apache-ant-"
- version "-src.tar.gz"))
+ (uri (string-append
+ "http://icedtea.wildebeest.org/download/source/icedtea6-"
+ version ".tar.xz"))
(sha256
(base32
- "1k28mka0m3isy9yr8gz84kz1f3f879rwaxrd44vdn9xbfwvwk86n"))))
+ "0bg9sb4f7qbq77c0zf9m17p47ga0kf0r9622g9p12ysg26jd1ksg"))
+ (modules '((guix build utils)))
+ (snippet
+ '(substitute* "Makefile.in"
+ ;; 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
- `(#:tests? #f ; no "check" target
+ `(;; There are many failing tests and many are known to fail upstream.
+ #: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)
+ (srfi srfi-19))
+
+ #:configure-flags
+ `("--enable-bootstrap"
+ "--enable-nss"
+ "--without-rhino"
+ "--with-parallel-jobs"
+ "--disable-downloading"
+ "--disable-tests"
+ ,(string-append "--with-ecj="
+ (assoc-ref %build-inputs "ecj")
+ "/share/java/ecj-bootstrap.jar")
+ ,(string-append "--with-jar="
+ (assoc-ref %build-inputs "fastjar")
+ "/bin/fastjar")
+ ,(string-append "--with-jdk-home="
+ (assoc-ref %build-inputs "classpath"))
+ ,(string-append "--with-java="
+ (assoc-ref %build-inputs "jamvm")
+ "/bin/jamvm"))
#:phases
- (alist-cons-after
- 'unpack 'remove-scripts
- ;; Remove bat / cmd scripts for DOS as well as the antRun and runant
- ;; wrappers.
- (lambda _
- (for-each delete-file
- (find-files "src/script"
- "(.*\\.(bat|cmd)|runant.*|antRun.*)")))
- (alist-replace
- 'build
- (lambda _
- (setenv "JAVA_HOME" (string-append (assoc-ref %build-inputs "gcj")
- "/lib/jvm"))
- ;; Disable tests to avoid dependency on hamcrest-core, which needs
- ;; Ant to build. This is necessary in addition to disabling the
- ;; "check" phase, because the dependency on "test-jar" would always
- ;; result in the tests to be run.
- (substitute* "build.xml"
- (("depends=\"jars,test-jar\"") "depends=\"jars\""))
- (zero? (system* "bash" "bootstrap.sh"
- (string-append "-Ddist.dir="
- (assoc-ref %outputs "out")))))
- (alist-delete
- 'configure
- (alist-delete 'install %standard-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")
+ (copy-recursively (assoc-ref inputs "openjdk-src") "openjdk")
+ ;; The convenient OpenJDK source bundle is no longer
+ ;; available for download, so we have to take the sources
+ ;; from the Mercurial repositories and change the Makefile
+ ;; to avoid tests for the OpenJDK zip archive.
+ (with-directory-excursion "openjdk"
+ (for-each (lambda (part)
+ (mkdir part)
+ (copy-recursively
+ (assoc-ref inputs
+ (string-append part "-src"))
+ part))
+ '("jdk" "hotspot" "corba"
+ "langtools" "jaxp" "jaxws")))
+ (substitute* "Makefile.in"
+ (("echo \"ERROR: No up-to-date OpenJDK zip available\"; exit -1;")
+ "echo \"trust me\";")
+ ;; The contents of the bootstrap directory must be
+ ;; writeable but when copying from the store they are
+ ;; not.
+ (("mkdir -p lib/rt" line)
+ (string-append line "; chmod -R u+w $(BOOT_DIR)")))
+ (zero? (system* "chmod" "-R" "u+w" "openjdk"))
+ #t))))
+ (add-after 'unpack 'use-classpath
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((jvmlib (assoc-ref inputs "classpath")))
+ ;; Classpath does not provide rt.jar.
+ (substitute* "Makefile.in"
+ (("\\$\\(SYSTEM_JDK_DIR\\)/jre/lib/rt.jar")
+ (string-append jvmlib "/share/classpath/glibj.zip")))
+ ;; Make sure we can find all classes.
+ (setenv "CLASSPATH"
+ (string-append jvmlib "/share/classpath/glibj.zip:"
+ jvmlib "/share/classpath/tools.zip"))
+ (setenv "JAVACFLAGS"
+ (string-append "-cp "
+ jvmlib "/share/classpath/glibj.zip:"
+ jvmlib "/share/classpath/tools.zip")))
+ #t))
+ (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* (#:key inputs #:allow-other-keys)
+ ;; 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 inputs "coreutils") "/bin/"))
+ (binbin (string-append
+ (assoc-ref inputs "binutils") "/bin/"))
+ (grepbin (string-append
+ (assoc-ref 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 inputs "gcc") "/bin/"))
+ (("DEF_OBJCOPY *=.*objcopy")
+ (string-append "DEF_OBJCOPY = " (which "objcopy"))))
+
+ ;; fix path to alsa header
+ (substitute* "openjdk/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")))
+
+ ;; 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")))
+ (("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"))
+ #t)))
+ (add-before 'configure 'set-additional-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (setenv "CPATH"
+ (string-append (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_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))
+ (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)))))
(native-inputs
- `(("gcj" ,gcj)))
- (home-page "http://ant.apache.org")
- (synopsis "Build tool for Java")
+ `(("ant" ,ant-bootstrap)
+ ("alsa-lib" ,alsa-lib)
+ ("attr" ,attr)
+ ("classpath" ,classpath-devel)
+ ("coreutils" ,coreutils)
+ ("cpio" ,cpio)
+ ("cups" ,cups)
+ ("ecj" ,ecj-bootstrap)
+ ("ecj-javac" ,ecj-javac-on-jamvm-wrapper-final)
+ ("fastjar" ,fastjar)
+ ("fontconfig" ,fontconfig)
+ ("freetype" ,freetype)
+ ("gtk" ,gtk+-2)
+ ("gawk" ,gawk)
+ ("giflib" ,giflib)
+ ("grep" ,grep)
+ ("jamvm" ,jamvm)
+ ("lcms" ,lcms)
+ ("libjpeg" ,libjpeg)
+ ("libpng" ,libpng)
+ ("libtool" ,libtool)
+ ("libx11" ,libx11)
+ ("libxcomposite" ,libxcomposite)
+ ("libxi" ,libxi)
+ ("libxinerama" ,libxinerama)
+ ("libxrender" ,libxrender)
+ ("libxslt" ,libxslt) ;for xsltproc
+ ("libxt" ,libxt)
+ ("libxtst" ,libxtst)
+ ("mit-krb5" ,mit-krb5)
+ ("nss" ,nss)
+ ("nss-certs" ,nss-certs)
+ ("perl" ,perl)
+ ("pkg-config" ,pkg-config)
+ ("procps" ,procps) ;for "free", even though I'm not sure we should use it
+ ("unzip" ,unzip)
+ ("wget" ,wget)
+ ("which" ,which)
+ ("zip" ,zip)
+ ("zlib" ,zlib)
+ ("openjdk-src"
+ ,(origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "http://hg.openjdk.java.net/jdk6/jdk6/")
+ (changeset "jdk6-b41")))
+ (sha256
+ (base32
+ "14q47yfg586fs64w30g8mk92m5dkxsvr36zzh0ra99xk5x0x96mv"))))
+ ("jdk-src"
+ ,(origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "http://hg.openjdk.java.net/jdk6/jdk6/jdk/")
+ (changeset "jdk6-b41")))
+ (sha256
+ (base32
+ "165824nhg1k1dx6zs9dny0j49rmk35jw5b13dmz8c77jfajml4v9"))))
+ ("hotspot-src"
+ ,(origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "http://hg.openjdk.java.net/jdk6/jdk6/hotspot/")
+ (changeset "jdk6-b41")))
+ (sha256
+ (base32
+ "07lc1z4k5dj9nrc1wvwmpvxr3xgxrdkdh53xb95skk5ij49yagfd"))))
+ ("corba-src"
+ ,(origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "http://hg.openjdk.java.net/jdk6/jdk6/corba/")
+ (changeset "jdk6-b41")))
+ (sha256
+ (base32
+ "1p9g1r9dnax2iwp7yb59qx7m4nmshqhwmrb2b8jj8zgbd9dl2i3q"))))
+ ("langtools-src"
+ ,(origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "http://hg.openjdk.java.net/jdk6/jdk6/langtools/")
+ (changeset "jdk6-b41")))
+ (sha256
+ (base32
+ "1x52wd67fynbbd9ild6fb4wvba3f5hhwk03qdjfazd0a1qr37z3d"))))
+ ("jaxp-src"
+ ,(origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxp/")
+ (changeset "jdk6-b41")))
+ (sha256
+ (base32
+ "0shlqrvzpr4nrkmv215lbxnby63s3yvbdh1yxcayznsyqwa4nlxm"))))
+ ("jaxws-src"
+ ,(origin
+ (method hg-fetch)
+ (uri (hg-reference
+ (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxws/")
+ (changeset "jdk6-b41")))
+ (sha256
+ (base32
+ "0835lkw8vib1xhp8lxnybhlvzdh699hbi4mclxanydjk63zbpxk0"))))))
+ (home-page "http://icedtea.classpath.org")
+ (synopsis "Java development kit")
(description
- "Ant is a platform-independent build tool for Java. It is similar to
-make but is implemented using the Java language, requires the Java platform,
-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)))
+ "This package provides the OpenJDK built with the IcedTea build harness.
+This version of the OpenJDK is no longer maintained and is only used for
+bootstrapping purposes.")
+ ;; 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.10")
+ (let* ((version "2.6.11")
(drop (lambda (name hash)
(origin
(method url-fetch)
version ".tar.xz"))
(sha256
(base32
- "0am945k2zqrka2xn7lb5grmkad4lwncnhnwk8iq6f269birzsj8w"))
+ "1ibp6ybqnf8g7mbs45bkbv44dwz4h2w9gr4rh15yvr1m8lqkq1i0"))
(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\\\"\"")))))
(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")))
+ ;; 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-jdk-home="
+ (assoc-ref %build-inputs "jdk")))
#:phases
(modify-phases %standard-phases
#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")))
+ (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 (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 _
(native-inputs
`(("openjdk-src"
,(drop "openjdk"
- "02klsxp9hlf5sial6mxpiq53hmrhlrg6x774j7bjjfhb7hpdvadh"))
+ "1zhr4l9kxnbzghcsgjk3vmih9qpg1wrr9qry7fx04l97svp1ylhd"))
("corba-drop"
,(drop "corba"
- "1vbly6khri241xda05gnwkpf2fk41d96ls96ximi084mx0a3w5rd"))
+ "108v15ncb2rnsyzgzncjlm1f57d1sv60zd9qbpas8kqmvpp8r0gz"))
("jaxp-drop"
,(drop "jaxp"
- "0s8zln64vdwdxwlw1vpfzm8xbpyhgsv3nqjmnv7y36qpsszg27a5"))
+ "0zcpcmm3g1s7m31glrbw3ys7azi97ixcvbyxd40y9xzdja3jyr52"))
("jaxws-drop"
,(drop "jaxws"
- "0myd66bv8ib8krzgqv754bc564rd8xwpwabvf7my1apyb86vap3n"))
+ "1gkqm0p3sr8d0xpki3fhf7cvmgqxx8ambgl5f3jx2plfnhsg96d2"))
("jdk-drop"
,(drop "jdk"
- "10b4lfv10vba07zblw0wii7mhrfhf32pf7410x5nz2q0smgszl2h"))
+ "1d9fjnzdx4m6gwkvmj2n097ag0mvkhm3lldaxjki8x8c6a5clknf"))
("langtools-drop"
,(drop "langtools"
- "0lvncxb5qzrlqkflrnd0l8vwy155cwj1jb07rkq10z2vx0bq7lq2"))
+ "0zscdp9arcq7gr8j7jq4m75gq0w1i3ryxpdnrc8fl0msh4w2s2k5"))
("hotspot-drop"
,(drop "hotspot"
- "0q6mdgbbd3681y3n0z1v783irdjhhi73z6sn5csczpyhjm318axb"))
- ("ant" ,ant)
+ "1y6vnssn5y50x27g4ypdb5wwpmi7zf7jdi8gqbymkwf6n8p5y1d6"))
+ ("ant" ,ant-bootstrap)
("attr" ,attr)
- ("autoconf" ,autoconf)
- ("automake" ,automake)
("coreutils" ,coreutils)
("diffutils" ,diffutils) ;for tests
("gawk" ,gawk)
("nss-certs" ,nss-certs)
("perl" ,perl)
("procps" ,procps) ;for "free", even though I'm not sure we should use it
- ("gcj" ,gcj)))
+ ("jdk" ,icedtea-6 "jdk")))
(inputs
`(("alsa-lib" ,alsa-lib)
("cups" ,cups)
(license license:gpl2+))))
(define-public icedtea-8
- (let* ((version "3.4.0")
+ (let* ((version "3.5.1")
(drop (lambda (name hash)
(origin
(method url-fetch)
"/icedtea8/" version "/" name ".tar.xz"))
(sha256 (base32 hash))))))
(package (inherit icedtea-7)
- (version "3.4.0")
+ (version "3.5.1")
(source (origin
(method url-fetch)
(uri (string-append
version ".tar.xz"))
(sha256
(base32
- "16if055973y6yw7n5gczp8iksvc31cy4p5by9lkbniadqj4z665m"))
+ "1j8iv0cdk9fkh3yb5is7z29m9k3s89w6y9090538j6aa7p4nmalf"))
(modules '((guix build utils)))
(snippet
'(begin
(string-append "lib" name ".so")))))
(for-each
(lambda (file)
- (catch 'encoding-error
+ (catch 'decoding-error
(lambda ()
(substitute* file
(("VERSIONED_JNI_LIB_NAME\\(\"(.*)\", \"(.*)\"\\)"
(copy-recursively "openjdk.build/docs" doc)
(copy-recursively "openjdk.build/images/j2re-image" jre)
(copy-recursively "openjdk.build/images/j2sdk-image" jdk)
+ ;; Install the nss.cfg file to JRE to enable SSL/TLS
+ ;; support via NSS.
+ (copy-file (string-append jdk "/jre/lib/security/nss.cfg")
+ (string-append jre "/lib/security/nss.cfg"))
#t)))))))
(native-inputs
- `(("jdk" ,icedtea-7 "jdk")
- ("openjdk-src"
- ,(drop "openjdk"
- "0va5i3zr8y8ncv914rz914jda9d88gq0viww3smdqnln8n78rszi"))
- ("aarch32-drop"
- ,(drop "aarch32"
- "0cway5a5hcfyh4pzl9zz5xr7lil4gsliy6r5iqbaasd2d9alvqiq"))
- ("corba-drop"
- ,(drop "corba"
- "1l9zr97a3kq00bj4i8wcdsjlz3xlfldxd8zhkcxikinwd5n0n8a7"))
- ("jaxp-drop"
- ,(drop "jaxp"
- "0lqxrsr3xlpwm2na6f2rpl7znrz34dkb9dg3zjmympyjy4kqljn7"))
- ("jaxws-drop"
- ,(drop "jaxws"
- "1b3chckk10dzrpa7cswmcf1jvryaiwkj8lihfqjr5j7l668jwr4h"))
- ("jdk-drop"
- ,(drop "jdk"
- "15lq0k2jv2x26x6vqkbljdcxk35i3b60pcsw3j1sdfmlk1xy6wgc"))
- ("langtools-drop"
- ,(drop "langtools"
- "17xkb8ahkg04ri0bp5wblcp1a2lp8j7c83ic5zdbggvgm339k5s8"))
- ("hotspot-drop"
- ,(drop "hotspot"
- "0xpx8ykaq0ki6r0dl3dzca2xgp1p82z8mvsxcs2931ib667ncgcp"))
- ("nashorn-drop"
- ,(drop "nashorn"
- "1bnn4731lhlvg8axy4mjxgvh646yl22hp52wipx8cfca4vkn2f1z"))
- ("shenandoah-drop"
- ,(drop "shenandoah"
- "0fpxl8zlii1hpm777r875ys2cr5ih3gb6p1nm9jfa6krjrccrxv1"))
- ,@(fold alist-delete (package-native-inputs icedtea-7)
- '("gcj" "openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop"
- "jdk-drop" "langtools-drop" "hotspot-drop")))))))
+ `(("jdk" ,icedtea-7 "jdk")
+ ("openjdk-src"
+ ,(drop "openjdk"
+ "0a6yrq8y1zkzc7hm2l28rm3vzy5izfxhmmhhhvc91lhfclnqcd2q"))
+ ("aarch32-drop"
+ ,(drop "aarch32"
+ "0cway5a5hcfyh4pzl9zz5xr7lil4gsliy6r5iqbaasd2d9alvqiq"))
+ ("corba-drop"
+ ,(drop "corba"
+ "031sc6byd8lqvz3cd07phm13pqrxalxk9f3a2q8pim5n4sbsy0qb"))
+ ("jaxp-drop"
+ ,(drop "jaxp"
+ "1815jaj0k0w1s0g0jr1ahkajp1jx2qlb08i6l9ha4wyqqyp49a4n"))
+ ("jaxws-drop"
+ ,(drop "jaxws"
+ "0vh4f85cxhqvabzg86ycpz02519cdzgsn5dr75k22rkmbbxnbbl6"))
+ ("jdk-drop"
+ ,(drop "jdk"
+ "196ycqz4d9kknc6b219q4ib83l1kkl6w6l1cznw9bzaafyynqa35"))
+ ("langtools-drop"
+ ,(drop "langtools"
+ "0ssnadlr5cxhmj06nmni34kdynix1sjhcvjzahm5yzfd7dfllmgy"))
+ ("hotspot-drop"
+ ,(drop "hotspot"
+ "0f7fxf0s9kadvs80hm5ga72pyp9r0fvl8zm1wmd1wrks8kl79sd6"))
+ ("nashorn-drop"
+ ,(drop "nashorn"
+ "0m95qgnd4z6p0xp9m06ihss7skx2yrm7xw69jsjsrxpriy1shiwy"))
+ ("shenandoah-drop"
+ ,(drop "shenandoah"
+ "0yjlcgp6mldp30hmkfl68mdwlbg3gb0m6xd5y7srczni7cln5f3i"))
+ ,@(fold alist-delete (package-native-inputs icedtea-7)
+ '("jdk" "openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop"
+ "jdk-drop" "langtools-drop" "hotspot-drop")))))))
+
+(define-public icedtea icedtea-7)
+
+\f
+(define-public ant/java8
+ (package (inherit ant-bootstrap)
+ (name "ant")
+ (version "1.10.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://apache/ant/source/apache-ant-"
+ version "-src.tar.gz"))
+ (sha256
+ (base32
+ "10p3dh77lkzzzcy32dk9azljixzadp46fggjfbvgkl8mmb8cxxv8"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ (for-each delete-file
+ (find-files "lib/optional" "\\.jar$"))
+ #t))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments ant-bootstrap)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-after 'unpack 'remove-scripts
+ ;; Remove bat / cmd scripts for DOS as well as the antRun and runant
+ ;; wrappers.
+ (lambda _
+ (for-each delete-file
+ (find-files "src/script"
+ "(.*\\.(bat|cmd)|runant.*|antRun.*)"))
+ #t))
+ (replace 'build
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
+
+ ;; Disable tests to avoid dependency on hamcrest-core, which needs
+ ;; Ant to build. This is necessary in addition to disabling the
+ ;; "check" phase, because the dependency on "test-jar" would always
+ ;; result in the tests to be run.
+ (substitute* "build.xml"
+ (("depends=\"jars,test-jar\"") "depends=\"jars\""))
+ (zero? (system* "bash" "bootstrap.sh"
+ (string-append "-Ddist.dir="
+ (assoc-ref outputs "out"))))))))))
+ (native-inputs
+ `(("jdk" ,icedtea-8 "jdk")))))
+
+;; The 1.9.x series is the last that can be built with GCJ. The 1.10.x series
+;; requires Java 8.
+(define-public ant
+ (package (inherit ant/java8)
+ (version "1.9.9")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://apache/ant/source/apache-ant-"
+ version "-src.tar.gz"))
+ (sha256
+ (base32
+ "1k28mka0m3isy9yr8gz84kz1f3f879rwaxrd44vdn9xbfwvwk86n"))))
+ (native-inputs
+ `(("jdk" ,icedtea-7 "jdk")))))
+
+(define-public clojure
+ (let* ((remove-archives '(begin
+ (for-each delete-file
+ (find-files "." ".*\\.(jar|zip)"))
+ #t))
+ (submodule (lambda (prefix version hash)
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/clojure/"
+ prefix version ".tar.gz"))
+ (sha256 (base32 hash))
+ (modules '((guix build utils)))
+ (snippet remove-archives)))))
+ (package
+ (name "clojure")
+ (version "1.8.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "http://repo1.maven.org/maven2/org/clojure/clojure/"
+ version "/clojure-" version ".zip"))
+ (sha256
+ (base32 "1nip095fz5c492sw15skril60i1vd21ibg6szin4jcvyy3xr6cym"))
+ (modules '((guix build utils)))
+ (snippet remove-archives)))
+ (build-system ant-build-system)
+ (arguments
+ `(#:modules ((guix build ant-build-system)
+ (guix build utils)
+ (ice-9 ftw)
+ (ice-9 regex)
+ (srfi srfi-1)
+ (srfi srfi-26))
+ #:test-target "test"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'unpack-submodule-sources
+ (lambda* (#:key inputs #:allow-other-keys)
+ (for-each
+ (lambda (name)
+ (mkdir-p name)
+ (with-directory-excursion name
+ (or (zero? (system* "tar"
+ ;; Use xz for repacked tarball.
+ "--xz"
+ "--extract"
+ "--verbose"
+ "--file" (assoc-ref inputs name)
+ "--strip-components=1"))
+ (error "failed to unpack tarball" name)))
+ (copy-recursively (string-append name "/src/main/clojure/")
+ "src/clj/"))
+ '("data-generators-src"
+ "java-classpath-src"
+ "test-check-src"
+ "test-generative-src"
+ "tools-namespace-src"
+ "tools-reader-src"))
+ #t))
+ ;; The javadoc target is not built by default.
+ (add-after 'build 'build-doc
+ (lambda _
+ (zero? (system* "ant" "javadoc"))))
+ ;; Needed since no install target is provided.
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((java-dir (string-append (assoc-ref outputs "out")
+ "/share/java/")))
+ ;; Install versioned to avoid collisions.
+ (install-file (string-append "clojure-" ,version ".jar")
+ java-dir)
+ #t)))
+ ;; Needed since no install-doc target is provided.
+ (add-after 'install 'install-doc
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((doc-dir (string-append (assoc-ref outputs "out")
+ "/share/doc/clojure-"
+ ,version "/")))
+ (copy-recursively "doc/clojure" doc-dir)
+ (copy-recursively "target/javadoc/"
+ (string-append doc-dir "javadoc/"))
+ (for-each (cut install-file <> doc-dir)
+ (filter (cut string-match
+ ".*\\.(html|markdown|md|txt)"
+ <>)
+ (scandir "./")))
+ #t))))))
+ ;; The native-inputs below are needed to run the tests.
+ (native-inputs
+ `(("data-generators-src"
+ ,(submodule "data.generators/archive/data.generators-"
+ "0.1.2"
+ "0kki093jp4ckwxzfnw8ylflrfqs8b1i1wi9iapmwcsy328dmgzp1"))
+ ("java-classpath-src"
+ ,(submodule "java.classpath/archive/java.classpath-"
+ "0.2.3"
+ "0sjymly9xh1lkvwn5ygygpsfwz4dabblnlq0c9bx76rkvq62fyng"))
+ ("test-check-src"
+ ,(submodule "test.check/archive/test.check-"
+ "0.9.0"
+ "0p0mnyhr442bzkz0s4k5ra3i6l5lc7kp6ajaqkkyh4c2k5yck1md"))
+ ("test-generative-src"
+ ,(submodule "test.generative/archive/test.generative-"
+ "0.5.2"
+ "1pjafy1i7yblc7ixmcpfq1lfbyf3jaljvkgrajn70sws9xs7a9f8"))
+ ("tools-namespace-src"
+ ,(submodule "tools.namespace/archive/tools.namespace-"
+ "0.2.11"
+ "10baak8v0hnwz2hr33bavshm7y49mmn9zsyyms1dwjz45p5ymhy0"))
+ ("tools-reader-src"
+ ,(submodule "tools.reader/archive/tools.reader-"
+ "1.0.0"
+ "1lafblmmj4hkg0aqrf19qkdw9wdcsh3qxmn6cbkmnzbhffpyv2lv"))))
+ (home-page "https://clojure.org/")
+ (synopsis "Lisp dialect running on the JVM")
+ (description "Clojure is a dynamic, general-purpose programming language,
+combining the approachability and interactive development of a scripting
+language with an efficient and robust infrastructure for multithreaded
+programming. Clojure is a compiled language, yet remains completely dynamic
+– every feature supported by Clojure is supported at runtime. Clojure
+provides easy access to the Java frameworks, with optional type hints and type
+inference, to ensure that calls to Java can avoid reflection.
-(define-public icedtea icedtea-7)
+Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy
+and a powerful macro system. Clojure is predominantly a functional programming
+language, and features a rich set of immutable, persistent data structures.
+When mutable state is needed, Clojure offers a software transactional memory
+system and reactive Agent system that ensure clean, correct, multithreaded
+designs.")
+ ;; Clojure is licensed under EPL1.0
+ ;; ASM bytecode manipulation library is licensed under BSD-3
+ ;; Guava Murmur3 hash implementation is licensed under APL2.0
+ ;; src/clj/repl.clj is licensed under CPL1.0
+ ;;
+ ;; See readme.html or readme.txt for details.
+ (license (list license:epl1.0
+ license:bsd-3
+ license:asl2.0
+ license:cpl1.0)))))
+
+(define-public java-classpathx-servletapi
+ (package
+ (name "java-classpathx-servletapi")
+ (version "3.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/classpathx/servletapi/"
+ "servletapi-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0y9489pk4as9q6x300sk3ycc0psqfxcd4b0xvbmf3rhgli8q1kx3"))))
+ (build-system ant-build-system)
+ (arguments
+ `(#:tests? #f ; there is no test target
+ #:build-target "compile"
+ ;; NOTE: This package does not build with Java 8 because of a type
+ ;; mismatch in
+ ;; "source/javax/servlet/jsp/el/ImplicitObjectELResolver.java". It
+ ;; defines the return value of ScopeMap's "remove" method to be of type
+ ;; "Object", whereas Map's "remove" method returns boolean.
+ #:make-flags
+ (list "-Dbuild.compiler=javac1.7"
+ (string-append "-Ddist=" (assoc-ref %outputs "out")))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'install
+ (lambda* (#:key make-flags #:allow-other-keys)
+ (zero? (apply system* `("ant" "dist" ,@make-flags))))))))
+ (home-page "https://www.gnu.org/software/classpathx/")
+ (synopsis "Java servlet API implementation")
+ (description "This is the GNU servlet API distribution, part of the
+ClasspathX project. It provides implementations of version 3.0 of the servlet
+API and version 2.1 of the Java ServerPages API.")
+ (license license:gpl3+)))
+
+(define-public java-swt
+ (package
+ (name "java-swt")
+ (version "4.6")
+ (source
+ ;; The types of many variables and procedures differ in the sources
+ ;; dependent on whether the target architecture is a 32-bit system or a
+ ;; 64-bit system. Instead of patching the sources on demand in a build
+ ;; phase we download either the 32-bit archive (which mostly uses "int"
+ ;; types) or the 64-bit archive (which mostly uses "long" types).
+ (let ((hash32 "0jmx1h65wqxsyjzs64i2z6ryiynllxzm13cq90fky2qrzagcw1ir")
+ (hash64 "0wnd01xssdq9pgx5xqh5lfiy3dmk60dzzqdxzdzf883h13692lgy")
+ (file32 "x86")
+ (file64 "x86_64"))
+ (let-values (((hash file)
+ (match (or (%current-target-system) (%current-system))
+ ("x86_64-linux" (values hash64 file64))
+ (_ (values hash32 file32)))))
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "http://ftp-stud.fht-esslingen.de/pub/Mirrors/"
+ "eclipse/eclipse/downloads/drops4/R-" version
+ "-201606061100/swt-" version "-gtk-linux-" file ".zip"))
+ (sha256 (base32 hash))))))
+ (build-system ant-build-system)
+ (arguments
+ `(#:jar-name "swt.jar"
+ #:tests? #f ; no "check" target
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'unpack
+ (lambda* (#:key source #:allow-other-keys)
+ (and (mkdir "swt")
+ (zero? (system* "unzip" source "-d" "swt"))
+ (chdir "swt")
+ (mkdir "src")
+ (zero? (system* "unzip" "src.zip" "-d" "src")))))
+ ;; The classpath contains invalid icecat jars. Since we don't need
+ ;; anything other than the JDK on the classpath, we can simply unset
+ ;; it.
+ (add-after 'configure 'unset-classpath
+ (lambda _ (unsetenv "CLASSPATH") #t))
+ (add-before 'build 'build-native
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
+ ;; Build shared libraries. Users of SWT have to set the system
+ ;; property swt.library.path to the "lib" directory of this
+ ;; package output.
+ (mkdir-p lib)
+ (setenv "OUTPUT_DIR" lib)
+ (with-directory-excursion "src"
+ (zero? (system* "bash" "build.sh"))))))
+ (add-after 'install 'install-native
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
+ (for-each (lambda (file)
+ (install-file file lib))
+ (find-files "." "\\.so$"))
+ #t))))))
+ (inputs
+ `(("xulrunner" ,icecat)
+ ("gtk" ,gtk+-2)
+ ("libxtst" ,libxtst)
+ ("libxt" ,libxt)
+ ("mesa" ,mesa)
+ ("glu" ,glu)))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)
+ ("unzip" ,unzip)))
+ (home-page "https://www.eclipse.org/swt/")
+ (synopsis "Widget toolkit for Java")
+ (description
+ "SWT is a widget toolkit for Java designed to provide efficient, portable
+access to the user-interface facilities of the operating systems on which it
+is implemented.")
+ ;; SWT code is licensed under EPL1.0
+ ;; Gnome and Gtk+ bindings contain code licensed under LGPLv2.1
+ ;; Cairo bindings contain code under MPL1.1
+ ;; XULRunner 1.9 bindings contain code under MPL2.0
+ (license (list
+ license:epl1.0
+ license:mpl1.1
+ license:mpl2.0
+ license:lgpl2.1+))))
(define-public java-xz
(package
This is a part of the Apache Commons Project.")
(license license:asl2.0)))
+(define-public java-javaewah
+ (package
+ (name "java-javaewah")
+ (version "1.1.6")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/lemire/javaewah/"
+ "archive/JavaEWAH-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1n7j1r1h24wlhwv9zdcj6yqjrhma2ixwyzm15l5vrv6yqjs6753b"))))
+ (build-system ant-build-system)
+ (arguments `(#:jar-name "javaewah.jar"))
+ (inputs
+ `(("java-junit" ,java-junit)
+ ("java-hamcrest-core" ,java-hamcrest-core)))
+ (home-page "https://github.com/lemire/javaewah")
+ (synopsis "Compressed alternative to the Java @code{BitSet} class")
+ (description "This is a word-aligned compressed variant of the Java
+@code{Bitset} class. It provides both a 64-bit and a 32-bit RLE-like
+compression scheme. It can be used to implement bitmap indexes.
+
+The goal of word-aligned compression is not to achieve the best compression,
+but rather to improve query processing time. Hence, JavaEWAH tries to save CPU
+cycles, maybe at the expense of storage. However, the EWAH scheme is always
+more efficient storage-wise than an uncompressed bitmap (as implemented in the
+@code{BitSet} class by Sun).")
+ ;; GPL2.0 derivates are explicitly allowed.
+ (license license:asl2.0)))
+
+(define-public java-slf4j-api
+ (package
+ (name "java-slf4j-api")
+ (version "1.7.25")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://www.slf4j.org/dist/slf4j-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "13j51sgzmhhdrfa74gkal5zpip7r1440dh7zsi2c8bpb2zs1v8kb"))
+ (modules '((guix build utils)))
+ ;; Delete bundled jars.
+ (snippet
+ '(begin
+ (for-each delete-file (find-files "." "\\.jar$"))
+ #t))))
+ (build-system ant-build-system)
+ (arguments
+ `(#:jar-name "slf4j-api.jar"
+ #:source-dir "slf4j-api/src/main"
+ #:test-dir "slf4j-api/src/test"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'build 'regenerate-jar
+ (lambda _
+ ;; pom.xml ignores these files in the jar creation process. If we don't,
+ ;; we get the error "This code should have never made it into slf4j-api.jar"
+ (delete-file-recursively "build/classes/org/slf4j/impl")
+ (zero? (system* "jar" "-cf" "build/jar/slf4j-api.jar" "-C"
+ "build/classes" "."))))
+ (add-before 'check 'dont-test-abstract-classes
+ (lambda _
+ ;; abstract classes are not meant to be run with junit
+ (substitute* "build.xml"
+ (("<include name=\"\\*\\*/\\*Test.java\" />")
+ (string-append "<include name=\"**/*Test.java\" />"
+ "<exclude name=\"**/MultithreadedInitializationTest"
+ ".java\" />"))))))))
+ (inputs
+ `(("java-junit" ,java-junit)
+ ("java-hamcrest-core" ,java-hamcrest-core)))
+ (home-page "https://www.slf4j.org/")
+ (synopsis "Simple logging facade for Java")
+ (description "The Simple Logging Facade for Java (SLF4J) serves as a
+simple facade or abstraction for various logging
+frameworks (e.g. @code{java.util.logging}, @code{logback}, @code{log4j})
+allowing the end user to plug in the desired logging framework at deployment
+time.")
+ (license license:expat)))
+
(define-public antlr2
(package
(name "antlr2")
transformations and analysis algorithms allow to easily assemble custom
complex transformations and code analysis tools.")
(license license:bsd-3)))
+
+(define-public java-commons-cli-1.2
+ ;; This is a bootstrap dependency for Maven2.
+ (package
+ (inherit java-commons-cli)
+ (version "1.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://apache/commons/cli/source/"
+ "commons-cli-" version "-src.tar.gz"))
+ (sha256
+ (base32
+ "0rvfgzgv2pc1m091dfj3ih9ddsjjppr1f1wf0qmc3bk6b1kwv2dm"))))
+ (arguments
+ `(#:jar-name "commons-cli.jar"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-build-xml
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "build.xml"
+ (("dir=\"\\$\\{test.home\\}/java\"")
+ "dir=\"${test.home}\""))
+ #t)))))
+ (native-inputs
+ `(("java-junit" ,java-junit)))))