[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#26966: [PATCH 10/22] gnu: Add ecj-javac-on-jamvm-wrapper.
From: |
Roel Janssen |
Subject: |
bug#26966: [PATCH 10/22] gnu: Add ecj-javac-on-jamvm-wrapper. |
Date: |
Mon, 22 May 2017 11:38:07 +0200 |
User-agent: |
mu4e 0.9.18; emacs 25.2.1 |
Ricardo Wurmus writes:
> * gnu/packages/java.scm (ecj-javac-on-jamvm-wrapper): New variable.
> ---
> gnu/packages/java.scm | 86
> +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 86 insertions(+)
>
> diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
> index ae9a5b3d7..940587057 100644
> --- a/gnu/packages/java.scm
> +++ b/gnu/packages/java.scm
> @@ -542,6 +542,92 @@ gnu.classpath.tools.~a.~a $@"
> the GNU Classpath library. They are executed by the JamVM virtual
> machine.")))
>
> +(define ecj-javac-on-jamvm-wrapper
> + (package (inherit ecj-javac-wrapper)
> + (name "ecj-javac-on-jamvm-wrapper")
> + (arguments
> + `(#: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?
That would be nice to reuse the same builder. Maybe we could create a
package for the builder function that will generate the builder code.
Whether that would be better, I don't know.
> + (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)
> + (map write
> + `((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
> + `(("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.")))
> +
> (define-public java-swt
> (package
> (name "java-swt")
It looks good to me.
Kind regards,
Roel Janssen
bug#26966: [PATCH 08/22] gnu: Add jamvm-bootstrap., Ricardo Wurmus, 2017/05/17
bug#26966: [PATCH 07/22] gnu: Add classpath., Ricardo Wurmus, 2017/05/17