[PATCH 00/12] Package java-openjfx

  • Open
  • quality assurance status badge
Details
4 participants
  • Ioannis Kappas
  • Julien Lepiller
  • Alexey Abramov
  • Ludovic Courtès
Owner
unassigned
Submitted by
Alexey Abramov
Severity
normal
A
A
Alexey Abramov wrote on 17 May 2020 15:28
(address . guix-patches@gnu.org)
20200517132829.1553311-1-levenson@mmer.org
I am sending a series of patches I have for java-openjfx as a prerequisite to
build davmail. Unfortunately tests are still disabled.

Alexey Abramov (12):
gnu: java-openjfx-build: Add helpful patch.
gnu: java-openjfx-build: Fix indentation.
gnu: java-openjfx-graphics: Implement a complete compilation.
gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
gnu: java-openjfx-swing: Add new variable.
gnu: java-openjfx-swt: Add new variable.
gnu: java-openjfx-controls: Add new variable.
gnu: java-openjfx-build: Prepare a patch to build openjfx-web.
gnu: java-openjfx-web: Add new variable.
gnu: java-openjfx-graphics: Replace deprecated library.
gnu: java-openjfx-graphics: Fix package build.
gnu: java-openjfx-web: Fix package build

gnu/local.mk | 3 +
gnu/packages/java.scm | 872 +++++++++++++++++-
...a-openjfx-build-get_guix_jdk_version.patch | 37 +
...ld-swing-compile-JFXPanel-with-JDK-8.patch | 63 ++
...uild-web-Check-xlocale.h-header-file.patch | 55 ++
5 files changed, 1017 insertions(+), 13 deletions(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
create mode 100644 gnu/packages/patches/java-openjfx-build-web-Check-xlocale.h-header-file.patch

--
2.26.2
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 01/12] gnu: java-openjfx-build: Add helpful patch.
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-1-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...a-openjfx-build-get_guix_jdk_version.patch | 37 +++++++++++++++++++
3 files changed, 40 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch
Toggle diff (69 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 118a9e24eb..ad0ad930ad 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1106,6 +1106,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
+ %D%/packages/patches/java-openjfx-build-get_guix_jdk_version.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index a4659240fc..7a1a2f0861 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2499,7 +2499,8 @@ new Date();"))
#t))
(sha256
(base32
- "0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))))
+ "0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
+ (patches (search-patches "java-openjfx-build-get_guix_jdk_version.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch b/gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch
new file mode 100644
index 0000000000..4ebdadc671
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch
@@ -0,0 +1,37 @@
+From d156313340d3edcd78751ea8ed5e66c7668275c3 Mon Sep 17 00:00:00 2001
+From: Alexey Abramov <levenson@mmer.org>
+Date: Sun, 8 Mar 2020 20:07:22 +0100
+Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
+
+Icedtea contains guix in its version, so build.gradle failes to run. Openjfx
+packaging is not trivial, so you will probably need to try build it with
+gradlew.
+
+---
+ build.gradle | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/build.gradle b/build.gradle
+index df82f63..2c626cd 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -742,9 +742,9 @@ try {
+ if (inStream.readLine() != null) {
+ String v = inStream.readLine();
+ if (v != null) {
+- int ib = v.indexOf(" (build ");
++ int ib = v.indexOf(" (guix build ");
+ if (ib != -1) {
+- String ver = v.substring(ib + 8, v.size() - 1);
++ String ver = v.substring(ib + 13, v.size() - 1);
+
+ defineProperty("jdkRuntimeVersion", ver)
+ defineProperty("jdkVersion", jdkRuntimeVersion.split("-")[0])
+@@ -3540,4 +3540,3 @@ compileTargets { t ->
+ }
+ )
+ }
+-
+--
+2.24.1
+
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 02/12] gnu: java-openjfx-build: Fix indentation.
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-2-levenson@mmer.org
---
gnu/packages/java.scm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Toggle diff (19 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 7a1a2f0861..b5757217dd 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2486,10 +2486,10 @@ new Date();"))
(source (origin
(method hg-fetch)
(uri (hg-reference
- (url "http://hg.openjdk.java.net/openjfx/8u-dev/rt")
- (changeset (string-append
- (string-join (string-split version #\.) "u")
- "-ga"))))
+ (url "http://hg.openjdk.java.net/openjfx/8u-dev/rt")
+ (changeset (string-append
+ (string-join (string-split version #\.) "u")
+ "-ga"))))
(file-name (string-append name "-" version "-checkout"))
(modules '((guix build utils)))
(snippet
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 05/12] gnu: java-openjfx-swing: Add new variable.
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-5-levenson@mmer.org
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)
Toggle diff (24 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index e38e691ee5..383a76ca2c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3206,6 +3206,19 @@ distribution.")))
`(("java-openjfx-base" ,java-openjfx-base)
("java-swt" ,java-swt)))))
+(define-public java-openjfx-swing
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swing")
+ (arguments
+ `(#:jar-name "java-openjfx-swing.jar"
+ #:source-dir "modules/swing/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 06/12] gnu: java-openjfx-swt: Add new variable.
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-6-levenson@mmer.org
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)
Toggle diff (24 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 383a76ca2c..beb84331a3 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3219,6 +3219,19 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-swt
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swt")
+ (arguments
+ `(#:jar-name "java-openjfx-swt.jar"
+ #:source-dir "modules/swt/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 07/12] gnu: java-openjfx-controls: Add new variable.
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-7-levenson@mmer.org
---
gnu/packages/java.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
Toggle diff (27 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index beb84331a3..c28c8450b1 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3232,6 +3232,22 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-controls
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-controls")
+ (arguments
+ `(#:jar-name "java-openjfx-controls.jar"
+ #:source-dir "modules/controls/src/main/java"
+ #:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'copy-resources
+ (lambda _
+ (let ((resources (string-append (getcwd) "/modules/controls/src/main/resources")))
+ (copy-recursively resources "build/classes")) #t)))))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
A
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 09/12] gnu: java-openjfx-web: Add new variable.
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-9-levenson@mmer.org
---
gnu/packages/java.scm | 165 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 165 insertions(+)
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 04/12] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-4-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...ld-swing-compile-JFXPanel-with-JDK-8.patch | 63 +++++++++++++++++++
3 files changed, 66 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
Toggle diff (95 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index ad0ad930ad..eaaa54e6f8 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1107,6 +1107,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-get_guix_jdk_version.patch \
+ %D%/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 4b83e963ea..e38e691ee5 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2501,7 +2501,8 @@ new Date();"))
(sha256
(base32
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
- (patches (search-patches "java-openjfx-build-get_guix_jdk_version.patch"))))
+ (patches (search-patches "java-openjfx-build-get_guix_jdk_version.patch"
+ "java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
new file mode 100644
index 0000000000..363ce9509b
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
@@ -0,0 +1,63 @@
+From 173e65937d9e76872df51f7ba39c9d58986dc38f Mon Sep 17 00:00:00 2001
+From: Alexey Abramov <levenson@mmer.org>
+Date: Fri, 3 Jan 2020 01:17:45 +0100
+Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
+
+In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
+has separate getDefaultScaleX() and getDefaultScaleY() methods. See
+https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
+
+Backport the missing port to build openjfx-swing package using JDKu8. For more
+info please see https://bugs.openjdk.java.net/browse/JDK-8149967
+
+---
+ .../java/javafx/embed/swing/JFXPanel.java | 20 ++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+index 97515e2290..614ed656b9 100644
+--- a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
++++ b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+@@ -81,6 +81,7 @@ import sun.awt.AppContext;
+ import sun.awt.CausedFocusEvent;
+ import sun.awt.SunToolkit;
+ import sun.java2d.SunGraphics2D;
++import sun.java2d.SurfaceData;
+ import sun.util.logging.PlatformLogger;
+ import sun.util.logging.PlatformLogger.Level;
+
+@@ -681,6 +682,23 @@
+ e.getCaret().getInsertionIndex());
+ }
+
++ // FIXME: once we move to JDK 9 as the boot JDK we should remove the
++ // reflection code from this method, consider changing it to
++ // use double rather than int, and account for the possibility of
++ // a different scale factor in X and Y.
++ private int getDefaultScale(SurfaceData surfaceData) {
++ /*
++ double scale = surfaceData.getDefaultScaleX();
++ */
++ double scale = 1;
++ try {
++ Method meth = SurfaceData.class.getMethod("getDefaultScaleX");
++ scale = (Double)meth.invoke(surfaceData);
++ } catch (Exception ex) {
++ }
++
++ return (int)Math.round(scale);
++ }
+
+ /**
+ * Overrides the {@link javax.swing.JComponent#paintComponent(Graphics)}
+@@ -720,7 +738,7 @@ public class JFXPanel extends JComponent {
+
+ int newScaleFactor = scaleFactor;
+ if (g instanceof SunGraphics2D) {
+- newScaleFactor = ((SunGraphics2D)g).surfaceData.getDefaultScale();
++ newScaleFactor = getDefaultScale(((SunGraphics2D)g).surfaceData);
+ }
+ if (scaleFactor != newScaleFactor) {
+ resizePixelBuffer(newScaleFactor);
+--
+2.24.1
A
A
Alexey Abramov wrote on 17 May 2020 15:51
[PATCH 08/12] gnu: java-openjfx-build: Prepare a patch to build openjfx-web.
(address . 41360@debbugs.gnu.org)
20200517135138.1651512-8-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-Check-xlocale.h-header-file.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...uild-web-Check-xlocale.h-header-file.patch | 55 +++++++++++++++++++
3 files changed, 58 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-Check-xlocale.h-header-file.patch
Toggle diff (87 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index eaaa54e6f8..591c7c9d46 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1108,6 +1108,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-get_guix_jdk_version.patch \
%D%/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch \
+ %D%/packages/patches/java-openjfx-build-web-Check-xlocale.h-header-file.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index c28c8450b1..ccf347be4c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2502,7 +2502,8 @@ new Date();"))
(base32
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
(patches (search-patches "java-openjfx-build-get_guix_jdk_version.patch"
- "java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch"))))
+ "java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch"
+ "java-openjfx-build-web-Check-xlocale.h-header-file.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-web-Check-xlocale.h-header-file.patch b/gnu/packages/patches/java-openjfx-build-web-Check-xlocale.h-header-file.patch
new file mode 100644
index 0000000000..a5cb9730e4
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-Check-xlocale.h-header-file.patch
@@ -0,0 +1,55 @@
+From 95fe8463a3283f0f2c72fcf3416ebfac095688e5 Mon Sep 17 00:00:00 2001
+From: Alexey Abramov <levenson@mmer.org>
+Date: Sun, 9 Feb 2020 18:31:26 +0100
+Subject: [PATCH] Check <xlocale.h> header file
+
+Few libraries use hard-coded xlocale_h header even though if CMake takes care
+of it properly. Remove defined headers, and rely on CMake preprocessor
+instead.
+
+---
+ .../src/main/native/Source/ThirdParty/libxslt/linux/config.h | 2 +-
+ .../src/main/native/Source/ThirdParty/libxslt/src/config.h.in | 2 +-
+ modules/web/src/main/native/Source/cmake/OptionsCommon.cmake | 1 +
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h b/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
+index bd44c163..b19b45f4 100644
+--- a/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
++++ b/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
+@@ -143,7 +143,7 @@
+ #define HAVE_VSPRINTF 1
+
+ /* Define to 1 if you have the <xlocale.h> header file. */
+-#define HAVE_XLOCALE_H 1
++/* #define HAVE_XLOCALE_H 1 */
+
+ /* Define to 1 if you have the `_stat' function. */
+ /* #undef HAVE__STAT */
+diff --git a/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in b/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
+index 085354e9..0210fce2 100644
+--- a/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
++++ b/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
+@@ -142,7 +142,7 @@
+ #undef HAVE_VSPRINTF
+
+ /* Define to 1 if you have the <xlocale.h> header file. */
+-#undef HAVE_XLOCALE_H
++/* #undef HAVE_XLOCALE_H */
+
+ /* Define to 1 if you have the `_stat' function. */
+ #undef HAVE__STAT
+diff --git a/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake b/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
+index 3bbd2c4a..2b618dd6 100644
+--- a/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
++++ b/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
+@@ -148,6 +148,7 @@ _HAVE_CHECK_INCLUDE(HAVE_STRINGS_H strings.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_PARAM_H sys/param.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_TIME_H sys/time.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_TIMEB_H sys/timeb.h)
++_HAVE_CHECK_INCLUDE(HAVE_XLOCALE_H xlocale.h)
+
+ # Check for functions
+ _HAVE_CHECK_FUNCTION(HAVE_ALIGNED_MALLOC _aligned_malloc)
+--
+2.24.1
L
L
Ludovic Courtès wrote on 23 May 2020 15:58
Re: [bug#41360] [PATCH 01/12] gnu: java-openjfx-build: Add helpful patch.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 41360@debbugs.gnu.org)
87k1127ny7.fsf@gnu.org
Hi Alexey,

Thanks for the patch series!

Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (4 lines)
> * gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
> * gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Add it.

[...]

Toggle quote (3 lines)
> +++ b/gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch
> @@ -0,0 +1,37 @@

Could you shorten this file name a bit? (‘guix lint’ probably complains.)

Toggle quote (5 lines)
> +From d156313340d3edcd78751ea8ed5e66c7668275c3 Mon Sep 17 00:00:00 2001
> +From: Alexey Abramov <levenson@mmer.org>
> +Date: Sun, 8 Mar 2020 20:07:22 +0100
> +Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME

In general I think you can omit the first three lines and just keep the
subject.

Toggle quote (4 lines)
> +Icedtea contains guix in its version, so build.gradle failes to run. Openjfx
> +packaging is not trivial, so you will probably need to try build it with
> +gradlew.

Otherwise LGTM.
L
L
Ludovic Courtès wrote on 23 May 2020 15:58
Re: [bug#41360] [PATCH 02/12] gnu: java-openjfx-build: Fix indentation.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 41360@debbugs.gnu.org)
87ftbq7nxa.fsf@gnu.org
Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (4 lines)
> ---
> gnu/packages/java.scm | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)

Please add a commit log like you did for some of the other patches.
Otherwise LGTM!
L
L
Ludovic Courtès wrote on 23 May 2020 16:04
Re: [bug#41360] [PATCH 03/12] gnu: java-openjfx-graphics: Implement a complete compilation.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 41360@debbugs.gnu.org)
878shi7no2.fsf@gnu.org
Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (4 lines)
> ---
> gnu/packages/java.scm | 643 +++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 635 insertions(+), 8 deletions(-)

Please add a commit log.

Toggle quote (4 lines)
> + (java-aux-class?
> + (lambda (class)
> + (string-match "\\$[0-9]+.class" class)))

Probably “\\.class” instead of “.class”?

Toggle quote (3 lines)
> + (add-after 'chdir-to-a-module-directory 'compile-prism-compilers
> + (lambda _

Maybe add a comment explaining why this phase is necessary.

Toggle quote (8 lines)
> + (let ((prism-compilers-classes "build/classes/jsl-compilers/prism")
> + (prism-src "src/main/jsl-prism/"))
> + (mkdir-p prism-compilers-classes)
> + (apply invoke `("javac"
> + "-d" ,prism-compilers-classes
> + ,@javac/h-flags
> + ,@(find-files prism-src "\\.java"))))

This can be shortened as:

(apply invoke "javac" "-d" prism-compilers-classes
(append javac/h-flags (find-files prism-src "\\.java")))

These two comments apply to the other phases too.

More generally, why are there so many phases? How do people normally
build it? Gradle?

Would it make sense to factorize helpers in a new (gnu build
java-openjfx) module or similar?

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote on 23 May 2020 16:05
Re: [bug#41360] [PATCH 04/12] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 41360@debbugs.gnu.org)
874ks67nmv.fsf@gnu.org
Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (5 lines)
> * gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
> * gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch:
> New file.
> * gnu/local.mk (dist_patch_DATA): Add it.

[...]

Toggle quote (14 lines)
> +++ b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
> @@ -0,0 +1,63 @@
> +From 173e65937d9e76872df51f7ba39c9d58986dc38f Mon Sep 17 00:00:00 2001
> +From: Alexey Abramov <levenson@mmer.org>
> +Date: Fri, 3 Jan 2020 01:17:45 +0100
> +Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
> +
> +In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
> +has separate getDefaultScaleX() and getDefaultScaleY() methods. See
> +https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
> +
> +Backport the missing port to build openjfx-swing package using JDKu8. For more
> +info please see https://bugs.openjdk.java.net/browse/JDK-8149967

Same comment as earlier regarding the patch. :-)

Otherwise LGTM!
L
L
Ludovic Courtès wrote on 23 May 2020 16:05
Re: [bug#41360] [PATCH 05/12] gnu: java-openjfx-swing: Add new variable.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 41360@debbugs.gnu.org)
87zh9y691n.fsf@gnu.org
Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (4 lines)
> ---
> gnu/packages/java.scm | 13 +++++++++++++
> 1 file changed, 13 insertions(+)

Please add a commit log.
L
L
Ludovic Courtès wrote on 23 May 2020 16:09
Re: [bug#41360] [PATCH 09/12] gnu: java-openjfx-web: Add new variable.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 41360@debbugs.gnu.org)
87tv0668us.fsf@gnu.org
Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (4 lines)
> ---
> gnu/packages/java.scm | 165 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 165 insertions(+)

Please add a commit log.

[...]

Toggle quote (3 lines)
> + (add-after 'build 'generate-headers
> + (lambda* (#:key inputs #:allow-other-keys)

Could you add a comment explaining what this phase does and why we’re
doing all this? (Same for the other phases.)

Toggle quote (7 lines)
> + (let* ((module (string-append (getcwd) "/modules/web"))
> + (classes (string-append module "/build/classes/java/main"))
> + (web-generated-headers (string-append module "/build/generated-src/headers"))
> + (web-generated-classes '("com.sun.webkit.ContextMenu"
> + "com.sun.webkit.ContextMenuItem"
> + "com.sun.webkit.CursorManager"

Perhaps add a comment explaining how you obtained this list of classes
so that our future selves know how to update it.

Since this is a Web thing, could you check whether it contains pre-built
(“minified”) JavaScript? If it does, that’s a problem because we
generally provide only software built from source.

Could you send an updated patch series?

Thank you for the hard work!

Ludo’.
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 2/9] gnu: java-openjfx-build: Fix indentation.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-2-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Change the indentation
of the uri dirictive.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

Toggle diff (21 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index d569ed57d6..43f0f37b91 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2486,10 +2486,10 @@ new Date();"))
(source (origin
(method hg-fetch)
(uri (hg-reference
- (url "http://hg.openjdk.java.net/openjfx/8u-dev/rt")
- (changeset (string-append
- (string-join (string-split version #\.) "u")
- "-ga"))))
+ (url "http://hg.openjdk.java.net/openjfx/8u-dev/rt")
+ (changeset (string-append
+ (string-join (string-split version #\.) "u")
+ "-ga"))))
(file-name (string-append name "-" version "-checkout"))
(modules '((guix build utils)))
(snippet
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 5/9] gnu: java-openjfx-swing: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-5-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-graphics): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 938fc0695c..f124062035 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3205,6 +3205,19 @@ distribution.")))
`(("java-openjfx-base" ,java-openjfx-base)
("java-swt" ,java-swt)))))
+(define-public java-openjfx-swing
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swing")
+ (arguments
+ `(#:jar-name "java-openjfx-swing.jar"
+ #:source-dir "modules/swing/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 6/9] gnu: java-openjfx-swt: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-6-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-swing): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f124062035..f8d47d7eed 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3218,6 +3218,19 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-swt
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swt")
+ (arguments
+ `(#:jar-name "java-openjfx-swt.jar"
+ #:source-dir "modules/swt/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 7/9] gnu: java-openjfx-controls: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-7-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-swt): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (29 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f8d47d7eed..ec9e24b8d3 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3231,6 +3231,22 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-controls
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-controls")
+ (arguments
+ `(#:jar-name "java-openjfx-controls.jar"
+ #:source-dir "modules/controls/src/main/java"
+ #:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'copy-resources
+ (lambda _
+ (let ((resources (string-append (getcwd) "/modules/controls/src/main/resources")))
+ (copy-recursively resources "build/classes")) #t)))))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 9/9] gnu: java-openjfx-web: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-9-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-web): New variable.

We build not only a web component here, but webkit as well. Webkit requires
some extra 3rd party libraries icu, libxml, libxslt and sqlite which are
already in openjfx source bundle.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 176 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 176 insertions(+)

Toggle diff (210 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f8a5b71a48..0d2f268764 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -50,11 +50,13 @@
#:use-module (gnu packages cpio)
#:use-module (gnu packages cups)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cmake)
#:use-module (gnu packages elf)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gettext)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages gperf)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
#:use-module (gnu packages ghostscript) ;lcms
@@ -74,8 +76,10 @@
#:use-module (gnu packages wget)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages perl)
+ #:use-module (gnu packages python)
#:use-module (gnu packages popt)
#:use-module (gnu packages kerberos)
+ #:use-module (gnu packages ruby)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
#:use-module (gnu packages texinfo)
@@ -3263,6 +3267,178 @@ modern, efficient, and fully featured toolkit for developing rich client
applications. This package contains media-related classes for the
OpenJFX distribution.")))
+(define-public java-openjfx-web
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-web")
+ (arguments
+ `(#:jar-name "java-openjfx-web.jar"
+ #:source-dir (string-join '("modules/web/src/main/java"
+ "modules/web/src/main/native/Source/WebCore/bindings/java/dom3")
+ ";")
+ #:tests? #f
+ #:modules ((ice-9 match)
+ (guix build ant-build-system)
+ (guix build utils))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'build
+ (lambda* _
+ (invoke "ant" "compile" "-Dclasses.dir=modules/web/build/classes/java/main")
+ #t))
+
+ (add-after 'build 'generate-headers
+ ;; XX: We provide only software built from source, so let's build
+ ;; webkit as well. List of webkit classes can be found in
+ ;; build.gradle:2516. We need to generate headers for the upcoming
+ ;; compilation step first and put them in generated-src/headers
+ ;; location.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/web/build/classes/java/main")
+ (web-generated-headers "modules/web/build/generated-src/headers")
+ (web-generated-classes '("com.sun.webkit.ContextMenu"
+ "com.sun.webkit.ContextMenuItem"
+ "com.sun.webkit.CursorManager"
+ "com.sun.webkit.PageCache"
+ "com.sun.webkit.PopupMenu"
+ "com.sun.webkit.SharedBuffer"
+ "com.sun.webkit.WebPage"
+ "com.sun.webkit.LoadListenerClient"
+ "com.sun.webkit.event.WCFocusEvent"
+ "com.sun.webkit.event.WCKeyEvent"
+ "com.sun.webkit.event.WCMouseEvent"
+ "com.sun.webkit.event.WCMouseWheelEvent"
+ "com.sun.webkit.graphics.GraphicsDecoder"
+ "com.sun.webkit.graphics.RenderMediaControls"
+ "com.sun.webkit.graphics.RenderTheme"
+ "com.sun.webkit.graphics.ScrollBarTheme"
+ "com.sun.webkit.graphics.WCMediaPlayer"
+ "com.sun.webkit.graphics.WCGraphicsManager"
+ "com.sun.webkit.graphics.WCRenderQueue"
+ "com.sun.webkit.graphics.WCPath"
+ "com.sun.webkit.graphics.WCPathIterator"
+ "com.sun.webkit.Timer"
+ "com.sun.webkit.WCFrameView"
+ "com.sun.webkit.WCPasteboard"
+ "com.sun.webkit.WCPluginWidget"
+ "com.sun.webkit.dom.CharacterDataImpl"
+ "com.sun.webkit.dom.JSObject"
+ "com.sun.webkit.network.SocketStreamHandle"
+ "com.sun.webkit.network.URLLoader"
+ "com.sun.webkit.text.TextBreakIterator"
+ "com.sun.webkit.text.TextNormalizer"))
+ (graphics (assoc-ref inputs "java-openjfx-graphics")))
+ (mkdir-p web-generated-headers)
+ (apply invoke
+ "javah"
+ "-Djava.ext.dirs="
+ "-XDignore.symbol.file"
+ "-XDuseUnsharedTable=true"
+ "-d" web-generated-headers
+ "-cp" (string-join (cons* classes (find-files graphics "\\.jar$")) ":")
+ web-generated-classes))
+ #t))
+
+ (add-after 'generate-headers 'compile-native-linux
+ (lambda* (#:key inputs system outputs #:allow-other-keys)
+ (let* ((module (string-append (getcwd) "/modules/web"))
+ ;;
+ (webkit-native-dest (string-append module "/build/linux"))
+ (webkit-native-src (string-append module "/src/main/native"))
+ ;;
+ (lib (string-append (assoc-ref outputs "out") "/lib"))
+ ;; uname -m
+ (machine (match system
+ ("x86_64-linux" "x86_64")
+ ("i686-linux" "i686")
+ ;; Prevent errors when querying this
+ ;; package on unsupported platforms,
+ ;; e.g. when running "guix package
+ ;; --search="
+ (_ "UNSUPPORTED"))))
+
+ (mkdir-p webkit-native-dest)
+ (setenv "PYTHONDONTWRITEBYTECODE" "1")
+ (setenv "WEBKIT_OUTPUTDIR" webkit-native-dest)
+ (apply invoke `("perl"
+ ,(string-append webkit-native-src "/Tools/Scripts/set-webkit-configuration")
+ ,(if ,(target-64bit?) "--64-bit" "--32-bit")
+ "--release"))
+
+ (invoke "perl"
+ (string-append webkit-native-src "/Tools/Scripts/build-webkit")
+ "--java" ; webkit port
+ ;; We disable all the updates, and build 3rd-party libs
+ ;; lice icu, libxml, libxslt and sqlite. Source code
+ ;; sits modules/web/src/main/native/Source/ThirdPArty.
+ "--skip-library-update"
+ "--verbose"
+ (string-append
+ "--cmakeargs="
+ (string-join
+ (list "-DCMAKE_SYSTEM_NAME=Linux"
+ ;; Ensure that the libraries are installed into /lib
+ (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
+ ;; Add input libraries to rpath
+ "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
+ ;; Enable verbose output from builds
+ "-DCMAKE_VERBOSE_MAKEFILE=ON"
+ (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
+ "\"-Wl,-rpath=" lib "\"")
+ (string-append "-DCMAKE_SYSTEM_PROCESSOR=" machine)
+
+ "-DJAVAFX_RELEASE_VERSION=8.0"
+ "-W"
+ "-Wall"
+ "-Werror=implicit-function-declaration"
+ "-Wl,--gc-sections"
+ "-Wno-parentheses"
+ "-Wno-unused"
+ "-fPIC"
+ "-fno-omit-frame-pointer"
+ "-fno-strict-aliasing"
+ "-fstack-protector")))))
+ #t))
+
+ (add-after 'compile-native-linux '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$")))))
+
+ (add-before 'install 'build-jar
+ (lambda _
+ (let* ((resources "modules/web/src/main/resources")
+ (classes "modules/web/build/classes/java/main"))
+ (copy-recursively resources classes)
+ (invoke "ant" "jar" (string-append "-Dclasses.dir=" classes)))
+ #t)))))
+
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (native-inputs
+ `(("java-junit" ,java-junit)
+ ("java-hamcrest-core" ,java-hamcrest-core)
+ ("cmake" ,cmake)
+ ;; XX: With current gcc (gcc-7.5) the build breaks on building
+ ;; thirdparty libraries like xslt. c++14 is used to build
+ ;; them. CMAKE_CXX_STANDARD doesn't take any effect here for some
+ ;; reason.
+ ("gcc" ,gcc-5)
+ ("glibc" ,glibc-2.29)
+ ("gtk" ,gtk+-2)
+ ("gtk3" ,gtk+)
+ ("ruby" ,ruby)
+ ("perl" ,perl)
+ ("gperf" ,gperf)
+ ("python-2" ,python-2)
+ ("pkg-config" ,pkg-config)))
+ (propagated-inputs
+ `(("java-openjfx-controls" ,java-openjfx-controls)
+ ("java-openjfx-media" ,java-openjfx-media)
+ ("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public javacc-4
(package
(name "javacc")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 1/9] gnu: java-openjfx-build: Add helpful patch.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-1-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-jdk_version.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 ++-
.../java-openjfx-build-jdk_version.patch | 27 +++++++++++++++++++
3 files changed, 30 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-jdk_version.patch

Toggle diff (61 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 768943a67a..cbf0a20a9e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1110,6 +1110,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
+ %D%/packages/patches/java-openjfx-build-jdk_version.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index b12c3ca95c..d569ed57d6 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2499,7 +2499,8 @@ new Date();"))
#t))
(sha256
(base32
- "0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))))
+ "0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
+ (patches (search-patches "java-openjfx-build-jdk_version.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-jdk_version.patch b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
new file mode 100644
index 0000000000..7be954467a
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
@@ -0,0 +1,27 @@
+Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
+
+Icedtea contains guix in its version, so build.gradle failes to run. Openjfx
+packaging is not trivial, so you will probably need to try build it with
+gradlew.
+
+---
+ build.gradle | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/build.gradle b/build.gradle
+index df82f63..2c626cd 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -742,9 +742,9 @@ try {
+ if (inStream.readLine() != null) {
+ String v = inStream.readLine();
+ if (v != null) {
+- int ib = v.indexOf(" (build ");
++ int ib = v.indexOf(" (guix build ");
+ if (ib != -1) {
+- String ver = v.substring(ib + 8, v.size() - 1);
++ String ver = v.substring(ib + 13, v.size() - 1);
+
+ defineProperty("jdkRuntimeVersion", ver)
+ defineProperty("jdkVersion", jdkRuntimeVersion.split("-")[0])
+2.24.1
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 4/9] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(address . 41360@debbugs.gnu.org)
20200530164123.30557-4-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...va-openjfx-build-swing-JFXPanel-JDK8.patch | 60 +++++++++++++++++++
3 files changed, 63 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch

Toggle diff (94 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index cbf0a20a9e..e15554f1c2 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1111,6 +1111,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-jdk_version.patch \
+ %D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 9d73d9a7e8..938fc0695c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2501,7 +2501,8 @@ new Date();"))
(sha256
(base32
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
- (patches (search-patches "java-openjfx-build-jdk_version.patch"))))
+ (patches (search-patches "java-openjfx-build-jdk_version.patch"
+ "java-openjfx-build-swing-JFXPanel-JDK8.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch b/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch
new file mode 100644
index 0000000000..b540048621
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch
@@ -0,0 +1,60 @@
+Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
+
+In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
+has separate getDefaultScaleX() and getDefaultScaleY() methods. See
+https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
+
+Backport the missing port to build openjfx-swing package using JDKu8. For more
+info please see https://bugs.openjdk.java.net/browse/JDK-8149967
+
+---
+ .../java/javafx/embed/swing/JFXPanel.java | 20 ++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+index 97515e2290..614ed656b9 100644
+--- a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
++++ b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+@@ -81,6 +81,7 @@ import sun.awt.AppContext;
+ import sun.awt.CausedFocusEvent;
+ import sun.awt.SunToolkit;
+ import sun.java2d.SunGraphics2D;
++import sun.java2d.SurfaceData;
+ import sun.util.logging.PlatformLogger;
+ import sun.util.logging.PlatformLogger.Level;
+
+@@ -681,6 +682,23 @@
+ e.getCaret().getInsertionIndex());
+ }
+
++ // FIXME: once we move to JDK 9 as the boot JDK we should remove the
++ // reflection code from this method, consider changing it to
++ // use double rather than int, and account for the possibility of
++ // a different scale factor in X and Y.
++ private int getDefaultScale(SurfaceData surfaceData) {
++ /*
++ double scale = surfaceData.getDefaultScaleX();
++ */
++ double scale = 1;
++ try {
++ Method meth = SurfaceData.class.getMethod("getDefaultScaleX");
++ scale = (Double)meth.invoke(surfaceData);
++ } catch (Exception ex) {
++ }
++
++ return (int)Math.round(scale);
++ }
+
+ /**
+ * Overrides the {@link javax.swing.JComponent#paintComponent(Graphics)}
+@@ -720,7 +738,7 @@ public class JFXPanel extends JComponent {
+
+ int newScaleFactor = scaleFactor;
+ if (g instanceof SunGraphics2D) {
+- newScaleFactor = ((SunGraphics2D)g).surfaceData.getDefaultScale();
++ newScaleFactor = getDefaultScale(((SunGraphics2D)g).surfaceData);
+ }
+ if (scaleFactor != newScaleFactor) {
+ resizePixelBuffer(newScaleFactor);
+--
+2.24.1
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 3/9] gnu: java-openjfx-graphics: Implement a complete compilation.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-3-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-graphics): Add stages to build
libdecora_sse, prism_common, glassgtk2, iio, prism_sw, prism_es2,
font_freetype, glassgtk3, font, font_pango and glass libraries.

All the steps were taken by inspecting ./gradlew build --info result.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 642 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 634 insertions(+), 8 deletions(-)

Toggle diff (326 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 43f0f37b91..9d73d9a7e8 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -56,6 +56,7 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gl)
+ #:use-module (gnu packages glib)
#:use-module (gnu packages ghostscript) ;lcms
#:use-module (gnu packages gnome)
#:use-module (gnu packages groovy)
@@ -2567,16 +2568,641 @@ distribution.")))
(arguments
`(#:jar-name "java-openjfx-graphics.jar"
#:source-dir "modules/graphics/src/main/java"
- #:tests? #f; require X
- #:test-dir "modules/graphics/src/test"))
+ #:tests? #f ; requires X
+ #:test-dir "modules/graphics/src/test"
+ #:test-include (list "**/*Test.*")
+ #:modules ((guix build ant-build-system)
+ (guix build utils)
+ (srfi srfi-1)
+ (srfi srfi-26)
+ (ice-9 regex)
+ (ice-9 match))
+ #:phases
+ (let* ((jdk (assoc-ref %build-inputs "jdk"))
+ (javac/h-flags
+ '(;; When javac is compiling code it doesn't link
+ ;; against rt.jar by default. Instead it uses special
+ ;; symbol file lib/ct.sym with class stubs.
+ ;; Surprisingly this file contains many but not *all*
+ ;; of internal classes.
+ "-XDignore.symbol.file"
+ ;; It’s an internal option for JDK 1.7+ that prevents
+ ;; the compiler from sharing a table that will never
+ ;; be reused. When shared, it can’t be garbage
+ ;; collected, continues to accumulate data, and
+ ;; therefore wastes memory.
+ "-XDuseUnsharedTable=true"))
+ (common-flags
+ '("-fno-strict-aliasing" "-fPIC" "-fno-omit-frame-pointer" ;; optimization flags
+ "-fstack-protector"
+ "-W" "-Wall" "-Wno-unused" "-Wno-parentheses" "-Werror=implicit-function-declaration"))
+ (cc-flags
+ `(,@common-flags "-c" "-ffunction-sections" "-fdata-sections"
+ "-I" ,(string-append jdk "/include")
+ "-I" ,(string-append jdk "/include/linux")))
+ (link-flags
+ `("-static-libgcc" "-static-libstdc++" "-shared" ,@common-flags
+ "-z" "relro"
+ "-Wl,--gc-sections"))
+ (java-aux-class?
+ (lambda (class)
+ (string-match "\\$[0-9]+\\.class" class)))
+ (java-list-classes
+ (lambda (path)
+ ;; For each .java file we need to figure out what
+ ;; class the .java file belongs in and convert it to a
+ ;; class name.
+ (filter-map
+ (lambda (class)
+ (let* ((rx (make-regexp (string-append path file-name-separator-string "?")))
+ (class (string-drop-right class (string-length ".class")))
+ (class (match:suffix (regexp-exec rx class))))
+ (if (java-aux-class? class)
+ #f
+ (string-join (string-split class #\/) "."))))
+ (find-files path "\\.class$")))))
+ (modify-phases %standard-phases
+
+ (replace 'build
+ (lambda _
+ ;; Do not mix different classes. There will be more stuff in build/classes
+ (invoke "ant" "compile" "-Dclasses.dir=modules/graphics/build/classes/java/main")
+ #t))
+
+ ;; XX: Description can be found in build.gradle:1429. Currently
+ ;; there is no sdk creation step.
+ ;;
+ ;; The Decora and Prism JSL files have to be generated in a very specific set of steps.
+ ;; 1) Compile the *Compile.java classes. These live in src/main/jsl-* and will be
+ ;; output to $buildDir/classes/jsl-compilers/* (where * == decora or prism).
+ ;; 2) Generate source files from the JSL files contained in src/main/jsl-*. These
+ ;; will be output to $buildDir/generated-src/jsl-*
+ ;; 3) Compile the JSL Java sources in $buildDir/generated-src/jsl-* and put the output
+ ;; into classes/jsl-*
+ ;; 4) Compile the native JSL sources in $buildDir/generated-src/jsl-* and put the obj
+ ;; files into native/jsl-* and the resulting library into libs/jsl-*.dll|so|dylib
+ ;; 5) Modify the jar step to include classes/jsl-*
+ ;; The native library must be copied over during SDK creation time in the "sdk" task. In
+ ;; addition to these steps, the clean task is created. Note that I didn't bother to create
+ ;; a new task for each of the decora files, preferring instead just to create a rule?? Also
+ ;; need "clean" tasks for each compile task.
+ (add-after 'build 'compile-prism-compilers
+ (lambda _
+ (let ((prism-compilers-classes "modules/graphics/build/classes/jsl-compilers/prism")
+ (prism-src "modules/graphics/src/main/jsl-prism/"))
+ (mkdir-p prism-compilers-classes)
+
+ (apply invoke "javac" "-d" prism-compilers-classes
+ (append javac/h-flags (find-files prism-src "\\.java"))))
+
+ #t))
+
+ (add-after 'compile-prism-compilers 'generate-prism-shaders
+ (lambda _
+ (let ((prism-compilers-classes "modules/graphics/build/classes/jsl-compilers/prism")
+ (prism-src "modules/graphics/src/main/jsl-prism/")
+ (prism-gen-src "modules/graphics/build/generated-src/jsl-prism"))
+ (mkdir-p prism-gen-src)
+ (for-each (lambda (file)
+ (apply invoke "java"
+ "-cp" (string-join (list
+ ;; For CompileJSL
+ prism-compilers-classes
+ ;; jsl files are there
+ prism-src
+ (getenv "CLASSPATH"))
+ ":")
+ "CompileJSL"
+ "-i" prism-src
+ "-o" prism-gen-src
+ "-t"
+ "-pkg" "com/sun/prism"
+ "-d3d"
+ "-es2"
+ "-name" (list file)))
+ (find-files prism-src "\\.jsl$")))
+ #t))
+
+ (add-after 'generate-prism-shaders 'compile-prism-shaders
+ (lambda _
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (prism-classes "modules/graphics/build/classes/jsl-prism")
+ (prism-gen-src "modules/graphics/build/generated-src/jsl-prism")
+ (prism-gen-shaders-src (string-append prism-gen-src "/com/sun/prism/shader")))
+ (mkdir-p prism-classes)
+ (apply invoke "javac"
+ "-d" prism-classes
+ "-cp" (string-append classes ":" (getenv "CLASSPATH"))
+ (append javac/h-flags (find-files prism-gen-shaders-src))))
+ #t))
+
+ (add-after 'compile-prism-shaders 'compile-decora-compilers
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/"))
+ (mkdir-p decora-compilers-classes)
+ (apply invoke "javac"
+ "-d" decora-compilers-classes
+ "-cp" (string-append classes ":" (getenv "CLASSPATH"))
+ (append javac/h-flags (find-files decora-src "\\.java"))))
+ #t))
+
+ (add-after 'compile-decora-compilers 'generate-decora-shaders
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/")
+ (decora-components '([(file-name . "ColorAdjust")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "Brightpass")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "SepiaTone")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "PerspectiveTransform")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "DisplacementMap")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "InvertMask")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "Blend")
+ (generator . "CompileBlend")
+ (outputs . "-all")]
+ [(file-name . "PhongLighting")
+ (generator . "CompilePhong")
+ (outputs . "-all")]
+ [(file-name . "LinearConvolve")
+ (generator . "CompileLinearConvolve")
+ (outputs . "-hw")]
+ [(file-name . "LinearConvolveShadow")
+ (generator . "CompileLinearConvolve")
+ (outputs . "-hw")])))
+ (mkdir-p decora-gen-src)
+ (for-each (match-lambda
+ ((('file-name . file-name)
+ ('generator . generator)
+ ('outputs . outputs))
+ (apply invoke "java"
+ "-cp" (string-join (cons* classes
+ decora-src
+ ;; CompileJSL
+ decora-compilers-classes
+ decora-classes
+ ;; We need resources from the build
+ "buildSrc/src/main/resources"
+ (list (getenv "CLASSPATH")))
+ ":")
+ generator
+ "-i" decora-src
+ "-o" decora-gen-src
+ "-t"
+ "-pkg" "com/sun/scenario/effect"
+ outputs
+ (list file-name))))
+ decora-components)
+ #t)))
+
+ (add-after 'generate-decora-shaders 'compile-decora-shaders
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora"))
+ (mkdir-p decora-classes)
+ (apply invoke "javac"
+ "-d" decora-classes
+ "-cp" classes
+ (append javac/h-flags (find-files decora-gen-src "\\.java$"))))
+ #t))
+
+ (add-after 'compile-decora-shaders 'compile-decora-native-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (decora-gen-headers "modules/graphics/build/generated-src/headers/jsl-decora")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
+ (decora-native-lib "modules/graphics/build/libs/jsl-decora/linux/libdecora_sse.so")
+ (decora-native-obj "modules/graphics/build/native/jsl-decora/linux")
+ (decora-native-src "modules/graphics/src/main/native-decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-cc-flags `(,@cc-flags "-ffast-math")))
+ (mkdir-p decora-gen-headers)
+ (apply invoke "javah"
+ "-d" decora-gen-headers
+ "-cp" (string-join (list classes decora-classes) ":")
+ (append javac/h-flags
+ (filter (cut string-prefix? "com.sun.scenario.effect.impl.sw.sse" <>)
+ (append (java-list-classes classes)
+ (java-list-classes decora-classes)))))
+ (mkdir-p decora-native-obj)
+ (for-each (lambda (cc)
+ (apply invoke "gcc"
+ "-I" decora-gen-headers
+ "-I" decora-gen-src
+ "-I" decora-native-src
+ "-o" (string-append decora-native-obj "/" (basename cc ".cc") ".obj")
+ (append decora-cc-flags (list cc))))
+ (append (find-files decora-gen-src "\\.cc$")
+ (find-files decora-native-src "\\.cc$")))
+ (mkdir-p (dirname decora-native-lib))
+ (apply invoke "g++" "-o" decora-native-lib
+ (append link-flags (find-files decora-native-obj "\\.obj$"))))
+ #t))
+
+ (add-after 'compile-decora-native-lib 'compile-linux-font-native-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (font-gen-headers "modules/graphics/build/generated-src/headers/font/linux")
+ (font-native-lib "modules/graphics/build/libs/font/linux/libjavafx_font.so")
+ (font-native-obj "modules/graphics/build/native/font/linux")
+ (font-native-src "modules/graphics/src/main/native-font")
+ ;;
+ (font-cc-flags `("-DJFXFONT_PLUS" ,@cc-flags)))
+ (mkdir-p font-gen-headers)
+ (apply invoke "javah"
+ "-d" font-gen-headers
+ "-cp" classes
+ (append javac/h-flags
+ (filter (lambda (class)
+ (or (string-prefix? "com.sun.javafx.font" class)
+ (string-prefix? "com.sun.javafx.text" class)))
+ (java-list-classes classes))))
+ (mkdir-p font-native-obj)
+ (for-each (lambda (cc)
+ (apply invoke "gcc"
+ "-I" font-gen-headers
+ "-I" font-native-src
+ "-o" (string-append font-native-obj "/"
+ (basename cc ".c") ".obj")
+ (append font-cc-flags (list cc))))
+ (find-files font-native-src "\\.c$"))
+ (mkdir-p (dirname font-native-lib))
+ (apply invoke "g++"
+ "-o" font-native-lib
+ (append link-flags
+ (find-files font-native-obj "\\.obj$"))))
+ #t))
+
+ (add-after 'compile-linux-font-native-lib 'compile-linux-font-freetype
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ ;;
+ (font-freetype-gen-headers "modules/graphics/build/generated-src/headers/fontFreetype/linux")
+ (font-freetype-native-lib "modules/graphics/build/libs/fontFreetype/linux/libjavafx_font_freetype.so")
+ (font-freetype-native-obj "modules/graphics/build/native/fontFreetype/linux")
+ (font-freetype-native-src "modules/graphics/src/main/native-font/freetype.c")
+ (font-freetype-cc-flags `("-DJFXFONT_PLUS" "-D_ENABLE_PANGO"
+ "$(pkg-config --cflags freetype2)" ,@cc-flags))
+ (font-freetype-link-flags `("$(pkg-config --libs freetype2)" ,@link-flags)))
+ (mkdir-p font-freetype-gen-headers)
+ (apply invoke "javah"
+ "-d" font-freetype-gen-headers
+ "-cp" classes
+ (append javac/h-flags
+ (filter (cut string-prefix? "com.sun.javafx.font.freetype.OSFreetype" <>)
+ (java-list-classes classes))))
+ (mkdir-p font-freetype-native-obj)
+ (invoke "bash" "-c"
+ (string-join `("gcc"
+ ,@font-freetype-cc-flags
+ "-I" ,font-freetype-gen-headers
+ "-I" ,(dirname font-freetype-native-src)
+ "-o" ,(string-append font-freetype-native-obj "/"
+
This message was truncated. Download the full message here.
A
A
Alexey Abramov wrote on 30 May 2020 18:41
[PATCH v2 8/9] gnu: java-openjfx-build: Prepare a patch to build openjfx-web.
(address . 41360@debbugs.gnu.org)
20200530164123.30557-8-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
.../java-openjfx-build-web-xlocale.h.patch | 52 +++++++++++++++++++
3 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch

Toggle diff (86 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index e15554f1c2..71d7079134 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1112,6 +1112,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-jdk_version.patch \
%D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
+ %D%/packages/patches/java-openjfx-build-web-xlocale.h.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index ec9e24b8d3..f8a5b71a48 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2502,7 +2502,8 @@ new Date();"))
(base32
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
(patches (search-patches "java-openjfx-build-jdk_version.patch"
- "java-openjfx-build-swing-JFXPanel-JDK8.patch"))))
+ "java-openjfx-build-swing-JFXPanel-JDK8.patch"
+ "java-openjfx-build-web-xlocale.h.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch b/gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch
new file mode 100644
index 0000000000..138f39f9af
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch
@@ -0,0 +1,52 @@
+Subject: [PATCH] Check <xlocale.h> header file
+
+Few libraries use hard-coded xlocale_h header even though if CMake takes care
+of it properly. Remove defined headers, and rely on CMake preprocessor
+instead.
+
+---
+ .../src/main/native/Source/ThirdParty/libxslt/linux/config.h | 2 +-
+ .../src/main/native/Source/ThirdParty/libxslt/src/config.h.in | 2 +-
+ modules/web/src/main/native/Source/cmake/OptionsCommon.cmake | 1 +
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h b/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
+index bd44c163..b19b45f4 100644
+--- a/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
++++ b/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
+@@ -143,7 +143,7 @@
+ #define HAVE_VSPRINTF 1
+
+ /* Define to 1 if you have the <xlocale.h> header file. */
+-#define HAVE_XLOCALE_H 1
++/* #define HAVE_XLOCALE_H 1 */
+
+ /* Define to 1 if you have the `_stat' function. */
+ /* #undef HAVE__STAT */
+diff --git a/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in b/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
+index 085354e9..0210fce2 100644
+--- a/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
++++ b/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
+@@ -142,7 +142,7 @@
+ #undef HAVE_VSPRINTF
+
+ /* Define to 1 if you have the <xlocale.h> header file. */
+-#undef HAVE_XLOCALE_H
++/* #undef HAVE_XLOCALE_H */
+
+ /* Define to 1 if you have the `_stat' function. */
+ #undef HAVE__STAT
+diff --git a/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake b/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
+index 3bbd2c4a..2b618dd6 100644
+--- a/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
++++ b/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
+@@ -148,6 +148,7 @@ _HAVE_CHECK_INCLUDE(HAVE_STRINGS_H strings.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_PARAM_H sys/param.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_TIME_H sys/time.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_TIMEB_H sys/timeb.h)
++_HAVE_CHECK_INCLUDE(HAVE_XLOCALE_H xlocale.h)
+
+ # Check for functions
+ _HAVE_CHECK_FUNCTION(HAVE_ALIGNED_MALLOC _aligned_malloc)
+--
+2.24.1
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 18:44
Re: [bug#41360] [PATCH 01/12] gnu: java-openjfx-build: Add helpful patch.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 41360@debbugs.gnu.org)
87blm52wzb.fsf@mmer.org
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (17 lines)
> Hi Alexey,
>
> Thanks for the patch series!
>
> Alexey Abramov <levenson@mmer.org> skribis:
>
>> * gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
>> * gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch: New file.
>> * gnu/local.mk (dist_patch_DATA): Add it.
>
> [...]
>
>> +++ b/gnu/packages/patches/java-openjfx-build-get_guix_jdk_version.patch
>> @@ -0,0 +1,37 @@
>
> Could you shorten this file name a bit? (‘guix lint’ probably complains.)

Sure. By the way it complains on other derrived packages like java-openjfx-base which inherits java-openjfx-build.

/home/levenson/factory/guix/gnu/packages/java.scm:2486:12: java-openjfx-build@8.202: source not archived on Software Heritage

/home/levenson/factory/guix/gnu/packages/java.scm:2533:2: java-openjfx-base@8.202: file names of patches should start with the package name
/home/levenson/factory/guix/gnu/packages/java.scm:2537:0: java-openjfx-base@8.202: line 2537 is way too long (111 characters)
/home/levenson/factory/guix/gnu/packages/java.scm:2552:0: java-openjfx-base@8.202: line 2552 is way too long (99 characters)
/home/levenson/factory/guix/gnu/packages/java.scm:2533:2: java-openjfx-base@8.202: source not archived on Software Heritage

Toggle quote (9 lines)
>
>> +From d156313340d3edcd78751ea8ed5e66c7668275c3 Mon Sep 17 00:00:00 2001
>> +From: Alexey Abramov <levenson@mmer.org>
>> +Date: Sun, 8 Mar 2020 20:07:22 +0100
>> +Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
>
> In general I think you can omit the first three lines and just keep the
> subject.

Ah, great.

Toggle quote (7 lines)
>
>> +Icedtea contains guix in its version, so build.gradle failes to run. Openjfx
>> +packaging is not trivial, so you will probably need to try build it with
>> +gradlew.
>
> Otherwise LGTM.

--
Alexey
A
A
Alexey Abramov wrote on 30 May 2020 18:45
Re: [bug#41360] [PATCH 03/12] gnu: java-openjfx-graphics: Implement a complete compilation.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 41360@debbugs.gnu.org)
874krx2wyz.fsf@mmer.org
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (14 lines)
> Alexey Abramov <levenson@mmer.org> skribis:
>
>> ---
>> gnu/packages/java.scm | 643 +++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 635 insertions(+), 8 deletions(-)
>
> Please add a commit log.
>
>> + (java-aux-class?
>> + (lambda (class)
>> + (string-match "\\$[0-9]+.class" class)))
>
> Probably “\\.class” instead of “.class”?

Ah, that sneaky dot. Thanks!

Toggle quote (6 lines)
>
>> + (add-after 'chdir-to-a-module-directory 'compile-prism-compilers
>> + (lambda _
>
> Maybe add a comment explaining why this phase is necessary.

Well, you know, I managed to eliminate it. Thanks!

Toggle quote (23 lines)
>
>> + (let ((prism-compilers-classes "build/classes/jsl-compilers/prism")
>> + (prism-src "src/main/jsl-prism/"))
>> + (mkdir-p prism-compilers-classes)
>> + (apply invoke `("javac"
>> + "-d" ,prism-compilers-classes
>> + ,@javac/h-flags
>> + ,@(find-files prism-src "\\.java"))))
>
> This can be shortened as:
>
> (apply invoke "javac" "-d" prism-compilers-classes
> (append javac/h-flags (find-files prism-src "\\.java")))
>
> These two comments apply to the other phases too.
>
> More generally, why are there so many phases? How do people normally
> build it? Gradle?
>
> Would it make sense to factorize helpers in a new (gnu build
> java-openjfx) module or similar?


You are right, javafx builds with Gradel. I basically replicated gradle
stages, by inspecting ./gradlew build ... --info

The reason I didn't start building any helpers is because OpenJFX 8u and OpenJFX 9u or later use different instuctions as it states here [1]. I don't know if these helpers will apply to 9u, also having a (gnu build gradle) would eliminate the need in helpers as well. In any case I think it won't be a problem to do that with a second iteration of openjfx build.

--
Alexey

Footnotes:

A
A
Alexey Abramov wrote on 30 May 2020 18:45
Re: [bug#41360] [PATCH 09/12] gnu: java-openjfx-web: Add new variable.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 41360@debbugs.gnu.org)
87wo4t1ie8.fsf@mmer.org
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (16 lines)
> Alexey Abramov <levenson@mmer.org> skribis:
>
>> ---
>> gnu/packages/java.scm | 165 ++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 165 insertions(+)
>
> Please add a commit log.
>
> [...]
>
>> + (add-after 'build 'generate-headers
>> + (lambda* (#:key inputs #:allow-other-keys)
>
> Could you add a comment explaining what this phase does and why we’re
> doing all this? (Same for the other phases.)

Done.

Toggle quote (15 lines)
>
>> + (let* ((module (string-append (getcwd) "/modules/web"))
>> + (classes (string-append module "/build/classes/java/main"))
>> + (web-generated-headers (string-append module "/build/generated-src/headers"))
>> + (web-generated-classes '("com.sun.webkit.ContextMenu"
>> + "com.sun.webkit.ContextMenuItem"
>> + "com.sun.webkit.CursorManager"
>
> Perhaps add a comment explaining how you obtained this list of classes
> so that our future selves know how to update it.
>
> Since this is a Web thing, could you check whether it contains pre-built
> (“minified”) JavaScript? If it does, that’s a problem because we
> generally provide only software built from source.

We build not only a web component here, but webkit as well. Webkit requires some extra 3rd party libraries icu, libxml, libxslt and sqlite which are already in openjfx source bundle. We also build them now.

One thing to note here, I have tested openjfx only with davmail in order to make oauth2 works. There is one exception during the authorization. When oauth accepts your password and waits for you to approve from another device, it changes the form and tries to shadow some captions, and those captions just don't show up during that period of time. Don't know what to do here. I am not a java developer, so probably it requires more testing. I was planning to talk about on openjfx mailing list, but time didn't let me.

Toggle snippet (36 lines)
Error: CPU/SIMD peer not found for: Blend_SRC_IN due to error: com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_INPeer
java.lang.RuntimeException: Could not create peer Blend_SRC_IN for renderer com.sun.scenario.effect.impl.prism.sw.PSWRenderer@6218eb01
at com.sun.scenario.effect.impl.Renderer.getPeerInstance(Unknown Source)
at com.sun.scenario.effect.CoreEffect.getPeer(Unknown Source)
at com.sun.scenario.effect.CoreEffect.getPeer(Unknown Source)
at com.sun.scenario.effect.CoreEffect.filterImageDatas(Unknown Source)
at com.sun.scenario.effect.Blend.filterImageDatas(Unknown Source)
at com.sun.scenario.effect.FilterEffect.filter(Unknown Source)
at com.sun.scenario.effect.impl.prism.PrEffectHelper.render(Unknown Source)
at com.sun.javafx.webkit.prism.WCGraphicsPrismContext$ClipLayer.render(Unknown Source)
at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.renderLayer(Unknown Source)
at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.restoreStateInternal(Unknown Source)
at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.restoreState(Unknown Source)
at com.sun.webkit.graphics.GraphicsDecoder.decode(Unknown Source)
at com.sun.webkit.graphics.WCRenderQueue.decode(Unknown Source)
at com.sun.webkit.WebPage.paint2GC(Unknown Source)
at com.sun.webkit.WebPage.paint(Unknown Source)
at com.sun.javafx.sg.prism.web.NGWebView.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
at com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(Unknown Source)
at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(Unknown Source)
at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at com.sun.javafx.tk.RenderJob.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)

--
Alexey
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 2/9] gnu: java-openjfx-build: Fix indentation.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-2-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Change the indentation
of the uri dirictive.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

Toggle diff (21 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index d569ed57d6..43f0f37b91 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2486,10 +2486,10 @@ new Date();"))
(source (origin
(method hg-fetch)
(uri (hg-reference
- (url "http://hg.openjdk.java.net/openjfx/8u-dev/rt")
- (changeset (string-append
- (string-join (string-split version #\.) "u")
- "-ga"))))
+ (url "http://hg.openjdk.java.net/openjfx/8u-dev/rt")
+ (changeset (string-append
+ (string-join (string-split version #\.) "u")
+ "-ga"))))
(file-name (string-append name "-" version "-checkout"))
(modules '((guix build utils)))
(snippet
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 6/9] gnu: java-openjfx-swt: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-6-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-swt): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f124062035..f8d47d7eed 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3218,6 +3218,19 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-swt
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swt")
+ (arguments
+ `(#:jar-name "java-openjfx-swt.jar"
+ #:source-dir "modules/swt/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 1/9] gnu: java-openjfx-build: Add helpful patch.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-1-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-jdk_version.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 ++-
.../java-openjfx-build-jdk_version.patch | 27 +++++++++++++++++++
3 files changed, 30 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-jdk_version.patch

Toggle diff (61 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 768943a67a..cbf0a20a9e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1110,6 +1110,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
+ %D%/packages/patches/java-openjfx-build-jdk_version.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index b12c3ca95c..d569ed57d6 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2499,7 +2499,8 @@ new Date();"))
#t))
(sha256
(base32
- "0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))))
+ "0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
+ (patches (search-patches "java-openjfx-build-jdk_version.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-jdk_version.patch b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
new file mode 100644
index 0000000000..7be954467a
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
@@ -0,0 +1,27 @@
+Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
+
+Icedtea contains guix in its version, so build.gradle failes to run. Openjfx
+packaging is not trivial, so you will probably need to try build it with
+gradlew.
+
+---
+ build.gradle | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/build.gradle b/build.gradle
+index df82f63..2c626cd 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -742,9 +742,9 @@ try {
+ if (inStream.readLine() != null) {
+ String v = inStream.readLine();
+ if (v != null) {
+- int ib = v.indexOf(" (build ");
++ int ib = v.indexOf(" (guix build ");
+ if (ib != -1) {
+- String ver = v.substring(ib + 8, v.size() - 1);
++ String ver = v.substring(ib + 13, v.size() - 1);
+
+ defineProperty("jdkRuntimeVersion", ver)
+ defineProperty("jdkVersion", jdkRuntimeVersion.split("-")[0])
+2.24.1
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 7/9] gnu: java-openjfx-controls: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-7-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-controls): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (29 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f8d47d7eed..ec9e24b8d3 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3231,6 +3231,22 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-controls
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-controls")
+ (arguments
+ `(#:jar-name "java-openjfx-controls.jar"
+ #:source-dir "modules/controls/src/main/java"
+ #:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'copy-resources
+ (lambda _
+ (let ((resources (string-append (getcwd) "/modules/controls/src/main/resources")))
+ (copy-recursively resources "build/classes")) #t)))))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 3/9] gnu: java-openjfx-graphics: Implement a complete compilation.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-3-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-graphics): Add stages to build
libdecora_sse, prism_common, glassgtk2, iio, prism_sw, prism_es2,
font_freetype, glassgtk3, font, font_pango and glass libraries.

All the steps were taken by inspecting ./gradlew build --info result.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 642 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 634 insertions(+), 8 deletions(-)

Toggle diff (326 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 43f0f37b91..9d73d9a7e8 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -56,6 +56,7 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gl)
+ #:use-module (gnu packages glib)
#:use-module (gnu packages ghostscript) ;lcms
#:use-module (gnu packages gnome)
#:use-module (gnu packages groovy)
@@ -2567,16 +2568,641 @@ distribution.")))
(arguments
`(#:jar-name "java-openjfx-graphics.jar"
#:source-dir "modules/graphics/src/main/java"
- #:tests? #f; require X
- #:test-dir "modules/graphics/src/test"))
+ #:tests? #f ; requires X
+ #:test-dir "modules/graphics/src/test"
+ #:test-include (list "**/*Test.*")
+ #:modules ((guix build ant-build-system)
+ (guix build utils)
+ (srfi srfi-1)
+ (srfi srfi-26)
+ (ice-9 regex)
+ (ice-9 match))
+ #:phases
+ (let* ((jdk (assoc-ref %build-inputs "jdk"))
+ (javac/h-flags
+ '(;; When javac is compiling code it doesn't link
+ ;; against rt.jar by default. Instead it uses special
+ ;; symbol file lib/ct.sym with class stubs.
+ ;; Surprisingly this file contains many but not *all*
+ ;; of internal classes.
+ "-XDignore.symbol.file"
+ ;; It’s an internal option for JDK 1.7+ that prevents
+ ;; the compiler from sharing a table that will never
+ ;; be reused. When shared, it can’t be garbage
+ ;; collected, continues to accumulate data, and
+ ;; therefore wastes memory.
+ "-XDuseUnsharedTable=true"))
+ (common-flags
+ '("-fno-strict-aliasing" "-fPIC" "-fno-omit-frame-pointer" ;; optimization flags
+ "-fstack-protector"
+ "-W" "-Wall" "-Wno-unused" "-Wno-parentheses" "-Werror=implicit-function-declaration"))
+ (cc-flags
+ `(,@common-flags "-c" "-ffunction-sections" "-fdata-sections"
+ "-I" ,(string-append jdk "/include")
+ "-I" ,(string-append jdk "/include/linux")))
+ (link-flags
+ `("-static-libgcc" "-static-libstdc++" "-shared" ,@common-flags
+ "-z" "relro"
+ "-Wl,--gc-sections"))
+ (java-aux-class?
+ (lambda (class)
+ (string-match "\\$[0-9]+\\.class" class)))
+ (java-list-classes
+ (lambda (path)
+ ;; For each .java file we need to figure out what
+ ;; class the .java file belongs in and convert it to a
+ ;; class name.
+ (filter-map
+ (lambda (class)
+ (let* ((rx (make-regexp (string-append path file-name-separator-string "?")))
+ (class (string-drop-right class (string-length ".class")))
+ (class (match:suffix (regexp-exec rx class))))
+ (if (java-aux-class? class)
+ #f
+ (string-join (string-split class #\/) "."))))
+ (find-files path "\\.class$")))))
+ (modify-phases %standard-phases
+
+ (replace 'build
+ (lambda _
+ ;; Do not mix different classes. There will be more stuff in build/classes
+ (invoke "ant" "compile" "-Dclasses.dir=modules/graphics/build/classes/java/main")
+ #t))
+
+ ;; XX: Description can be found in build.gradle:1429. Currently
+ ;; there is no sdk creation step.
+ ;;
+ ;; The Decora and Prism JSL files have to be generated in a very specific set of steps.
+ ;; 1) Compile the *Compile.java classes. These live in src/main/jsl-* and will be
+ ;; output to $buildDir/classes/jsl-compilers/* (where * == decora or prism).
+ ;; 2) Generate source files from the JSL files contained in src/main/jsl-*. These
+ ;; will be output to $buildDir/generated-src/jsl-*
+ ;; 3) Compile the JSL Java sources in $buildDir/generated-src/jsl-* and put the output
+ ;; into classes/jsl-*
+ ;; 4) Compile the native JSL sources in $buildDir/generated-src/jsl-* and put the obj
+ ;; files into native/jsl-* and the resulting library into libs/jsl-*.dll|so|dylib
+ ;; 5) Modify the jar step to include classes/jsl-*
+ ;; The native library must be copied over during SDK creation time in the "sdk" task. In
+ ;; addition to these steps, the clean task is created. Note that I didn't bother to create
+ ;; a new task for each of the decora files, preferring instead just to create a rule?? Also
+ ;; need "clean" tasks for each compile task.
+ (add-after 'build 'compile-prism-compilers
+ (lambda _
+ (let ((prism-compilers-classes "modules/graphics/build/classes/jsl-compilers/prism")
+ (prism-src "modules/graphics/src/main/jsl-prism/"))
+ (mkdir-p prism-compilers-classes)
+
+ (apply invoke "javac" "-d" prism-compilers-classes
+ (append javac/h-flags (find-files prism-src "\\.java"))))
+
+ #t))
+
+ (add-after 'compile-prism-compilers 'generate-prism-shaders
+ (lambda _
+ (let ((prism-compilers-classes "modules/graphics/build/classes/jsl-compilers/prism")
+ (prism-src "modules/graphics/src/main/jsl-prism/")
+ (prism-gen-src "modules/graphics/build/generated-src/jsl-prism"))
+ (mkdir-p prism-gen-src)
+ (for-each (lambda (file)
+ (apply invoke "java"
+ "-cp" (string-join (list
+ ;; For CompileJSL
+ prism-compilers-classes
+ ;; jsl files are there
+ prism-src
+ (getenv "CLASSPATH"))
+ ":")
+ "CompileJSL"
+ "-i" prism-src
+ "-o" prism-gen-src
+ "-t"
+ "-pkg" "com/sun/prism"
+ "-d3d"
+ "-es2"
+ "-name" (list file)))
+ (find-files prism-src "\\.jsl$")))
+ #t))
+
+ (add-after 'generate-prism-shaders 'compile-prism-shaders
+ (lambda _
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (prism-classes "modules/graphics/build/classes/jsl-prism")
+ (prism-gen-src "modules/graphics/build/generated-src/jsl-prism")
+ (prism-gen-shaders-src (string-append prism-gen-src "/com/sun/prism/shader")))
+ (mkdir-p prism-classes)
+ (apply invoke "javac"
+ "-d" prism-classes
+ "-cp" (string-append classes ":" (getenv "CLASSPATH"))
+ (append javac/h-flags (find-files prism-gen-shaders-src))))
+ #t))
+
+ (add-after 'compile-prism-shaders 'compile-decora-compilers
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/"))
+ (mkdir-p decora-compilers-classes)
+ (apply invoke "javac"
+ "-d" decora-compilers-classes
+ "-cp" (string-append classes ":" (getenv "CLASSPATH"))
+ (append javac/h-flags (find-files decora-src "\\.java"))))
+ #t))
+
+ (add-after 'compile-decora-compilers 'generate-decora-shaders
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/")
+ (decora-components '([(file-name . "ColorAdjust")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "Brightpass")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "SepiaTone")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "PerspectiveTransform")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "DisplacementMap")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "InvertMask")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "Blend")
+ (generator . "CompileBlend")
+ (outputs . "-all")]
+ [(file-name . "PhongLighting")
+ (generator . "CompilePhong")
+ (outputs . "-all")]
+ [(file-name . "LinearConvolve")
+ (generator . "CompileLinearConvolve")
+ (outputs . "-hw")]
+ [(file-name . "LinearConvolveShadow")
+ (generator . "CompileLinearConvolve")
+ (outputs . "-hw")])))
+ (mkdir-p decora-gen-src)
+ (for-each (match-lambda
+ ((('file-name . file-name)
+ ('generator . generator)
+ ('outputs . outputs))
+ (apply invoke "java"
+ "-cp" (string-join (cons* classes
+ decora-src
+ ;; CompileJSL
+ decora-compilers-classes
+ decora-classes
+ ;; We need resources from the build
+ "buildSrc/src/main/resources"
+ (list (getenv "CLASSPATH")))
+ ":")
+ generator
+ "-i" decora-src
+ "-o" decora-gen-src
+ "-t"
+ "-pkg" "com/sun/scenario/effect"
+ outputs
+ (list file-name))))
+ decora-components)
+ #t)))
+
+ (add-after 'generate-decora-shaders 'compile-decora-shaders
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora"))
+ (mkdir-p decora-classes)
+ (apply invoke "javac"
+ "-d" decora-classes
+ "-cp" classes
+ (append javac/h-flags (find-files decora-gen-src "\\.java$"))))
+ #t))
+
+ (add-after 'compile-decora-shaders 'compile-decora-native-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (decora-gen-headers "modules/graphics/build/generated-src/headers/jsl-decora")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
+ (decora-native-lib "modules/graphics/build/libs/jsl-decora/linux/libdecora_sse.so")
+ (decora-native-obj "modules/graphics/build/native/jsl-decora/linux")
+ (decora-native-src "modules/graphics/src/main/native-decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-cc-flags `(,@cc-flags "-ffast-math")))
+ (mkdir-p decora-gen-headers)
+ (apply invoke "javah"
+ "-d" decora-gen-headers
+ "-cp" (string-join (list classes decora-classes) ":")
+ (append javac/h-flags
+ (filter (cut string-prefix? "com.sun.scenario.effect.impl.sw.sse" <>)
+ (append (java-list-classes classes)
+ (java-list-classes decora-classes)))))
+ (mkdir-p decora-native-obj)
+ (for-each (lambda (cc)
+ (apply invoke "gcc"
+ "-I" decora-gen-headers
+ "-I" decora-gen-src
+ "-I" decora-native-src
+ "-o" (string-append decora-native-obj "/" (basename cc ".cc") ".obj")
+ (append decora-cc-flags (list cc))))
+ (append (find-files decora-gen-src "\\.cc$")
+ (find-files decora-native-src "\\.cc$")))
+ (mkdir-p (dirname decora-native-lib))
+ (apply invoke "g++" "-o" decora-native-lib
+ (append link-flags (find-files decora-native-obj "\\.obj$"))))
+ #t))
+
+ (add-after 'compile-decora-native-lib 'compile-linux-font-native-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (font-gen-headers "modules/graphics/build/generated-src/headers/font/linux")
+ (font-native-lib "modules/graphics/build/libs/font/linux/libjavafx_font.so")
+ (font-native-obj "modules/graphics/build/native/font/linux")
+ (font-native-src "modules/graphics/src/main/native-font")
+ ;;
+ (font-cc-flags `("-DJFXFONT_PLUS" ,@cc-flags)))
+ (mkdir-p font-gen-headers)
+ (apply invoke "javah"
+ "-d" font-gen-headers
+ "-cp" classes
+ (append javac/h-flags
+ (filter (lambda (class)
+ (or (string-prefix? "com.sun.javafx.font" class)
+ (string-prefix? "com.sun.javafx.text" class)))
+ (java-list-classes classes))))
+ (mkdir-p font-native-obj)
+ (for-each (lambda (cc)
+ (apply invoke "gcc"
+ "-I" font-gen-headers
+ "-I" font-native-src
+ "-o" (string-append font-native-obj "/"
+ (basename cc ".c") ".obj")
+ (append font-cc-flags (list cc))))
+ (find-files font-native-src "\\.c$"))
+ (mkdir-p (dirname font-native-lib))
+ (apply invoke "g++"
+ "-o" font-native-lib
+ (append link-flags
+ (find-files font-native-obj "\\.obj$"))))
+ #t))
+
+ (add-after 'compile-linux-font-native-lib 'compile-linux-font-freetype
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ ;;
+ (font-freetype-gen-headers "modules/graphics/build/generated-src/headers/fontFreetype/linux")
+ (font-freetype-native-lib "modules/graphics/build/libs/fontFreetype/linux/libjavafx_font_freetype.so")
+ (font-freetype-native-obj "modules/graphics/build/native/fontFreetype/linux")
+ (font-freetype-native-src "modules/graphics/src/main/native-font/freetype.c")
+ (font-freetype-cc-flags `("-DJFXFONT_PLUS" "-D_ENABLE_PANGO"
+ "$(pkg-config --cflags freetype2)" ,@cc-flags))
+ (font-freetype-link-flags `("$(pkg-config --libs freetype2)" ,@link-flags)))
+ (mkdir-p font-freetype-gen-headers)
+ (apply invoke "javah"
+ "-d" font-freetype-gen-headers
+ "-cp" classes
+ (append javac/h-flags
+ (filter (cut string-prefix? "com.sun.javafx.font.freetype.OSFreetype" <>)
+ (java-list-classes classes))))
+ (mkdir-p font-freetype-native-obj)
+ (invoke "bash" "-c"
+ (string-join `("gcc"
+ ,@font-freetype-cc-flags
+ "-I" ,font-freetype-gen-headers
+ "-I" ,(dirname font-freetype-native-src)
+ "-o" ,(string-append font-freetype-native-obj "/"
+
This message was truncated. Download the full message here.
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 5/9] gnu: java-openjfx-swing: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-5-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-swing): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 938fc0695c..f124062035 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3205,6 +3205,19 @@ distribution.")))
`(("java-openjfx-base" ,java-openjfx-base)
("java-swt" ,java-swt)))))
+(define-public java-openjfx-swing
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swing")
+ (arguments
+ `(#:jar-name "java-openjfx-swing.jar"
+ #:source-dir "modules/swing/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 8/9] gnu: java-openjfx-build: Prepare a patch to build openjfx-web.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-8-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
.../java-openjfx-build-web-xlocale.h.patch | 52 +++++++++++++++++++
3 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch

Toggle diff (86 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index e15554f1c2..71d7079134 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1112,6 +1112,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-jdk_version.patch \
%D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
+ %D%/packages/patches/java-openjfx-build-web-xlocale.h.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index ec9e24b8d3..f8a5b71a48 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2502,7 +2502,8 @@ new Date();"))
(base32
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
(patches (search-patches "java-openjfx-build-jdk_version.patch"
- "java-openjfx-build-swing-JFXPanel-JDK8.patch"))))
+ "java-openjfx-build-swing-JFXPanel-JDK8.patch"
+ "java-openjfx-build-web-xlocale.h.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch b/gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch
new file mode 100644
index 0000000000..138f39f9af
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-xlocale.h.patch
@@ -0,0 +1,52 @@
+Subject: [PATCH] Check <xlocale.h> header file
+
+Few libraries use hard-coded xlocale_h header even though if CMake takes care
+of it properly. Remove defined headers, and rely on CMake preprocessor
+instead.
+
+---
+ .../src/main/native/Source/ThirdParty/libxslt/linux/config.h | 2 +-
+ .../src/main/native/Source/ThirdParty/libxslt/src/config.h.in | 2 +-
+ modules/web/src/main/native/Source/cmake/OptionsCommon.cmake | 1 +
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h b/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
+index bd44c163..b19b45f4 100644
+--- a/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
++++ b/modules/web/src/main/native/Source/ThirdParty/libxslt/linux/config.h
+@@ -143,7 +143,7 @@
+ #define HAVE_VSPRINTF 1
+
+ /* Define to 1 if you have the <xlocale.h> header file. */
+-#define HAVE_XLOCALE_H 1
++/* #define HAVE_XLOCALE_H 1 */
+
+ /* Define to 1 if you have the `_stat' function. */
+ /* #undef HAVE__STAT */
+diff --git a/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in b/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
+index 085354e9..0210fce2 100644
+--- a/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
++++ b/modules/web/src/main/native/Source/ThirdParty/libxslt/src/config.h.in
+@@ -142,7 +142,7 @@
+ #undef HAVE_VSPRINTF
+
+ /* Define to 1 if you have the <xlocale.h> header file. */
+-#undef HAVE_XLOCALE_H
++/* #undef HAVE_XLOCALE_H */
+
+ /* Define to 1 if you have the `_stat' function. */
+ #undef HAVE__STAT
+diff --git a/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake b/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
+index 3bbd2c4a..2b618dd6 100644
+--- a/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
++++ b/modules/web/src/main/native/Source/cmake/OptionsCommon.cmake
+@@ -148,6 +148,7 @@ _HAVE_CHECK_INCLUDE(HAVE_STRINGS_H strings.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_PARAM_H sys/param.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_TIME_H sys/time.h)
+ _HAVE_CHECK_INCLUDE(HAVE_SYS_TIMEB_H sys/timeb.h)
++_HAVE_CHECK_INCLUDE(HAVE_XLOCALE_H xlocale.h)
+
+ # Check for functions
+ _HAVE_CHECK_FUNCTION(HAVE_ALIGNED_MALLOC _aligned_malloc)
+--
+2.24.1
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 9/9] gnu: java-openjfx-web: Add new variable.
(address . 41360@debbugs.gnu.org)
20200530170951.1649-9-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-web): New variable.

We build not only a web component here, but webkit as well. Webkit requires
some extra 3rd party libraries icu, libxml, libxslt and sqlite which are
already in openjfx source bundle.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 176 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 176 insertions(+)

Toggle diff (210 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f8a5b71a48..0d2f268764 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -50,11 +50,13 @@
#:use-module (gnu packages cpio)
#:use-module (gnu packages cups)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cmake)
#:use-module (gnu packages elf)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gettext)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages gperf)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
#:use-module (gnu packages ghostscript) ;lcms
@@ -74,8 +76,10 @@
#:use-module (gnu packages wget)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages perl)
+ #:use-module (gnu packages python)
#:use-module (gnu packages popt)
#:use-module (gnu packages kerberos)
+ #:use-module (gnu packages ruby)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
#:use-module (gnu packages texinfo)
@@ -3263,6 +3267,178 @@ modern, efficient, and fully featured toolkit for developing rich client
applications. This package contains media-related classes for the
OpenJFX distribution.")))
+(define-public java-openjfx-web
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-web")
+ (arguments
+ `(#:jar-name "java-openjfx-web.jar"
+ #:source-dir (string-join '("modules/web/src/main/java"
+ "modules/web/src/main/native/Source/WebCore/bindings/java/dom3")
+ ";")
+ #:tests? #f
+ #:modules ((ice-9 match)
+ (guix build ant-build-system)
+ (guix build utils))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'build
+ (lambda* _
+ (invoke "ant" "compile" "-Dclasses.dir=modules/web/build/classes/java/main")
+ #t))
+
+ (add-after 'build 'generate-headers
+ ;; XX: We provide only software built from source, so let's build
+ ;; webkit as well. List of webkit classes can be found in
+ ;; build.gradle:2516. We need to generate headers for the upcoming
+ ;; compilation step first and put them in generated-src/headers
+ ;; location.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/web/build/classes/java/main")
+ (web-generated-headers "modules/web/build/generated-src/headers")
+ (web-generated-classes '("com.sun.webkit.ContextMenu"
+ "com.sun.webkit.ContextMenuItem"
+ "com.sun.webkit.CursorManager"
+ "com.sun.webkit.PageCache"
+ "com.sun.webkit.PopupMenu"
+ "com.sun.webkit.SharedBuffer"
+ "com.sun.webkit.WebPage"
+ "com.sun.webkit.LoadListenerClient"
+ "com.sun.webkit.event.WCFocusEvent"
+ "com.sun.webkit.event.WCKeyEvent"
+ "com.sun.webkit.event.WCMouseEvent"
+ "com.sun.webkit.event.WCMouseWheelEvent"
+ "com.sun.webkit.graphics.GraphicsDecoder"
+ "com.sun.webkit.graphics.RenderMediaControls"
+ "com.sun.webkit.graphics.RenderTheme"
+ "com.sun.webkit.graphics.ScrollBarTheme"
+ "com.sun.webkit.graphics.WCMediaPlayer"
+ "com.sun.webkit.graphics.WCGraphicsManager"
+ "com.sun.webkit.graphics.WCRenderQueue"
+ "com.sun.webkit.graphics.WCPath"
+ "com.sun.webkit.graphics.WCPathIterator"
+ "com.sun.webkit.Timer"
+ "com.sun.webkit.WCFrameView"
+ "com.sun.webkit.WCPasteboard"
+ "com.sun.webkit.WCPluginWidget"
+ "com.sun.webkit.dom.CharacterDataImpl"
+ "com.sun.webkit.dom.JSObject"
+ "com.sun.webkit.network.SocketStreamHandle"
+ "com.sun.webkit.network.URLLoader"
+ "com.sun.webkit.text.TextBreakIterator"
+ "com.sun.webkit.text.TextNormalizer"))
+ (graphics (assoc-ref inputs "java-openjfx-graphics")))
+ (mkdir-p web-generated-headers)
+ (apply invoke
+ "javah"
+ "-Djava.ext.dirs="
+ "-XDignore.symbol.file"
+ "-XDuseUnsharedTable=true"
+ "-d" web-generated-headers
+ "-cp" (string-join (cons* classes (find-files graphics "\\.jar$")) ":")
+ web-generated-classes))
+ #t))
+
+ (add-after 'generate-headers 'compile-native-linux
+ (lambda* (#:key inputs system outputs #:allow-other-keys)
+ (let* ((module (string-append (getcwd) "/modules/web"))
+ ;;
+ (webkit-native-dest (string-append module "/build/linux"))
+ (webkit-native-src (string-append module "/src/main/native"))
+ ;;
+ (lib (string-append (assoc-ref outputs "out") "/lib"))
+ ;; uname -m
+ (machine (match system
+ ("x86_64-linux" "x86_64")
+ ("i686-linux" "i686")
+ ;; Prevent errors when querying this
+ ;; package on unsupported platforms,
+ ;; e.g. when running "guix package
+ ;; --search="
+ (_ "UNSUPPORTED"))))
+
+ (mkdir-p webkit-native-dest)
+ (setenv "PYTHONDONTWRITEBYTECODE" "1")
+ (setenv "WEBKIT_OUTPUTDIR" webkit-native-dest)
+ (apply invoke `("perl"
+ ,(string-append webkit-native-src "/Tools/Scripts/set-webkit-configuration")
+ ,(if ,(target-64bit?) "--64-bit" "--32-bit")
+ "--release"))
+
+ (invoke "perl"
+ (string-append webkit-native-src "/Tools/Scripts/build-webkit")
+ "--java" ; webkit port
+ ;; We disable all the updates, and build 3rd-party libs
+ ;; lice icu, libxml, libxslt and sqlite. Source code
+ ;; sits modules/web/src/main/native/Source/ThirdPArty.
+ "--skip-library-update"
+ "--verbose"
+ (string-append
+ "--cmakeargs="
+ (string-join
+ (list "-DCMAKE_SYSTEM_NAME=Linux"
+ ;; Ensure that the libraries are installed into /lib
+ (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
+ ;; Add input libraries to rpath
+ "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
+ ;; Enable verbose output from builds
+ "-DCMAKE_VERBOSE_MAKEFILE=ON"
+ (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
+ "\"-Wl,-rpath=" lib "\"")
+ (string-append "-DCMAKE_SYSTEM_PROCESSOR=" machine)
+
+ "-DJAVAFX_RELEASE_VERSION=8.0"
+ "-W"
+ "-Wall"
+ "-Werror=implicit-function-declaration"
+ "-Wl,--gc-sections"
+ "-Wno-parentheses"
+ "-Wno-unused"
+ "-fPIC"
+ "-fno-omit-frame-pointer"
+ "-fno-strict-aliasing"
+ "-fstack-protector")))))
+ #t))
+
+ (add-after 'compile-native-linux '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$")))))
+
+ (add-before 'install 'build-jar
+ (lambda _
+ (let* ((resources "modules/web/src/main/resources")
+ (classes "modules/web/build/classes/java/main"))
+ (copy-recursively resources classes)
+ (invoke "ant" "jar" (string-append "-Dclasses.dir=" classes)))
+ #t)))))
+
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (native-inputs
+ `(("java-junit" ,java-junit)
+ ("java-hamcrest-core" ,java-hamcrest-core)
+ ("cmake" ,cmake)
+ ;; XX: With current gcc (gcc-7.5) the build breaks on building
+ ;; thirdparty libraries like xslt. c++14 is used to build
+ ;; them. CMAKE_CXX_STANDARD doesn't take any effect here for some
+ ;; reason.
+ ("gcc" ,gcc-5)
+ ("glibc" ,glibc-2.29)
+ ("gtk" ,gtk+-2)
+ ("gtk3" ,gtk+)
+ ("ruby" ,ruby)
+ ("perl" ,perl)
+ ("gperf" ,gperf)
+ ("python-2" ,python-2)
+ ("pkg-config" ,pkg-config)))
+ (propagated-inputs
+ `(("java-openjfx-controls" ,java-openjfx-controls)
+ ("java-openjfx-media" ,java-openjfx-media)
+ ("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public javacc-4
(package
(name "javacc")
--
2.26.2
A
A
Alexey Abramov wrote on 30 May 2020 19:09
[PATCH v3 4/9] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(address . 41360@debbugs.gnu.org)
20200530170951.1649-4-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...va-openjfx-build-swing-JFXPanel-JDK8.patch | 60 +++++++++++++++++++
3 files changed, 63 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch

Toggle diff (94 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index cbf0a20a9e..e15554f1c2 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1111,6 +1111,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-jdk_version.patch \
+ %D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 9d73d9a7e8..938fc0695c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2501,7 +2501,8 @@ new Date();"))
(sha256
(base32
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
- (patches (search-patches "java-openjfx-build-jdk_version.patch"))))
+ (patches (search-patches "java-openjfx-build-jdk_version.patch"
+ "java-openjfx-build-swing-JFXPanel-JDK8.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch b/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch
new file mode 100644
index 0000000000..b540048621
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch
@@ -0,0 +1,60 @@
+Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
+
+In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
+has separate getDefaultScaleX() and getDefaultScaleY() methods. See
+https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
+
+Backport the missing port to build openjfx-swing package using JDKu8. For more
+info please see https://bugs.openjdk.java.net/browse/JDK-8149967
+
+---
+ .../java/javafx/embed/swing/JFXPanel.java | 20 ++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+index 97515e2290..614ed656b9 100644
+--- a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
++++ b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+@@ -81,6 +81,7 @@ import sun.awt.AppContext;
+ import sun.awt.CausedFocusEvent;
+ import sun.awt.SunToolkit;
+ import sun.java2d.SunGraphics2D;
++import sun.java2d.SurfaceData;
+ import sun.util.logging.PlatformLogger;
+ import sun.util.logging.PlatformLogger.Level;
+
+@@ -681,6 +682,23 @@
+ e.getCaret().getInsertionIndex());
+ }
+
++ // FIXME: once we move to JDK 9 as the boot JDK we should remove the
++ // reflection code from this method, consider changing it to
++ // use double rather than int, and account for the possibility of
++ // a different scale factor in X and Y.
++ private int getDefaultScale(SurfaceData surfaceData) {
++ /*
++ double scale = surfaceData.getDefaultScaleX();
++ */
++ double scale = 1;
++ try {
++ Method meth = SurfaceData.class.getMethod("getDefaultScaleX");
++ scale = (Double)meth.invoke(surfaceData);
++ } catch (Exception ex) {
++ }
++
++ return (int)Math.round(scale);
++ }
+
+ /**
+ * Overrides the {@link javax.swing.JComponent#paintComponent(Graphics)}
+@@ -720,7 +738,7 @@ public class JFXPanel extends JComponent {
+
+ int newScaleFactor = scaleFactor;
+ if (g instanceof SunGraphics2D) {
+- newScaleFactor = ((SunGraphics2D)g).surfaceData.getDefaultScale();
++ newScaleFactor = getDefaultScale(((SunGraphics2D)g).surfaceData);
+ }
+ if (scaleFactor != newScaleFactor) {
+ resizePixelBuffer(newScaleFactor);
+--
+2.24.1
--
2.26.2
L
L
Ludovic Courtès wrote on 3 Jun 2020 17:47
Re: [bug#41360] [PATCH 09/12] gnu: java-openjfx-web: Add new variable.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 41360@debbugs.gnu.org)
87v9k8kv7s.fsf@gnu.org
Hi Alexey,

Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (2 lines)
> Ludovic Courtès <ludo@gnu.org> writes:

[...]

Toggle quote (16 lines)
>>> + (let* ((module (string-append (getcwd) "/modules/web"))
>>> + (classes (string-append module "/build/classes/java/main"))
>>> + (web-generated-headers (string-append module "/build/generated-src/headers"))
>>> + (web-generated-classes '("com.sun.webkit.ContextMenu"
>>> + "com.sun.webkit.ContextMenuItem"
>>> + "com.sun.webkit.CursorManager"
>>
>> Perhaps add a comment explaining how you obtained this list of classes
>> so that our future selves know how to update it.
>>
>> Since this is a Web thing, could you check whether it contains pre-built
>> (“minified”) JavaScript? If it does, that’s a problem because we
>> generally provide only software built from source.
>
> We build not only a web component here, but webkit as well. Webkit requires some extra 3rd party libraries icu, libxml, libxslt and sqlite which are already in openjfx source bundle. We also build them now.

Oh sorry, I had overlooked that and it’s problematic.

The policy in Guix is to not use bundled software: it’s a waste of
resources (especially for large pieces of software like WebKit), but
more importantly it’s a security issue (nobody will notice if
‘java-openjfx-web’ includes an outdated, vulnerable version of WebKit).

So the solution is to:

1. Pass the relevant flags to tell the build system to use the
“system” copies of these libraries. If there’s no such flag, patch
the build system to not try to build these things.

2. Add a snippet to remove bundled copies of these libraries, to make
sure they’re not picked up by mistake.

Sometimes it’s just a build flag, and sometimes it’s harder. If it
turns out to be difficult, let us know, and perhaps we can find an
interim solution.

Could you take a look? Let me know what you think!

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote on 3 Jun 2020 17:50
Re: [bug#41360] [PATCH v3 1/9] gnu: java-openjfx-build: Add helpful patch.
(name . Alexey Abramov)(address . levenson@mmer.org)
87pnagkv1t.fsf@gnu.org
Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (12 lines)
> +++ b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
> @@ -0,0 +1,27 @@
> +Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
> +
> +Icedtea contains guix in its version, so build.gradle failes to run. Openjfx
> +packaging is not trivial, so you will probably need to try build it with
> +gradlew.
> +
> +---
> + build.gradle | 5 ++---
> + 1 file changed, 2 insertions(+), 3 deletions(-)

This patch also made me realize that we’re using Gradle here, but
there’s no Gradle package in Guix. That means we must be using a
pre-built jar somewhere, though I didn’t find it. Any idea where that
comes from? Julien, any idea?

(The problem existed before your patches.)

Thanks,
Ludo’.
J
J
Julien Lepiller wrote on 3 Jun 2020 18:24
(address . 41360@debbugs.gnu.org)
0F005145-C408-4B05-86C2-750219F7F2E3@lepiller.eu
Le 3 juin 2020 11:50:38 GMT-04:00, "Ludovic Courtès" <ludo@gnu.org> a écrit :
Toggle quote (26 lines)
>Alexey Abramov <levenson@mmer.org> skribis:
>
>> +++ b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
>> @@ -0,0 +1,27 @@
>> +Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
>> +
>> +Icedtea contains guix in its version, so build.gradle failes to run.
>Openjfx
>> +packaging is not trivial, so you will probably need to try build it
>with
>> +gradlew.
>> +
>> +---
>> + build.gradle | 5 ++---
>> + 1 file changed, 2 insertions(+), 3 deletions(-)
>
>This patch also made me realize that we’re using Gradle here, but
>there’s no Gradle package in Guix. That means we must be using a
>pre-built jar somewhere, though I didn’t find it. Any idea where that
>comes from? Julien, any idea?
>
>(The problem existed before your patches.)
>
>Thanks,
>Ludo’.

From what I understand, this patcg helps build openjfx with gradle on guix, if you use the guix source in an environment, but reading the other patches, it doesn't look like gradle is actually used anywhere.

It looks like this patch is helpful in the sense that it allows users to manually build the package outside of guix, but is not used at all during the build of openjfx by guix itself.

Alexey, can you confirm?
A
A
Alexey Abramov wrote on 3 Jun 2020 18:36
(name . Julien Lepiller)(address . julien@lepiller.eu)
877dwoyulp.fsf@mmer.org
Hi Julien, Ludo,

Julien Lepiller <julien@lepiller.eu> writes:

Toggle quote (36 lines)
> Le 3 juin 2020 11:50:38 GMT-04:00, "Ludovic Courtès" <ludo@gnu.org> a écrit :
>>Alexey Abramov <levenson@mmer.org> skribis:
>>
>>> +++ b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
>
>>> @@ -0,0 +1,27 @@
>>> +Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
>>> +
>>> +Icedtea contains guix in its version, so build.gradle failes to run.
>>Openjfx
>>> +packaging is not trivial, so you will probably need to try build it
>>with
>>> +gradlew.
>>> +
>>> +---
>>> + build.gradle | 5 ++---
>>> + 1 file changed, 2 insertions(+), 3 deletions(-)
>>
>>This patch also made me realize that we’re using Gradle here, but
>>there’s no Gradle package in Guix. That means we must be using a
>>pre-built jar somewhere, though I didn’t find it. Any idea where that
>>comes from? Julien, any idea?
>>
>>(The problem existed before your patches.)
>>
>>Thanks,
>>Ludo’.
>
> From what I understand, this patcg helps build openjfx with gradle on
> guix, if you use the guix source in an environment, but reading the
> other patches, it doesn't look like gradle is actually used anywhere.
>
> It looks like this patch is helpful in the sense that it allows users to manually build the package outside of guix, but is not used at all during the build of openjfx by guix itself.
>
> Alexey, can you confirm?

Yes, you are right. I am not using gradle. The reason for this patch was
to be able to debug the building process openjfx. I had to run gradlew
multiple times, so I decided to just patch it.

--
Alexey
L
L
Ludovic Courtès wrote on 4 Jun 2020 11:55
(name . Alexey Abramov)(address . levenson@mmer.org)
87h7vrduj4.fsf@gnu.org
Hi,

Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (42 lines)
> Julien Lepiller <julien@lepiller.eu> writes:
>
>> Le 3 juin 2020 11:50:38 GMT-04:00, "Ludovic Courtès" <ludo@gnu.org> a écrit :
>>>Alexey Abramov <levenson@mmer.org> skribis:
>>>
>>>> +++ b/gnu/packages/patches/java-openjfx-build-jdk_version.patch
>>
>>>> @@ -0,0 +1,27 @@
>>>> +Subject: [PATCH] openjfx: Determine the version of Java in JDK_HOME
>>>> +
>>>> +Icedtea contains guix in its version, so build.gradle failes to run.
>>>Openjfx
>>>> +packaging is not trivial, so you will probably need to try build it
>>>with
>>>> +gradlew.
>>>> +
>>>> +---
>>>> + build.gradle | 5 ++---
>>>> + 1 file changed, 2 insertions(+), 3 deletions(-)
>>>
>>>This patch also made me realize that we’re using Gradle here, but
>>>there’s no Gradle package in Guix. That means we must be using a
>>>pre-built jar somewhere, though I didn’t find it. Any idea where that
>>>comes from? Julien, any idea?
>>>
>>>(The problem existed before your patches.)
>>>
>>>Thanks,
>>>Ludo’.
>>
>> From what I understand, this patcg helps build openjfx with gradle on
>> guix, if you use the guix source in an environment, but reading the
>> other patches, it doesn't look like gradle is actually used anywhere.
>>
>> It looks like this patch is helpful in the sense that it allows users to manually build the package outside of guix, but is not used at all during the build of openjfx by guix itself.
>>
>> Alexey, can you confirm?
>
> Yes, you are right. I am not using gradle. The reason for this patch was
> to be able to debug the building process openjfx. I had to run gradlew
> multiple times, so I decided to just patch it.

OK, thanks for explaining!

BTW, I’ve pushed the first two patches of this series, Alexey.

Ludo’.
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 03/12] gnu: java-openjfx-swing: Add new variable.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-4-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-swing): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 6e7f92c859..d59288df9a 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3206,6 +3206,19 @@ distribution.")))
`(("java-openjfx-base" ,java-openjfx-base)
("java-swt" ,java-swt)))))
+(define-public java-openjfx-swing
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swing")
+ (arguments
+ `(#:jar-name "java-openjfx-swing.jar"
+ #:source-dir "modules/swing/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 04/12] gnu: java-openjfx-swt: Add new variable.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-5-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-swt): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index d59288df9a..d90b999473 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3219,6 +3219,19 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-swt
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-swt")
+ (arguments
+ `(#:jar-name "java-openjfx-swt.jar"
+ #:source-dir "modules/swt/src/main/java"
+ #:tests? #f))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 02/12] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(address . 41360@debbugs.gnu.org)
20200607155518.1400-3-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 4 +-
...va-openjfx-build-swing-JFXPanel-JDK8.patch | 60 +++++++++++++++++++
3 files changed, 64 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch

Toggle diff (95 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index ae8a2275f7..5fe0eeadda 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1109,6 +1109,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-jdk_version.patch \
+ %D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index fb5d754a60..6e7f92c859 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2501,7 +2501,9 @@ new Date();"))
(sha256
(base32
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
- (patches (search-patches "java-openjfx-build-jdk_version.patch"))))
+ (patches (search-patches "java-openjfx-build-jdk_version.patch"
+ "java-openjfx-build-swing-JFXPanel-JDK8.patch"
+ ))))
(build-system ant-build-system)
(arguments
`(#:jar-name "java-openjfx.jar"
diff --git a/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch b/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch
new file mode 100644
index 0000000000..b540048621
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch
@@ -0,0 +1,60 @@
+Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
+
+In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
+has separate getDefaultScaleX() and getDefaultScaleY() methods. See
+https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
+
+Backport the missing port to build openjfx-swing package using JDKu8. For more
+info please see https://bugs.openjdk.java.net/browse/JDK-8149967
+
+---
+ .../java/javafx/embed/swing/JFXPanel.java | 20 ++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+index 97515e2290..614ed656b9 100644
+--- a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
++++ b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+@@ -81,6 +81,7 @@ import sun.awt.AppContext;
+ import sun.awt.CausedFocusEvent;
+ import sun.awt.SunToolkit;
+ import sun.java2d.SunGraphics2D;
++import sun.java2d.SurfaceData;
+ import sun.util.logging.PlatformLogger;
+ import sun.util.logging.PlatformLogger.Level;
+
+@@ -681,6 +682,23 @@
+ e.getCaret().getInsertionIndex());
+ }
+
++ // FIXME: once we move to JDK 9 as the boot JDK we should remove the
++ // reflection code from this method, consider changing it to
++ // use double rather than int, and account for the possibility of
++ // a different scale factor in X and Y.
++ private int getDefaultScale(SurfaceData surfaceData) {
++ /*
++ double scale = surfaceData.getDefaultScaleX();
++ */
++ double scale = 1;
++ try {
++ Method meth = SurfaceData.class.getMethod("getDefaultScaleX");
++ scale = (Double)meth.invoke(surfaceData);
++ } catch (Exception ex) {
++ }
++
++ return (int)Math.round(scale);
++ }
+
+ /**
+ * Overrides the {@link javax.swing.JComponent#paintComponent(Graphics)}
+@@ -720,7 +738,7 @@ public class JFXPanel extends JComponent {
+
+ int newScaleFactor = scaleFactor;
+ if (g instanceof SunGraphics2D) {
+- newScaleFactor = ((SunGraphics2D)g).surfaceData.getDefaultScale();
++ newScaleFactor = getDefaultScale(((SunGraphics2D)g).surfaceData);
+ }
+ if (scaleFactor != newScaleFactor) {
+ resizePixelBuffer(newScaleFactor);
+--
+2.24.1
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 05/12] gnu: java-openjfx-controls: Add new variable.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-6-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-controls): New variable.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (29 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index d90b999473..e05289758a 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3232,6 +3232,22 @@ distribution.")))
(propagated-inputs
`(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+(define-public java-openjfx-controls
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-controls")
+ (arguments
+ `(#:jar-name "java-openjfx-controls.jar"
+ #:source-dir "modules/controls/src/main/java"
+ #:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'copy-resources
+ (lambda _
+ (let ((resources (string-append (getcwd) "/modules/controls/src/main/resources")))
+ (copy-recursively resources "build/classes")) #t)))))
+ (propagated-inputs
+ `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public java-openjfx-media
(package (inherit java-openjfx-build)
(name "java-openjfx-media")
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 00/12] Improve OpenJFX and friends packages
(address . 41360@debbugs.gnu.org)
20200607155518.1400-1-levenson@mmer.org
This is an updated series of patches for openjfx. We are now building WebKit java port and use Guix inputs, instead of embedded source code bundles ship with openjfx. Tests are still disabled.

I left round brackets in java-openjfx-build package on a separate line, just to make diffs look cleaner. Is it OK?

This is not an ideal build of course. Media component is missing for example. It would be also great to build a complete jfxrt.jar and not expose java-openjfx-<component> vars at all.

I have also checked the webkitgtk package while doing this. I found that some patches apply to openjfx as well. Don't know if it's possible to use webkit.org sources for openjfx-web.

In the meantime davmail and 2fa works :). Please let me know what you think.

Alexey Abramov (12):
gnu: java-openjfx-graphics: Implement a complete compilation.
gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
gnu: java-openjfx-swing: Add new variable.
gnu: java-openjfx-swt: Add new variable.
gnu: java-openjfx-controls: Add new variable.
gnu: java-openjfx-build: Patch DumpRenderTree for the web component.
gnu: java-openjfx-build: Do not use an embedded 3rd party libraries.
gnu: java-openjfx-build: Fix web component compilation with ICU 59+.
gnu: java-openjfx-build: Fix web component linkage.
gnu: java-openjfx-build: Fix web component compilation with ICU 65+.
gnu: java-openjfx-build: Ensure use of system provided libraries.
gnu: java-openjfx-web: Add new variable.

gnu/local.mk | 6 +
gnu/packages/java.scm | 871 +++++++++++++++++-
...va-openjfx-build-swing-JFXPanel-JDK8.patch | 60 ++
...penjfx-build-web-DumpRenderTree-java.patch | 30 +
...-openjfx-build-web-OptionsJava.cmake.patch | 32 +
.../patches/java-openjfx-build-web-WTF.patch | 33 +
...-build-web-WebKitCompilerFlags.cmake.patch | 36 +
.../patches/java-openjfx-build-web-icu.patch | 38 +
8 files changed, 1097 insertions(+), 9 deletions(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch
create mode 100644 gnu/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch
create mode 100644 gnu/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch
create mode 100644 gnu/packages/patches/java-openjfx-build-web-WTF.patch
create mode 100644 gnu/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch
create mode 100644 gnu/packages/patches/java-openjfx-build-web-icu.patch

--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 01/12] gnu: java-openjfx-graphics: Implement a complete compilation.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-2-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-graphics): Add stages to build
libdecora_sse, prism_common, glassgtk2, iio, prism_sw, prism_es2,
font_freetype, glassgtk3, font, font_pango and glass libraries.

All the steps were taken by inspecting ./gradlew build --info result.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 642 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 634 insertions(+), 8 deletions(-)

Toggle diff (326 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 43f0f37b91..fb5d754a60 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -56,6 +56,7 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gl)
+ #:use-module (gnu packages glib)
#:use-module (gnu packages ghostscript) ;lcms
#:use-module (gnu packages gnome)
#:use-module (gnu packages groovy)
@@ -2567,16 +2568,641 @@ distribution.")))
(arguments
`(#:jar-name "java-openjfx-graphics.jar"
#:source-dir "modules/graphics/src/main/java"
- #:tests? #f; require X
- #:test-dir "modules/graphics/src/test"))
+ #:tests? #f ; requires X
+ #:test-dir "modules/graphics/src/test"
+ #:test-include (list "**/*Test.*")
+ #:modules ((guix build ant-build-system)
+ (guix build utils)
+ (srfi srfi-1)
+ (srfi srfi-26)
+ (ice-9 regex)
+ (ice-9 match))
+ #:phases
+ (let* ((jdk (assoc-ref %build-inputs "jdk"))
+ (javac/h-flags
+ '(;; When javac is compiling code it doesn't link
+ ;; against rt.jar by default. Instead it uses special
+ ;; symbol file lib/ct.sym with class stubs.
+ ;; Surprisingly this file contains many but not *all*
+ ;; of internal classes.
+ "-XDignore.symbol.file"
+ ;; It’s an internal option for JDK 1.7+ that prevents
+ ;; the compiler from sharing a table that will never
+ ;; be reused. When shared, it can’t be garbage
+ ;; collected, continues to accumulate data, and
+ ;; therefore wastes memory.
+ "-XDuseUnsharedTable=true"))
+ (common-flags
+ '("-fno-strict-aliasing" "-fPIC" "-fno-omit-frame-pointer" ;; optimization flags
+ "-fstack-protector"
+ "-W" "-Wall" "-Wno-unused" "-Wno-parentheses"))
+ (cc-flags
+ `(,@common-flags "-c" "-ffunction-sections" "-fdata-sections"
+ "-I" ,(string-append jdk "/include")
+ "-I" ,(string-append jdk "/include/linux")))
+ (link-flags
+ `("-static-libgcc" "-static-libstdc++" "-shared" ,@common-flags
+ "-z" "relro"
+ "-Wl,--gc-sections"))
+ (java-aux-class?
+ (lambda (class)
+ (string-match "\\$[0-9]+\\.class" class)))
+ (java-list-classes
+ (lambda (path)
+ ;; For each .java file we need to figure out what
+ ;; class the .java file belongs in and convert it to a
+ ;; class name.
+ (filter-map
+ (lambda (class)
+ (let* ((rx (make-regexp (string-append path file-name-separator-string "?")))
+ (class (string-drop-right class (string-length ".class")))
+ (class (match:suffix (regexp-exec rx class))))
+ (if (java-aux-class? class)
+ #f
+ (string-join (string-split class #\/) "."))))
+ (find-files path "\\.class$")))))
+ (modify-phases %standard-phases
+
+ (replace 'build
+ (lambda _
+ ;; Do not mix different classes. There will be more stuff in build/classes
+ (invoke "ant" "compile" "-Dclasses.dir=modules/graphics/build/classes/java/main")
+ #t))
+
+ ;; XX: Description can be found in build.gradle:1429. Currently
+ ;; there is no sdk creation step.
+ ;;
+ ;; The Decora and Prism JSL files have to be generated in a very specific set of steps.
+ ;; 1) Compile the *Compile.java classes. These live in src/main/jsl-* and will be
+ ;; output to $buildDir/classes/jsl-compilers/* (where * == decora or prism).
+ ;; 2) Generate source files from the JSL files contained in src/main/jsl-*. These
+ ;; will be output to $buildDir/generated-src/jsl-*
+ ;; 3) Compile the JSL Java sources in $buildDir/generated-src/jsl-* and put the output
+ ;; into classes/jsl-*
+ ;; 4) Compile the native JSL sources in $buildDir/generated-src/jsl-* and put the obj
+ ;; files into native/jsl-* and the resulting library into libs/jsl-*.dll|so|dylib
+ ;; 5) Modify the jar step to include classes/jsl-*
+ ;; The native library must be copied over during SDK creation time in the "sdk" task. In
+ ;; addition to these steps, the clean task is created. Note that I didn't bother to create
+ ;; a new task for each of the decora files, preferring instead just to create a rule?? Also
+ ;; need "clean" tasks for each compile task.
+ (add-after 'build 'compile-prism-compilers
+ (lambda _
+ (let ((prism-compilers-classes "modules/graphics/build/classes/jsl-compilers/prism")
+ (prism-src "modules/graphics/src/main/jsl-prism/"))
+ (mkdir-p prism-compilers-classes)
+
+ (apply invoke "javac" "-d" prism-compilers-classes
+ (append javac/h-flags (find-files prism-src "\\.java"))))
+
+ #t))
+
+ (add-after 'compile-prism-compilers 'generate-prism-shaders
+ (lambda _
+ (let ((prism-compilers-classes "modules/graphics/build/classes/jsl-compilers/prism")
+ (prism-src "modules/graphics/src/main/jsl-prism/")
+ (prism-gen-src "modules/graphics/build/generated-src/jsl-prism"))
+ (mkdir-p prism-gen-src)
+ (for-each (lambda (file)
+ (apply invoke "java"
+ "-cp" (string-join (list
+ ;; For CompileJSL
+ prism-compilers-classes
+ ;; jsl files are there
+ prism-src
+ (getenv "CLASSPATH"))
+ ":")
+ "CompileJSL"
+ "-i" prism-src
+ "-o" prism-gen-src
+ "-t"
+ "-pkg" "com/sun/prism"
+ "-d3d"
+ "-es2"
+ "-name" (list file)))
+ (find-files prism-src "\\.jsl$")))
+ #t))
+
+ (add-after 'generate-prism-shaders 'compile-prism-shaders
+ (lambda _
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (prism-classes "modules/graphics/build/classes/jsl-prism")
+ (prism-gen-src "modules/graphics/build/generated-src/jsl-prism")
+ (prism-gen-shaders-src (string-append prism-gen-src "/com/sun/prism/shader")))
+ (mkdir-p prism-classes)
+ (apply invoke "javac"
+ "-d" prism-classes
+ "-cp" (string-append classes ":" (getenv "CLASSPATH"))
+ (append javac/h-flags (find-files prism-gen-shaders-src))))
+ #t))
+
+ (add-after 'compile-prism-shaders 'compile-decora-compilers
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/"))
+ (mkdir-p decora-compilers-classes)
+ (apply invoke "javac"
+ "-d" decora-compilers-classes
+ "-cp" (string-append classes ":" (getenv "CLASSPATH"))
+ (append javac/h-flags (find-files decora-src "\\.java"))))
+ #t))
+
+ (add-after 'compile-decora-compilers 'generate-decora-shaders
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/")
+ (decora-components '([(file-name . "ColorAdjust")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "Brightpass")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "SepiaTone")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "PerspectiveTransform")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "DisplacementMap")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "InvertMask")
+ (generator . "CompileJSL")
+ (outputs . "-all")]
+ [(file-name . "Blend")
+ (generator . "CompileBlend")
+ (outputs . "-all")]
+ [(file-name . "PhongLighting")
+ (generator . "CompilePhong")
+ (outputs . "-all")]
+ [(file-name . "LinearConvolve")
+ (generator . "CompileLinearConvolve")
+ (outputs . "-hw")]
+ [(file-name . "LinearConvolveShadow")
+ (generator . "CompileLinearConvolve")
+ (outputs . "-hw")])))
+ (mkdir-p decora-gen-src)
+ (for-each (match-lambda
+ ((('file-name . file-name)
+ ('generator . generator)
+ ('outputs . outputs))
+ (apply invoke "java"
+ "-cp" (string-join (cons* classes
+ decora-src
+ ;; CompileJSL
+ decora-compilers-classes
+ decora-classes
+ ;; We need resources from the build
+ "buildSrc/src/main/resources"
+ (list (getenv "CLASSPATH")))
+ ":")
+ generator
+ "-i" decora-src
+ "-o" decora-gen-src
+ "-t"
+ "-pkg" "com/sun/scenario/effect"
+ outputs
+ (list file-name))))
+ decora-components)
+ #t)))
+
+ (add-after 'generate-decora-shaders 'compile-decora-shaders
+ (lambda _
+ (let ((classes "modules/graphics/build/classes/java/main")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora"))
+ (mkdir-p decora-classes)
+ (apply invoke "javac"
+ "-d" decora-classes
+ "-cp" classes
+ (append javac/h-flags (find-files decora-gen-src "\\.java$"))))
+ #t))
+
+ (add-after 'compile-decora-shaders 'compile-decora-native-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (decora-gen-headers "modules/graphics/build/generated-src/headers/jsl-decora")
+ (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
+ (decora-native-lib "modules/graphics/build/libs/jsl-decora/linux/libdecora_sse.so")
+ (decora-native-obj "modules/graphics/build/native/jsl-decora/linux")
+ (decora-native-src "modules/graphics/src/main/native-decora")
+ (decora-src "modules/graphics/src/main/jsl-decora/")
+ (decora-classes "modules/graphics/build/classes/jsl-decora/")
+ (decora-cc-flags `(,@cc-flags "-ffast-math")))
+ (mkdir-p decora-gen-headers)
+ (apply invoke "javah"
+ "-d" decora-gen-headers
+ "-cp" (string-join (list classes decora-classes) ":")
+ (append javac/h-flags
+ (filter (cut string-prefix? "com.sun.scenario.effect.impl.sw.sse" <>)
+ (append (java-list-classes classes)
+ (java-list-classes decora-classes)))))
+ (mkdir-p decora-native-obj)
+ (for-each (lambda (cc)
+ (apply invoke "gcc"
+ "-I" decora-gen-headers
+ "-I" decora-gen-src
+ "-I" decora-native-src
+ "-o" (string-append decora-native-obj "/" (basename cc ".cc") ".obj")
+ (append decora-cc-flags (list cc))))
+ (append (find-files decora-gen-src "\\.cc$")
+ (find-files decora-native-src "\\.cc$")))
+ (mkdir-p (dirname decora-native-lib))
+ (apply invoke "g++" "-o" decora-native-lib
+ (append link-flags (find-files decora-native-obj "\\.obj$"))))
+ #t))
+
+ (add-after 'compile-decora-native-lib 'compile-linux-font-native-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ (font-gen-headers "modules/graphics/build/generated-src/headers/font/linux")
+ (font-native-lib "modules/graphics/build/libs/font/linux/libjavafx_font.so")
+ (font-native-obj "modules/graphics/build/native/font/linux")
+ (font-native-src "modules/graphics/src/main/native-font")
+ ;;
+ (font-cc-flags `("-DJFXFONT_PLUS" ,@cc-flags)))
+ (mkdir-p font-gen-headers)
+ (apply invoke "javah"
+ "-d" font-gen-headers
+ "-cp" classes
+ (append javac/h-flags
+ (filter (lambda (class)
+ (or (string-prefix? "com.sun.javafx.font" class)
+ (string-prefix? "com.sun.javafx.text" class)))
+ (java-list-classes classes))))
+ (mkdir-p font-native-obj)
+ (for-each (lambda (cc)
+ (apply invoke "gcc"
+ "-I" font-gen-headers
+ "-I" font-native-src
+ "-o" (string-append font-native-obj "/"
+ (basename cc ".c") ".obj")
+ (append font-cc-flags (list cc))))
+ (find-files font-native-src "\\.c$"))
+ (mkdir-p (dirname font-native-lib))
+ (apply invoke "g++"
+ "-o" font-native-lib
+ (append link-flags
+ (find-files font-native-obj "\\.obj$"))))
+ #t))
+
+ (add-after 'compile-linux-font-native-lib 'compile-linux-font-freetype
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/graphics/build/classes/java/main")
+ ;;
+ (font-freetype-gen-headers "modules/graphics/build/generated-src/headers/fontFreetype/linux")
+ (font-freetype-native-lib "modules/graphics/build/libs/fontFreetype/linux/libjavafx_font_freetype.so")
+ (font-freetype-native-obj "modules/graphics/build/native/fontFreetype/linux")
+ (font-freetype-native-src "modules/graphics/src/main/native-font/freetype.c")
+ (font-freetype-cc-flags `("-DJFXFONT_PLUS" "-D_ENABLE_PANGO"
+ "$(pkg-config --cflags freetype2)" ,@cc-flags))
+ (font-freetype-link-flags `("$(pkg-config --libs freetype2)" ,@link-flags)))
+ (mkdir-p font-freetype-gen-headers)
+ (apply invoke "javah"
+ "-d" font-freetype-gen-headers
+ "-cp" classes
+ (append javac/h-flags
+ (filter (cut string-prefix? "com.sun.javafx.font.freetype.OSFreetype" <>)
+ (java-list-classes classes))))
+ (mkdir-p font-freetype-native-obj)
+ (invoke "bash" "-c"
+ (string-join `("gcc"
+ ,@font-freetype-cc-flags
+ "-I" ,font-freetype-gen-headers
+ "-I" ,(dirname font-freetype-native-src)
+ "-o" ,(string-append font-freetype-native-obj "/"
+ (base
This message was truncated. Download the full message here.
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 06/12] gnu: java-openjfx-build: Patch DumpRenderTree for the web component.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-7-levenson@mmer.org
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch: New file.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 1 +
...penjfx-build-web-DumpRenderTree-java.patch | 30 +++++++++++++++++++
3 files changed, 32 insertions(+)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch

Toggle diff (62 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 5fe0eeadda..f8a59da3da 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1110,6 +1110,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-jdk_version.patch \
%D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
+ %D%/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index e05289758a..d60ae7c8f1 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2503,6 +2503,7 @@ new Date();"))
"0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
(patches (search-patches "java-openjfx-build-jdk_version.patch"
"java-openjfx-build-swing-JFXPanel-JDK8.patch"
+ "java-openjfx-build-web-DumpRenderTree-java.patch"
))))
(build-system ant-build-system)
(arguments
diff --git a/gnu/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch b/gnu/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch
new file mode 100644
index 0000000000..0200e92c05
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch
@@ -0,0 +1,30 @@
+Subject: [PATCH] Fix DumpRenderTree linking.
+
+DumpRenderTree compiles OK, but fails on a linking stage with the bellow
+error. I found the very same fix for openjfx-8 FreeBSD ports as well. Let's
+ignore undefined references for now.
+
+CMakeFiles/DumpRenderTreeJava.dir/__/TestRunner.cpp.o:TestRunner.cpp:function TestRunner::runUIScript(OpaqueJSContext const*, OpaqueJSString*, OpaqueJSValue const*): error: undefined reference to 'WTF::String::String(unsigned short const*, unsigned int)'
+CMakeFiles/DumpRenderTreeJava.dir/__/__/TestRunnerShared/UIScriptContext/UIScriptContext.cpp.o:UIScriptContext.cpp:function WTR::UIScriptContext::tryToCompleteUIScriptForCurrentParentCallback(): error: undefined reference to 'WTF::String::String(unsigned short const*, unsigned int)'
+collect2: error: ld returned 1 exit status
+
+---
+ .../src/main/native/Tools/DumpRenderTree/java/CMakeLists.txt | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/modules/web/src/main/native/Tools/DumpRenderTree/java/CMakeLists.txt b/modules/web/src/main/native/Tools/DumpRenderTree/java/CMakeLists.txt
+index e2ce5ef..2ad3db7 100644
+--- a/modules/web/src/main/native/Tools/DumpRenderTree/java/CMakeLists.txt
++++ b/modules/web/src/main/native/Tools/DumpRenderTree/java/CMakeLists.txt
+@@ -72,9 +72,5 @@ add_library(DumpRenderTreeJava SHARED ${DumpRenderTree_SOURCES})
+ add_definitions(-DWEBCORE_EXPORT=WTF_IMPORT -DWEBCORE_TESTSUPPORT_EXPORT=WTF_IMPORT)
+ add_dependencies(DumpRenderTreeJava DumpRenderTreeBindings)
+
+-if (UNIX AND NOT APPLE)
+- set_target_properties(DumpRenderTreeJava PROPERTIES LINK_FLAGS "-Wl,--no-undefined")
+-endif ()
+-
+ set_target_properties(DumpRenderTreeJava PROPERTIES OUTPUT_NAME "DumpRenderTreeJava")
+ target_link_libraries(DumpRenderTreeJava ${DumpRenderTree_LIBRARIES})
+--
+2.26.2
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 07/12] gnu: java-openjfx-build: Do not use an embedded 3rd party libraries.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-8-levenson@mmer.org
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch: New file.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 1 +
...-openjfx-build-web-OptionsJava.cmake.patch | 32 +++++++++++++++++++
3 files changed, 34 insertions(+)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch

Toggle diff (64 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index f8a59da3da..71b2cf1d69 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1111,6 +1111,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-openjfx-build-jdk_version.patch \
%D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
%D%/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch \
+ %D%/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index d60ae7c8f1..8ce8043335 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2504,6 +2504,7 @@ new Date();"))
(patches (search-patches "java-openjfx-build-jdk_version.patch"
"java-openjfx-build-swing-JFXPanel-JDK8.patch"
"java-openjfx-build-web-DumpRenderTree-java.patch"
+ "java-openjfx-build-web-OptionsJava.cmake.patch"
))))
(build-system ant-build-system)
(arguments
diff --git a/gnu/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch b/gnu/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch
new file mode 100644
index 0000000000..1f133571cb
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch
@@ -0,0 +1,32 @@
+Subject: [PATCH] Use find_package.
+
+We remove all embedded 3rd-party libs like icu, libxml, libxslt and sqlite,
+and use libraries provided via guix inputs.
+---
+ .../web/src/main/native/Source/cmake/OptionsJava.cmake | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+diff --git a/modules/web/src/main/native/Source/cmake/OptionsJava.cmake b/modules/web/src/main/native/Source/cmake/OptionsJava.cmake
+index 76a6695..73c525b 100644
+--- a/modules/web/src/main/native/Source/cmake/OptionsJava.cmake
++++ b/modules/web/src/main/native/Source/cmake/OptionsJava.cmake
+@@ -26,13 +26,11 @@ endif ()
+ set(LIB_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}" CACHE PATH "Absolute path to library installation directory")
+ set(EXEC_INSTALL_DIR "${CMAKE_INSTALL_FULL_BINDIR}" CACHE PATH "Absolute path to executable installation directory")
+
+-set(SQLITE_LIBRARIES SqliteJava)
+-set(LIBXML2_LIBRARIES XMLJava)
+-set(LIBXSLT_LIBRARIES XSLTJava)
+
+-set(ICU_LIBRARIES icuuc icudata)
+-set(ICU_I18N_LIBRARIES icui18n icuuc icudata)
+-set(ICU_DATA_LIBRARIES icudata)
++find_package(Sqlite REQUIRED)
++find_package(LibXml2 REQUIRED)
++find_package(LibXslt REQUIRED)
++find_package(ICU REQUIRED)
+
+ find_package(JNI REQUIRED)
+ find_package(Threads REQUIRED)
+--
+2.26.2
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 11/12] gnu: java-openjfx-build: Ensure use of system provided libraries.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-12-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Delete source code of
embedded 3rd party libraries.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 3 +++
1 file changed, 3 insertions(+)

Toggle diff (16 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index a17da610d2..1b6b494700 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2497,6 +2497,9 @@ new Date();"))
'(begin
;; Delete included gradle jar
(delete-file-recursively "gradle/wrapper")
+ ;; Delete source code of a ThirdParty libraries
+ (delete-file-recursively "modules/web/src/main/native/Source/ThirdParty")
+ (delete-file-recursively "modules/web/src/main/native/Source/PlatformJava.cmake")
#t))
(sha256
(base32
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 09/12] gnu: java-openjfx-build: Fix web component linkage.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-10-levenson@mmer.org
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch:
New file.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 1 +
...-build-web-WebKitCompilerFlags.cmake.patch | 36 +++++++++++++++++++
3 files changed, 38 insertions(+)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch

Toggle diff (68 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index d36636fd81..85f8db7150 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1113,6 +1113,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch \
%D%/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch \
%D%/packages/patches/java-openjfx-build-web-WTF.patch \
+ %D%/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index cf6135e926..5da1476077 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2506,6 +2506,7 @@ new Date();"))
"java-openjfx-build-web-DumpRenderTree-java.patch"
"java-openjfx-build-web-OptionsJava.cmake.patch"
"java-openjfx-build-web-WTF.patch"
+ "java-openjfx-build-web-WebKitCompilerFlags.cmake.patch"
))))
(build-system ant-build-system)
(arguments
diff --git a/gnu/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch b/gnu/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch
new file mode 100644
index 0000000000..d0bbb7e3b2
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch
@@ -0,0 +1,36 @@
+Subject: [PATCH] Fix WebKit linkage.
+
+Somehow the whole linkage fails because of the TestRunner's undefined
+references. However, I see the very same fixes in openjfx8-devel FreeBSD port,
+even though they use gradle to build it.
+
+CMakeFiles/DumpRenderTreeJava.dir/__/TestRunner.cpp.o:TestRunner.cpp:function TestRunner::runUIScript(OpaqueJSContext const*, OpaqueJSString*, OpaqueJSValue const*): error: undefined reference to 'WTF::String::String(unsigned short const*, unsigned int)'
+CMakeFiles/DumpRenderTreeJava.dir/__/__/TestRunnerShared/UIScriptContext/UIScriptContext.cpp.o:UIScriptContext.cpp:function WTR::UIScriptContext::tryToCompleteUIScriptForCurrentParentCallback(): error: undefined reference to 'WTF::String::String(unsigned short const*, unsigned int)'
+
+Some related bugs/commits are:
+https://github.com/WebKit/webkit/commit/1e46377e47674363131299d54c8557734a99fb5f
+https://bugs.webkit.org/show_bug.cgi?id=199625#c24
+https://bugs.webkit.org/show_bug.cgi?id=200074
+
+---
+ .../src/main/native/Source/cmake/WebKitCompilerFlags.cmake | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/modules/web/src/main/native/Source/cmake/WebKitCompilerFlags.cmake b/modules/web/src/main/native/Source/cmake/WebKitCompilerFlags.cmake
+index 5bcf047..4526ee6 100644
+--- a/modules/web/src/main/native/Source/cmake/WebKitCompilerFlags.cmake
++++ b/modules/web/src/main/native/Source/cmake/WebKitCompilerFlags.cmake
+@@ -176,11 +176,6 @@ if (NOT MSVC)
+ string(REGEX MATCHALL "-fsanitize=[^ ]*" ENABLED_COMPILER_SANITIZERS ${CMAKE_CXX_FLAGS})
+ endif ()
+
+-if (UNIX AND NOT APPLE AND NOT ENABLED_COMPILER_SANITIZERS)
+- set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}")
+-endif ()
+-
+-
+ # CODE_GENERATOR_PREPROCESSOR_WITH_LINEMARKERS only matters with GCC >= 4.7.0. Since this
+ # version, -P does not output empty lines, which currently breaks make_names.pl in
+ # WebCore. Investigating whether make_names.pl should be changed instead is left as an exercise to
+--
+2.26.2
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 12/12] gnu: java-openjfx-web: Add new variable.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-13-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-web): New variable.

We build not only the web component here, but webkit java port as well.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/packages/java.scm | 175 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 175 insertions(+)

Toggle diff (218 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 1b6b494700..6922e51940 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -11,6 +11,7 @@
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2019, 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
+;;; Copyright © 2020 Alexey Abramov <levenson@mmer.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -50,11 +51,13 @@
#:use-module (gnu packages cpio)
#:use-module (gnu packages cups)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cmake)
#:use-module (gnu packages elf)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gettext)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages gperf)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
#:use-module (gnu packages ghostscript) ;lcms
@@ -74,10 +77,13 @@
#:use-module (gnu packages wget)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages perl)
+ #:use-module (gnu packages python)
#:use-module (gnu packages popt)
#:use-module (gnu packages kerberos)
+ #:use-module (gnu packages ruby)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
+ #:use-module (gnu packages sqlite)
#:use-module (gnu packages texinfo)
#:use-module ((srfi srfi-1) #:select (fold alist-delete))
#:use-module (srfi srfi-11)
@@ -3271,6 +3277,175 @@ modern, efficient, and fully featured toolkit for developing rich client
applications. This package contains media-related classes for the
OpenJFX distribution.")))
+(define-public java-openjfx-web
+ (package (inherit java-openjfx-build)
+ (name "java-openjfx-web")
+ (arguments
+ `(#:jar-name "java-openjfx-web.jar"
+ #:source-dir (string-join '("modules/web/src/main/java"
+ "modules/web/src/main/native/Source/WebCore/bindings/java/dom3")
+ ";")
+ #:tests? #f
+ #:modules ((ice-9 match)
+ (guix build ant-build-system)
+ (guix build utils))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'build
+ (lambda* _
+ (invoke "ant" "compile" "-Dclasses.dir=modules/web/build/classes/java/main")
+ #t))
+
+ (add-after 'build 'generate-headers
+ ;; XX: We provide only software built from source, so let's build
+ ;; webkit as well. List of webkit classes can be found in
+ ;; build.gradle:2516. We need to generate headers for the upcoming
+ ;; compilation step first and put them in generated-src/headers
+ ;; location.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "modules/web/build/classes/java/main")
+ (web-generated-headers "modules/web/build/generated-src/headers")
+ (web-generated-classes '("com.sun.webkit.ContextMenu"
+ "com.sun.webkit.ContextMenuItem"
+ "com.sun.webkit.CursorManager"
+ "com.sun.webkit.PageCache"
+ "com.sun.webkit.PopupMenu"
+ "com.sun.webkit.SharedBuffer"
+ "com.sun.webkit.WebPage"
+ "com.sun.webkit.LoadListenerClient"
+ "com.sun.webkit.event.WCFocusEvent"
+ "com.sun.webkit.event.WCKeyEvent"
+ "com.sun.webkit.event.WCMouseEvent"
+ "com.sun.webkit.event.WCMouseWheelEvent"
+ "com.sun.webkit.graphics.GraphicsDecoder"
+ "com.sun.webkit.graphics.RenderMediaControls"
+ "com.sun.webkit.graphics.RenderTheme"
+ "com.sun.webkit.graphics.ScrollBarTheme"
+ "com.sun.webkit.graphics.WCMediaPlayer"
+ "com.sun.webkit.graphics.WCGraphicsManager"
+ "com.sun.webkit.graphics.WCRenderQueue"
+ "com.sun.webkit.graphics.WCPath"
+ "com.sun.webkit.graphics.WCPathIterator"
+ "com.sun.webkit.Timer"
+ "com.sun.webkit.WCFrameView"
+ "com.sun.webkit.WCPasteboard"
+ "com.sun.webkit.WCPluginWidget"
+ "com.sun.webkit.dom.CharacterDataImpl"
+ "com.sun.webkit.dom.JSObject"
+ "com.sun.webkit.network.SocketStreamHandle"
+ "com.sun.webkit.network.URLLoader"
+ "com.sun.webkit.text.TextBreakIterator"
+ "com.sun.webkit.text.TextNormalizer"))
+ (graphics (assoc-ref inputs "java-openjfx-graphics")))
+ (mkdir-p web-generated-headers)
+ (apply invoke
+ "javah"
+ "-Djava.ext.dirs="
+ "-XDignore.symbol.file"
+ "-XDuseUnsharedTable=true"
+ "-d" web-generated-headers
+ "-cp" (string-join (cons* classes (find-files graphics "\\.jar$")) ":")
+ web-generated-classes))
+ #t))
+
+ (add-after 'generate-headers 'compile-native-linux
+ (lambda* (#:key inputs system outputs #:allow-other-keys)
+ (let* ((module (string-append (getcwd) "/modules/web"))
+ ;;
+ (webkit-native-dest (string-append module "/build/linux"))
+ (webkit-native-src (string-append module "/src/main/native"))
+ ;;
+ (lib (string-append (assoc-ref outputs "out") "/lib"))
+ ;; uname -m
+ (machine (match system
+ ("x86_64-linux" "x86_64")
+ ("i686-linux" "i686")
+ ;; Prevent errors when querying this
+ ;; package on unsupported platforms,
+ ;; e.g. when running "guix package
+ ;; --search="
+ (_ "UNSUPPORTED"))))
+
+ (setenv "PYTHONDONTWRITEBYTECODE" "1")
+ (setenv "WEBKIT_OUTPUTDIR" webkit-native-dest)
+ (apply invoke `("perl"
+ ,(string-append webkit-native-src "/Tools/Scripts/set-webkit-configuration")
+ ,(if ,(target-64bit?) "--64-bit" "--32-bit")
+ "--release"))
+
+ (invoke "perl"
+ (string-append webkit-native-src "/Tools/Scripts/build-webkit")
+ "--java" ; webkit port
+ "--skip-library-update"
+ "--icu-unicode"
+ "--verbose"
+ (string-append
+ "--cmakeargs="
+ (string-join
+ (list "-DENABLE_TOOLS=1"
+ "-DCMAKE_SYSTEM_NAME=Linux"
+ ;; Ensure that the libraries are installed into /lib
+ (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
+ ;; Add input libraries to rpath
+ "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
+ ;; Enable verbose output from builds
+ "-DCMAKE_VERBOSE_MAKEFILE=ON"
+ (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
+ "\"-Wl,-rpath=" lib "\"")
+ (string-append "-DCMAKE_SYSTEM_PROCESSOR=" machine)
+ "-DJAVAFX_RELEASE_VERSION=8.0"
+ "-W"
+ "-Wall"
+ "-Werror=implicit-function-declaration"
+ "-Wl,--gc-sections"
+ "-Wno-parentheses"
+ "-Wno-unused"
+ "-fPIC"
+ "-fno-omit-frame-pointer"
+ "-fno-strict-aliasing"
+ "-fstack-protector")))))
+ #t))
+
+ (add-after 'compile-native-linux '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))
+
+ (add-before 'install 'build-jar
+ (lambda _
+ (let* ((resources "modules/web/src/main/resources")
+ (classes "modules/web/build/classes/java/main"))
+ (copy-recursively resources classes)
+ (invoke "ant" "jar" (string-append "-Dclasses.dir=" classes)))
+ #t)))))
+
+ (native-inputs
+ `(("java-junit" ,java-junit)
+ ("java-hamcrest-core" ,java-hamcrest-core)
+ ("cmake" ,cmake)
+ ("gtk" ,gtk+-2)
+ ("gtk3" ,gtk+)
+ ("ruby" ,ruby)
+ ("perl" ,perl)
+ ("gperf" ,gperf)
+ ("python-2" ,python-2)
+ ("pkg-config" ,pkg-config)))
+ (inputs
+ `(("antlr3" ,antlr3)
+ ("java-stringtemplate" ,java-stringtemplate)
+ ;; Webkit Java port dependencies
+ ("icu4c" ,icu4c)
+ ("libxml2" ,libxml2)
+ ("libxslt" ,libxslt)
+ ("sqlite" ,sqlite)))
+ (propagated-inputs
+ `(("java-openjfx-controls" ,java-openjfx-controls)
+ ("java-openjfx-media" ,java-openjfx-media)
+ ("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
(define-public javacc-4
(package
(name "javacc")
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 08/12] gnu: java-openjfx-build: Fix web component compilation with ICU 59+.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-9-levenson@mmer.org
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-WTF.patch: New file.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 1 +
.../patches/java-openjfx-build-web-WTF.patch | 33 +++++++++++++++++++
3 files changed, 35 insertions(+)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-WTF.patch

Toggle diff (65 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 71b2cf1d69..d36636fd81 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1112,6 +1112,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-openjfx-build-swing-JFXPanel-JDK8.patch \
%D%/packages/patches/java-openjfx-build-web-DumpRenderTree-java.patch \
%D%/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch \
+ %D%/packages/patches/java-openjfx-build-web-WTF.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 8ce8043335..cf6135e926 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2505,6 +2505,7 @@ new Date();"))
"java-openjfx-build-swing-JFXPanel-JDK8.patch"
"java-openjfx-build-web-DumpRenderTree-java.patch"
"java-openjfx-build-web-OptionsJava.cmake.patch"
+ "java-openjfx-build-web-WTF.patch"
))))
(build-system ant-build-system)
(arguments
diff --git a/gnu/packages/patches/java-openjfx-build-web-WTF.patch b/gnu/packages/patches/java-openjfx-build-web-WTF.patch
new file mode 100644
index 0000000000..5fa76449df
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-WTF.patch
@@ -0,0 +1,33 @@
+Subject: [PATCH] Fix compilation against ICU 59+.
+
+ICU4C has moved to char16_t as the type for UTF-16
+http://site.icu-project.org/download/59
+
+diff --git a/modules/web/src/main/native/Source/WTF/wtf/unicode/java/UnicodeJava.h b/modules/web/src/main/native/Source/WTF/wtf/unicode/java/UnicodeJava.h
+index 0993aa6..e6ea131 100644
+--- a/modules/web/src/main/native/Source/WTF/wtf/unicode/java/UnicodeJava.h
++++ b/modules/web/src/main/native/Source/WTF/wtf/unicode/java/UnicodeJava.h
+@@ -15,21 +15,6 @@
+
+ #define CharProp(p) com_sun_webkit_dom_CharacterDataImpl_##p
+
+-#if PLATFORM(JAVA) && OS(WINDOWS)
+-typedef wchar_t UChar;
+-#else
+-typedef uint16_t UChar;
+-#endif
+-
+-// #ifdef UChar32
+-// #undef UChar32
+-// #endif
+-
+-#ifndef __UMACHINE_H__ //XXX: recheck
+-typedef uint32_t UChar32;
+-#endif
+-
+-#define U_MASK(x) ((uint32_t)1<<(x))
+ #define USE_FAST_PATH(c, fast, slow) ((c) <= 0x7F ? fast((char)c) : slow(c))
+
+ #define CHECK_PROPERTY(c, mask, isSet) \
+--
+2.26.2
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 17:55
[PATCH v4 10/12] gnu: java-openjfx-build: Fix web component compilation with ICU 65+.
(address . 41360@debbugs.gnu.org)
20200607155518.1400-11-levenson@mmer.org
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-web-icu.patch: New file.

Signed-off-by: Alexey Abramov <levenson@mmer.org>
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 1 +
.../patches/java-openjfx-build-web-icu.patch | 38 +++++++++++++++++++
3 files changed, 40 insertions(+)
create mode 100644 gnu/packages/patches/java-openjfx-build-web-icu.patch

Toggle diff (70 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 85f8db7150..40458ac9c4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1114,6 +1114,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-openjfx-build-web-OptionsJava.cmake.patch \
%D%/packages/patches/java-openjfx-build-web-WTF.patch \
%D%/packages/patches/java-openjfx-build-web-WebKitCompilerFlags.cmake.patch \
+ %D%/packages/patches/java-openjfx-build-web-icu.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 5da1476077..a17da610d2 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2507,6 +2507,7 @@ new Date();"))
"java-openjfx-build-web-OptionsJava.cmake.patch"
"java-openjfx-build-web-WTF.patch"
"java-openjfx-build-web-WebKitCompilerFlags.cmake.patch"
+ "java-openjfx-build-web-icu.patch"
))))
(build-system ant-build-system)
(arguments
diff --git a/gnu/packages/patches/java-openjfx-build-web-icu.patch b/gnu/packages/patches/java-openjfx-build-web-icu.patch
new file mode 100644
index 0000000000..3e5c4a770c
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-web-icu.patch
@@ -0,0 +1,38 @@
+Subject: [PATCH] Fix compilateion with ICU.
+
+Regressed by https://github.com/unicode-org/icu/commit/480bec3ea652
+
+---
+ modules/web/src/main/native/Source/WebCore/dom/Document.cpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/modules/web/src/main/native/Source/WebCore/dom/Document.cpp b/modules/web/src/main/native/Source/WebCore/dom/Document.cpp
+index ec30fb5..4b0ff9d 100644
+--- a/modules/web/src/main/native/Source/WebCore/dom/Document.cpp
++++ b/modules/web/src/main/native/Source/WebCore/dom/Document.cpp
+@@ -4704,12 +4704,12 @@ static bool isValidNameNonASCII(const UChar* characters, unsigned length)
+ unsigned i = 0;
+
+ UChar32 c;
+- U16_NEXT(characters, i, length, c)
++ U16_NEXT(characters, i, length, c);
+ if (!isValidNameStart(c))
+ return false;
+
+ while (i < length) {
+- U16_NEXT(characters, i, length, c)
++ U16_NEXT(characters, i, length, c);
+ if (!isValidNamePart(c))
+ return false;
+ }
+@@ -4769,7 +4769,7 @@ ExceptionOr<std::pair<AtomicString, AtomicString>> Document::parseQualifiedName(
+
+ for (unsigned i = 0; i < length; ) {
+ UChar32 c;
+- U16_NEXT(qualifiedName, i, length, c)
++ U16_NEXT(qualifiedName, i, length, c);
+ if (c == ':') {
+ if (sawColon)
+ return Exception { InvalidCharacterError };
+--
+2.26.2
--
2.26.2
A
A
Alexey Abramov wrote on 7 Jun 2020 18:25
Re: [bug#41360] [PATCH 09/12] gnu: java-openjfx-web: Add new variable.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 41360@debbugs.gnu.org)
87img2c07l.fsf@mmer.org
True. I have sent a new series with fixes.

This move allowed me to drop off gcc-5, and switch back to the current one. It is also shed some light on what should/could be investigated/done to make tests work.

--
Alexey
L
L
Ludovic Courtès wrote on 12 Jun 2020 18:12
Re: [bug#41360] [PATCH v4 01/12] gnu: java-openjfx-graphics: Implement a complete compilation.
(name . Alexey Abramov)(address . levenson@mmer.org)
87bllo5km7.fsf@gnu.org
Hi Alexey,

Alexey Abramov <levenson@mmer.org> skribis:

Toggle quote (6 lines)
> * gnu/packages/java.scm (java-openjfx-graphics): Add stages to build
> libdecora_sse, prism_common, glassgtk2, iio, prism_sw, prism_es2,
> font_freetype, glassgtk3, font, font_pango and glass libraries.
>
> All the steps were taken by inspecting ./gradlew build --info result.

Could you add it in a comment?

So essentially all these phases and the unrolled and translated version
of what Gradle would do, right?

Toggle quote (5 lines)
> Signed-off-by: Alexey Abramov <levenson@mmer.org>
> ---
> gnu/packages/java.scm | 642 +++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 634 insertions(+), 8 deletions(-)

I guess it’s still “source”, but that’s a lot of it.

Do you think there are ways this could be factorized? I’m not saying we
have to do this right away, but we should probably keep in mind if we
want to ensure the long-term maintainability of this package.

Toggle quote (2 lines)
> + ;; XX: Description can be found in build.gradle:1429. Currently

I think you can remove “XX”, but description of what? Probably a bit
more context would be fine.

Toggle quote (19 lines)
> + (mkdir-p prism-gen-src)
> + (for-each (lambda (file)
> + (apply invoke "java"
> + "-cp" (string-join (list
> + ;; For CompileJSL
> + prism-compilers-classes
> + ;; jsl files are there
> + prism-src
> + (getenv "CLASSPATH"))
> + ":")
> + "CompileJSL"
> + "-i" prism-src
> + "-o" prism-gen-src
> + "-t"
> + "-pkg" "com/sun/prism"
> + "-d3d"
> + "-es2"
> + "-name" (list file)))

Problem is we won’t know where those flags come from, right? Perhaps
there’s additional info the Gradle build files?

Toggle quote (38 lines)
> + (add-after 'compile-decora-compilers 'generate-decora-shaders
> + (lambda _
> + (let ((classes "modules/graphics/build/classes/java/main")
> + (decora-classes "modules/graphics/build/classes/jsl-decora/")
> + (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
> + (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
> + (decora-src "modules/graphics/src/main/jsl-decora/")
> + (decora-components '([(file-name . "ColorAdjust")
> + (generator . "CompileJSL")
> + (outputs . "-all")]
> + [(file-name . "Brightpass")
> + (generator . "CompileJSL")
> + (outputs . "-all")]
> + [(file-name . "SepiaTone")
> + (generator . "CompileJSL")
> + (outputs . "-all")]
> + [(file-name . "PerspectiveTransform")
> + (generator . "CompileJSL")
> + (outputs . "-all")]
> + [(file-name . "DisplacementMap")
> + (generator . "CompileJSL")
> + (outputs . "-all")]
> + [(file-name . "InvertMask")
> + (generator . "CompileJSL")
> + (outputs . "-all")]
> + [(file-name . "Blend")
> + (generator . "CompileBlend")
> + (outputs . "-all")]
> + [(file-name . "PhongLighting")
> + (generator . "CompilePhong")
> + (outputs . "-all")]
> + [(file-name . "LinearConvolve")
> + (generator . "CompileLinearConvolve")
> + (outputs . "-hw")]
> + [(file-name . "LinearConvolveShadow")
> + (generator . "CompileLinearConvolve")
> + (outputs . "-hw")])))

We should at least have a comment explaining where that list comes from
and what it means.

I appreciate the huge amount of work you put into this, but I’m
concerned about maintainability.

Julien, what are the prospects of getting Gradle in Guix? What are your
thoughts here?

Thanks,
Ludo’.
A
A
Alexey Abramov wrote on 18 Jun 2020 19:31
(name . Ludovic Courtès)(address . ludo@gnu.org)
87o8pgs2kh.fsf@mmer.org
Hi Ludovic,

Please see an updated version of the java-openjfx-graphics in the attachments.

- Add yet another comment on top of the definition.
- Remove "XX" part from the commit, and put it to the above comment.

Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (12 lines)
> Hi Alexey,
>
> Alexey Abramov <levenson@mmer.org> skribis:
>
>> * gnu/packages/java.scm (java-openjfx-graphics): Add stages to build
>> libdecora_sse, prism_common, glassgtk2, iio, prism_sw, prism_es2,
>> font_freetype, glassgtk3, font, font_pango and glass libraries.
>>
>> All the steps were taken by inspecting ./gradlew build --info result.
>
> Could you add it in a comment?

Done.

Toggle quote (3 lines)
> So essentially all these phases and the unrolled and translated version
> of what Gradle would do, right?

Yes. Some of them are pretty straightforward, but others (like prism and shaders) are tricky.

Toggle quote (12 lines)
>
>> Signed-off-by: Alexey Abramov <levenson@mmer.org>
>> ---
>> gnu/packages/java.scm | 642 +++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 634 insertions(+), 8 deletions(-)
>
> I guess it’s still “source”, but that’s a lot of it.
>
> Do you think there are ways this could be factorized? I’m not saying we
> have to do this right away, but we should probably keep in mind if we
> want to ensure the long-term maintainability of this package.

I guess, In the beginning, I was trying to wrap those steps with some procedure/s, like the one gradle.build has, but when I was doing this, I realized that it might become more complicated, than just simple series of javah/javac/gcc/g++ steps. They all kinda look alike, but different.

Toggle quote (6 lines)
>
>> + ;; XX: Description can be found in build.gradle:1429. Currently
>
> I think you can remove “XX”, but description of what? Probably a bit
> more context would be fine.

Done.

Toggle quote (23 lines)
>
>> + (mkdir-p prism-gen-src)
>> + (for-each (lambda (file)
>> + (apply invoke "java"
>> + "-cp" (string-join (list
>> + ;; For CompileJSL
>> + prism-compilers-classes
>> + ;; jsl files are there
>> + prism-src
>> + (getenv "CLASSPATH"))
>> + ":")
>> + "CompileJSL"
>> + "-i" prism-src
>> + "-o" prism-gen-src
>> + "-t"
>> + "-pkg" "com/sun/prism"
>> + "-d3d"
>> + "-es2"
>> + "-name" (list file)))
>
> Problem is we won’t know where those flags come from, right? Perhaps
> there’s additional info the Gradle build files?

gradle.build has no comments about that =(. This is what you can find on top of the graphics module:

// The graphics module is needed for any graphical JavaFX application. It requires the base module and includes the scene graph, layout, css, prism, windowing, etc. This is a fairly complicated module. There are many different types of native components that all need to be compiled.

I also put it above the java-openjfx-graphics definition.

Toggle quote (42 lines)
>
>> + (add-after 'compile-decora-compilers 'generate-decora-shaders
>> + (lambda _
>> + (let ((classes "modules/graphics/build/classes/java/main")
>> + (decora-classes "modules/graphics/build/classes/jsl-decora/")
>> + (decora-compilers-classes "modules/graphics/build/classes/jsl-compilers/decora")
>> + (decora-gen-src "modules/graphics/build/generated-src/jsl-decora")
>> + (decora-src "modules/graphics/src/main/jsl-decora/")
>> + (decora-components '([(file-name . "ColorAdjust")
>> + (generator . "CompileJSL")
>> + (outputs . "-all")]
>> + [(file-name . "Brightpass")
>> + (generator . "CompileJSL")
>> + (outputs . "-all")]
>> + [(file-name . "SepiaTone")
>> + (generator . "CompileJSL")
>> + (outputs . "-all")]
>> + [(file-name . "PerspectiveTransform")
>> + (generator . "CompileJSL")
>> + (outputs . "-all")]
>> + [(file-name . "DisplacementMap")
>> + (generator . "CompileJSL")
>> + (outputs . "-all")]
>> + [(file-name . "InvertMask")
>> + (generator . "CompileJSL")
>> + (outputs . "-all")]
>> + [(file-name . "Blend")
>> + (generator . "CompileBlend")
>> + (outputs . "-all")]
>> + [(file-name . "PhongLighting")
>> + (generator . "CompilePhong")
>> + (outputs . "-all")]
>> + [(file-name . "LinearConvolve")
>> + (generator . "CompileLinearConvolve")
>> + (outputs . "-hw")]
>> + [(file-name . "LinearConvolveShadow")
>> + (generator . "CompileLinearConvolve")
>> + (outputs . "-hw")])))
>
> We should at least have a comment explaining where that list comes from
> and what it means.

I put a big comment I found in gradle.build a little bit higher, before those steps where we compile these generators.

Toggle quote (3 lines)
> I appreciate the huge amount of work you put into this, but I’m
> concerned about maintainability.

Thanks, I agree. These patches are also not complete. Ideally, javafx should provide a jfxrt.jar and users should not think about these modules at all. We are half-way there.

Toggle quote (3 lines)
> Julien, what are the prospects of getting Gradle in Guix? What are your
> thoughts here?

That would be awesome to have (guix build-system gradle)! I was looking into this as well, and even found some links where I got an idea that "probably" some older version of gradle could be build with ant.

Toggle quote (3 lines)
> Thanks,
> Ludo’.

--
Alexey
I
I
Ioannis Kappas wrote on 19 Jun 2022 21:26
[PATCH v5] finalize java-openjfx packages
(address . 41360@debbugs.gnu.org)
CAMRHuGCUsJDzk-LoHAA5d1fSESyb0Xjg6KUxk09HgUjHFS3W2Q@mail.gmail.com
Hi,

could you please consider reviewing patches to finalize the building
of the java-openjfx packages in scope of this discussion, as part of
an attempt to complete Alexey's awesome work.

The thread had stopped receiving updates for some time now. I assume
priorities were shifted elsewhere.

I recently got interested testing an openjfx application on Java 1.8,
only to realise that the current packages are incomplete. I came
across this thread, and thought to give the patches a try, and fix
where possible.

I believe I have finalised all openjfx packages in scope to build,
pass all tests and seamlessly link to their native libraries at
runtime.

My test application now works, I can use the graphics, controls and
web openjfx packages by merely specifying their share/java jar
packages on the classpath.

This email has three incremental patches. I've named the as [PATCH v5]
to denote this is a continuation from the last patches.

0001: Alexey's work brought forward to a recent guix revision.

0002: Small changes to updated the above to build with the current
guix spec/packages.

0003: My update to finalize the openjfx packages, normalize inputs,
run all tests where they exist and fix the load path of native
libraries at runtime.

I've put the author of 0001 down to Alexey since this is his works. I
compiled this patch by hand from the thread, I hope I haven't missed
anything.

The individual packages produce a jar output, and some of them also
build native shared libraries. The individual jar packages try to load
their native libraries just by name, and this will fail if the native
libs are not on the library path.

I've taken the decision to load these libraries by their full
gnu/store path instead of their names. I have also applied the same to
an external package, java-swt, since it has a shared library that has
to be located at runtime. Although there are a few native libraries
built by the java-openjfx-graphics package I left it as is, because it
has a sophisticated native library loader that locates shared
libraries relative to the jar location.

The changes in 0003 are as follows:

* java-openjfx-graphics
1. Normalize inputs, only build against gtk-2.0.
2. Output native libs to openjfx standard share/amd64 dir.
3. Do not build libjpeg from source, but rather use corresponding
package.
4. Run all tests.
* java-openjfx-controls
1. Run all tests.
2. Fix java-openjfx-graphics name typo.
* java-openjfx-media
1. Build against gstreamer.
2. Compile native library and modify loader to load it directly from
the store path.
* java-openjfx-web
1. Include version.
2. Modify loader to load native web kit lib directly from the store.
3. Fix a failing test, by applying new
java-openjfx-build-web-js-test.patch as picked up from a later
openjfx revision source code revision, to fix a failing test.
4. Run all tests.
* java-swt
1. Modify loader to load native library directly from the gnu/store
path if it can't be found otherwise. This is required for
seamlessly loading java-swt as an input.

This is my first guix package update, so is likely to require more
work based on your feedback, which is most welcome.

Thanks
J
J
Julien Lepiller wrote on 21 Jun 2022 10:22
55EF1A97-6664-422A-85AD-F02B5DCF79F0@lepiller.eu
Hi!

I think your patches are a bit difficult to review. I'll have a proper look this evening, but for now two things I noticed:

You declare configure flags as a list of flags, but at some point you have:

"-DCMAKE_CXX_FLAGS=\""
"\""

In the list. I think it's incorrect because they would be passed as separate arguments (though it might work when parsed by the program). I think you should zake it a single argument with string-append.

Also, we should now use the new style inputs for packages when possible:

(list foo bar) instead of `(("foo" ,foo) ("bar" ,bar))

Thanks!

On June 19, 2022 9:26:32 PM GMT+02:00, Ioannis Kappas <ioannis.kappas@gmail.com> wrote:
Toggle quote (82 lines)
>Hi,
>
>could you please consider reviewing patches to finalize the building
>of the java-openjfx packages in scope of this discussion, as part of
>an attempt to complete Alexey's awesome work.
>
>The thread had stopped receiving updates for some time now. I assume
>priorities were shifted elsewhere.
>
>I recently got interested testing an openjfx application on Java 1.8,
>only to realise that the current packages are incomplete. I came
>across this thread, and thought to give the patches a try, and fix
>where possible.
>
>I believe I have finalised all openjfx packages in scope to build,
>pass all tests and seamlessly link to their native libraries at
>runtime.
>
>My test application now works, I can use the graphics, controls and
>web openjfx packages by merely specifying their share/java jar
>packages on the classpath.
>
>This email has three incremental patches. I've named the as [PATCH v5]
>to denote this is a continuation from the last patches.
>
>0001: Alexey's work brought forward to a recent guix revision.
>
>0002: Small changes to updated the above to build with the current
>guix spec/packages.
>
>0003: My update to finalize the openjfx packages, normalize inputs,
>run all tests where they exist and fix the load path of native
>libraries at runtime.
>
>I've put the author of 0001 down to Alexey since this is his works. I
>compiled this patch by hand from the thread, I hope I haven't missed
>anything.
>
>The individual packages produce a jar output, and some of them also
>build native shared libraries. The individual jar packages try to load
>their native libraries just by name, and this will fail if the native
>libs are not on the library path.
>
>I've taken the decision to load these libraries by their full
>gnu/store path instead of their names. I have also applied the same to
>an external package, java-swt, since it has a shared library that has
>to be located at runtime. Although there are a few native libraries
>built by the java-openjfx-graphics package I left it as is, because it
>has a sophisticated native library loader that locates shared
>libraries relative to the jar location.
>
>The changes in 0003 are as follows:
>
>* java-openjfx-graphics
> 1. Normalize inputs, only build against gtk-2.0.
> 2. Output native libs to openjfx standard share/amd64 dir.
> 3. Do not build libjpeg from source, but rather use corresponding
> package.
> 4. Run all tests.
>* java-openjfx-controls
> 1. Run all tests.
> 2. Fix java-openjfx-graphics name typo.
>* java-openjfx-media
> 1. Build against gstreamer.
> 2. Compile native library and modify loader to load it directly from
> the store path.
>* java-openjfx-web
> 1. Include version.
> 2. Modify loader to load native web kit lib directly from the store.
> 3. Fix a failing test, by applying new
> java-openjfx-build-web-js-test.patch as picked up from a later
> openjfx revision source code revision, to fix a failing test.
> 4. Run all tests.
>* java-swt
> 1. Modify loader to load native library directly from the gnu/store
> path if it can't be found otherwise. This is required for
> seamlessly loading java-swt as an input.
>
>This is my first guix package update, so is likely to require more
>work based on your feedback, which is most welcome.
>
>Thanks
Attachment: file
A
A
Alexey Abramov wrote on 21 Jun 2022 10:30
Re: bug#41360: [PATCH 00/12] Package java-openjfx
(name . Ioannis Kappas)(address . ioannis.kappas@gmail.com)(address . 41360@debbugs.gnu.org)
87fsjy771f.fsf_-_@delta.lan
Hi

I am glad that you find these patches helpful. I tried to apply your
finalized patches, but seems like java-openjfx-build-web-js-test.patch
is still missing.

Regarding the patches themselves, I agree with Ludo. They are indeed
hard to maintain. The best approach here would be to pack gradle, so we
could build not only 8.u202 but later versions as well. And more! It
seems like it can be build with ant at
e09125febb2abd4d5eb70714ff68cdc76ee7dc45.

In the meantime what we can do is make a separate channel for openjfx.
I use openjfx for davmail only, which does provide 2fa for Microsoft
Exchange. I have been experiencing some font issues since the beginning
and would be happy to try the finalized build you made. Thanks!


--
Alexey
J
J
Julien Lepiller wrote on 21 Jun 2022 19:27
Re: [PATCH v5] finalize java-openjfx packages
(name . Ioannis Kappas)(address . ioannis.kappas@gmail.com)
20220621192706.39031ffd@sybil.lepiller.eu
Hi Ioannis,

So, I read only patches 2 and 3. In the third patch, I have a couple
suggestions, in addition to what I told you in my previous message.

java-openjfx-build-web-js-test.patch doesn't seem to be present in the
patch.

Toggle quote (2 lines)
> 2. Output native libs to openjfx standard share/amd64 dir.

That would only work on x86_64-linux I think. Could you either install
to some common directory, and then fix loading, or to a directory that
depends on the architecture, so it can find the libraries on other
architectures too?

We could get rid of all the #t at the end of phases, it's deprecated
now.

Could you fix all this and send a new patch series, with one patch per
package, so we can try applying them and checking them more closely?
J
J
Julien Lepiller wrote on 21 Jun 2022 19:32
Re: [bug#41360] [PATCH 00/12] Package java-openjfx
20220621193248.1b0be48b@sybil.lepiller.eu
Le Tue, 21 Jun 2022 10:30:20 +0200,
Alexey Abramov via Guix-patches via <guix-patches@gnu.org> a écrit :

Toggle quote (19 lines)
> Hi
>
> I am glad that you find these patches helpful. I tried to apply your
> finalized patches, but seems like java-openjfx-build-web-js-test.patch
> is still missing.
>
> Regarding the patches themselves, I agree with Ludo. They are indeed
> hard to maintain. The best approach here would be to pack gradle, so
> we could build not only 8.u202 but later versions as well. And more!
> It seems like it can be build with ant at
> e09125febb2abd4d5eb70714ff68cdc76ee7dc45.
>
> In the meantime what we can do is make a separate channel for openjfx.
> I use openjfx for davmail only, which does provide 2fa for Microsoft
> Exchange. I have been experiencing some font issues since the
> beginning and would be happy to try the finalized build you made.
> Thanks!
>

Although I agree that maintainability of these packages is going to be
hard, I don't think it's so different from, say, maven :)

Using Gradle would be the best solution here, but unfortunately, it
depends at least on Kotlin for which there is currently no known
bootstrap path. I've ended up building a 0.10.something version in a
channel, but the next version I tried to build failed for unknown
reasons (I think the previous version miscompiles the last version I
could build). Even so, building from these old versions would require a
lot of intermediate versions before we reach a recent Kotlin and it'll
get worse everytime. I haven't found an alternative implementation we
could use either. I don't see Gradle coming to Guix soon unfortunately.

Using a separate channel wouldn't change the maintainability issue, and
it would make openjfx much less discoverable, so I don't think it's a
good solution.

We should simply add more documentation and make sure we explain what's
going on. It's difficult to follow, issues will be hard to fix, but I
think it's pretty similar to Maven, where each upgrade brings new
issues that are difficult to trace back to a cause and fix.
I
I
Ioannis Kappas wrote on 21 Jun 2022 20:14
Re: [PATCH v5] finalize java-openjfx packages
(name . Julien Lepiller)(address . julien@lepiller.eu)
CAMRHuGDzuvyq7gUO57dy=-qH=+LT70unj7O_hwnNkiAgCAsMtA@mail.gmail.com
On Tue, Jun 21, 2022 at 6:27 PM Julien Lepiller <julien@lepiller.eu> wrote:
Toggle quote (9 lines)
>
> Hi Ioannis,
>
> So, I read only patches 2 and 3. In the third patch, I have a couple
> suggestions, in addition to what I told you in my previous message.
>
> java-openjfx-build-web-js-test.patch doesn't seem to be present in the
> patch.

My apologies, attached as 0004.

(Alexey, it would be great if you can check if the patches solve the
davmail issues you've mentioned)

Toggle quote (8 lines)
>
> > 2. Output native libs to openjfx standard share/amd64 dir.
>
> That would only work on x86_64-linux I think. Could you either install
> to some common directory, and then fix loading, or to a directory that
> depends on the architecture, so it can find the libraries on other
> architectures too?

Sure will have a look. There are also some examples in java.scm that
utilize %current-system and/or %current-target-system that I was
thinking of using, but couldn't find any documentation to point me
which one is the correct one.

Toggle quote (6 lines)
> We could get rid of all the #t at the end of phases, it's deprecated
> now.
>
> Could you fix all this and send a new patch series, with one patch per
> package, so we can try applying them and checking them more closely?

Will do, and also try to address the comments from the previous email.
Happy to get this through as many iterations as necessary.

Thanks
I
I
Ioannis Kappas wrote on 26 Jun 2022 09:22
(name . Julien Lepiller)(address . julien@lepiller.eu)
CAMRHuGDr_x6YdUgmOFkLkCX+ZgZpJ8o7RHwnVWuaX3TExYMqhg@mail.gmail.com
Hi Julien,

On Tue, Jun 21, 2022 at 6:27 PM Julien Lepiller <julien@lepiller.eu> wrote:
Toggle quote (6 lines)
>
> Hi Ioannis,
>
> Could you fix all this and send a new patch series, with one patch per
> package, so we can try applying them and checking them more closely?

please find patch v6 series as attached. Changes from last patch are

1. Each package definition is in a separate commit/patch file - as requested.
1. Output all native libs to lib/openjfx - no arch specific directory,
as requested.
2. Add native libs path to java.library.path property at static initialization,
so that the NativeLibsLoader can locate them at runtime - This is a
better working solution than loading by absolute path, since the
latter was not working during testing if the native libs were not
installed.
3. Install native libs after 'install phase - previously the native
libs were installed unconditionally just after compilation, which is
wrong.
4. Pass CMAKE_CXX_FLAGS argument as a single string - as requested.
5. Use new style inputs for packages - as requested.
6. Remove #t at the end of phases - as requested.

Thanks
I
I
Ioannis wrote on 9 Sep 2022 08:15
RE: [PATCH v5] finalize java-openjfx packages
(name . Julien Lepiller)(address . julien@lepiller.eu)
061B18E4-27E1-4DCC-A064-843C31A6F5F7@hxcore.ol
Attachment: file
?