diff mbox series

[bug#39746,v3,2/2] gnu: java-openjfx-web: Add new variable.

Message ID 20200314061045.308244-2-levenson@mmer.org
State Accepted
Headers show
Series [bug#39746,v3,1/2] gnu: java-openjfx-build: Prepare a patch to build openjfx-web. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job

Commit Message

Alexey Abramov March 14, 2020, 6:10 a.m. UTC
---
 gnu/packages/java.scm | 179 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 179 insertions(+)

--
2.24.1
diff mbox series

Patch

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 6db8a3ec7c..826e027fa4 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -47,11 +47,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
@@ -71,8 +73,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)
@@ -3142,6 +3146,181 @@  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
+       (let ((lib-path (string-append (assoc-ref %outputs "out")
+                                      ,(match (%current-system)
+                                         ("i686-linux"
+                                          "/lib/i386")
+                                         ("x86_64-linux"
+                                          "/lib/amd64")
+                                         ("armhf-linux"
+                                          "/lib/arm")
+                                         ("aarch64-linux"
+                                          "/lib/aarch64")
+                                         ;; We need a catch-all, dropping
+                                         ;; '-linux' works in most cases.
+                                         (_
+                                          (string-append
+                                           "/lib/"
+                                           (string-drop-right
+                                            (%current-system) 6)))))))
+         (modify-phases %standard-phases
+           (replace 'build
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let* ((module (string-append (getcwd) "/modules/web"))
+                      (classes (string-append module "/build/classes/java/main")))
+                 (invoke "ant" "compile" (string-append "-Dclasses.dir=" classes)))
+               #t))
+           (add-after 'build 'generate-headers
+             (lambda* (#:key inputs #:allow-other-keys)
+               (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"
+                                               "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"))
+                       ;; 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
+                         "--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-path)
+                                 ;; 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-path "\"")
+                                 (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)
+               (for-each (lambda (file)
+                           (install-file file lib-path))
+                         (find-files "." "\\.so$"))))
+
+           (add-before 'install 'build-jar
+             (lambda _
+               (let* ((module (string-append (getcwd) "/modules/web"))
+                      (resources (string-append module "/src/main/resources"))
+                      (classes (string-append module "/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)
+       ("gcc" ,gcc)
+       ("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")