;;; GNU Guix --- Functional package management for GNU
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see .
;;;
;;; Copyright © 2023 Frank Pursel
;;;
(define-module (gnu packages ditaa)
#:use-module (gnu packages)
#:use-module (gnu packages java)
#:use-module (gnu packages xml)
#:use-module (gnu packages javascript)
#:use-module (gnu packages batik)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system ant)
#:use-module (guix modules)
#:use-module (guix build utils) )
(define-public java-libbatik
(package
(name "batik")
(version "1.16+dfsg")
(source
(origin
(method url-fetch)
(uri (string-append
"https://deb.debian.org/debian/pool/main/b/batik/"
name "_"
version ".orig.tar.xz"))
(sha256 (base32
"1xnmnnadp4l74dz55d3ask236lwy0iwg981851d01j2zlrgpw4p9")) ))
(build-system ant-build-system)
(arguments
`(#:tests? #f
#:jar-name (string-append ,name ".jar")
#:source-dir "sources"
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'remove-prepackaged-jars
(lambda _
(for-each
(lambda (jarf)
(delete-file jarf)
(format #t "Deleted: ~s\n" jarf))
(find-files "." ".*\\.jar"))
#t) )
(add-after
'remove-prepackaged-jars 'src-consolidation
(lambda _
(mkdir-p "sources")
(let ((cwd (getcwd))
(sub-dirs (list "anim" "awt-util" "bridge"
"codec" "constants" "css"
"dom" "ext" "extension"
"gui-util" "gvt" "i18n"
"parser" "script" "slideshow"
"svgbrowser" "svg-dom"
"svggen" "svgpp"
"svgrasterizer" "swing"
"transcoder" "ttf2svg"
"util" "xml")) )
(for-each
(lambda (sdir)
(copy-recursively
(string-append
"batik-" sdir "/src/main/java/") "sources/") )
sub-dirs) )
;; Remove scripting subdirs for jpython, and jacl.
(for-each
(lambda (rfile)
(delete-file rfile)
(format #t "Deleted: ~s\n" rfile))
(append
(find-files
"sources/org/apache/batik/script/jpython" )
(find-files
"sources/org/apache/batik/script/jacl" ) ))
#t) ) ) ) )
(inputs (list rhino java-xmlgraphics-commons libxslt
java-jaxen java-junit java-jaxp java-xerces
java-jdom quickjs))
(home-page "https://xmlgraphics.apache.org/batik")
(synopsis "The java based toolkit for Scalable Vector Graphics")
(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.")
(license license:asl2.0) ) )
(define-public ditaa
(package
(name "ditaa")
(version "0.11.0")
(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
"1y3g17wp1wvb05m56pp25avww2njpgh0gk0jsbsf25scj7hyyj26"))))
(build-system ant-build-system)
(inputs (list java-libbatik java-commons-cli java-w3c-svg
`(,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-after 'unpack 'remove-prepackaged-jars
(lambda _
(for-each (lambda (jarf)
(delete-file jarf)
(format #t "Deleted: ~s\n" jarf))
(find-files "." ".*\\.jar")) #t))
(add-before 'build 'build-prep
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((batik-jar (search-input-file inputs
"share/java/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"))
(with-directory-excursion "build"
(substitute* "release.xml"
(("source=\"1.6\"")
"source=\"7\"")
(("")
(string-append ""
"\n" ""))))
#t))
(replace 'build
(lambda* _
(setenv "ANT_OPTS"
(string-append "-Dversion.string="
,version))
(with-directory-excursion "build"
(invoke "ant" "-f" "release.xml" "release-jar")) #t))
(replace 'check
(lambda* (#:key 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"))) #f)))
(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
"\n"
"JAVA_HOME="
jre
" "
java
" -jar "
out
"/lib/"
jar-name
" $@"))))
(chmod ditaa #o755)) #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
"ditaa is a small command-line utility
that converts diagrams drawn using ascii art
('drawings' that contain characters that resemble lines like | / - ),
into proper bitmap graphics.")
(license license:lgpl3)))