GNU bug report logs - #53292
[PATCH] build: clojure-build-system: Support compiling Java sources.

Previous Next

Package: guix-patches;

Reported by: Reily Siegel <mail <at> reilysiegel.com>

Date: Sun, 16 Jan 2022 01:32:01 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 53292 in the body.
You can then email your comments to 53292 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#53292; Package guix-patches. (Sun, 16 Jan 2022 01:32:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Reily Siegel <mail <at> reilysiegel.com>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sun, 16 Jan 2022 01:32:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Reily Siegel <mail <at> reilysiegel.com>
To: guix-patches <at> gnu.org
Subject: [PATCH] build: clojure-build-system: Support compiling Java sources.
Date: Sat, 15 Jan 2022 20:31:02 -0500
* guix/build/clojure-build-system.scm (compile-java): New variable.
* guix/build/clojure-build-system.scm (build): Copy classes compiled from Java
and optionally Java sources to the final jar.
* guix/build/clojure-build-system.scm (%standard-phases): Add compile-java
phase before build.
* guix/build/clojure-utils.scm (%java-source-dirs): New variable.
* guix/build/clojure-utils.scm (%java-compile-dir): New variable.
* guix/build-system/clojure.scm (clojure-build): Include %java-source-dirs and
%java-compile-dir.
* guix/build-system/clojure.scm (builder): Include %java-source-dirs and
%java-compile-dir.
---
 guix/build-system/clojure.scm       |  6 ++++-
 guix/build/clojure-build-system.scm | 36 +++++++++++++++++++++++------
 guix/build/clojure-utils.scm        | 10 ++++++++
 3 files changed, 44 insertions(+), 8 deletions(-)

diff --git a/guix/build-system/clojure.scm b/guix/build-system/clojure.scm
index 634854cf1b..2a0713d297 100644
--- a/guix/build-system/clojure.scm
+++ b/guix/build-system/clojure.scm
@@ -107,8 +107,10 @@ (define* (clojure-build name inputs
                         #:key
                         source
                         (source-dirs `',%source-dirs)
+                        (java-source-dirs `',%java-source-dirs)
                         (test-dirs `',%test-dirs)
                         (compile-dir %compile-dir)
+                        (java-compile-dir %java-compile-dir)
 
                         (jar-names `',(package-name->jar-names name))
                         (main-class %main-class)
@@ -142,9 +144,11 @@ (define builder
                          #:source #+source
 
                          #:source-dirs #$source-dirs
+                         #:java-source-dirs #$java-source-dirs
                          #:test-dirs #$test-dirs
                          #:compile-dir #$compile-dir
-
+                         #:java-compile-dir #$java-compile-dir
+                         
                          #:jar-names #$jar-names
                          #:main-class #$main-class
                          #:omit-source? #$omit-source?
diff --git a/guix/build/clojure-build-system.scm b/guix/build/clojure-build-system.scm
index dd01f95de8..22e90581a5 100644
--- a/guix/build/clojure-build-system.scm
+++ b/guix/build/clojure-build-system.scm
@@ -34,8 +34,24 @@ (define-module (guix build clojure-build-system)
 ;;
 ;; Code:
 
+(define* (compile-java #:key
+                       java-source-dirs java-compile-dir
+                       #:allow-other-keys)
+  "Compile java sources for use in clojure-build-system."
+  (let ((java-files (append-map (lambda (dir)
+                                  (find-files dir "\\.java$"))
+                                java-source-dirs)))
+    (mkdir-p java-compile-dir)
+    (when (not (eq? java-files '()))
+      (apply invoke
+             "javac"
+             "-verbose"
+             "-d" java-compile-dir
+             java-files))))
+
 (define* (build #:key
-                source-dirs compile-dir
+                source-dirs java-source-dirs
+                compile-dir java-compile-dir
                 jar-names main-class omit-source?
                 aot-include aot-exclude
                 #:allow-other-keys)
@@ -46,19 +62,24 @@ (define* (build #:key
                                            #:all-list libs)))
     (mkdir-p compile-dir)
     (eval-with-clojure `(run! compile ',libs*)
-                       source-dirs)
+                       (cons*  compile-dir
+                               java-compile-dir
+                               source-dirs))
     (let ((source-dir-files-alist (map (lambda (dir)
                                          (cons dir (find-files* dir)))
-                                       source-dirs))
+                                       (append source-dirs
+                                           java-source-dirs)))
           ;; workaround transitive compilation in Clojure
           (classes (filter (lambda (class)
                              (any (cut compiled-from? class <>)
                                   libs*))
                            (find-files* compile-dir))))
-      (for-each (cut create-jar <> (cons (cons compile-dir classes)
-                                         (if omit-source?
-                                             '()
-                                             source-dir-files-alist))
+      (for-each (cut create-jar <> (cons* (cons compile-dir classes)
+                                          (cons java-compile-dir
+                                                (find-files* java-compile-dir))
+                                          (if omit-source?
+                                              '()
+                                              source-dir-files-alist))
                      #:main-class main-class)
                 jar-names)
       #t)))
@@ -94,6 +115,7 @@ (define-with-docs install
 (define-with-docs %standard-phases
   "Standard build phases for clojure-build-system."
   (modify-phases %standard-phases <at> ant
+    (add-before 'build 'compile-java compile-java)
     (replace 'build build)
     (replace 'check check)
     (replace 'install install)
diff --git a/guix/build/clojure-utils.scm b/guix/build/clojure-utils.scm
index 8817cab52a..c5322141d3 100644
--- a/guix/build/clojure-utils.scm
+++ b/guix/build/clojure-utils.scm
@@ -32,8 +32,10 @@ (define-module (guix build clojure-utils)
             install-doc
 
             %source-dirs
+            %java-source-dirs
             %test-dirs
             %compile-dir
+            %java-compile-dir
             package-name->jar-names
             %main-class
             %omit-source?
@@ -101,6 +103,10 @@ (define-with-docs %source-dirs
   "A default list of source directories."
   '("src/"))
 
+(define-with-docs %java-source-dirs
+  "A default list of java source directories."
+  '())
+
 (define-with-docs %test-dirs
   "A default list of test directories."
   '("test/"))
@@ -109,6 +115,10 @@ (define-with-docs %compile-dir
   "Default directory for holding class files."
   "classes/")
 
+(define-with-docs %java-compile-dir
+  "Default directory for holding java class files."
+  "java-classes/")
+
 (define (package-name->jar-names name)
   "Given NAME, a package name like \"foo-0.9.1b\",
 return the list of default jar names: (\"foo-0.9.1b.jar\" \"foo.jar\")."
-- 
2.34.0




Information forwarded to guix-patches <at> gnu.org:
bug#53292; Package guix-patches. (Sun, 16 Jan 2022 10:48:02 GMT) Full text and rfc822 format available.

Message #8 received at 53292 <at> debbugs.gnu.org (full text, mbox):

From: Maxime Devos <maximedevos <at> telenet.be>
To: Reily Siegel <mail <at> reilysiegel.com>, 53292 <at> debbugs.gnu.org
Subject: Re: [bug#53292] [PATCH] build: clojure-build-system: Support
 compiling Java sources.
Date: Sun, 16 Jan 2022 11:47:41 +0100
[Message part 1 (text/plain, inline)]
Hi,

Reily Siegel schreef op za 15-01-2022 om 20:31 [-0500]:
> +    (when (not (eq? java-files '()))

Maybe use the procedure 'null?' instead?

(when (not (null? java-files))
  [...])

Greetings,
Maxime.
[signature.asc (application/pgp-signature, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#53292; Package guix-patches. (Tue, 18 Jan 2022 18:18:01 GMT) Full text and rfc822 format available.

Message #11 received at 53292 <at> debbugs.gnu.org (full text, mbox):

From: Reily Siegel <mail <at> reilysiegel.com>
To: 53292 <at> debbugs.gnu.org
Cc: Maxime Devos <maximedevos <at> telenet.be>
Subject: [PATCH v2] build: clojure-build-system: Support compiling Java
Date: Tue, 18 Jan 2022 13:17:24 -0500
* guix/build/clojure-build-system.scm (compile-java): New variable.
* guix/build/clojure-build-system.scm (build): Copy classes compiled from Java
and optionally Java sources to the final jar.
* guix/build/clojure-build-system.scm (%standard-phases): Add compile-java
phase before build.
* guix/build/clojure-utils.scm (%java-source-dirs): New variable.
* guix/build/clojure-utils.scm (%java-compile-dir): New variable.
* guix/build-system/clojure.scm (clojure-build): Include %java-source-dirs and
%java-compile-dir.
* guix/build-system/clojure.scm (builder): Include %java-source-dirs and
%java-compile-dir.
---
 guix/build-system/clojure.scm       |  6 ++++-
 guix/build/clojure-build-system.scm | 36 +++++++++++++++++++++++------
 guix/build/clojure-utils.scm        | 10 ++++++++
 3 files changed, 44 insertions(+), 8 deletions(-)

diff --git a/guix/build-system/clojure.scm b/guix/build-system/clojure.scm
index 634854cf1b..2a0713d297 100644
--- a/guix/build-system/clojure.scm
+++ b/guix/build-system/clojure.scm
@@ -107,8 +107,10 @@ (define* (clojure-build name inputs
                         #:key
                         source
                         (source-dirs `',%source-dirs)
+                        (java-source-dirs `',%java-source-dirs)
                         (test-dirs `',%test-dirs)
                         (compile-dir %compile-dir)
+                        (java-compile-dir %java-compile-dir)
 
                         (jar-names `',(package-name->jar-names name))
                         (main-class %main-class)
@@ -142,9 +144,11 @@ (define builder
                          #:source #+source
 
                          #:source-dirs #$source-dirs
+                         #:java-source-dirs #$java-source-dirs
                          #:test-dirs #$test-dirs
                          #:compile-dir #$compile-dir
-
+                         #:java-compile-dir #$java-compile-dir
+                         
                          #:jar-names #$jar-names
                          #:main-class #$main-class
                          #:omit-source? #$omit-source?
diff --git a/guix/build/clojure-build-system.scm b/guix/build/clojure-build-system.scm
index dd01f95de8..7d494078ea 100644
--- a/guix/build/clojure-build-system.scm
+++ b/guix/build/clojure-build-system.scm
@@ -34,8 +34,24 @@ (define-module (guix build clojure-build-system)
 ;;
 ;; Code:
 
+(define* (compile-java #:key
+                       java-source-dirs java-compile-dir
+                       #:allow-other-keys)
+  "Compile java sources for use in clojure-build-system."
+  (let ((java-files (append-map (lambda (dir)
+                                  (find-files dir "\\.java$"))
+                                java-source-dirs)))
+    (mkdir-p java-compile-dir)
+    (when (not (null? java-files))
+      (apply invoke
+             "javac"
+             "-verbose"
+             "-d" java-compile-dir
+             java-files))))
+
 (define* (build #:key
-                source-dirs compile-dir
+                source-dirs java-source-dirs
+                compile-dir java-compile-dir
                 jar-names main-class omit-source?
                 aot-include aot-exclude
                 #:allow-other-keys)
@@ -46,19 +62,24 @@ (define* (build #:key
                                            #:all-list libs)))
     (mkdir-p compile-dir)
     (eval-with-clojure `(run! compile ',libs*)
-                       source-dirs)
+                       (cons*  compile-dir
+                               java-compile-dir
+                               source-dirs))
     (let ((source-dir-files-alist (map (lambda (dir)
                                          (cons dir (find-files* dir)))
-                                       source-dirs))
+                                       (append source-dirs
+                                           java-source-dirs)))
           ;; workaround transitive compilation in Clojure
           (classes (filter (lambda (class)
                              (any (cut compiled-from? class <>)
                                   libs*))
                            (find-files* compile-dir))))
-      (for-each (cut create-jar <> (cons (cons compile-dir classes)
-                                         (if omit-source?
-                                             '()
-                                             source-dir-files-alist))
+      (for-each (cut create-jar <> (cons* (cons compile-dir classes)
+                                          (cons java-compile-dir
+                                                (find-files* java-compile-dir))
+                                          (if omit-source?
+                                              '()
+                                              source-dir-files-alist))
                      #:main-class main-class)
                 jar-names)
       #t)))
@@ -94,6 +115,7 @@ (define-with-docs install
 (define-with-docs %standard-phases
   "Standard build phases for clojure-build-system."
   (modify-phases %standard-phases <at> ant
+    (add-before 'build 'compile-java compile-java)
     (replace 'build build)
     (replace 'check check)
     (replace 'install install)
diff --git a/guix/build/clojure-utils.scm b/guix/build/clojure-utils.scm
index 8817cab52a..c5322141d3 100644
--- a/guix/build/clojure-utils.scm
+++ b/guix/build/clojure-utils.scm
@@ -32,8 +32,10 @@ (define-module (guix build clojure-utils)
             install-doc
 
             %source-dirs
+            %java-source-dirs
             %test-dirs
             %compile-dir
+            %java-compile-dir
             package-name->jar-names
             %main-class
             %omit-source?
@@ -101,6 +103,10 @@ (define-with-docs %source-dirs
   "A default list of source directories."
   '("src/"))
 
+(define-with-docs %java-source-dirs
+  "A default list of java source directories."
+  '())
+
 (define-with-docs %test-dirs
   "A default list of test directories."
   '("test/"))
@@ -109,6 +115,10 @@ (define-with-docs %compile-dir
   "Default directory for holding class files."
   "classes/")
 
+(define-with-docs %java-compile-dir
+  "Default directory for holding java class files."
+  "java-classes/")
+
 (define (package-name->jar-names name)
   "Given NAME, a package name like \"foo-0.9.1b\",
 return the list of default jar names: (\"foo-0.9.1b.jar\" \"foo.jar\")."
-- 
2.34.0





Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Mon, 24 Jan 2022 09:20:02 GMT) Full text and rfc822 format available.

Notification sent to Reily Siegel <mail <at> reilysiegel.com>:
bug acknowledged by developer. (Mon, 24 Jan 2022 09:20:02 GMT) Full text and rfc822 format available.

Message #16 received at 53292-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Reily Siegel <mail <at> reilysiegel.com>
Cc: Maxime Devos <maximedevos <at> telenet.be>, 53292-done <at> debbugs.gnu.org
Subject: Re: bug#53292: [PATCH] build: clojure-build-system: Support
 compiling Java sources.
Date: Mon, 24 Jan 2022 10:19:47 +0100
Reily Siegel <mail <at> reilysiegel.com> skribis:

> * guix/build/clojure-build-system.scm (compile-java): New variable.
> * guix/build/clojure-build-system.scm (build): Copy classes compiled from Java
> and optionally Java sources to the final jar.
> * guix/build/clojure-build-system.scm (%standard-phases): Add compile-java
> phase before build.
> * guix/build/clojure-utils.scm (%java-source-dirs): New variable.
> * guix/build/clojure-utils.scm (%java-compile-dir): New variable.
> * guix/build-system/clojure.scm (clojure-build): Include %java-source-dirs and
> %java-compile-dir.
> * guix/build-system/clojure.scm (builder): Include %java-source-dirs and
> %java-compile-dir.

I tweaked the commit log (no need to repeat file names) and applied it.

Thank you, and thanks Maxime!

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 21 Feb 2022 12:24:17 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 62 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.