Subject: [bug#41360] [PATCH v4 01/12] gnu: java-openjfx-graphics: Implement a complete compilation.

From: Ludovic Courtès <[email-masked]>
Date: Fri, 12 Jun 2020 18:12:16 +0200

Hi Alexey,

Alexey Abramov <[email-masked]> 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?

So essentially all these phases and the unrolled and translated version
of what Gradle would do, right?

> Signed-off-by: Alexey Abramov <[email-masked]>
> ---
>  gnu/packages/java.scm | 642 +++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 634 insertions(+), 8 deletions(-)

I guess it’s still “source”, but that’s a lot of it.

Do you think there are ways this could be factorized?  I’m not saying 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.

> +           ;; XX: Description can be found in build.gradle:1429. Currently

I think you can remove “XX”, but description of what?  Probably a bit
more context would be fine.

> +                 (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" (list file)))

Problem is we won’t know where those flags come from, right?  Perhaps
there’s additional info the Gradle build files?

> +           (add-after 'compile-decora-compilers 'generate-decora-shaders
> +             (lambda _
> +               (let ((classes "modules/graphics/build/classes/java/main")
> +                     (decora-classes "modules/graphics/build/classes/jsl-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 . "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")])))

We should at least have a comment explaining where that list comes from
and what it means.

I appreciate the huge amount of work you put into this, but I’m
concerned about maintainability.

Julien, what are the prospects of getting Gradle in Guix?  What are your
thoughts here?

Thanks,
Ludo’.