Alexey Abramov wrote 5 years ago
(address . guix-patches@gnu.org)
---
gnu/packages/java.scm | 639 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 625 insertions(+), 14 deletions(-)
Toggle diff (315 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 6f75194256..4e975a0490 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -53,6 +53,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)
@@ -2419,20 +2420,630 @@ distribution.")))
(define-public java-openjfx-graphics
(package (inherit java-openjfx-build)
- (name "java-openjfx-graphics")
- (arguments
- `(#:jar-name "java-openjfx-graphics.jar"
- #:source-dir "modules/graphics/src/main/java"
- #:tests? #f; require X
- #:test-dir "modules/graphics/src/test"))
- (propagated-inputs
- `(("java-openjfx-base" ,java-openjfx-base)
- ("java-swt" ,java-swt)))
- (description "OpenJFX is a client application platform for desktop,
-mobile and embedded systems built on Java. Its goal is to produce a
-modern, efficient, and fully featured toolkit for developing rich client
-applications. This package contains graphics-related classes for the
-OpenJFX distribution.")))
+ (name "java-openjfx-graphics")
+ (arguments
+ `(#:jar-name "java-openjfx-graphics.jar"
+ #:source-dir "modules/graphics/src/main/java"
+ #: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))
+
+ (add-after 'build 'chdir-to-a-module-directory
+ (lambda _
+ (chdir (string-append (getcwd) "/modules/graphics"))
+ #t))
+
+ (add-after 'chdir-to-a-module-directory 'compile-prism-compilers
+ (lambda _
+ (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"))))
+ #t))
+
+ (add-after 'compile-prism-compilers 'generate-prism-shaders
+ (lambda _
+ (let ((prism-compilers-classes "build/classes/jsl-compilers/prism")
+ (prism-src "src/main/jsl-prism/")
+ (prism-generated-src "build/generated-src/jsl-prism"))
+ (mkdir-p prism-generated-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-generated-src
+ "-t"
+ "-pkg" "com/sun/prism"
+ "-d3d"
+ "-es2"
+ "-name" ,file)))
+ (find-files prism-src "\\.jsl$")))
+ #t))
+
+ (add-after 'generate-prism-shaders 'compile-prism-shaders
+ (lambda _
+ (let* ((classes "build/classes/java/main")
+ (prism-classes "build/classes/jsl-prism")
+ (prism-generated-src "build/generated-src/jsl-prism")
+ (prism-generated-shaders-src (string-append prism-generated-src "/com/sun/prism/shader")))
+ (mkdir-p prism-classes)
+ (apply invoke `("javac"
+ "-d" ,prism-classes
+ "-cp" ,(string-append classes ":" (getenv "CLASSPATH"))
+ ,@javac/h-flags
+ ,@(find-files prism-generated-shaders-src))))
+ #t))
+ (add-after 'compile-prism-shaders 'compile-decora-compilers
+ (lambda _
+ (let ((classes "build/classes/java/main")
+ (decora-compilers-classes "build/classes/jsl-compilers/decora")
+ (decora-src "src/main/jsl-decora/"))
+ (mkdir-p decora-compilers-classes)
+ (apply invoke `("javac"
+ "-d" ,decora-compilers-classes
+ "-cp" ,(string-append classes ":" (getenv "CLASSPATH"))
+ ,@javac/h-flags
+ ,@(find-files decora-src "\\.java"))))
+ #t))
+
+ (add-after 'compile-decora-compilers 'generate-decora-shaders
+ (lambda _
+ (let ((classes "build/classes/java/main")
+ (decora-classes "build/classes/jsl-decora/")
+ (decora-compilers-classes "build/classes/jsl-compilers/decora")
+ (decora-generated-src "build/generated-src/jsl-decora")
+ (decora-src "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-generated-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-generated-src
+ "-t"
+ "-pkg" "com/sun/scenario/effect"
+ ,outputs
+ ,file-name))))
+ decora-components)
+ #t)))
+
+ (add-after 'generate-decora-shaders 'compile-decora-shaders
+ (lambda _
+ (let ((classes "build/classes/java/main")
+ (decora-classes "build/classes/jsl-decora/")
+ (decora-generated-src "build/generated-src/jsl-decora"))
+ (mkdir-p decora-classes)
+ (apply invoke `("javac"
+ "-d" ,decora-classes
+ "-cp" ,classes
+ ,@javac/h-flags
+ ,@(find-files decora-generated-src "\\.java$"))))
+ #t))
+
+ (add-after 'compile-decora-shaders 'compile-decora-native-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "build/classes/java/main")
+ (decora-generated-headers "build/generated-src/headers/jsl-decora")
+ (decora-generated-src "build/generated-src/jsl-decora")
+ (decora-native-lib "build/libs/jsl-decora/linux/libdecora_sse.so")
+ (decora-native-obj "build/native/jsl-decora/linux")
+ (decora-native-src "src/main/native-decora")
+ (decora-src "src/main/jsl-decora/")
+ (decora-classes "build/classes/jsl-decora/")
+ (decora-cc-flags `(,@cc-flags "-ffast-math")))
+ (mkdir-p decora-generated-headers)
+ (apply invoke `("javah"
+ "-d" ,decora-generated-headers
+ "-cp" ,(string-join (list classes decora-classes) ":")
+ ,@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"
+ ,@decora-cc-flags
+ "-I" ,decora-generated-headers
+ "-I" ,decora-generated-src
+ "-I" ,decora-native-src
+ "-o" ,(string-append decora-native-obj "/"
+ (basename cc ".cc") ".obj")
+ ,cc)))
+ (append (find-files decora-generated-src "\\.cc$")
+ (find-files decora-native-src "\\.cc$")))
+ (mkdir-p (dirname decora-native-lib))
+ (apply invoke `("g++"
+ "-o" ,decora-native-lib
+ ,@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 "build/classes/java/main")
+ (font-generated-headers "build/generated-src/headers/font/linux")
+ (font-native-lib "build/libs/font/linux/libjavafx_font.so")
+ (font-native-obj "build/native/font/linux")
+ (font-native-src "src/main/native-font")
+ ;;
+ (font-cc-flags `("-DJFXFONT_PLUS" ,@cc-flags)))
+ (mkdir-p font-generated-headers)
+ (apply invoke `("javah"
+ "-d" ,font-generated-headers
+ "-cp" ,classes
+ ,@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"
+ ,@font-cc-flags
+ "-I" ,font-generated-headers
+ "-I" ,font-native-src
+ "-o" ,(string-append font-native-obj "/"
+ (basename cc ".c") ".obj")
+ ,cc)))
+ (find-files font-native-src "\\.c$"))
+ (mkdir-p (dirname font-native-lib))
+ (apply invoke `("g++"
+ "-o" ,font-native-lib
+ ,@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 "build/classes/java/main")
+
This message was truncated. Download the full message here.