* [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).