Package: guix-patches;
Reported by: Alexey Abramov <levenson <at> mmer.org>
Date: Sat, 22 Feb 2020 20:20:06 UTC
Severity: normal
Tags: patch
Merged with 39741, 39742, 39743, 39744, 39745, 39746
Done: Leo Famulari <leo <at> famulari.name>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 39747 in the body.
You can then email your comments to 39747 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
guix-patches <at> gnu.org
:bug#39747
; Package guix-patches
.
(Sat, 22 Feb 2020 20:20:06 GMT) Full text and rfc822 format available.Alexey Abramov <levenson <at> mmer.org>
:guix-patches <at> gnu.org
.
(Sat, 22 Feb 2020 20:20:06 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Alexey Abramov <levenson <at> mmer.org> To: guix-patches <at> gnu.org Subject: [PATCH 3/7] gnu: java-openjfx-graphics: Implement a complete compilation. Date: Sat, 22 Feb 2020 21:17:51 +0100
--- gnu/packages/java.scm | 639 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 625 insertions(+), 14 deletions(-) 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") + ;; + (font-freetype-generated-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-generated-headers) + (apply invoke `("javah" + "-d" ,font-freetype-generated-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-generated-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-generated-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 `("-DJFXFONT_PLUS" "-D_ENABLE_PANGO" + "$(pkg-config --cflags pangoft2)" ,@cc-flags)) + (font-pango-link-flags `("$(pkg-config --libs pangoft2)" ,@link-flags))) + (mkdir-p font-pango-generated-headers) + (apply invoke `("javah" + "-d" ,font-pango-generated-headers + "-cp" ,classes + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.javafx.font.freetype.OSPango" <>) + (java-list-classes classes)))) + (mkdir-p font-pango-native-obj) + (invoke "bash" "-c" + (string-join `("gcc" + ,@font-pango-cc-flags + "-I" ,font-pango-generated-headers + "-I" ,(dirname font-pango-native-src) + "-o" ,(string-append font-pango-native-obj "/" + (basename font-pango-native-src ".c") ".obj") + ,font-pango-native-src))) + (mkdir-p (dirname font-pango-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@font-pango-link-flags + "-o" ,font-pango-native-lib + ,@(find-files font-pango-native-obj "\\.obj$"))))) + #t)) + + (add-after 'compile-linux-font-pango-lib 'compile-linux-glass-lib + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + ;; glass + (glass-generated-headers "build/generated-src/headers/glass/linux") + (glass-native-lib "build/libs/glass/linux/libglass.so") + (glass-native-obj "build/native/glass/linux/glass") + (glass-native-src "src/main/native-glass/gtk/launcher.c") + (glass-cc-flags `(,@cc-flags "$(pkg-config --cflags glib-2.0 gdk-2.0 gtk+-2.0 gthread-2.0 xtst)" "-Werror")) + (glass-link-flags `(,@link-flags "$(pkg-config --libs x11)" "-ldl")) + ;; glass-gtk2 + (gtk (assoc-ref inputs "gtk")) + (glass-gtk2-native-obj "build/native/glass/linux/glassgtk2") + (glass-gtk2-native-src (dirname glass-native-src)) + (glass-gtk2-native-lib "build/libs/glass/linux/libglassgtk2.so") + (glass-gtk2-cc-flags `(,@cc-flags "$(pkg-config --cflags gtk+-2.0 gthread-2.0 xtst)" "-Werror")) + (glass-gtk2-link-flags `(,@link-flags "$(pkg-config --libs gtk+-2.0 gthread-2.0 xtst)")) + ;; glass-gtk3 + (gtk3 (assoc-ref inputs "gtk3")) + (glass-gtk3-native-obj "build/native/glass/linux/glassgtk3") + (glass-gtk3-native-src (dirname glass-native-src)) + (glass-gtk3-native-lib "build/libs/glass/linux/libglassgtk3.so") + (glass-gtk3-cc-flags `(,@cc-flags "$(pkg-config --cflags gtk+-3.0 gthread-2.0 xtst)" "-Wno-deprecated-declarations" "-Werror")) + (glass-gtk3-link-flags `(,@link-flags "$(pkg-config --libs gtk+-3.0 gthread-2.0 xtst)"))) + ;; glass + (mkdir-p glass-generated-headers) + (apply invoke `("javah" + "-d" ,glass-generated-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (lambda (class) + (or (string-prefix? "com.sun.glass.events" class) + (string-prefix? "com.sun.glass.ui.gtk" class) + (string-prefix? "com.sun.glass.ui" class))) + (java-list-classes classes)))) + (mkdir-p glass-native-obj) + (invoke "bash" "-c" + (string-join `("gcc" + ,@glass-cc-flags + "-I" ,glass-generated-headers + "-I" ,(dirname glass-native-src) + "-o" ,(string-append glass-native-obj "/" + (basename glass-native-src ".c") ".obj") + ,glass-native-src))) + (mkdir-p (dirname glass-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@glass-link-flags + "-o" ,glass-native-lib + ,@(find-files glass-native-obj "\\.obj$")))) + ;; gtk2 + (mkdir-p glass-gtk2-native-obj) + (for-each (lambda (cpp) + (invoke "bash" "-c" + (string-join `("gcc" + ,@glass-gtk2-cc-flags + "-I" ,glass-generated-headers + "-o" ,(string-append glass-gtk2-native-obj "/" + (basename cpp ".cpp") ".obj") + ,cpp)))) + (find-files glass-gtk2-native-src "\\.cpp$")) + (mkdir-p (dirname glass-gtk2-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@glass-gtk2-link-flags + "-o" ,glass-gtk2-native-lib + ,@(find-files glass-gtk2-native-obj "\\.obj$")))) + ;; gtk3 + (mkdir-p glass-gtk3-native-obj) + (for-each (lambda (cpp) + (invoke "bash" "-c" + (string-join `("gcc" + ,@glass-gtk3-cc-flags + "-I" ,glass-generated-headers + "-o" ,(string-append glass-gtk3-native-obj "/" + (basename cpp ".cpp") ".obj") + ,cpp)))) + (find-files glass-gtk3-native-src "\\.cpp$")) + (mkdir-p (dirname glass-gtk3-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@glass-gtk3-link-flags + "-o" ,glass-gtk3-native-lib + ,@(find-files glass-gtk3-native-obj "\\.obj$"))))) + #t)) + + (add-after 'compile-linux-glass-lib 'compile-linux-iio + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (iio-generated-headers "build/generated-src/headers/iio/linux") + (iio-native-lib "build/libs/iio/linux/libjavafx_iio.so") + (iio-native-obj "build/native/iio/linux") + (iio-native-src "src/main/native-iio") + (iio-cc-flags cc-flags) + (iio-link-flags link-flags)) + (mkdir-p iio-generated-headers) + (apply invoke `("javah" + "-d" ,iio-generated-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.javafx.iio" <>) + (java-list-classes classes)))) + (mkdir-p iio-native-obj) + (for-each (lambda (c) + (invoke "bash" "-c" + (string-join `("gcc" + ,@iio-cc-flags + "-I" ,iio-generated-headers + "-o" ,(string-append iio-native-obj "/" + (basename c ".c") ".obj") + ,c)))) + (find-files iio-native-src "\\.c$")) + (mkdir-p (dirname iio-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@iio-link-flags + "-o" ,iio-native-lib + ,@(find-files iio-native-obj "\\.obj$")))) + #t))) + + (add-after 'compile-linux-iio 'compile-linux-prism + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (prism-generated-headers "build/generated-src/headers/prism/linux") + (prism-native-lib "build/libs/prism/linux/libprism_common.so") + (prism-native-obj "build/native/prism/linux") + (prism-native-src "src/main/native-prism") + (prism-cc-flags `(,@cc-flags "-DINLINE=inline")) + (prism-link-flags link-flags)) + (mkdir-p prism-generated-headers) + (apply invoke `("javah" + "-d" ,prism-generated-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (lambda (class) + (or (string-prefix? "com.sun.prism.impl" class) + (string-prefix? "com.sun.prism.PresentableState" class))) + (java-list-classes classes)))) + (mkdir-p prism-native-obj) + (for-each (lambda (c) + (invoke "bash" "-c" + (string-join `("gcc" + ,@prism-cc-flags + "-I" ,prism-generated-headers + "-I" ,prism-native-src + "-o" ,(string-append prism-native-obj "/" + (basename c ".c") ".obj") + ,c)))) + (find-files prism-native-obj "\\.c$")) + (mkdir-p (dirname prism-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@prism-link-flags + "-o" ,prism-native-lib + ,@(find-files prism-native-obj "\\.obj$")))) + #t))) + + (add-after 'compile-linux-prism 'compile-linux-prism-es2 + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (prism-es2-generated-headers "build/generated-src/headers/prismES2/linux") + (prism-es2-native-lib "build/libs/prism/linux/libprism_es2.so") + (prism-es2-native-obj "build/native/prismES2/linux") + (prism-es2-native-src "src/main/native-prism-es2") + (prism-es2-cc-flags `("-DLINUX" ,@cc-flags)) + (prism-es2-link-flags `(,@link-flags "$(pkg-config --libs x11 xxf86vm gl)"))) + (mkdir-p prism-es2-generated-headers) + (apply invoke `("javah" + "-d" ,prism-es2-generated-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.prism.es2" <>) + (java-list-classes classes)))) + (mkdir-p prism-es2-native-obj) + (for-each (lambda (c) + (apply invoke `("gcc" + ,@prism-es2-cc-flags + "-I" ,glass-native-src + "-I" ,prism-es2-generated-headers + "-I" ,prism-es2-native-src + "-I" ,(string-append prism-es2-native-src "/GL") + "-I" ,(string-append prism-es2-native-src "/x11") + "-o" ,(string-append prism-es2-native-obj "/" + (basename c ".c") ".obj") + ,c))) + (find-files prism-es2-native-src + (lambda (abs _) + (or (regexp-exec (make-regexp (string-append prism-es2-native-src "[^/]*\\.c$")) + abs) + (regexp-exec (make-regexp (string-append prism-es2-native-src "(x11/|GL/)")) + abs))))) + (mkdir-p (dirname prism-es2-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@prism-es2-link-flags + "-o" ,prism-es2-native-lib + ,@(find-files prism-es2-native-obj "\\.obj$")))) + #t))) + + (add-after 'compile-linux-prism-es2 'compile-linux-prism-sw + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (prism-sw-generated-headers "build/generated-src/headers/prismSW/linux") + (prism-sw-native-lib "build/libs/prism/linux/libprism_sw.so") + (prism-sw-native-obj "build/native/prismSW/linux") + (prism-sw-native-src "src/main/native-prism-sw") + ;; + (prism-sw-cc-flags `(,@cc-flags "-DINLINE=inline")) + (prism-sw-link-flags link-flags)) + (mkdir-p prism-sw-generated-headers) + (apply invoke `("javah" + "-d" ,prism-sw-generated-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.pisces" <>) + (java-list-classes classes)))) + (mkdir-p prism-sw-native-obj) + (for-each (lambda (c) + (invoke "bash" "-c" + (string-join `("gcc" + ,@prism-sw-cc-flags + "-I" ,prism-sw-generated-headers + "-I" ,prism-sw-native-src + "-o" ,(string-append prism-sw-native-obj "/" + (basename c ".c") ".obj") + ,c)))) + (find-files prism-sw-native-src "\\.c$")) + (mkdir-p (dirname prism-sw-native-lib)) + (apply invoke `("g++" + ,@prism-sw-link-flags + "-o" ,prism-sw-native-lib + ,@(find-files prism-sw-native-obj "\\.obj$"))) + #t))) + + (add-before 'check 'chdir-to-root + (lambda _ + (chdir (dirname (dirname (getcwd)))) + #t)) + + (add-after 'chdir-to-root 'install-native + (lambda* (#:key outputs #:allow-other-keys) + (let ((lib (string-append (assoc-ref outputs "out") "/share/amd64"))) + (for-each (lambda (file) + (install-file file lib)) + (find-files "." "\\.so$")) + #t))) + + (add-after 'install-native 'build-jar + (lambda _ + (let* ((module (string-append (getcwd) "/modules/graphics")) + (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)) + + )))) + (native-inputs + `(("freetype" ,freetype) + ("fontconfig" ,fontconfig) + ("gcc" ,gcc) + ("glib" ,glib) + ("zlib" ,zlib) + ("gtk" ,gtk+-2) + ("gtk3" ,gtk+) + ("jpeg" ,libjpeg) + ("libxtst" ,libxtst) + ("pango" ,pango) + ("libpng" ,libpng) + ("pkg-config" ,pkg-config))) + (propagated-inputs + `(("java-openjfx-base" ,java-openjfx-base) + ("java-swt" ,java-swt))))) (define-public java-openjfx-media (package (inherit java-openjfx-build) -- 2.24.1
guix-patches <at> gnu.org
:bug#39747
; Package guix-patches
.
(Wed, 04 Mar 2020 03:01:02 GMT) Full text and rfc822 format available.Message #8 received at 39747 <at> debbugs.gnu.org (full text, mbox):
From: Leo Famulari <leo <at> famulari.name> To: Alexey Abramov <levenson <at> mmer.org> Cc: 39747 <at> debbugs.gnu.org Subject: Re: [bug#39747] [PATCH 3/7] gnu: java-openjfx-graphics: Implement a complete compilation. Date: Tue, 3 Mar 2020 22:00:12 -0500
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 :) 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 <leo <at> famulari.name>
to control <at> debbugs.gnu.org
.
(Wed, 04 Mar 2020 03:15:02 GMT) Full text and rfc822 format available.guix-patches <at> gnu.org
:bug#39747
; Package guix-patches
.
(Mon, 09 Mar 2020 12:48:02 GMT) Full text and rfc822 format available.Message #13 received at 39747 <at> debbugs.gnu.org (full text, mbox):
From: Alexey Abramov <levenson <at> mmer.org> To: 39747 <at> debbugs.gnu.org Cc: Alexey Abramov <levenson <at> mmer.org> Subject: [v2] gnu: java-openjfx-graphics: Implement a complete compilation. Date: Mon, 9 Mar 2020 13:46:27 +0100
--- gnu/packages/java.scm | 659 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 651 insertions(+), 8 deletions(-) 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 `("-DJFXFONT_PLUS" "-D_ENABLE_PANGO" + "$(pkg-config --cflags pangoft2)" ,@cc-flags)) + (font-pango-link-flags `("$(pkg-config --libs pangoft2)" ,@link-flags))) + (mkdir-p font-pango-gen-headers) + (apply invoke `("javah" + "-d" ,font-pango-gen-headers + "-cp" ,classes + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.javafx.font.freetype.OSPango" <>) + (java-list-classes classes)))) + (mkdir-p font-pango-native-obj) + (invoke "bash" "-c" + (string-join `("gcc" + ,@font-pango-cc-flags + "-I" ,font-pango-gen-headers + "-I" ,(dirname font-pango-native-src) + "-o" ,(string-append font-pango-native-obj "/" + (basename font-pango-native-src ".c") ".obj") + ,font-pango-native-src))) + (mkdir-p (dirname font-pango-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@font-pango-link-flags + "-o" ,font-pango-native-lib + ,@(find-files font-pango-native-obj "\\.obj$"))))) + #t)) + + (add-after 'compile-linux-font-pango-lib 'compile-linux-glass-lib + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + ;; glass + (glass-gen-headers "build/generated-src/headers/glass/linux") + (glass-native-lib "build/libs/glass/linux/libglass.so") + (glass-native-obj "build/native/glass/linux/glass") + (glass-native-src "src/main/native-glass/gtk/launcher.c") + (glass-cc-flags + `(,@cc-flags + "$(pkg-config --cflags glib-2.0 gdk-2.0 gtk+-2.0 gthread-2.0 xtst)" + "-Werror")) + (glass-link-flags + `(,@link-flags "$(pkg-config --libs x11)" "-ldl")) + ;; glass-gtk2 + (gtk (assoc-ref inputs "gtk")) + (glass-gtk2-native-obj "build/native/glass/linux/glassgtk2") + (glass-gtk2-native-src (dirname glass-native-src)) + (glass-gtk2-native-lib "build/libs/glass/linux/libglassgtk2.so") + (glass-gtk2-cc-flags + `(,@cc-flags + "$(pkg-config --cflags gtk+-2.0 gthread-2.0 xtst)" + "-Werror")) + (glass-gtk2-link-flags + `(,@link-flags + "$(pkg-config --libs gtk+-2.0 gthread-2.0 xtst)")) + ;; glass-gtk3 + (gtk3 (assoc-ref inputs "gtk3")) + (glass-gtk3-native-obj "build/native/glass/linux/glassgtk3") + (glass-gtk3-native-src (dirname glass-native-src)) + (glass-gtk3-native-lib "build/libs/glass/linux/libglassgtk3.so") + (glass-gtk3-cc-flags + `(,@cc-flags + "$(pkg-config --cflags gtk+-3.0 gthread-2.0 xtst)" + "-Wno-deprecated-declarations" "-Werror")) + (glass-gtk3-link-flags + `(,@link-flags "$(pkg-config --libs gtk+-3.0 gthread-2.0 xtst)"))) + ;; glass + (mkdir-p glass-gen-headers) + (apply invoke `("javah" + "-d" ,glass-gen-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (lambda (class) + (or (string-prefix? "com.sun.glass.events" class) + (string-prefix? "com.sun.glass.ui.gtk" class) + (string-prefix? "com.sun.glass.ui" class))) + (java-list-classes classes)))) + (mkdir-p glass-native-obj) + (invoke "bash" "-c" + (string-join `("gcc" + ,@glass-cc-flags + "-I" ,glass-gen-headers + "-I" ,(dirname glass-native-src) + "-o" ,(string-append glass-native-obj "/" + (basename glass-native-src ".c") ".obj") + ,glass-native-src))) + (mkdir-p (dirname glass-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@glass-link-flags + "-o" ,glass-native-lib + ,@(find-files glass-native-obj "\\.obj$")))) + ;; gtk2 + (mkdir-p glass-gtk2-native-obj) + (for-each (lambda (cpp) + (invoke "bash" "-c" + (string-join `("gcc" + ,@glass-gtk2-cc-flags + "-I" ,glass-gen-headers + "-o" ,(string-append glass-gtk2-native-obj "/" + (basename cpp ".cpp") ".obj") + ,cpp)))) + (find-files glass-gtk2-native-src "\\.cpp$")) + (mkdir-p (dirname glass-gtk2-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@glass-gtk2-link-flags + "-o" ,glass-gtk2-native-lib + ,@(find-files glass-gtk2-native-obj "\\.obj$")))) + ;; gtk3 + (mkdir-p glass-gtk3-native-obj) + (for-each (lambda (cpp) + (invoke "bash" "-c" + (string-join `("gcc" + ,@glass-gtk3-cc-flags + "-I" ,glass-gen-headers + "-o" ,(string-append glass-gtk3-native-obj "/" + (basename cpp ".cpp") ".obj") + ,cpp)))) + (find-files glass-gtk3-native-src "\\.cpp$")) + (mkdir-p (dirname glass-gtk3-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@glass-gtk3-link-flags + "-o" ,glass-gtk3-native-lib + ,@(find-files glass-gtk3-native-obj "\\.obj$"))))) + #t)) + + (add-after 'compile-linux-glass-lib 'compile-linux-iio + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (iio-gen-headers "build/generated-src/headers/iio/linux") + (iio-native-lib "build/libs/iio/linux/libjavafx_iio.so") + (iio-native-obj "build/native/iio/linux") + (iio-native-src "src/main/native-iio") + (iio-cc-flags cc-flags) + (iio-link-flags link-flags)) + (mkdir-p iio-gen-headers) + (apply invoke `("javah" + "-d" ,iio-gen-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.javafx.iio" <>) + (java-list-classes classes)))) + (mkdir-p iio-native-obj) + (for-each (lambda (c) + (invoke "bash" "-c" + (string-join `("gcc" + ,@iio-cc-flags + "-I" ,iio-gen-headers + "-o" ,(string-append iio-native-obj "/" + (basename c ".c") ".obj") + ,c)))) + (find-files iio-native-src "\\.c$")) + (mkdir-p (dirname iio-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@iio-link-flags + "-o" ,iio-native-lib + ,@(find-files iio-native-obj "\\.obj$")))) + #t))) + + (add-after 'compile-linux-iio 'compile-linux-prism + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (prism-gen-headers "build/generated-src/headers/prism/linux") + (prism-native-lib "build/libs/prism/linux/libprism_common.so") + (prism-native-obj "build/native/prism/linux") + (prism-native-src "src/main/native-prism") + (prism-cc-flags `(,@cc-flags "-DINLINE=inline")) + (prism-link-flags link-flags)) + (mkdir-p prism-gen-headers) + (apply invoke `("javah" + "-d" ,prism-gen-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (lambda (class) + (or (string-prefix? "com.sun.prism.impl" class) + (string-prefix? "com.sun.prism.PresentableState" class))) + (java-list-classes classes)))) + (mkdir-p prism-native-obj) + (for-each (lambda (c) + (invoke "bash" "-c" + (string-join `("gcc" + ,@prism-cc-flags + "-I" ,prism-gen-headers + "-I" ,prism-native-src + "-o" ,(string-append prism-native-obj "/" + (basename c ".c") ".obj") + ,c)))) + (find-files prism-native-obj "\\.c$")) + (mkdir-p (dirname prism-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@prism-link-flags + "-o" ,prism-native-lib + ,@(find-files prism-native-obj "\\.obj$")))) + #t))) + + (add-after 'compile-linux-prism 'compile-linux-prism-es2 + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (prism-es2-gen-headers "build/generated-src/headers/prismES2/linux") + (prism-es2-native-lib "build/libs/prism/linux/libprism_es2.so") + (prism-es2-native-obj "build/native/prismES2/linux") + (prism-es2-native-src "src/main/native-prism-es2") + (prism-es2-cc-flags `("-DLINUX" ,@cc-flags)) + (prism-es2-link-flags + `(,@link-flags "$(pkg-config --libs x11 xxf86vm gl)")) + ;; We need all *.c files in the root and only those + ;; which are in a specific directories. + (filter-src + (lambda (abs _) + (or (regexp-exec (make-regexp (string-append prism-es2-native-src "[^/]*\\.c$")) + abs) + (regexp-exec (make-regexp (string-append prism-es2-native-src "(x11/|GL/)")) + abs))))) + (mkdir-p prism-es2-gen-headers) + (apply invoke `("javah" + "-d" ,prism-es2-gen-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.prism.es2" <>) + (java-list-classes classes)))) + (mkdir-p prism-es2-native-obj) + (for-each (lambda (c) + (apply invoke `("gcc" + ,@prism-es2-cc-flags + "-I" ,glass-native-src + "-I" ,prism-es2-gen-headers + "-I" ,prism-es2-native-src + "-I" ,(string-append prism-es2-native-src "/GL") + "-I" ,(string-append prism-es2-native-src "/x11") + "-o" ,(string-append prism-es2-native-obj "/" + (basename c ".c") ".obj") + ,c))) + (find-files prism-es2-native-src filter-src)) + (mkdir-p (dirname prism-es2-native-lib)) + (invoke "bash" "-c" + (string-join `("g++" + ,@prism-es2-link-flags + "-o" ,prism-es2-native-lib + ,@(find-files prism-es2-native-obj "\\.obj$")))) + #t))) + + (add-after 'compile-linux-prism-es2 'compile-linux-prism-sw + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "build/classes/java/main") + (prism-sw-gen-headers "build/generated-src/headers/prismSW/linux") + (prism-sw-native-lib "build/libs/prism/linux/libprism_sw.so") + (prism-sw-native-obj "build/native/prismSW/linux") + (prism-sw-native-src "src/main/native-prism-sw") + ;; + (prism-sw-cc-flags `(,@cc-flags "-DINLINE=inline")) + (prism-sw-link-flags link-flags)) + (mkdir-p prism-sw-gen-headers) + (apply invoke `("javah" + "-d" ,prism-sw-gen-headers + "-cp" ,(string-append classes ":" (getenv "CLASSPATH")) + ,@javac/h-flags + ,@(filter (cut string-prefix? "com.sun.pisces" <>) + (java-list-classes classes)))) + (mkdir-p prism-sw-native-obj) + (for-each (lambda (c) + (invoke "bash" "-c" + (string-join `("gcc" + ,@prism-sw-cc-flags + "-I" ,prism-sw-gen-headers + "-I" ,prism-sw-native-src + "-o" ,(string-append prism-sw-native-obj "/" + (basename c ".c") ".obj") + ,c)))) + (find-files prism-sw-native-src "\\.c$")) + (mkdir-p (dirname prism-sw-native-lib)) + (apply invoke `("g++" + ,@prism-sw-link-flags + "-o" ,prism-sw-native-lib + ,@(find-files prism-sw-native-obj "\\.obj$"))) + #t))) + + (add-before 'check 'chdir-to-root + (lambda _ + (chdir (dirname (dirname (getcwd)))) + #t)) + + (add-after 'chdir-to-root 'install-native + (lambda* (#:key outputs #:allow-other-keys) + (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))))))) + (for-each (lambda (file) + (install-file file lib-path)) + (find-files "." "\\.so$")) + #t))) + + (add-after 'install-native 'build-jar + (lambda _ + (let* ((module (string-append (getcwd) "/modules/graphics")) + (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)))))) + (native-inputs + `(("freetype" ,freetype) + ("fontconfig" ,fontconfig) + ("gcc" ,gcc) + ("glib" ,glib) + ("zlib" ,zlib) + ("gtk" ,gtk+-2) + ("gtk3" ,gtk+) + ("jpeg" ,libjpeg) + ("libxtst" ,libxtst) + ("pango" ,pango) + ("libpng" ,libpng) + ("pkg-config" ,pkg-config))) (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."))) + ("java-swt" ,java-swt))))) (define-public java-openjfx-media (package (inherit java-openjfx-build) -- 2.24.1
guix-patches <at> gnu.org
:bug#39747
; Package guix-patches
.
(Mon, 09 Mar 2020 13:09:02 GMT) Full text and rfc822 format available.Message #16 received at 39747 <at> debbugs.gnu.org (full text, mbox):
From: levenson <at> mmer.org To: Leo Famulari <leo <at> famulari.name> Cc: 39747 <at> debbugs.gnu.org, Alexey Abramov <levenson <at> mmer.org> Subject: Re: [bug#39747] [PATCH 3/7] gnu: java-openjfx-graphics: Implement a complete compilation. Date: Mon, 09 Mar 2020 14:08:02 +0100
I have updated the patch. Leo Famulari <leo <at> famulari.name> writes: > 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. > 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. > 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
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Wed, 15 Apr 2020 11:24:05 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.