From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id 0JQyE3Cl616mUgAA0tVLHw (envelope-from ) for ; Thu, 18 Jun 2020 17:33:36 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id uNAXD3Cl616bGQAA1q6Kng (envelope-from ) for ; Thu, 18 Jun 2020 17:33:36 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 34FE49407C6 for ; Thu, 18 Jun 2020 17:33:35 +0000 (UTC) Received: from localhost ([::1]:42598 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jlyPs-0000FM-Eo for larch@yhetil.org; Thu, 18 Jun 2020 13:33:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jlyPO-0000EK-SG for guix-patches@gnu.org; Thu, 18 Jun 2020 13:33:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:42752) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jlyPO-0006NF-J9 for guix-patches@gnu.org; Thu, 18 Jun 2020 13:33:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jlyPO-0005wI-GL for guix-patches@gnu.org; Thu, 18 Jun 2020 13:33:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#41360] [PATCH v4 01/12] gnu: java-openjfx-graphics: Implement a complete compilation. Resent-From: Alexey Abramov Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 18 Jun 2020 17:33:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 41360 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 41360@debbugs.gnu.org, Julien Lepiller Received: via spool by 41360-submit@debbugs.gnu.org id=B41360.159250153321528 (code B ref 41360); Thu, 18 Jun 2020 17:33:02 +0000 Received: (at 41360) by debbugs.gnu.org; 18 Jun 2020 17:32:13 +0000 Received: from localhost ([127.0.0.1]:54295 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jlyOR-0005TW-1F for submit@debbugs.gnu.org; Thu, 18 Jun 2020 13:32:13 -0400 Received: from mx4.mail.mmer.org ([178.22.66.29]:49587) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jlyOC-0005HM-Jm for 41360@debbugs.gnu.org; Thu, 18 Jun 2020 13:32:01 -0400 Received: from delta (92-109-1-225.cable.dynamic.v4.ziggo.nl [92.109.1.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx4.mail.mmer.org (Postfix) with ESMTPSA id 9E6C29CE4E; Thu, 18 Jun 2020 17:00:59 +0000 (UTC) From: Alexey Abramov In-Reply-To: <87bllo5km7.fsf@gnu.org> ("Ludovic =?UTF-8?Q?Court=C3=A8s?="'s message of "Fri, 12 Jun 2020 18:12:16 +0200") References: <20200607155518.1400-1-levenson@mmer.org> <20200607155518.1400-2-levenson@mmer.org> <87bllo5km7.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) Date: Thu, 18 Jun 2020 19:31:42 +0200 Message-ID: <87o8pgs2kh.fsf@mmer.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -1.0 (-) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: -1.01 X-TUID: vylN8rN6Sxwo --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Ludovic, Please see an updated version of the java-openjfx-graphics in the attachmen= ts.=20 - Add yet another comment on top of the definition. - Remove "XX" part from the commit, and put it to the above comment. Ludovic Court=C3=A8s writes: > Hi Alexey, > > Alexey Abramov skribis: > >> * gnu/packages/java.scm (java-openjfx-graphics): Add stages to build >> libdecora_sse, prism_common, glassgtk2, iio, prism_sw, prism_es2, >> font_freetype, glassgtk3, font, font_pango and glass libraries. >> >> All the steps were taken by inspecting ./gradlew build --info result. > > Could you add it in a comment? Done. > So essentially all these phases and the unrolled and translated version > of what Gradle would do, right? Yes. Some of them are pretty straightforward, but others (like prism and sh= aders) are tricky. > >> Signed-off-by: Alexey Abramov >> --- >> gnu/packages/java.scm | 642 +++++++++++++++++++++++++++++++++++++++++- >> 1 file changed, 634 insertions(+), 8 deletions(-) > > I guess it=E2=80=99s still =E2=80=9Csource=E2=80=9D, but that=E2=80=99s a= lot of it. > > Do you think there are ways this could be factorized? I=E2=80=99m not sa= ying we > have to do this right away, but we should probably keep in mind if we > want to ensure the long-term maintainability of this package. I guess, In the beginning, I was trying to wrap those steps with some proce= dure/s, like the one gradle.build has, but when I was doing this, I realize= d that it might become more complicated, than just simple series of javah/j= avac/gcc/g++ steps. They all kinda look alike, but different. > >> + ;; XX: Description can be found in build.gradle:1429. Curren= tly > > I think you can remove =E2=80=9CXX=E2=80=9D, but description of what? Pr= obably a bit > more context would be fine. Done. > >> + (mkdir-p prism-gen-src) >> + (for-each (lambda (file) >> + (apply invoke "java" >> + "-cp" (string-join (list >> + ;; For CompileJ= SL >> + prism-compilers= -classes >> + ;; jsl files ar= e there >> + prism-src >> + (getenv "CLASSP= ATH")) >> + ":") >> + "CompileJSL" >> + "-i" prism-src >> + "-o" prism-gen-src >> + "-t" >> + "-pkg" "com/sun/prism" >> + "-d3d" >> + "-es2" >> + "-name" (list file))) > > Problem is we won=E2=80=99t know where those flags come from, right? Per= haps > there=E2=80=99s additional info the Gradle build files? gradle.build has no comments about that =3D(. This is what you can find on= top of the graphics module: // The graphics module is needed for any graphical JavaFX application. It r= equires the base module and includes the scene graph, layout, css, prism, w= indowing, etc. This is a fairly complicated module. There are many differen= t types of native components that all need to be compiled. I also put it above the java-openjfx-graphics definition. > >> + (add-after 'compile-decora-compilers 'generate-decora-shaders >> + (lambda _ >> + (let ((classes "modules/graphics/build/classes/java/main= ") >> + (decora-classes "modules/graphics/build/classes/js= l-decora/") >> + (decora-compilers-classes "modules/graphics/build/= classes/jsl-compilers/decora") >> + (decora-gen-src "modules/graphics/build/generated-= src/jsl-decora") >> + (decora-src "modules/graphics/src/main/jsl-decora/= ") >> + (decora-components '([(file-name . "ColorAdjust") >> + (generator . "CompileJSL") >> + (outputs . "-all")] >> + [(file-name . "Brightpass") >> + (generator . "CompileJSL") >> + (outputs . "-all")] >> + [(file-name . "SepiaTone") >> + (generator . "CompileJSL") >> + (outputs . "-all")] >> + [(file-name . "PerspectiveTra= nsform") >> + (generator . "CompileJSL") >> + (outputs . "-all")] >> + [(file-name . "DisplacementMa= p") >> + (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 . "CompileLinearC= onvolve") >> + (outputs . "-hw")] >> + [(file-name . "LinearConvolve= Shadow") >> + (generator . "CompileLinearC= onvolve") >> + (outputs . "-hw")]))) > > We should at least have a comment explaining where that list comes from > and what it means. I put a big comment I found in gradle.build a little bit higher, before tho= se steps where we compile these generators. > I appreciate the huge amount of work you put into this, but I=E2=80=99m > concerned about maintainability. Thanks, I agree. These patches are also not complete. Ideally, javafx shoul= d provide a jfxrt.jar and users should not think about these modules at all= . We are half-way there. > Julien, what are the prospects of getting Gradle in Guix? What are your > thoughts here? That would be awesome to have (guix build-system gradle)! I was looking int= o this as well, and even found some links where I got an idea that "probabl= y" some older version of gradle could be build with ant. > Thanks, > Ludo=E2=80=99. -- Alexey --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: attachment; filename=0001-gnu-java-openjfx-graphics-Implement-a-complete-compi.patch Content-Transfer-Encoding: quoted-printable >From f9a444680c9c1be2d75c021469cc265599130b65 Mon Sep 17 00:00:00 2001 From: Alexey Abramov Date: Sat, 22 Feb 2020 21:17:51 +0100 Subject: [PATCH v5 01/12] gnu: java-openjfx-graphics: Implement a complete compilation. * gnu/packages/java.scm (java-openjfx-graphics): Add stages to build libdecora_sse, prism_common, glassgtk2, iio, prism_sw, prism_es2, font_freetype, glassgtk3, font, font_pango and glass libraries. Signed-off-by: Alexey Abramov --- gnu/packages/java.scm | 646 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 638 insertions(+), 8 deletions(-) diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index d5bc713c70..a0e7957c25 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -56,6 +56,7 @@ #:use-module (gnu packages gettext) #:use-module (gnu packages gcc) #:use-module (gnu packages gl) + #:use-module (gnu packages glib) #:use-module (gnu packages ghostscript) ;lcms #:use-module (gnu packages gnome) #:use-module (gnu packages groovy) @@ -2561,22 +2562,651 @@ modern, efficient, and fully featured toolkit for = developing rich client applications. This package contains base classes for the OpenJFX distribution."))) =20 +;; The graphics module is needed for any graphical JavaFX application. It +;; requires the base module and includes the scene graph, layout, css, pri= sm, +;; windowing, etc. This is a fairly complicated module. There are many +;; different types of native components that all need to be compiled. +;; +;; All the bellow steps were taken by inspecting build.gradel and ./gradl= ew build --info +;; result. (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")) + #:tests? #f ; require 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=E2=80=99s an internal option for JDK 1.7+ that prev= ents + ;; the compiler from sharing a table that will never + ;; be reused. When shared, it can=E2=80=99t be garbage + ;; collected, continues to accumulate data, and + ;; therefore wastes memory. + "-XDuseUnsharedTable=3Dtrue")) + (common-flags + '("-fno-strict-aliasing" "-fPIC" "-fno-omit-frame-pointer" = ;; optimization flags + "-fstack-protector" + "-W" "-Wall" "-Wno-unused" "-Wno-parentheses")) + (cc-flags + `(,@common-flags "-c" "-ffunction-sections" "-fdata-section= s" + "-I" ,(string-append jdk "/include") + "-I" ,(string-append jdk "/include/linux")= )) + (link-flags + `("-static-libgcc" "-static-libstdc++" "-shared" ,@common-f= lags + "-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 i= n build/classes + (invoke "ant" "compile" "-Dclasses.dir=3Dmodules/graphics/b= uild/classes/java/main") + #t)) + + ;; The Decora and Prism JSL files have to be generated in a ver= y specific set of steps. + ;; 1) Compile the *Compile.java classes. These live in src= /main/jsl-* and will be + ;; output to $buildDir/classes/jsl-compilers/* (where *= =3D=3D decora or prism). + ;; 2) Generate source files from the JSL files contained i= n src/main/jsl-*. These + ;; will be output to $buildDir/generated-src/jsl-* + ;; 3) Compile the JSL Java sources in $buildDir/generated-= src/jsl-* and put the output + ;; into classes/jsl-* + ;; 4) Compile the native JSL sources in $buildDir/generate= d-src/jsl-* and put the obj + ;; files into native/jsl-* and the resulting library in= to libs/jsl-*.dll|so|dylib + ;; 5) Modify the jar step to include classes/jsl-* + ;; The native library must be copied over during SDK creation t= ime in the "sdk" task. In + ;; addition to these steps, the clean task is created. Note tha= t I didn't bother to create + ;; a new task for each of the decora files, preferring instead = just to create a rule?? Also + ;; need "clean" tasks for each compile task. + (add-after 'build 'compile-prism-compilers + (lambda _ + (let ((prism-compilers-classes "modules/graphics/build/clas= ses/jsl-compilers/prism") + (prism-src "modules/graphics/src/main/jsl-prism/")) + (mkdir-p prism-compilers-classes) + + (apply invoke "javac" "-d" prism-compilers-classes + (append javac/h-flags (find-files prism-src "\\.ja= va")))) + + #t)) + + (add-after 'compile-prism-compilers 'generate-prism-shaders + (lambda _ + (let ((prism-compilers-classes "modules/graphics/build/clas= ses/jsl-compilers/prism") + (prism-src "modules/graphics/src/main/jsl-prism/") + (prism-gen-src "modules/graphics/build/generated-src/= jsl-prism")) + (mkdir-p prism-gen-src) + (for-each (lambda (file) + (apply invoke "java" + "-cp" (string-join (list + ;; For CompileJSL + prism-compilers-cl= asses + ;; jsl files are t= here + prism-src + (getenv "CLASSPATH= ")) + ":") + "CompileJSL" + "-i" prism-src + "-o" prism-gen-src + "-t" + "-pkg" "com/sun/prism" + "-d3d" + "-es2" + "-name" (list file))) + (find-files prism-src "\\.jsl$"))) + #t)) + + (add-after 'generate-prism-shaders 'compile-prism-shaders + (lambda _ + (let* ((classes "modules/graphics/build/classes/java/main") + (prism-classes "modules/graphics/build/classes/jsl-p= rism") + (prism-gen-src "modules/graphics/build/generated-src= /jsl-prism") + (prism-gen-shaders-src (string-append prism-gen-src = "/com/sun/prism/shader"))) + (mkdir-p prism-classes) + (apply invoke "javac" + "-d" prism-classes + "-cp" (string-append classes ":" (getenv "CLASSPAT= H")) + (append javac/h-flags (find-files prism-gen-shader= s-src)))) + #t)) + + (add-after 'compile-prism-shaders 'compile-decora-compilers + (lambda _ + (let ((classes "modules/graphics/build/classes/java/main") + (decora-compilers-classes "modules/graphics/build/cla= sses/jsl-compilers/decora") + (decora-src "modules/graphics/src/main/jsl-decora/")) + (mkdir-p decora-compilers-classes) + (apply invoke "javac" + "-d" decora-compilers-classes + "-cp" (string-append classes ":" (getenv "CLASSPAT= H")) + (append javac/h-flags (find-files decora-src "\\.j= ava")))) + #t)) + + (add-after 'compile-decora-compilers 'generate-decora-shaders + (lambda _ + (let ((classes "modules/graphics/build/classes/java/main") + (decora-classes "modules/graphics/build/classes/jsl-d= ecora/") + (decora-compilers-classes "modules/graphics/build/cla= sses/jsl-compilers/decora") + (decora-gen-src "modules/graphics/build/generated-src= /jsl-decora") + (decora-src "modules/graphics/src/main/jsl-decora/") + (decora-components '([(file-name . "ColorAdjust") + (generator . "CompileJSL") + (outputs . "-all")] + [(file-name . "Brightpass") + (generator . "CompileJSL") + (outputs . "-all")] + [(file-name . "SepiaTone") + (generator . "CompileJSL") + (outputs . "-all")] + [(file-name . "PerspectiveTransf= orm") + (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 . "CompileLinearConv= olve") + (outputs . "-hw")] + [(file-name . "LinearConvolveSha= dow") + (generator . "CompileLinearConv= olve") + (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 + ;; CompileJ= SL + decora-comp= ilers-classes + decora-clas= ses + ;; We need = resources from the build + "buildSrc/s= rc/main/resources" + (list (gete= nv "CLASSPATH"))) + ":") + generator + "-i" decora-src + "-o" decora-gen-src + "-t" + "-pkg" "com/sun/scenario/effect" + outputs + (list file-name)))) + decora-components) + #t))) + + (add-after 'generate-decora-shaders 'compile-decora-shaders + (lambda _ + (let ((classes "modules/graphics/build/classes/java/main") + (decora-classes "modules/graphics/build/classes/jsl-d= ecora/") + (decora-gen-src "modules/graphics/build/generated-src= /jsl-decora")) + (mkdir-p decora-classes) + (apply invoke "javac" + "-d" decora-classes + "-cp" classes + (append javac/h-flags (find-files decora-gen-src "= \\.java$")))) + #t)) + + (add-after 'compile-decora-shaders 'compile-decora-native-lib + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "modules/graphics/build/classes/java/main") + (decora-gen-headers "modules/graphics/build/generate= d-src/headers/jsl-decora") + (decora-gen-src "modules/graphics/build/generated-sr= c/jsl-decora") + (decora-native-lib "modules/graphics/build/libs/jsl-= decora/linux/libdecora_sse.so") + (decora-native-obj "modules/graphics/build/native/js= l-decora/linux") + (decora-native-src "modules/graphics/src/main/native= -decora") + (decora-src "modules/graphics/src/main/jsl-decora/") + (decora-classes "modules/graphics/build/classes/jsl-= decora/") + (decora-cc-flags `(,@cc-flags "-ffast-math"))) + (mkdir-p decora-gen-headers) + (apply invoke "javah" + "-d" decora-gen-headers + "-cp" (string-join (list classes decora-classes) "= :") + (append javac/h-flags + (filter (cut string-prefix? "com.sun.scena= rio.effect.impl.sw.sse" <>) + (append (java-list-classes classes) + (java-list-classes decora-= classes))))) + (mkdir-p decora-native-obj) + (for-each (lambda (cc) + (apply invoke "gcc" + "-I" decora-gen-headers + "-I" decora-gen-src + "-I" decora-native-src + "-o" (string-append decora-native-obj = "/" (basename cc ".cc") ".obj") + (append decora-cc-flags (list cc)))) + (append (find-files decora-gen-src "\\.cc$") + (find-files decora-native-src "\\.cc$")= )) + (mkdir-p (dirname decora-native-lib)) + (apply invoke "g++" "-o" decora-native-lib + (append link-flags (find-files decora-native-obj "= \\.obj$")))) + #t)) + + (add-after 'compile-decora-native-lib 'compile-linux-font-nativ= e-lib + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "modules/graphics/build/classes/java/main") + (font-gen-headers "modules/graphics/build/generated-= src/headers/font/linux") + (font-native-lib "modules/graphics/build/libs/font/l= inux/libjavafx_font.so") + (font-native-obj "modules/graphics/build/native/font= /linux") + (font-native-src "modules/graphics/src/main/native-f= ont") + ;; + (font-cc-flags `("-DJFXFONT_PLUS" ,@cc-flags))) + (mkdir-p font-gen-headers) + (apply invoke "javah" + "-d" font-gen-headers + "-cp" classes + (append javac/h-flags + (filter (lambda (class) + (or (string-prefix? "com.sun.jav= afx.font" class) + (string-prefix? "com.sun.jav= afx.text" class))) + (java-list-classes classes)))) + (mkdir-p font-native-obj) + (for-each (lambda (cc) + (apply invoke "gcc" + "-I" font-gen-headers + "-I" font-native-src + "-o" (string-append font-native-obj "/" + (basename cc ".c")= ".obj") + (append font-cc-flags (list cc)))) + (find-files font-native-src "\\.c$")) + (mkdir-p (dirname font-native-lib)) + (apply invoke "g++" + "-o" font-native-lib + (append link-flags + (find-files font-native-obj "\\.obj$")))) + #t)) + + (add-after 'compile-linux-font-native-lib 'compile-linux-font-f= reetype + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "modules/graphics/build/classes/java/main") + ;; + (font-freetype-gen-headers "modules/graphics/build/g= enerated-src/headers/fontFreetype/linux") + (font-freetype-native-lib "modules/graphics/build/li= bs/fontFreetype/linux/libjavafx_font_freetype.so") + (font-freetype-native-obj "modules/graphics/build/na= tive/fontFreetype/linux") + (font-freetype-native-src "modules/graphics/src/main= /native-font/freetype.c") + (font-freetype-cc-flags `("-DJFXFONT_PLUS" "-D_ENABL= E_PANGO" + "$(pkg-config --cflags fre= etype2)" ,@cc-flags)) + (font-freetype-link-flags `("$(pkg-config --libs fre= etype2)" ,@link-flags))) + (mkdir-p font-freetype-gen-headers) + (apply invoke "javah" + "-d" font-freetype-gen-headers + "-cp" classes + (append javac/h-flags + (filter (cut string-prefix? "com.sun.javaf= x.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-nativ= e-src) + "-o" ,(string-append font-freetype= -native-obj "/" + (basename fon= t-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-pan= go-lib + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "modules/graphics/build/classes/java/main") + (font-pango-gen-headers "modules/graphics/build/gene= rated-src/headers/fontPango/linux") + (font-pango-native-lib "modules/graphics/build/libs/= fontPango/linux/libjavafx_font_pango.so") + (font-pango-native-obj "modules/graphics/build/nativ= e/fontPango/linux") + (font-pango-native-src "modules/graphics/src/main/na= tive-font/pango.c") + (font-pango-cc-flags `("-DJFXFONT_PLUS" "-D_ENABLE_P= ANGO" + "$(pkg-config --cflags pangof= t2)" ,@cc-flags)) + (font-pango-link-flags `("$(pkg-config --libs pangof= t2)" ,@link-flags))) + (mkdir-p font-pango-gen-headers) + (apply invoke "javah" + "-d" font-pango-gen-headers + "-cp" classes + (append javac/h-flags + (filter (cut string-prefix? "com.sun.javaf= x.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-s= rc) + "-o" ,(string-append font-pango-na= tive-obj "/" + (basename fon= t-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-ob= j "\\.obj$"))))) + #t)) + + (add-after 'compile-linux-font-pango-lib 'compile-linux-glass-l= ib + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "modules/graphics/build/classes/java/main") + ;; glass + (glass-gen-headers "modules/graphics/build/generated= -src/headers/glass/linux") + (glass-native-lib "modules/graphics/build/libs/glass= /linux/libglass.so") + (glass-native-obj "modules/graphics/build/native/gla= ss/linux/glass") + (glass-native-src "modules/graphics/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 "modules/graphics/build/nativ= e/glass/linux/glassgtk2") + (glass-gtk2-native-src (dirname glass-native-src)) + (glass-gtk2-native-lib "modules/graphics/build/libs/= glass/linux/libglassgtk2.so") + (glass-gtk2-cc-flags + `(,@cc-flags + "$(pkg-config --cflags gtk+-2.0 gthread-2.0 xtst)" + ;; XX: GTimeVal has been deprecated in GLIB since + ;; version 2.62. GTimeVal s not year-2038-safe. G= tk + ;; 2.24 uses GTimeVal so our build is also failin= g. + "-Wno-deprecated-declarations" + "-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 "modules/graphics/build/nativ= e/glass/linux/glassgtk3") + (glass-gtk3-native-src (dirname glass-native-src)) + (glass-gtk3-native-lib "modules/graphics/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 gthrea= d-2.0 xtst)"))) + ;; glass + (mkdir-p glass-gen-headers) + (apply invoke "javah" + "-d" glass-gen-headers + "-cp" (string-append classes ":" (getenv "CLASSPAT= H")) + (append javac/h-flags + (filter (lambda (class) + (or (string-prefix? "com.sun.gla= ss.events" class) + (string-prefix? "com.sun.gla= ss.ui.gtk" class) + (string-prefix? "com.sun.gla= ss.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 gla= ss-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 g= lass-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-ob= j "\\.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 g= lass-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-ob= j "\\.obj$"))))) + #t)) + + (add-after 'compile-linux-glass-lib 'compile-linux-iio + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "modules/graphics/build/classes/java/main") + (iio-gen-headers "modules/graphics/build/generated-s= rc/headers/iio/linux") + (iio-native-lib "modules/graphics/build/libs/iio/lin= ux/libjavafx_iio.so") + (iio-native-obj "modules/graphics/build/native/iio/l= inux") + (iio-native-src "modules/graphics/src/main/native-ii= o") + (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 "CLASSPAT= H")) + (append javac/h-flags + (filter (cut string-prefix? "com.sun.javaf= x.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 i= io-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 "\\.o= bj$")))) + #t))) + + (add-after 'compile-linux-iio 'compile-linux-prism + (lambda* (#:key inputs #:allow-other-keys) + (let* ((classes "modules/graphics/build/classes/java/main") + (prism-gen-headers "modules/graphics/build/generated= -src/headers/prism/linux") + (prism-native-lib "modules/graphics/build/libs/prism= /linux/libprism_common.so") + (prism-native-obj "modules/graphics/build/native/pri= sm/linux") + (prism-native-src "modules/graphics/src/main/native-= prism") + (prism-cc-flags `(,@cc-flags "-DINLINE=3Dinline")) + (prism-link-flags link-flags)) + (mkdir-p prism-gen-headers) + (apply invoke "javah" + "-d" prism-gen-headers + "-cp" (string-append classes ":" (getenv "CLASSPAT= H")) + (append javac/h-flags + (filter (lambda (class) + (or (string-prefix? "com.sun.pri= sm.impl" class) + (string-prefix? "com.sun.pri= sm.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 p= rism-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 "modules/graphics/build/classes/java/main") + (prism-es2-gen-headers "modules/graphics/build/gener= ated-src/headers/prismES2/linux") + (prism-es2-native-lib "modules/graphics/build/libs/p= rism/linux/libprism_es2.so") + (prism-es2-native-obj "modules/graphics/build/native= /prismES2/linux") + (prism-es2-native-src "modules/graphics/src/main/nat= ive-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 pris= m-es2-native-src "[^/]*\\.c$")) + abs) + (regexp-exec (make-regexp (string-append pris= m-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 "CLASSPAT= H")) + (append 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" + "-I" glass-native-src + "-I" prism-es2-gen-headers + "-I" prism-es2-native-src + "-I" (string-append prism-es2-native-s= rc "/GL") + "-I" (string-append prism-es2-native-s= rc "/x11") + "-o" (string-append prism-es2-native-o= bj "/" (basename c ".c") ".obj") + (append prism-es2-cc-flags (list 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 "modules/graphics/build/classes/java/main") + (prism-sw-gen-headers "modules/graphics/build/genera= ted-src/headers/prismSW/linux") + (prism-sw-native-lib "modules/graphics/build/libs/pr= ism/linux/libprism_sw.so") + (prism-sw-native-obj "modules/graphics/build/native/= prismSW/linux") + (prism-sw-native-src "modules/graphics/src/main/nati= ve-prism-sw") + ;; + (prism-sw-cc-flags `(,@cc-flags "-DINLINE=3Dinline")) + (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 "CLASSPAT= H")) + (append javac/h-flags + (filter (cut string-prefix? "com.sun.pisce= s" <>) + (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-hea= ders + "-I" ,prism-sw-native-= src + "-o" ,(string-append p= rism-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++" "-o" prism-sw-native-lib + (append prism-sw-link-flags (find-files prism-sw-n= ative-obj "\\.obj$"))) + #t))) + + (add-after 'compile-linux-prism-sw 'install-native + (lambda* (#:key outputs #:allow-other-keys) + (let ((lib (string-append (assoc-ref outputs "out") "/lib")= )) + (for-each (lambda (file) + (install-file file lib)) + (find-files "." "\\.so$")) + #t))) + + (add-after 'install-native 'build-jar + (lambda _ + (let* ((module (string-append "modules/graphics")) + (resources (string-append module "/src/main/resource= s")) + (classes (string-append module "/build/classes/java/= main"))) + (copy-recursively resources classes) + + (invoke "ant" "jar" (string-append "-Dclasses.dir=3D" cla= sses))) + #t)))))) + (native-inputs + `(("freetype" ,freetype) + ("fontconfig" ,fontconfig) + ("gcc" ,gcc) + ("glib" ,glib) + ("zlib" ,zlib) + ("gtk" ,gtk+-2) + ("gtk3" ,gtk+) + ("jpeg" ,libjpeg-turbo) + ("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))))) =20 (define-public java-openjfx-media (package (inherit java-openjfx-build) --=20 2.26.2 --=-=-=--