* [bug#66879] [PATCH] gnu: josm: Update to 18822.
@ 2023-11-01 12:53 Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 1/5] gnu: openjdk9: Install default certificates Julien Lepiller
0 siblings, 1 reply; 8+ messages in thread
From: Julien Lepiller @ 2023-11-01 12:53 UTC (permalink / raw)
To: 66879
Hi Guix!
This small patch series updates josm to the latest version. Some
issues I stumbled upon:
josm now uses a different library for json parsing, which is added in
the series. This library uses Java modules (introduced with java 9), so
I had to fix the build system to allow modules, but not by default
since we still use the old java 8 by default.
Then, it built, but it had troubles validating SSL certificates at
runtime, which is fixed in the series by using a similar phase to the
one in icedtea to generate a key store from nss-certs. I managed to
build a few JDK versions after OpenJDK 11, but I'll let CI tell us if
I broke anything :)
^ permalink raw reply [flat|nested] 8+ messages in thread
* [bug#66879] [PATCH v2 1/5] gnu: openjdk9: Install default certificates.
2023-11-01 12:53 [bug#66879] [PATCH] gnu: josm: Update to 18822 Julien Lepiller
@ 2023-11-02 6:50 ` Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 2/5] guix: ant: Optionally build with java modules Julien Lepiller
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Julien Lepiller @ 2023-11-02 6:50 UTC (permalink / raw)
To: 66879; +Cc: Björn Höfling, Julien Lepiller
* gnu/packages/java.scm (openjdk9)[arguments]: Add a phase to install
certificates from nss-certs to the expected location.
(openjdk10, openjdk11): Adapt to also install the certificates.
Change-Id: I6ef626324386419e84a9c0eace5a278ca11c573c
---
gnu/packages/java.scm | 87 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 86 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f482c4c16d..567fb05f77 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -878,7 +878,14 @@ (define-public openjdk9
(build-system gnu-build-system)
(outputs '("out" "jdk" "doc"))
(arguments
- `(#:tests? #f; require jtreg
+ `(#:imported-modules
+ ((guix build ant-build-system)
+ ,@%gnu-build-system-modules)
+ #:modules
+ ((guix build utils)
+ (guix build gnu-build-system)
+ (ice-9 popen))
+ #:tests? #f; require jtreg
#:make-flags '("all")
#:disallowed-references ,(list (gexp-input icedtea-8)
(gexp-input icedtea-8 "jdk"))
@@ -971,6 +978,80 @@ (define-public openjdk9
(find-files "."
"\\.c$|\\.h$"))
#t)))
+ ;; By default OpenJDK only generates an empty keystore. In order to
+ ;; be able to use certificates in Java programs we need to generate a
+ ;; keystore from a set of certificates. For convenience we use the
+ ;; certificates from the nss-certs package.
+ (add-after 'install 'install-keystore
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (use-modules (ice-9 rdelim))
+ (let* ((keystore "cacerts")
+ (certs-dir (search-input-directory inputs
+ "etc/ssl/certs"))
+ (keytool (string-append (assoc-ref outputs "jdk")
+ "/bin/keytool")))
+ (define (extract-cert file target)
+ (call-with-input-file file
+ (lambda (in)
+ (call-with-output-file target
+ (lambda (out)
+ (let loop ((line (read-line in 'concat))
+ (copying? #f))
+ (cond
+ ((eof-object? line) #t)
+ ((string-prefix? "-----BEGIN" line)
+ (display line out)
+ (loop (read-line in 'concat) #t))
+ ((string-prefix? "-----END" line)
+ (display line out)
+ #t)
+ (else
+ (when copying? (display line out))
+ (loop (read-line in 'concat) copying?)))))))))
+ (define (import-cert cert)
+ (format #t "Importing certificate ~a\n" (basename cert))
+ (let ((temp "tmpcert"))
+ (extract-cert cert temp)
+ (let ((port (open-pipe* OPEN_WRITE keytool
+ "-import"
+ "-alias" (basename cert)
+ "-keystore" keystore
+ "-storepass" "changeit"
+ "-file" temp)))
+ (display "yes\n" port)
+ (when (not (zero? (status:exit-val (close-pipe port))))
+ (format #t "failed to import ~a\n" cert)))
+ (delete-file temp)))
+
+ ;; This is necessary because the certificate directory contains
+ ;; files with non-ASCII characters in their names.
+ (setlocale LC_ALL "en_US.utf8")
+ (setenv "LC_ALL" "en_US.utf8")
+
+ (copy-file (string-append (assoc-ref outputs "out")
+ "/lib/security/cacerts")
+ keystore)
+ (chmod keystore #o644)
+ (for-each import-cert (find-files certs-dir "\\.pem$"))
+ (mkdir-p (string-append (assoc-ref outputs "out")
+ "/lib/security"))
+ (mkdir-p (string-append (assoc-ref outputs "jdk")
+ "/lib/security"))
+
+ ;; The cacerts files we are going to overwrite are chmod'ed as
+ ;; read-only (444) in icedtea-8 (which derives from this
+ ;; package). We have to change this so we can overwrite them.
+ (chmod (string-append (assoc-ref outputs "out")
+ "/lib/security/" keystore) #o644)
+ (chmod (string-append (assoc-ref outputs "jdk")
+ "/lib/security/" keystore) #o644)
+
+ (install-file keystore
+ (string-append (assoc-ref outputs "out")
+ "/lib/security"))
+ (install-file keystore
+ (string-append (assoc-ref outputs "jdk")
+ "/lib/security")))))
;; Some of the libraries in the lib/ folder link to libjvm.so.
;; But that shared object is located in the server/ folder, so it
;; cannot be found. This phase creates a symbolic link in the
@@ -1044,6 +1125,7 @@ (define-public openjdk9
("icedtea-8:jdk" ,icedtea-8 "jdk")
;; XXX: The build system fails with newer versions of GNU Make.
("make@4.2" ,gnu-make-4.2)
+ ("nss-certs" ,nss-certs)
("unzip" ,unzip)
("which" ,which)
("zip" ,zip)))
@@ -1126,6 +1208,7 @@ (define-public openjdk10
`(("openjdk9" ,openjdk9)
("openjdk9:jdk" ,openjdk9 "jdk")
("make@4.2" ,gnu-make-4.2)
+ ("nss-certs" ,nss-certs)
("unzip" ,unzip)
("which" ,which)
("zip" ,zip)))))
@@ -1152,6 +1235,7 @@ (define-public openjdk11
#:modules `((guix build gnu-build-system)
(guix build utils)
(ice-9 match)
+ (ice-9 popen)
(srfi srfi-1)
(srfi srfi-26))
#:disallowed-references (list (gexp-input openjdk10)
@@ -1394,6 +1478,7 @@ (define-public openjdk11
openjdk10
`(,openjdk10 "jdk")
gnu-make-4.2
+ nss-certs
pkg-config
unzip
which
base-commit: c95104c2e96f660d482e603c497c1e01968788d3
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#66879] [PATCH v2 2/5] guix: ant: Optionally build with java modules.
2023-11-02 6:50 ` [bug#66879] [PATCH v2 1/5] gnu: openjdk9: Install default certificates Julien Lepiller
@ 2023-11-02 6:50 ` Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 3/5] gnu: Add java-jakarta-json Julien Lepiller
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Julien Lepiller @ 2023-11-02 6:50 UTC (permalink / raw)
To: 66879; +Cc: Björn Höfling, Julien Lepiller
Modules were introduced in Java 9 and are not supported by the default
icedtea compiler, so this feature is disabled by default.
* guix/build-system/ant.scm (ant-build): Add use-java-modules?
parameter.
* guix/build/ant-build-system.scm (default-build.xml)
(configure): Use it.
Change-Id: I3b99238e4cd262332fa5c818be1af5477c7374fd
---
guix/build-system/ant.scm | 2 ++
guix/build/ant-build-system.scm | 31 +++++++++++++++++++++++--------
2 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/guix/build-system/ant.scm b/guix/build-system/ant.scm
index e191fd3c99..84bf951fab 100644
--- a/guix/build-system/ant.scm
+++ b/guix/build-system/ant.scm
@@ -103,6 +103,7 @@ (define* (ant-build name inputs
(build-target "jar")
(jar-name #f)
(main-class #f)
+ (use-java-modules? #f)
(test-include (list "**/*Test.java"))
(test-exclude (list "**/Abstract*.java"))
(source-dir "src")
@@ -131,6 +132,7 @@ (define* (ant-build name inputs
#:build-target #$build-target
#:jar-name #$jar-name
#:main-class #$main-class
+ #:use-java-modules? #$use-java-modules?
#:test-include (list #$@test-include)
#:test-exclude (list #$@test-exclude)
#:source-dir #$source-dir
diff --git a/guix/build/ant-build-system.scm b/guix/build/ant-build-system.scm
index d29912bf59..ced34177f4 100644
--- a/guix/build/ant-build-system.scm
+++ b/guix/build/ant-build-system.scm
@@ -37,6 +37,7 @@ (define-module (guix build ant-build-system)
(define* (default-build.xml jar-name prefix #:optional
(source-dir ".") (test-dir "./test") (main-class #f)
+ (use-java-modules? #f)
(test-include '("**/*Test.java"))
(test-exclude '("**/Abstract*Test.java")))
"Create a simple build.xml with standard targets for Ant."
@@ -65,7 +66,7 @@ (define* (default-build.xml jar-name prefix #:optional
(value "first")))
(property (@ (environment "env")))
(path (@ (id "classpath"))
- (pathelement (@ (location "${env.CLASSPATH}"))))
+ (pathelement (@ (path "${env.CLASSPATH}"))))
(target (@ (name "manifest"))
(mkdir (@ (dir "${manifest.dir}")))
@@ -79,18 +80,30 @@ (define* (default-build.xml jar-name prefix #:optional
(mkdir (@ (dir "${classes.dir}")))
(javac (@ (includeantruntime "false")
(srcdir ,source-dir)
- (destdir "${classes.dir}")
- (classpath (@ (refid "classpath"))))))
+ (destdir "${classes.dir}"))
+ ,(if use-java-modules?
+ `((modulepath (@ (refid "classpath"))))
+ '())
+ (classpath (@ (refid "classpath")))))
(target (@ (name "compile-tests"))
(mkdir (@ (dir "${test.classes.dir}")))
(javac (@ (includeantruntime "false")
(srcdir ,test-dir)
(destdir "${test.classes.dir}"))
- (classpath
- (pathelement (@ (path "${env.CLASSPATH}")))
- (pathelement (@ (location "${classes.dir}")))
- (pathelement (@ (location "${test.classes.dir}"))))))
+ ,(if use-java-modules?
+ `((classpath
+ (pathelement
+ (@ (path "${env.CLASSPATH}")))
+ (pathelement
+ (@ (location "${classes.dir}")))
+ (pathelement
+ (@ (location "${test.classes.dir}")))))
+ '())
+ (classpath
+ (pathelement (@ (path "${env.CLASSPATH}")))
+ (pathelement (@ (location "${classes.dir}")))
+ (pathelement (@ (location "${test.classes.dir}"))))))
(target (@ (name "check")
(depends "compile-tests"))
@@ -156,13 +169,15 @@ (define* (configure #:key inputs outputs (jar-name #f)
(source-dir "src")
(test-dir "src/test")
(main-class #f)
+ (use-java-modules? #f)
(test-include '("**/*Test.java"))
(test-exclude '("**/Abstract*.java")) #:allow-other-keys)
(when jar-name
(default-build.xml jar-name
(string-append (assoc-ref outputs "out")
"/share/java")
- source-dir test-dir main-class test-include test-exclude))
+ source-dir test-dir main-class use-java-modules?
+ test-include test-exclude))
(setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
(setenv "CLASSPATH" (generate-classpath inputs))
#t)
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#66879] [PATCH v2 3/5] gnu: Add java-jakarta-json.
2023-11-02 6:50 ` [bug#66879] [PATCH v2 1/5] gnu: openjdk9: Install default certificates Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 2/5] guix: ant: Optionally build with java modules Julien Lepiller
@ 2023-11-02 6:50 ` Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 4/5] gnu: Add java-parsson Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 5/5] gnu: josm: Update to 18822 Julien Lepiller
3 siblings, 0 replies; 8+ messages in thread
From: Julien Lepiller @ 2023-11-02 6:50 UTC (permalink / raw)
To: 66879; +Cc: Björn Höfling, Julien Lepiller
* gnu/packages/java.scm (java-jakarta-json): New variable.
Change-Id: I2c123710f9d31bf71e8fb86ff0d336b6fcfa9674
---
gnu/packages/java.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 567fb05f77..d80e0e9be8 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -13653,6 +13653,33 @@ (define-public java-jsonp-impl
parse, generate, transform and query) JSON messages. This package contains
a reference implementation of that API.")))
+(define-public java-jakarta-json
+ (package
+ (name "java-jakarta-json")
+ (version "2.1.3")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jakartaee/jsonp-api")
+ (commit (string-append version "-RELEASE"))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1q600harqfhlf763l75j4fx7ai7ybp7ga06aiky2a2hg8mhz0s5f"))))
+ (build-system ant-build-system)
+ (arguments
+ `(#:jar-name "jakarta-json.jar"
+ #:source-dir "api/src/main/java"
+ #:tests? #f; no tests
+ #:jdk ,openjdk11))
+ (home-page "https://github.com/jakartaee/jsonp-api")
+ (synopsis "Portable API for JSON handling in Java")
+ (description "This project contains API and Compatible Implementation of
+Jakarta JSON Processing specification. Jakarta JSON Processing provides
+portable APIs to parse, generate, transform, and query JSON documents.")
+ ;; with classpath exception
+ (license license:epl2.0)))
+
(define-public java-xmp
(package
(name "java-xmp")
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#66879] [PATCH v2 4/5] gnu: Add java-parsson.
2023-11-02 6:50 ` [bug#66879] [PATCH v2 1/5] gnu: openjdk9: Install default certificates Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 2/5] guix: ant: Optionally build with java modules Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 3/5] gnu: Add java-jakarta-json Julien Lepiller
@ 2023-11-02 6:50 ` Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 5/5] gnu: josm: Update to 18822 Julien Lepiller
3 siblings, 0 replies; 8+ messages in thread
From: Julien Lepiller @ 2023-11-02 6:50 UTC (permalink / raw)
To: 66879; +Cc: Björn Höfling, Julien Lepiller
* gnu/packages/java.scm (java-parsson): New variable.
Change-Id: Ie564924329e4e0a866e6ed5fe9135c841fb66ae8
---
gnu/packages/java.scm | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index d80e0e9be8..13b5961c3c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -13680,6 +13680,43 @@ (define-public java-jakarta-json
;; with classpath exception
(license license:epl2.0)))
+(define-public java-parsson
+ (package
+ (name "java-parsson")
+ (version "1.1.5")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/eclipse-ee4j/parsson")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "06vvr6qv1ihnk212gdxg4x0sd61lgxk7wf062s7gym5k2h7fms0p"))))
+ (build-system ant-build-system)
+ (arguments
+ `(#:jar-name "parsson.jar"
+ #:source-dir "impl/src/main/java"
+ #:test-dir "impl/src/test"
+ #:use-java-modules? #t
+ #:jdk ,openjdk11
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'copy-resources
+ (lambda _
+ (copy-recursively "impl/src/main/resources"
+ "build/classes"))))))
+ (inputs
+ (list java-jakarta-json))
+ (native-inputs
+ (list java-junit))
+ (home-page "https://github.com/eclipse-ee4j/parsson")
+ (synopsis "Implementation of Jakarta JSON API")
+ (description "Eclipse Parsson is an implementation of the Jakarta JSON
+Processing specification.")
+ ;; with classpath exception
+ (license license:epl2.0)))
+
(define-public java-xmp
(package
(name "java-xmp")
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#66879] [PATCH v2 5/5] gnu: josm: Update to 18822.
2023-11-02 6:50 ` [bug#66879] [PATCH v2 1/5] gnu: openjdk9: Install default certificates Julien Lepiller
` (2 preceding siblings ...)
2023-11-02 6:50 ` [bug#66879] [PATCH v2 4/5] gnu: Add java-parsson Julien Lepiller
@ 2023-11-02 6:50 ` Julien Lepiller
2023-11-02 10:00 ` Andreas Enge
3 siblings, 1 reply; 8+ messages in thread
From: Julien Lepiller @ 2023-11-02 6:50 UTC (permalink / raw)
To: 66879; +Cc: Andreas Enge, Efraim Flashner, Eric Bavier
* gnu/packages/geo.scm (josm): Update to 18822.
[inputs]: Use new json implementation.
[arguments]: Use openjdk11 to prevent warning at startup.
Change-Id: I393e0ed765d1d0da7870595d2eccefae17836eb9
---
gnu/packages/geo.scm | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index a33d446201..dbc8440141 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -1940,7 +1940,7 @@ (define-public java-opening-hours-parser
(define-public josm
(package
(name "josm")
- (version "18646")
+ (version "18822")
(source (origin
(method svn-fetch)
(uri (svn-reference
@@ -1949,7 +1949,7 @@ (define-public josm
(recursive? #f)))
(sha256
(base32
- "0zr3p1i39wi0f29lgb3xrnv6lijrq5ia8jxn4wnq1yz0xdlbg98i"))
+ "0b4q6n3jbqrh7dsfmcf2g0xdd1wjj62sjq8lwvggvrpqlk1fyn1b"))
(file-name (string-append name "-" version "-checkout"))
(modules '((guix build utils)))
(snippet
@@ -1963,17 +1963,18 @@ (define-public josm
(list java-commons-jcs
java-commons-compress
java-jmapviewer
- java-jsonp-api
- java-jsonp-impl ; runtime dependency
+ java-jakarta-json
java-jsr305
java-metadata-extractor
java-opening-hours-parser
java-openjfx-media
+ java-parsson ; runtime dependency
java-signpost-core
java-svg-salamander))
(arguments
`(#:tests? #f
#:jar-name "josm.jar"
+ #:jdk ,openjdk11
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'rm-build.xml
--
2.41.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [bug#66879] [PATCH v2 5/5] gnu: josm: Update to 18822.
2023-11-02 6:50 ` [bug#66879] [PATCH v2 5/5] gnu: josm: Update to 18822 Julien Lepiller
@ 2023-11-02 10:00 ` Andreas Enge
2023-11-09 18:10 ` bug#66879: " Julien Lepiller
0 siblings, 1 reply; 8+ messages in thread
From: Andreas Enge @ 2023-11-02 10:00 UTC (permalink / raw)
To: Julien Lepiller; +Cc: Eric Bavier, Efraim Flashner, 66879
Am Thu, Nov 02, 2023 at 07:50:13AM +0100 schrieb Julien Lepiller:
> * gnu/packages/geo.scm (josm): Update to 18822.
> [inputs]: Use new json implementation.
> [arguments]: Use openjdk11 to prevent warning at startup.
Looks good!
Andreas
^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#66879: [PATCH v2 5/5] gnu: josm: Update to 18822.
2023-11-02 10:00 ` Andreas Enge
@ 2023-11-09 18:10 ` Julien Lepiller
0 siblings, 0 replies; 8+ messages in thread
From: Julien Lepiller @ 2023-11-09 18:10 UTC (permalink / raw)
To: Andreas Enge; +Cc: 66879-done, Efraim Flashner, Eric Bavier
Le Thu, 2 Nov 2023 11:00:16 +0100,
Andreas Enge <andreas@enge.fr> a écrit :
> Am Thu, Nov 02, 2023 at 07:50:13AM +0100 schrieb Julien Lepiller:
> > * gnu/packages/geo.scm (josm): Update to 18822.
> > [inputs]: Use new json implementation.
> > [arguments]: Use openjdk11 to prevent warning at startup.
>
> Looks good!
>
> Andreas
>
Pushed to master as 5392d9db46d6f931233be2f25688481181622bb4 to
71d54f3ac451527d3c741bc1209f6b03329f8571.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-11-09 18:11 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-01 12:53 [bug#66879] [PATCH] gnu: josm: Update to 18822 Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 1/5] gnu: openjdk9: Install default certificates Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 2/5] guix: ant: Optionally build with java modules Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 3/5] gnu: Add java-jakarta-json Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 4/5] gnu: Add java-parsson Julien Lepiller
2023-11-02 6:50 ` [bug#66879] [PATCH v2 5/5] gnu: josm: Update to 18822 Julien Lepiller
2023-11-02 10:00 ` Andreas Enge
2023-11-09 18:10 ` bug#66879: " Julien Lepiller
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).