Subject: [PATCH] Adding a package for ditaa
From: Frank Pursel <[email-masked]>
To: [email-masked]
Date: Wed, 09 Feb 2022 13:48:36 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

From 0d0df722f31d306c1c95229408fc2bcc43c4a59e Mon Sep 17 00:00:00 2001
Message-Id: <0d0d[email-masked]>
From: Frank Pursel <[email-masked]>
Date: Wed, 9 Feb 2022 09:07:50 -0800
Subject: [PATCH] Adding ditaa executable

* gnu/packages/batik.scm (java-batik-all-jar): Providing dependent class files
  for the ditaa package.

* gnu/packages/graph.scm (ditaa): Adding the ditaa package.
---
 gnu/packages/batik.scm |  60 ++++++++++++++++++++
 gnu/packages/graph.scm | 121 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 181 insertions(+)

diff --git a/gnu/packages/batik.scm b/gnu/packages/batik.scm
index 2072dd467c..74f2d5b82a 100644
--- a/gnu/packages/batik.scm
+++ b/gnu/packages/batik.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Danny Milosavljevic <[email-masked]>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <[email-masked]>
+;;; Copyright © 2022 Frank Pursel <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -254,3 +255,62 @@ (define-public java-xmlgraphics-commons
     (description "This package provides XMLGraphics constants (originally
 from @code{batik}).")
     (license license:asl2.0)))
+
+(define-public java-batik-all-jar
+  (let ((short-pkg-name "batik") (ver "1.14")
+        (hash "1g1vqg2gqw31bk2655vszxqrs8whj3sd5rbk649a9qqvqgqfdv13"))
+    (package
+      (name "java-batik-all-jar")
+      (version ver)
+      (source (origin
+                (method url-fetch)
+                (uri (string-append
+                      "https://archive.apache.org/dist/xmlgraphics/batik/source/"
+                      short-pkg-name "-src-"
+                      version ".tar.gz"))
+                (sha256
+                 (base32
+                  hash))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:build-target "jars"
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-build.xml
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (substitute* "build.xml"
+                 (("batik-all/target/batik-all-.*jar") (string-append "batik-"
+                                                        ,version
+                                                        "/lib/batik-all-"
+                                                        ,version ".jar"))
+                 (("<target name=\"jars\" depends=\"init\">")
+                  "<target name=\"jars\" depends=\"all-jar\">")) #t))
+           (replace 'install
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((name+ver (string-append ,short-pkg-name "-"
+                                               ,version)))
+                 (copy-recursively (string-append "./" name+ver)
+                                   (assoc-ref outputs "out"))
+                 (copy-file (string-append "./"
+                                           name+ver
+                                           "/lib/"
+                                           ,short-pkg-name
+                                           "-all-"
+                                           ,version
+                                           ".jar")
+                            (string-append (assoc-ref outputs "out")
+                                           "/lib/batik.jar"))) #t))
+           (delete 'generate-jar-indices)
+           (delete 'check))))
+      (inputs (list java-junit java-hamcrest-core))
+      (home-page "https://xmlgraphics.apache.org/batik/")
+      (synopsis
+       "Jar of the complete set of batik classes for dependency fulfullment")
+      (description
+       "Batik is a Java-based toolkit for applications or applets that want to
+use images in the Scalable Vector Graphics (SVG) format for various purposes,
+such as display, generation or manipulation.  This package provides the
+batik-all.jar upon whch other packages may depend but no executable or other
+content.")
+      (license license:asl2.0))))
+
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index 4b46904318..45dd83edb8 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2021 Alexandre Hannud Abdo <[email-masked]>
 ;;; Copyright © 2021, 2022 Maxim Cournoyer <[email-masked]>
 ;;; Copyright © 2022 Marius Bakke <[email-masked]>
+;;; Copyright © 2022 Frank Pursel <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@ (define-module (gnu packages graph)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
@@ -39,6 +41,7 @@ (define-module (gnu packages graph)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages batik)
   #:use-module (gnu packages bioconductor)
   #:use-module (gnu packages bioinformatics)
   #:use-module (gnu packages boost)
@@ -50,6 +53,7 @@ (define-module (gnu packages graph)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages java)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
@@ -652,3 +656,120 @@ (define-public python-graph-tool
 time) to that of a pure C/C++ library.")
     (home-page "https://graph-tool.skewed.de/")
     (license license:lgpl3+)))
+
+(define-public ditaa
+  (let* ((ver "0.11.0") (hash
+                         "1y3g17wp1wvb05m56pp25avww2njpgh0gk0jsbsf25scj7hyyj26"))
+    (package
+      (name "ditaa")
+      (version ver)
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/stathissideris/ditaa")
+                      (commit (string-append "v" version))))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  hash))))
+      (build-system ant-build-system)
+      (inputs (list java-batik-all-jar java-commons-cli
+                    `(,icedtea "jdk") java-junit))
+      (arguments
+       `(#:build-target "release-all"
+         #:phases
+         (modify-phases %standard-phases
+           ;; Ant's buildfile and build tree need to be modified to provide
+           ;; access to the guix builds of the batik and the java-commons-cli
+           ;; jar files.  Also some of the source requires java7.
+           (add-before 'build 'build-prep
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((batik-jar
+                       (search-input-file inputs "lib/batik.jar"))
+                      (commons-cli-jar
+                       (search-input-file
+                        inputs
+                        "lib/m2/commons-cli/commons-cli/1.4/commons-cli-1.4.jar")))
+                 (mkdir-p "lib")
+                 (copy-file batik-jar "./lib/batik.jar")
+                 (copy-file commons-cli-jar "./lib/commons-cli.jar"))
+               (copy-recursively "service/web/lib" "lib"
+                                 #:log
+                                 (current-output-port))
+               (with-directory-excursion "build"
+                                         (substitute* "release.xml"
+                                           (("source=\"1.6\"") "source=\"7\"")
+                                           (("<file name=\"commons-cli-1.2.jar\"/>")
+                                            (string-append
+                                             "<file name=\"commons-cli.jar\"/>"
+                                             "
+" "<file name=\"batik.jar\"/>")))
+                                         ;; (invoke "ant" "clean")
+                                         ) #t))
+           (replace 'build
+             (lambda* _
+               ;; (invoke "ant" "-f" "release.xml" "release-jar")
+               (setenv "ANT_OPTS"
+                       (string-append "-Dversion.string="
+                                      ,version))
+               (with-directory-excursion "build"
+                                         ;; (invoke "ant" "compile")
+                                         (invoke "ant" "-f" "release.xml"
+                                                 "release-jar")) #t))
+           (replace 'check
+             (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+               (if tests?
+                   (begin
+                     (setenv "ANT_OPTS"
+                             (string-append "-Dversion.string="
+                                            ,version))
+                     (mkdir-p "tests/testlib")
+                     (with-directory-excursion "build"
+                       (invoke "ant" "-f" "release.xml"
+                               "generate-test-images")
+                       (invoke "ant" "test"))))
+               #t))
+           (replace 'install
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")) (lib (string-append out
+                                                            "/lib"))
+                      (bin (string-append out "/bin"))
+                      (bash (search-input-file inputs "bin/bash"))
+                      (java (search-input-file inputs "bin/java"))
+                      (jre (search-input-directory inputs "jre"))
+                      (ditaa (string-append out "/bin/ditaa"))
+                      (jar-name (string-append ,name
+                                               ,version ".jar")))
+                 (with-directory-excursion "releases"
+                                           (install-file jar-name lib))
+                 (mkdir-p bin)
+                 (with-output-to-file ditaa
+                   (lambda ()
+                     (display (string-append "#!"
+                                             bash
+                                             "
+"
+                                             "JAVA_HOME="
+                                             jre
+                                             " "
+                                             java
+                                             " -jar "
+                                             out
+                                             "/lib/"
+                                             jar-name
+                                             " $@"))))
+                 (chmod ditaa 493)) #t))
+           (add-after 'install 'install-docs
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((doc (string-append (assoc-ref outputs "out")
+                                         "/share/doc/")))
+                 (for-each (lambda (filen)
+                             (install-file filen doc))
+                           (find-files "." ".*README\\.md"))) #t)))))
+      (home-page "https://github.com/stathissideris/ditaa")
+      (synopsis "Create graphics from ascii art")
+      (description
+       "@code{ditaa} is a small command-line utility that can convert diagrams
+drawn using ascii art ('drawings' that contain characters that resemble lines
+like | / - ), into proper bitmap or svg graphics.")
+      (license license:lgpl3))))
-- 
2.34.0