Subject: Re: bug#25925: [PATCH] gnu: Add fop.

From: Marius Bakke <[email-masked]>
Date: Thu, 02 Mar 2017 01:14:56 +0100

Roel Janssen <[email-masked]> writes:

> Dear Guix,
>
> This package is a dependency for Darktable.  Therefore, I would like to
> add it.
>
>>>From 99604dfc19cd9b68863fcc948ecbe4a853bc56f0 Mon Sep 17 00:00:00 2001
> From: Roel Janssen <[email-masked]>
> Date: Thu, 2 Mar 2017 00:43:00 +0100
> Subject: [PATCH] gnu: Add fop.
>
> * gnu/packages/xml.scm (fop): New variable.
> ---
>  gnu/packages/xml.scm | 42 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
>
> diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
> index b91471690..f7f861fbe 100644
> --- a/gnu/packages/xml.scm
> +++ b/gnu/packages/xml.scm
> @@ -14,6 +14,7 @@
>  ;;; Copyright © 2016 ng0 <[email-masked]>
>  ;;; Copyright © 2016 Tobias Geerinckx-Rice <[email-masked]>
>  ;;; Copyright © 2016 Marius Bakke <[email-masked]>
> +;;; Copyright © 2017 Roel Janssen <[email-masked]>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -42,6 +43,7 @@
>    #:use-module ((guix licenses) #:prefix license:)
>    #:use-module (guix packages)
>    #:use-module (guix download)
> +  #:use-module (guix build-system ant)
>    #:use-module (guix build-system cmake)
>    #:use-module (guix build-system gnu)
>    #:use-module (guix build-system perl)
> @@ -71,6 +73,46 @@ stream-oriented parser in which an application registers handlers for
>  things the parser might find in the XML document (like start tags).")
>      (license license:expat)))
>  
> +(define-public fop
> +  (package
> +    (name "fop")
> +    (version "2.1")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (string-append
> +                    "mirror://apache/xmlgraphics/fop/source/fop-"
> +                    version "-src.tar.gz"))
> +              (sha256
> +               (base32
> +                "165rx13q47l6qc29ppr7sg1z26vw830s3rkklj5ap7wgvy0ivbz5"))))

Ahh...java. Can you try removing some of the 21 bundled JARs with a
'snippet' here? We do have a couple of them in Guix already. Even better
if you can package some more.

> +    (build-system ant-build-system)
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (replace 'build
> +           (lambda* (#:key inputs #:allow-other-keys)
> +             (system* (string-append (assoc-ref inputs "ant") "/bin/ant"))))

I'm not very familiar with ant-build-system, but isn't ant available in
PATH here (so you can simply (system* "ant"))? It should probably also
be wrapped in a (zero? (system* ..)) so that the return value is checked.

> +         (replace 'install
> +           (lambda* (#:key inputs outputs #:allow-other-keys)
> +             (let* ((out (assoc-ref outputs "out"))
> +                    (bin (string-append out "/bin")))
> +               (mkdir-p bin)
> +               (install-file "build/fop.jar" bin)
> +               (install-file "build/fop-hyph.jar" bin)
> +               (install-file "build/fop-sandbox.jar" bin)
> +               (install-file "build/fop-transcoder-allinone.jar" bin)
> +               (install-file "build/fop-transcoder.jar" bin)
> +               (install-file "fop" bin)))))))

"install-file" (or actually "copy-file" from reading (guix build utils)
has an unspecified return value, so this phase should end with an
explicit #t.

> +    (home-page "https://xmlgraphics.apache.org/fop/")
> +    (synopsis "Formatting objects processor")
> +    (description "Apache FOP is a print formatter driven by XSL formatting
> +objects (XSL-FO) and an output independent formatter.  It is a Java application
> +that reads a formatting object (FO) tree and renders the resulting pages to a
> +specified output.  Output formats currently supported include PDF, PS, PCL,
> +AFP, XML (area tree representation), Print, AWT and PNG, and to a lesser
> +extent, RTF and TXT.  The primary output target is PDF.")
> +    (license license:asl2.0)))

I did not do a license audit of this package, but please double check
that all bundled software also carries this license (or mention theirs
here). The rest LGTM.