[PATCH 3/7] gnu: java-openjfx-graphics: Implement a complete compilation.

  • Done
  • quality assurance status badge
Details
2 participants
  • Leo Famulari
  • Alexey Abramov
Owner
unassigned
Submitted by
Alexey Abramov
Severity
normal
Merged with

Debbugs page

Alexey Abramov wrote 5 years ago
(address . guix-patches@gnu.org)
20200222201755.50425-3-levenson@mmer.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.
Leo Famulari wrote 5 years ago
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 39747@debbugs.gnu.org)
20200304030012.GB1199@jasmine.lan
On Sat, Feb 22, 2020 at 09:17:51PM +0100, Alexey Abramov wrote:
Toggle quote (14 lines)
> + (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))

[...]

Wow, this might be one of the longest package definitions in Guix :)

I can't review it in detail but if it's working for you, okay. Just make
sure to run `./pre-inst-env guix lint java-openjfx-graphics` and fix any
cosmetic issues.

Maybe some of the Guix Java experts can give it a closer review...
Leo Famulari wrote 5 years ago
(no subject)
(address . control@debbugs.gnu.org)
20200304031442.GA2347@jasmine.lan
merge 39741 39742 39743 39744 39745 39746 39747
Alexey Abramov wrote 5 years ago
[v2] gnu: java-openjfx-graphics: Implement a complete compilation.
(address . 39747@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
20200309124627.51800-1-levenson@mmer.org
---
gnu/packages/java.scm | 659 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 651 insertions(+), 8 deletions(-)

Toggle diff (339 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index d2d481fb5e..349b22419a 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)
@@ -2429,16 +2430,658 @@ 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))
+
+ (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-gen-src "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" ,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-gen-src "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"))
+ ,@javac/h-flags
+ ,@(find-files prism-gen-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-gen-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-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
+ ,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-gen-src "build/generated-src/jsl-decora"))
+ (mkdir-p decora-classes)
+ (apply invoke `("javac"
+ "-d" ,decora-classes
+ "-cp" ,classes
+ ,@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 "build/classes/java/main")
+ (decora-gen-headers "build/generated-src/headers/jsl-decora")
+ (decora-gen-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-gen-headers)
+ (apply invoke `("javah"
+ "-d" ,decora-gen-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-gen-headers
+ "-I" ,decora-gen-src
+ "-I" ,decora-native-src
+ "-o" ,(string-append decora-native-obj "/"
+ (basename cc ".cc") ".obj")
+ ,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
+ ,@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-gen-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-gen-headers)
+ (apply invoke `("javah"
+ "-d" ,font-gen-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-gen-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")
+ ;;
+ (font-freetype-gen-headers "build/generated-src/headers/fontFreetype/linux")
+ (font-freetype-native-lib "build/libs/fontFreetype/linux/libjavafx_font_freetype.so")
+ (font-freetype-native-obj "build/native/fontFreetype/linux")
+ (font-freetype-native-src "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
+ ,@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 "/"
+ (basename font-freetype-native-src ".c") ".obj")
+ ,font-freetype-native-src)))
+ (mkdir-p (dirname font-freetype-native-lib))
+ (invoke "bash" "-c"
+ (string-join `("g++"
+ "-o" ,font-freetype-native-lib
+ ,@font-freetype-link-flags
+ ,@(find-files font-freetype-native-obj "\\.obj$"))))
+ #t)))
+
+ (add-after 'compile-linux-font-freetype 'compile-linux-font-pango-lib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((classes "build/classes/java/main")
+ (font-pango-gen-headers "build/generated-src/headers/fontPango/linux")
+ (font-pango-native-lib "build/libs/fontPango/linux/libjavafx_font_pango.so")
+ (font-pango-native-obj "build/native/fontPango/linux")
+ (font-pango-native-src "src/main/native-font/pango.c")
+ (font-pango-cc-flags `("
This message was truncated. Download the full message here.
levenson wrote 5 years ago
Re: [bug#39747] [PATCH 3/7] gnu: java-openjfx-graphics: Implement a complete compilation.
(name . Leo Famulari)(address . leo@famulari.name)(address . 39747@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
84y2s9smkt.fsf@delta.i-did-not-set--mail-host-address--so-tickle-me
I have updated the patch.

Leo Famulari <leo@famulari.name> writes:

Toggle quote (20 lines)
> On Sat, Feb 22, 2020 at 09:17:51PM +0100, Alexey Abramov wrote:
>> + (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))
>
> [...]
>
> Wow, this might be one of the longest package definitions in Guix :)

Yeah, OpenJDK has two build instruction procedures for u8 and u9. I was
thinking about some helpers to reduce the amount of code but wasn't sure
if it's going to work/help for u9. My goal was to package davmail, so I
started packaging what I had been using to run it.

Toggle quote (4 lines)
> I can't review it in detail but if it's working for you, okay. Just make
> sure to run `./pre-inst-env guix lint java-openjfx-graphics` and fix any
> cosmetic issues.

In my case it complains about:

1. Patch file name, which is added to the java-openjfx-build package. I
can rename it, but I am guessing it will start complaining on
java-openjfx-build. Bug? Or am I doing something wrong?

2. java-openjfx-build is not under Software Heritage, hence the
message.

3. Lines are too long, All lines are shorter than 120 for
sure. I would prefer to keep them as it is. It is easier to read.

Toggle quote (2 lines)
> Maybe some of the Guix Java experts can give it a closer review...

That would be great, cause I did build a lot of native libraries, but
not all of them. fontT2k for example which is a fallback library for
some fonts engines.

--
Alexey
?
Your comment

This issue is archived.

To comment on this conversation send an email to 39747@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 39747
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help