diff mbox series

[bug#60976] gnu: Add ditaa.

Message ID 63cb23b3.650a0220.26d15.f66d@mx.google.com
State New
Headers show
Series [bug#60976] gnu: Add ditaa. | expand

Commit Message

Frank Pursel Jan. 6, 2023, 6:46 p.m. UTC
* gnu/packages/ditaa.scm: New file.
---

With Guix as with everything in life:

If at first you don't succeed . . .

This patch addresses the issues I discovered some time after posting
60612 which was intended to address the issues with the still older
53908!  All of which required building a few odd dependencies
supporting the goal of adding ditaa to guix's repertoire.

Like the earlier patches to add ditaa I'm again hopeful about this one
and look forward to any feedback.

Sincerely,
Frank Pursel

 gnu/packages/ditaa.scm | 296 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 296 insertions(+)
 create mode 100644 gnu/packages/ditaa.scm


base-commit: 4e9cb45da0cc41cf85b720640a8ba9bc88c28d46

Comments

Simon Tournier Jan. 24, 2023, 10:44 a.m. UTC | #1
Hi,

Thanks for your contribution.


Several minor things.

On ven., 06 janv. 2023 at 10:46, Frank Pursel <frank.pursel@gmail.com> wrote:
> * gnu/packages/ditaa.scm: New file.

Why a new file?

Could you split this commit?  Basically, each package addition should go
to their own commit.

> +(define-public java-jericho-html

Why not some of the gnu/packages/java-*.scm files?  Or gnu/packages/batik.scm

> +(define-public java-libbatik

Idem.

> +    (arguments
> +     `(#:tests? #f

Please provide a comment why the tests are disabled.  For example, if
there is no test suite or if upstream does not provide tests,

    (arguments
     `(#:tests? #f    ; no tests


> +(define-public ditaa

Why not in gnu/packages/graph.scm?


Cheers,
simon
Frank Pursel Jan. 25, 2023, 2:50 a.m. UTC | #2
> On Tuesday 24 Jan 2023 at 0435 PST, Simon Tournier wrote:
> Why a new file?
> Could you split this commit?  Basically, each package addition should go
> to their own commit.

Yes, I puzzled over that too and I think this is the best answer.  If
you don't admit a new file (for which I don't see great economy) then
you must decide what three others you would dilute or adjust to avoid
clearly identifying the relationship between these three packages.    

There seem to be prior examples of small, unique packages of about
this size having separate files.  Ditaa creates graphics but does not
do anything like provide OS level interfaces like in 'graphics.scm'.
Similarly, it does not deal with computer science graphs like in
'graph.scm'.  It seems to me it is more like curl which stands alone
in curl.scm or bison, in bison.scm, cmake, cpio, abiword, and I could go on.
While, I know, ditaa is not as fundamental as these other giants it
shares that ubiquity.  So, I think, ditaa's uniqueness merits that
distinction.  Together with it's odd dependencies I don't see a better
fit but if someone has the courage to positively assert where each of
these packages fits I'm completely supportive.

> Why not some of the gnu/packages/java-*.scm files?  Or gnu/packages/batik.scm

Another reason not to want to split this commit is because, per the
reference manual, It seemed to me that this was also 'one set of
related changes' enabling ditaa.  java-libbatik and java-jericho-html
are unlikely to be used in support of anything else but cannot be
commited separately without breaking ditaa.  I also suspect their
purpose would quickly become unclear if mixed with other java
packages.

If there were another application that also built upon the concrete
java-libbatik then I think the argument for moving it into batik.scm
would be stronger but don't think there is one because batik.scm
remains more abstract.  I think that is ok.  'batik.scm' is java
internally uses an svg api but ditaa leverages svg to produce other
than svg output and is independent of java.  It is a tool that
is likely to be used in non-java environments.

> Please provide a comment why the tests are disabled.  For example, if
> there is no test suite or if upstream does not provide tests,

Knowing that ditaa's checks (which depend upon libbatik) was enough
for me but I think I can do better.  I'll get another patch together
to achieve this.

Noting that the qa checks on this patch now indicate that this patch is
successful (I never take this for granted) does this seem like a good
path forward?

Regards,
Frank
Simon Tournier Jan. 25, 2023, 10:10 a.m. UTC | #3
Hi,

On Tue, 24 Jan 2023 at 18:50, Frank Pursel <frank.pursel@gmail.com> wrote:

> Another reason not to want to split this commit is because, per the
> reference manual, It seemed to me that this was also 'one set of
> related changes' enabling ditaa.  java-libbatik and java-jericho-html
> are unlikely to be used in support of anything else but cannot be
> commited separately without breaking ditaa.  I also suspect their
> purpose would quickly become unclear if mixed with other java
> packages.

No, there are independent.  This package java-jericho-html does not
depend on the others so it deserves its proper commit mentioning its
addition.

--8<---------------cut here---------------start------------->8---
+(define-public java-jericho-html

[...]

+      (native-inputs (list java-junit java-slf4j-api java-log4j-api
+                           java-commons-logging-minimal))
--8<---------------cut here---------------end--------------->8---

Then, it is similar for this other one:

--8<---------------cut here---------------start------------->8---
+(define-public java-libbatik

[...]

+    (native-inputs (list rhino java-xmlgraphics-commons libxslt
+		         java-jaxen java-junit java-jaxp java-xerces
+		         java-jdom quickjs))
--8<---------------cut here---------------end--------------->8---

Therefore, I would expect three commits, like this:

        gnu: Add java-jericho-html.
        gnu: Add java-libbatik.
        gnu: Add ditaa.


> If there were another application that also built upon the concrete
> java-libbatik then I think the argument for moving it into batik.scm
> would be stronger but don't think there is one because batik.scm
> remains more abstract.  I think that is ok.  'batik.scm' is java
> internally uses an svg api but ditaa leverages svg to produce other
> than svg output and is independent of java.  It is a tool that
> is likely to be used in non-java environments.

Well, I am not convinced by this argument about java-libbatik. :-)


Cheers,
simon
Frank Pursel Jan. 25, 2023, 5:42 p.m. UTC | #4
Hi Zimoun,

Ok, so, after some additional looking around, I think this is what we
want to do:

Three commits, as follows

1.  java-libbatik -> batik.scm  (gnu: java-libbatik)
2.  java-jericho-html -> java-xml.scm, (gnu: java-jericho-html)
3.  ditaa -> New file ditaa.scm, (gnu: add ditaa)

Let me know how this sounds.

Regards,
Frank
Simon Tournier Jan. 26, 2023, 12:36 p.m. UTC | #5
Hi Frank,

On Wed, 25 Jan 2023 at 09:42, Frank Pursel <frank.pursel@gmail.com> wrote:

> Three commits, as follows
>
> 1.  java-libbatik -> batik.scm  (gnu: java-libbatik)
> 2.  java-jericho-html -> java-xml.scm, (gnu: java-jericho-html)
> 3.  ditaa -> New file ditaa.scm, (gnu: add ditaa)
>
> Let me know how this sounds.

This sounds good. :-)
Thanks.

Cheers,
simon
Frank Pursel Jan. 27, 2023, 1:41 p.m. UTC | #6
My experience has been that after making a change it takes 4 days for
the QA process to produce other than an 'Unkown' outcome.  Maybe the
size of the change has some impact but I suspect it has more to do with
the size of the outstanding queue.
Frank Pursel Jan. 28, 2023, 4:49 a.m. UTC | #7
Well, it took only about 36 hours to move from 'Unknown' to
'Succeeding'.  That is much better than my recent prior experience.
Kudos is owed to the qa team.  :)
Frank Pursel March 9, 2023, 12:25 a.m. UTC | #8
It is odd that this latest patchset obtained the qa successful badge a
few days after it was posted but then, seemingly spontaneously, the qa
badge reverted to unknown.  This is not the first time I've seen the
system complete testing and post the results only to lose it's memory
and then reschedule the work.  Seems like a persistence or memoization
mechanism is failing.

Regards,
Frank
diff mbox series

Patch

diff --git a/gnu/packages/ditaa.scm b/gnu/packages/ditaa.scm
new file mode 100644
index 0000000000..c47efa3b3e
--- /dev/null
+++ b/gnu/packages/ditaa.scm
@@ -0,0 +1,296 @@ 
+;;; 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 <http://www.gnu.org/licenses/>.
+;;;
+;;; Copyright © 2023 Frank Pursel <frank.pursel@gmail.com>
+;;;
+
+(define-module (gnu packages ditaa)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages java)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages java-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-jericho-html
+  (let ((ver "3.4")
+        (hash "1i7z3b8yamgkm7p3pv9qzv8l2kw15ccxy1aj9mpbf66kzkkds51i")
+        (internal-name "jericho-html"))
+    (package
+      (name "java-jericho-html")
+      (version ver)
+      (source (origin
+                (method url-fetch/zipbomb)
+                (uri (string-append
+                      "https://sourceforge.net/projects/jerichohtml"
+                      "/files/jericho-html/3.4/jericho-html-3.4.zip/download"))
+                (sha256
+                 (base32
+                  hash))
+                (modules '((guix build utils)))
+                (snippet '(begin
+                            (format #t "~%~a~%" "Removing sourced jar files.")
+                            (for-each (lambda (jarf)
+                                        (delete-file jarf)
+                                        (format #t "Deleted: ~a~%" jarf))
+                                      (find-files "." "\\.jar$"))))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:jar-name (string-append ,name ".jar")
+         #:source-dir (string-append ,internal-name "-"
+                                     ,ver "/src/")
+         #:test-dir (string-append ,internal-name "-"
+                                   ,ver "/test/")
+         #:test-exclude (list "**/StAXTest.java"
+			      "**/NodeIteratorTest.java"
+			      "**/ScriptTest.java"
+			      "**/SegmentGetStyleURISegmentsTest.java"
+			      "**/SegmentTest.java"
+			      "**/StreamedSourceTest.java"
+			      "**/HTMLSanitiserTest.java")
+         #:phases (modify-phases %standard-phases
+                    (add-before 'build 'add-ant-env-options
+                      (lambda* _
+                        (setenv "ANT_OPTS" "-Dfile.encoding=iso-8859-1") #t))
+                    (add-after 'build 'check-prep
+                      (lambda* (#:key source #:allow-other-keys)
+                        (let* ((cwd (getcwd))
+			       (jericho-test (string-append cwd "/" ,internal-name
+						    "-" ,ver "/test"))
+			       (test (string-append jericho-test "/test"))
+			       (test-data (string-append jericho-test "/data"))
+			       (test-src (string-append jericho-test "/src"))
+			       (test-src-data (string-append test-src "/data")))
+                          (format #t "~%Check Prep dir: ~s\n" cwd)
+                          (substitute* "build.xml"
+                            (("\\$\\{test\\.home\\}/java")
+                             "${test.home}/src"))
+                          (mkdir-p (string-append cwd "/build/test-classes"))
+                          (copy-recursively (string-append cwd
+                                      "/"
+                                      ,internal-name
+                                      "-"
+                                      ,ver
+                                      "/samples/console/classes")
+                                     (string-append cwd
+                                      "/build/test-classes/"))
+			  (mkdir-p test-src-data)
+			  (copy-recursively test-data
+					    test-src-data))
+                        #t)))))
+      (native-inputs (list java-junit java-slf4j-api java-log4j-api
+                           java-commons-logging-minimal))
+      (home-page "http://jericho.htmlparser.net/docs/index.html")
+      (description
+       "A java library allowing analysis and manipulation of
+parts of an HTML document, including server-side tags, while
+reproducing verbatim any unrecognised or invalid HTML.  It also
+provides high-level HTML form manipulation functions.  
+")
+      (synopsis "Java HTML Parser library")
+      (license (list license:lgpl2.1+ license:asl2.0 license:epl1.0)))))
+
+(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"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Identify and delete bundled jars.
+           (format #t "~%~a~%" "Removing sourced jars")
+           (for-each
+            (lambda (f)
+              (delete-file f)
+              (format #t "Deleted: ~a~%" f))
+            (find-files "." "\\.jar$"))
+           ))))
+    (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 '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) ) ) ) )
+    (native-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"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (format #t "~%~a~%" "Finding and removing sourced jars.")
+                  (for-each
+                   (lambda (jarf)
+                     (delete-file jarf)
+                     (format #t "Deleted: ~a~%" jarf))
+                   (find-files "." "\\.jar$"))))))
+    (build-system ant-build-system)
+    (inputs (list bash-minimal))
+    (native-inputs (list java-libbatik java-commons-cli java-w3c-svg
+                         java-jericho-html `(,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
+                                                    "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\"")
+                   (("<file name=\"commons-cli-1.2.jar\"/>")
+                    (string-append "<file name=\"commons-cli.jar\"/>"
+                                   "\n" "<file name=\"batik.jar\"/>"))))
+               #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 _
+                     (format #t "#!~a~%JAVA_HOME=~a ~a -jar ~a/~a $@~%"
+                             bash jre java 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)))
+
+
+
+
+