Subject: [bug#67846] [PATCH] gnu: Add davmail

From: Lars Rustand <[email-masked]>
Date: Sun, 17 Dec 2023 11:06:14 +0100

I've made a little progress here, added packages for three of the
packages we were missing:

- java-htmlcleaner
- java-jcharset
- java-jcifs

I also added a couple of packages that were not listed as dependencies
but were needed:

- java-openjfx-swing
- java-openjfx-web

java-openjfx-swing needs to have the patch
java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch from
https://issues.guix.gnu.org/41360 applied to java-openjfx-build.

Your jackrabbit-webdav package built without problems. So the only
packages we are missing now seems to be:

- java-javax-activation
- java-sfl4j-log4j12
- java-winrun4j

I added a packaged definition for java-sfl4j-log4j12 but it is currently
failing to build with some undefined reference to
`org.apache.log4j.helpers.ThreadLocalMap`.

javax.activation has been taken over by Eclipse and moved to
jakarta.activation. I haven't yet tried to package this one since I
don't know what is the best way to handle this and if it is possible to
use the new jakarta.activation directly in place of javax.activation.

It also seems that winrun4j is needed after all, since I get some build
error related to winrun4j when trying to build davmail. Unless we are
able to remove references to it we might need to package winrun4j also.

Attaching the java-additions file with my changes added.

--8<---------------cut here---------------start------------->8---
(define-module (gnu packages java-additions)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix utils)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix gexp)  
  #:use-module (guix git-download)
  #:use-module (guix build-system ant)
  #:use-module (guix build-system maven)
  #:use-module (gnu packages)
  #:use-module (gnu packages cmake)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages java)
  #:use-module (gnu packages java-bootstrap)
  #:use-module (gnu packages java-compression)
  #:use-module (gnu packages java-xml)
  #:use-module (gnu packages gperf)
  #:use-module (gnu packages python)
  #:use-module (gnu packages ruby))

(define-public java-javax-jcr
  (package
    (name "java-javax-jcr")
    (version "2.0")
    (source (origin
              (method url-fetch)
	      (uri (string-append "https://repo1.maven.org/maven2/"
				  "javax/jcr/jcr/"
				  version "/jcr-"
				  version "-sources.jar"))
              (sha256
               (base32
                "163c9y71rm31mgazzxar28r3k4fb9vzk7a1dfs1cgf7d9rnx4i33"))))
    (build-system ant-build-system)
    (arguments
     `(#:tests? #f ; no tests
       #:jar-name "javax-jcr.jar"))
    (home-page "https://jcp.org/aboutJava/communityprocess/final/jsr283/index.html")
    (synopsis "Specifies a standard API to access content repositories in Java independently of implementation")
    (description "
The API should be a standard, implementation independent, way to access content bi-directionally on a 
granular level within a content repository. A Content Repository is a high-level information management 
system that is a superset of traditional data repositories. A content repository implements 
\"content services\" such as: author based versioning, full textual searching, fine grained access control, 
content categorization and content event monitoring. It is these \"content services\" that differentiate a 
Content Repository from a Data Repository.

Many of today's (web)applications are interacting with a content repository in various ways.

This API proposes that content repositories have a dedicated, standard way of interaction with applications 
that deal with content. This API will focus on transactional read/write access, binary content 
(stream operations), textual content, full-text searching, filtering, observation, versioning, handling of 
hard and soft structured content.")
    ;; Day Specification License
    (license license:gpl2)))

(define-public java-oak-jackrabbit-api
  (package
    (name "java-oak-jackrabbit-api")
    (version "1.42.0")
    (source (origin
              (method url-fetch)
	      (uri (string-append "https://dlcdn.apache.org/jackrabbit/oak/"
				  version "/jackrabbit-oak-" version "-src.zip"))
	      (sha256
	       (base32
		"17ra69nn4fl7ja2m23d3995570j5j5ni3fi4kfvfsp82jdmryy6r"))))
    (build-system ant-build-system)
    (arguments
     `(#:jar-name "oak-jackrabbit-api.jar"
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'chdir
           (lambda _ (chdir "oak-jackrabbit-api") #t))
	 (add-before 'build 'prepare
           (lambda _
             (with-directory-excursion
		 "src/test/java/org/apache/jackrabbit/api/"
	       ;; remove test which has build error
               (delete-file "JackrabbitSessionTest.java"))
             #t)))))
    (inputs
     (list unzip
	   java-commons-logging-minimal
           java-mockito-1
           java-junit
	   java-jetbrains-annotations
	   java-javax-jcr
	   java-osgi-annotation))
    (home-page "https://jackrabbit.apache.org/oak/docs/index.html")
    (synopsis "Jackrabbit Oak - the next generation content repository")
    (description "This component contains the interface extensions that Apache Jackrabbit and
Jackrabbit Oak support in addition to the standard JCR API. You can
use these interfaces to access implementation-specific functionality.")
    (license license:asl2.0)))

(define-public java-jackrabbit-oak
  (package
    (name "java-jackrabbit-oak")
    (version "1.42.0")
    (source (origin
              (method url-fetch)
	      (uri (string-append "https://dlcdn.apache.org/jackrabbit/oak/"
				  version "/jackrabbit-oak-" version "-src.zip"))
	      (sha256
	       (base32
		"17ra69nn4fl7ja2m23d3995570j5j5ni3fi4kfvfsp82jdmryy6r"))))
    (build-system maven-build-system)
    (arguments
     `(#:exclude
       (
					;   ("org.apache.maven.plugins" .
					;	 ("maven-deploy-plugin" "maven-javadoc-plugin" "maven-idea-plugin"
					;	  "maven-eclipse-plugin" "maven-release-plugin"))
	("org.apache.rat" . ("apache-rat-plugin"))
	("org.codehaus.mojo" . ("animal-sniffer-maven-plugin"))
	("org.jacoco" . ("jacoco-maven-plugin"))
	("org.apache.felix" . ("maven-bundle-plugin")))
       #:local-packages (("javax.jcr" . (("jcr" . "2.0")))
			 ("org.osgi" . (("org.osgi.annotation" . "6.0.0")))
			 ("org.jetbrains" . (("annotations". "19.0.0")))
			 ("org.mockito" . (("mockito-core" . "1.10.19"))))))
    (native-inputs (list unzip java-javax-jcr))
    (synopsis "Jackrabbit Oak - the next generation content repository")
    (description
     "Jackrabbit Oak is an effort to implement a scalable and performant hierarchical 
content repository for use as the foundation of modern world-class web sites and other 
demanding content applications. The Oak effort is a part of the Apache Jackrabbit 
project. Apache Jackrabbit is a project of the Apache Software Foundation.
")
    (home-page "https://jackrabbit.apache.org/oak/docs/index.html")
    (license license:asl2.0)))

(define-public java-jackrabbit
  (package
    (name "java-jackrabbit")
    (version "2.21.21")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://dlcdn.apache.org/jackrabbit/"
				  version "/jackrabbit-" version "-src.zip"))
              (sha256
               (base32
		"0i2m0zmbb7xcvg2zwkdj16xjr9jhv5a0rxf75r2vad7jpkym99sz"))))
    (build-system maven-build-system)
    (arguments
     `(#:exclude
       (("org.apache.maven.plugins" .
	 ("maven-deploy-plugin" "maven-javadoc-plugin" "maven-idea-plugin"
	  "maven-eclipse-plugin" "maven-release-plugin"))
	("org.apache.rat" . ("apache-rat-plugin"))
	("org.codehaus.mojo" . ("animal-sniffer-maven-plugin"))
	("org.jacoco" . ("jacoco-maven-plugin"))
	("org.apache.felix" . ("maven-bundle-plugin")))
       #:local-packages (("javax.jcr" . (("jcr" . "2.0")))
			 ("org.apache.jackrabbit" . (("oak-jackrabbit-api" . "1.42.0")))
			 ("org.osgi" . (("org.osgi.annotation" . "6.0.0")))
			 ("cglib" . (("cglib" . "3.2.4"))))))
    (native-inputs (list unzip java-junit java-javax-jcr))
    (synopsis "This is the WebDAV Library component of the Apache Jackrabbit project")
    (description
     "This component provides interfaces and common utility classes used for
building a WebDAV server or client. The following RFC have been integrated:

    * RFC 2518 (WebDAV - HTTP Extensions for Distributed Authoring)
    * RFC 3253 (DeltaV - Versioning Extensions to WebDAV)
    * RFC 3648 (Ordered Collections Protocol)
    * RFC 3744 (Access Control Protocol)
    * DAV Searching and Locating  (DASL)
    * Binding Extensions to Web Distributed Authoring and Versioning (WebDAV) (experimental)

In addition this library defines (unspecified)

    * Observation
    * Bundling multiple request with extensions to locking")
    (home-page "https://jackrabbit.apache.org/jcr/index.html")
    (license license:asl2.0)))

(define-public java-jackrabbit-webdav
  (package
    (name "java-jackrabbit-webdav")
    (version "2.21.21")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://dlcdn.apache.org/jackrabbit/"
				  version "/jackrabbit-" version "-src.zip"))
              (sha256
               (base32
		"0i2m0zmbb7xcvg2zwkdj16xjr9jhv5a0rxf75r2vad7jpkym99sz"))))
    (build-system ant-build-system)
    (arguments
     `(#:jar-name "jackrabbit-webdav.jar"
       #:test-exclude (list "**/ParserTest.java") ;; fails unexpected
       #:phases
       (modify-phases %standard-phases
	 (add-after 'unpack 'chdir
           (lambda _ (chdir "jackrabbit-webdav") #t)))))
    (native-inputs (list
		    unzip
		    java-junit
		    java-slf4j-simple
		    java-httpcomponents-httpcore
		    java-httpcomponents-httpclient
		    java-javaee-servletapi
		    java-osgi-annotation))
    (synopsis "This is the WebDAV Library component of the Apache Jackrabbit project")
    (description
     "This component provides interfaces and common utility classes used for
building a WebDAV server or client. The following RFC have been integrated:

    * RFC 2518 (WebDAV - HTTP Extensions for Distributed Authoring)
    * RFC 3253 (DeltaV - Versioning Extensions to WebDAV)
    * RFC 3648 (Ordered Collections Protocol)
    * RFC 3744 (Access Control Protocol)
    * DAV Searching and Locating  (DASL)
    * Binding Extensions to Web Distributed Authoring and Versioning (WebDAV) (experimental)

In addition this library defines (unspecified)

    * Observation
    * Bundling multiple request with extensions to locking")
    (home-page "https://jackrabbit.apache.org")
    (license license:asl2.0)))

(define-public java-davmail
  (package
    (name "java-davmail")
    (version "6.0.1")
    (source (origin
              (method url-fetch)
	      (uri (string-append "https://sourceforge.net/projects/davmail/files/davmail/"
				  version "/davmail-srconly-" version "-3390.tgz"))
	      (sha256
	       (base32
		"0q5yix25i253w9kpqc8wiryvzpfrbqalky8byf5bz66v13c07y7p"))))
    (build-system ant-build-system)
    (arguments
     `(#:modules ((guix build ant-build-system)
                  (guix build java-utils)
                  (guix build utils)
                  (srfi srfi-1)
                  (ice-9 match))
					;#:build-target "jar"
       #:source-dir "src/"
       #:test-dir "src/test"
       #:tests? #false
       #:jar-name "davmail.jar"
       #:build-target "jar"))
					;#:phases
					;(modify-phases %standard-phases
					;	 (add-after 'unpack 'create-libdir
					;	   (lambda* (#:key inputs #:allow-other-keys)
					;	     (mkdir-p "lib")
					;					;(for-each
					;					; (lambda (file)
					;					;	(let ((target (string-append "lib/" (basename file))))
					;					;	  (unless (file-exists? target)
					;					;	    (symlink file target))))
					;					; (append-map (match-lambda
					;					;		    (dir
					;					;		     (find-files dir "\\.jar$")))
					;					;		  inputs))
					;	     #t)))))
    (inputs (list
					;java-junit
	     ;;java-log4j-core
	     ;;java-log4j-api
	     java-slf4j-api
	     java-log4j-1.2-api
	     ;;java-slf4j-log4j12
             java-jcl-over-slf4j
             java-openjfx-base
             java-openjfx-build
             java-openjfx-controls
             java-openjfx-graphics
             java-openjfx-media
             java-openjfx-web
             java-openjfx-swing ;; Maybe not all of these are needed
	     java-javax-mail
             java-htmlcleaner
             java-jackrabbit-webdav
             java-junit
	     ;;java-slf4j-simple
             java-jcifs
             java-swt
             java-woodstox-core
             java-stax
             java-stax2-api
             java-jcharset
	     java-httpcomponents-httpcore
	     java-httpcomponents-httpclient
             java-commons-httpclient
             java-commons-codec
             java-jettison
             java-javaee-servletapi
					;java-osgi-annotation
	     ))
    (synopsis "POP/IMAP/SMTP/Caldav/Carddav/LDAP Exchange and Office 365 Gateway")
    (description
     "Ever wanted to get rid of Outlook? DavMail is a POP/IMAP/SMTP/Caldav/Carddav/LDAP 
exchange gateway allowing users to use any mail/calendar client (e.g. Thunderbird with 
Lightning or Apple iCal) with an Exchange server, even from the internet or behind a firewall 
through Outlook Web Access. DavMail now includes an LDAP gateway to Exchange global address 
book and user personal contacts to allow recipient address completion in mail compose window 
and full calendar support with attendees free/busy display.")
    (home-page "http://davmail.sourceforge.net/index.html")
    (license license:gpl2)))

(define-public java-htmlcleaner
  (package
    (name "java-htmlcleaner")
    (version "0.0")
    (source (origin
              (method url-fetch)
              (uri (string-append
               "https://downloads.sourceforge.net/project/htmlcleaner/htmlcleaner/htmlcleaner%20v2.29/htmlcleaner-src-2.29.zip"))
              (sha256 (base32 "0l2k94rklbhxbcqqzn46y4l089jdi5ivy2g1h7vk8vxyc5qqvilz"))))
    (build-system ant-build-system)
    (arguments
     `(#:jar-name "htmlcleaner.jar"
       #:tests? #false
       #:source-dir "../src/main"
       #:test-dir "../src/test"))
    (native-inputs
     (list java-jdom2
           unzip
           java-junit))
    (home-page "")
    (synopsis "")
    (description "")
    ;; GPLv2 only
    (license license:bsd-3)))

(define-public java-jcharset
  (package
    (name "java-jcharset")
    (version "0.0")
    (source (origin
              (method url-fetch)
              (uri (string-append
               "https://www.freeutils.net/source/jcharset/jcharset-2.1-distribution.zip"))
              (sha256 (base32 "1k1fqwgrpxp81r93n2irw4lhsnx217jky7lz8h3wbic14iycz8v9"))))
    (build-system ant-build-system)
    (arguments
     `(#:jar-name "jcharset.jar"
       #:tests? #false
       #:source-dir "src/main"
       #:test-dir "src/test"))
    (native-inputs
     (list unzip
           java-junit))
    (home-page "")
    (synopsis "")
    (description "")
    ;; GPLv2 only
    (license license:bsd-3)))

(define-public java-slf4j-log4j12
  (package
    (name "java-slf4j-log4j12")
    (version "0.0.0")
    (source (package-source java-slf4j-api))
    (build-system ant-build-system)
    (arguments
     `(#:jar-name "slf4j-log4j12.jar"
       #:source-dir "slf4j-log4j12/src/main"
       #:test-dir "slf4j-log4j12/src/test"
       #:phases
       (modify-phases %standard-phases
         ;; The tests need some test classes from slf4j-api
         (add-before 'check 'build-slf4j-api-test-helpers
           (lambda _
             ;; Add current dir to CLASSPATH ...
             (setenv "CLASSPATH"
                     (string-append (getcwd) ":" (getenv "CLASSPATH")))
             ;; ... and build test helper classes here:
             (apply invoke
                    `("javac" "-d" "."
                      ,@(find-files "slf4j-api/src/test" ".*\\.java")))))
         (replace 'install
           (install-from-pom "slf4j-log4j12/pom.xml")))))
    (propagated-inputs
     (list java-slf4j-api
           java-log4j-1.2-api))
           ;;java-log4j-core))
    (native-inputs
     (list java-junit
           java-logback-core
           java-logback-classic
           java-log4j-1.2-api
           java-hamcrest-core))
    (home-page "https://www.slf4j.org/")
    (synopsis "")
    (description "")
    (license license:expat)))

;; This might not be needed at all. It was listed as a dependency for jacrabbit,
;; but I don't think jackrabbit uses it
(define-public java-jcl-over-slf4j
  (package
    (name "java-jcl-over-slf4j")
    (version "0.0.0")
    (source (package-source java-slf4j-api))
    (build-system ant-build-system)
    (arguments
     `(#:jar-name "jcl-over-slf4j.jar"
       #:source-dir "jcl-over-slf4j/src/main"
       #:tests? #false
       #:test-dir "jcl-over-slf4j/src/test"
       ;;#:test-exclude (list "**/*SimpleLoggerMultithreadedInitializationTest.java")
       #:phases
       (modify-phases %standard-phases
         ;; The tests need some test classes from slf4j-api
         (add-before 'check 'build-slf4j-api-test-helpers
           (lambda _
             ;; Add current dir to CLASSPATH ...
             (setenv "CLASSPATH"
                     (string-append (getcwd) ":" (getenv "CLASSPATH")))
             ;; ... and build test helper classes here:
             (apply invoke
                    `("javac" "-d" "."
                      ,@(find-files "slf4j-api/src/test" ".*\\.java")))))
         (replace 'install
           (install-from-pom "jcl-over-slf4j/pom.xml")))))
    (propagated-inputs
     (list java-slf4j-api
           java-log4j-1.2-api
           java-log4j-core))
    (native-inputs
     (list java-junit)) ;java-hamcrest-core))
    (home-page "https://www.slf4j.org/")
    (synopsis "")
    (description "")
    (license license:expat)))

(define-public java-jcifs
  (package
    (name "java-jcifs")
    (version "0.0.0")
    (source (origin
              (method url-fetch)
              (uri (string-append
               "https://www.jcifs.org/src/jcifs-1.3.19.zip"))
              (sha256 (base32 "06pj5qi8giplsxdp5y4l4j55pj13n13k8lrqpk96jvm7xjhqc7m3"))))
    (build-system ant-build-system)
    (arguments
     `(#:jar-name "jcifs.jar"
       #:source-dir "src/jcifs"
       #:tests? #false
       #:test-dir "src/test"))
    (propagated-inputs
     (list ))
    (native-inputs
     (list java-junit
	   java-javaee-servletapi
           unzip)) ;java-hamcrest-core))
    (home-page "")
    (synopsis "")
    (description "")
    (license license:expat)))

(define-public java-openjfx-swing
  (package (inherit java-openjfx-build)
    (name "java-openjfx-swing")
    (arguments
     `(#:jar-name "java-openjfx-swing.jar"
       #:source-dir "modules/swing/src/main/java"
       #:tests? #f
       #:test-dir "modules/swing/src/test"))
    (propagated-inputs
     (list java-openjfx-base  
           java-openjfx-graphics
           java-openjfx-controls
           java-openjfx-build
           java-openjfx-media))
    (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 base classes for the OpenJFX
distribution.")))

(define-public java-openjfx-web
  (package (inherit java-openjfx-build)
    (name "java-openjfx-web")
    (arguments
     `(#:jar-name "java-openjfx-web.jar"
       #:source-dir (string-join '("modules/web/src/main/java"
                                   "modules/web/src/main/native/Source/WebCore/bindings/java/dom3")
                                 ";")
       #:tests? #f
       #:modules ((ice-9 match)
                  (guix build ant-build-system)
                  (guix build utils))
       #:phases
       (modify-phases %standard-phases
         (replace 'build
           (lambda* (#:key inputs #:allow-other-keys)
             (let* ((module (string-append (getcwd) "/modules/web"))
                    (classes (string-append module "/build/classes/java/main")))
               (invoke "ant" "compile" (string-append "-Dclasses.dir=" classes)))
             #t))
         (add-after 'build 'generate-headers
           (lambda* (#:key inputs #:allow-other-keys)
             (let* ((module (string-append (getcwd) "/modules/web"))
                    (classes (string-append module "/build/classes/java/main"))
                    (web-generated-headers (string-append module "/build/generated-src/headers"))
                    (web-generated-classes '("com.sun.webkit.ContextMenu"
                                             "com.sun.webkit.ContextMenuItem"
                                             "com.sun.webkit.CursorManager"
                                             "com.sun.webkit.PageCache"
                                             "com.sun.webkit.PopupMenu"
                                             "com.sun.webkit.SharedBuffer"
                                             "com.sun.webkit.WebPage"
                                             "com.sun.webkit.LoadListenerClient"
                                             "com.sun.webkit.event.WCFocusEvent"
                                             "com.sun.webkit.event.WCKeyEvent"
                                             "com.sun.webkit.event.WCMouseEvent"
                                             "com.sun.webkit.event.WCMouseWheelEvent"
                                             "com.sun.webkit.graphics.GraphicsDecoder"
                                             "com.sun.webkit.graphics.RenderMediaControls"
                                             "com.sun.webkit.graphics.RenderTheme"
                                             "com.sun.webkit.graphics.ScrollBarTheme"
                                             "com.sun.webkit.graphics.WCMediaPlayer"
                                             "com.sun.webkit.graphics.WCGraphicsManager"
                                             "com.sun.webkit.graphics.WCRenderQueue"
                                             "com.sun.webkit.graphics.WCPath"
                                             "com.sun.webkit.graphics.WCPathIterator"
                                             "com.sun.webkit.Timer"
                                             "com.sun.webkit.WCFrameView"
                                             "com.sun.webkit.WCPasteboard"
                                             "com.sun.webkit.WCPluginWidget"
                                             "com.sun.webkit.dom.CharacterDataImpl"
                                             "com.sun.webkit.dom.JSObject"
                                             "com.sun.webkit.network.SocketStreamHandle"
                                             "com.sun.webkit.network.URLLoader"
                                             "com.sun.webkit.text.TextBreakIterator"
                                             "com.sun.webkit.text.TextNormalizer"))
                    (graphics (assoc-ref inputs "java-openjfx-graphics")))
               (mkdir-p web-generated-headers)
               (apply invoke
                      "javah"
                      "-Djava.ext.dirs="
                      "-XDignore.symbol.file"
                      "-XDuseUnsharedTable=true"
                      "-d" web-generated-headers
                      "-cp" (string-join (cons* classes (find-files graphics ".jar$")) ":")
                      web-generated-classes))
             #t))

         (add-after 'generate-headers 'compile-native-linux
           (lambda* (#:key inputs system outputs #:allow-other-keys)
             (let*  ((module (string-append (getcwd) "/modules/web"))
                     ;;
                     (webkit-native-dest (string-append module "/build/linux"))
                     (webkit-native-src (string-append module "/src/main/native"))
                     ;;
                     (lib (string-append (assoc-ref outputs "out") "/lib"))
                     ;; uname -m
                     (machine (match system
                                ("x86_64-linux"   "x86_64")
                                ("i686-linux"     "i686")
                                ;; Prevent errors when querying this
                                ;; package on unsupported platforms,
                                ;; e.g. when running "guix package
                                ;; --search="
                                (_                "UNSUPPORTED"))))

               (mkdir-p webkit-native-dest)
               (setenv "PYTHONDONTWRITEBYTECODE" "1")
               (setenv "WEBKIT_OUTPUTDIR" webkit-native-dest)
               (apply invoke `("perl"
                               ,(string-append webkit-native-src "/Tools/Scripts/set-webkit-configuration")
                               ,(if ,(target-64bit?) "--64-bit" "--32-bit")
                               "--release"))

               (substitute* (find-files "." "xsltlocale\\.h")
                 (("#include <xlocale.h>") "#include <locale.h>"))
               (invoke "perl"
                       (string-append webkit-native-src "/Tools/Scripts/build-webkit")
                       "--java" ; webkit port
                       "--skip-library-update"
                       "--verbose"
                       (string-append
                        "--cmakeargs="
                        (string-join
                         (list "-DCMAKE_SYSTEM_NAME=Linux"
                               ;; ensure that the libraries are installed into /lib
                               (string-append "-DCMAKE_INSTALL_LIBDIR=" lib)
                               ;; add input libraries to rpath
                               "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
                               ;; enable verbose output from builds
                               "-DCMAKE_VERBOSE_MAKEFILE=ON"
                               (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
                                              "\"-Wl,-rpath=" lib "\"")
                               (string-append "-DCMAKE_SYSTEM_PROCESSOR=" machine)

                               "-DJAVAFX_RELEASE_VERSION=8.0"
                               ;;"-W"
                               "-Wall"
                               "-Werror=implicit-function-declaration"
                               "-Wl,--gc-sections"
                               "-Wno-parentheses"
                               "-Wno-unused")))))
                               ;;"-fPIC"
                               ;;"-fno-omit-frame-pointer"
                               ;;"-fno-strict-aliasing"
                               ;;"-fstack-protector")))))
             #t))

         (add-after 'compile-native-linux '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$")))))

         (add-before 'install 'build-jar
           (lambda _
             (let* ((module (string-append (getcwd) "/modules/web"))
                    (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)))))
    (inputs
     `(("antlr3" ,antlr3)
       ("java-stringtemplate" ,java-stringtemplate)))
    (native-inputs
     `(("java-junit" ,java-junit)
       ("java-hamcrest-core" ,java-hamcrest-core)
       ("cmake" ,cmake)
       ("gcc" ,gcc)
       ("gtk" ,gtk+-2)
       ("gtk3" ,gtk+)
       ("ruby" ,ruby)
       ("perl" ,perl)
       ("gperf" ,gperf)
       ("python-2" ,python-2)
       ("pkg-config" ,pkg-config)))
    (propagated-inputs
     `(("java-openjfx-controls" ,java-openjfx-controls)
       ("java-openjfx-media" ,java-openjfx-media)
       ("java-openjfx-graphics" ,java-openjfx-graphics)))))

java-davmail
--8<---------------cut here---------------end--------------->8---