gnu: Add cl-ana.statistical-learning.
[jackhill/guix/guix.git] / gnu / packages / gnucash.scm
index fc8a9b6..af017e1 100644 (file)
@@ -3,7 +3,9 @@
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Chris Marusich <cmmarusich@gmail.com>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages xml))
 
 (define-public gnucash
+  ;; TODO: Unbundle libraries such as guile-json found under the "borrowed/"
+  ;; directory.
   (package
     (name "gnucash")
-    (version "3.0")
+    (version "3.7")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
-                          version "/gnucash-" version ".tar.bz2"))
-      (sha256
-       (base32
-        "1ffvf1rryg5yin86fnf1zvy6hnpwzrjarbdfmjmrf2mqlmv48xac"))
-
-      ;; TODO: rebase this patch
-;      (patches (search-patches "gnucash-price-quotes-perl.patch"))
-      ))
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
+                           version "/gnucash-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "1d2qi3ny0bxa16ifh3465z1jgn1l0fmqk9dkph4ialw076gv13kb"))))
     (build-system cmake-build-system)
     (inputs
      `(("guile" ,guile-2.2)
        ("icu4c" ,icu4c)
        ("glib" ,glib)
        ("gtk" ,gtk+)
+       ("libdbi" ,libdbi)
+       ("libdbi-drivers" ,libdbi-drivers)
        ("libgnomecanvas" ,libgnomecanvas)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("webkitgtk" ,webkitgtk)
        ("aqbanking" ,aqbanking)
        ("perl-date-manip" ,perl-date-manip)
-       ("perl-finance-quote" ,perl-finance-quote)))
+       ("perl-finance-quote" ,perl-finance-quote)
+       ("tzdata" ,tzdata-for-tests)))
     (native-inputs
-     `(("glib" ,glib "bin") ; glib-compile-schemas, etc.
+     `(("glib" ,glib "bin")             ; glib-compile-schemas, etc.
        ("intltool" ,intltool)
        ("googlemock" ,(package-source googletest))
        ("googletest" ,googletest)
        ("gnucash-docs" ,gnucash-docs)
        ("pkg-config" ,pkg-config)))
-    (outputs '("out" "doc"))
+    (outputs '("out" "doc" "debug"))
     (arguments
      `(#:test-target "check"
        #:configure-flags
-       (list "-DWITH_OFX=OFF"  ; libofx is not available yet
-             "-DWITH_SQL=OFF") ; without dbi.h
+       (list "-DWITH_OFX=OFF")          ; libofx is not available yet
+       #:make-flags '("GUILE_AUTO_COMPILE=0")
+       #:modules ((guix build cmake-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
+                  (guix build utils))
+       #:imported-modules (,@%gnu-build-system-modules
+                           (guix build cmake-build-system)
+                           (guix build glib-or-gtk-build-system))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'unpack-gmock
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir "gmock")
-             (invoke "tar" "xf" (assoc-ref inputs "googlemock")
-                     "-C" "gmock" "--strip-components=1")
+             (copy-recursively (assoc-ref inputs "googlemock") "gmock")
              (setenv "GMOCK_ROOT" (string-append (getcwd) "/gmock/googlemock"))
              #t))
+         (add-after 'unpack 'set-env-vars
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((tzdata (assoc-ref inputs "tzdata")))
+               ;; At least one test is time-related and requires this
+               ;; environment variable.
+               (setenv "TZDIR"
+                       (string-append tzdata
+                                      "/share/zoneinfo"))
+               (substitute* "CMakeLists.txt"
+                 (("set\\(SHELL /bin/bash\\)")
+                  (string-append "set(SHELL " (which "bash") ")")))
+               #t)))
+         ;; After wrapping gnc-fq-check and gnc-fq-helper we can no longer
+         ;; execute them with perl, so execute them directly instead.
+         (add-after 'unpack 'fix-finance-quote-check
+           (lambda _
+             (substitute* "libgnucash/scm/price-quotes.scm"
+               (("\"perl\" \"-w\" ") ""))
+             #t))
+         ;; The qof test requires the en_US, en_GB, and fr_FR locales.
+         (add-before 'check 'install-locales
+           (lambda _
+             (setenv "LOCPATH" (getcwd))
+             (invoke "localedef" "-i" "en_US" "-f" "UTF-8" "./en_US.UTF-8")
+             (invoke "localedef" "-i" "en_GB" "-f" "UTF-8" "./en_GB.UTF-8")
+             (invoke "localedef" "-i" "fr_FR" "-f" "UTF-8" "./fr_FR.UTF-8")
+             #t))
          ;; There are about 100 megabytes of documentation.
-         (add-after
-          'install 'install-docs
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((docs (assoc-ref inputs "gnucash-docs"))
-                  (doc-output (assoc-ref outputs "doc")))
-              (symlink (string-append docs "/share/gnome")
-                       (string-append doc-output "/share/gnome")))))
-         (add-after
-          'install-docs 'wrap-programs
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (for-each (lambda (prog)
-                        (wrap-program (string-append (assoc-ref outputs "out")
-                                                     "/bin/" prog)
-                          `("PERL5LIB" ":" prefix
-                            ,(map (lambda (o)
-                                    (string-append o "/lib/perl5/site_perl/"
-                                                   ,(package-version perl)))
-                                  (if (string=? prog "gnc-fq-helper")
-                                      (list
-                                       ,@(transitive-input-references
-                                          'inputs
-                                          (map (lambda (l)
-                                                 (assoc l (inputs)))
-                                               '("perl-finance-quote"
-                                                 "perl-date-manip"))))
-                                      (list
-                                       ,@(transitive-input-references
-                                          'inputs
-                                          (map (lambda (l)
-                                                 (assoc l (inputs)))
-                                               '("perl-finance-quote")))))))))
-                      '("gnucash"
-                        "gnc-fq-check"
-                        "gnc-fq-helper"
-                        "gnc-fq-dump")))))))
+         (add-after 'install 'install-docs
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((docs (assoc-ref inputs "gnucash-docs"))
+                   (doc-output (assoc-ref outputs "doc")))
+               (mkdir-p (string-append doc-output "/share"))
+               (symlink (string-append docs "/share/gnome")
+                        (string-append doc-output "/share/gnome"))
+               #t)))
+         (add-after 'install-docs 'wrap-programs
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (for-each (lambda (prog)
+                         (wrap-program (string-append (assoc-ref outputs "out")
+                                                      "/bin/" prog)
+                           `("GNC_DBD_DIR" =
+                             (,(string-append
+                                (assoc-ref inputs "libdbi-drivers")
+                                "/lib/dbd")))
+                           `("PERL5LIB" ":" prefix
+                             ,(map (lambda (o)
+                                     (string-append o "/lib/perl5/site_perl/"
+                                                    ,(package-version perl)))
+                                   (if (string=? prog "gnc-fq-helper")
+                                       (list
+                                        ,@(transitive-input-references
+                                           'inputs
+                                           (map (lambda (l)
+                                                  (assoc l (package-inputs this-package)))
+                                                '("perl-finance-quote"
+                                                  "perl-date-manip"))))
+                                       (list
+                                        ,@(transitive-input-references
+                                           'inputs
+                                           (map (lambda (l)
+                                                  (assoc l (package-inputs this-package)))
+                                                '("perl-finance-quote")))))))))
+                       '("gnucash"
+                         "gnc-fq-check"
+                         "gnc-fq-helper"
+                         "gnc-fq-dump"))))
+         (add-after 'install 'glib-or-gtk-compile-schemas
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
+         (add-after 'install 'glib-or-gtk-wrap
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
     (home-page "https://www.gnucash.org/")
     (synopsis "Personal and small business financial accounting software")
     (description
 It can be used to track bank accounts, stocks, income and expenses, based on
 the double-entry accounting practice.  It includes support for QIF/OFX/HBCI
 import and transaction matching.  It also automates several tasks, such as
-financial calculations or scheduled transactions.")
+financial calculations or scheduled transactions.
+
+To make the GnuCash documentation available, its doc output must be
+installed as well as Yelp, the Gnome help browser.")
     (license license:gpl3+)))
 
 ;; This package is not public, since we use it to build the "doc" output of
 ;; the gnucash package (see above).  It would be confusing if it were public.
 (define gnucash-docs
-  (package
-    (name "gnucash-docs")
-    (version (package-version gnucash))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/gnucash/gnucash-docs/"
-                           version "/gnucash-docs-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0yq65s3z3dwdwdf2nq1d1w9ckdjdyjwkfpmvhzyib54b66q65xh5"))))
-    (build-system gnu-build-system)
-    ;; These are native-inputs because they are only required for building the
-    ;; documentation.
-    (native-inputs
-     `(("libxml2" ,libxml2)
-       ;; The "check" target needs the docbook xml packages for validating the
-       ;; DocBook XML during the tests.
-       ("docbook-xml-4.4" ,docbook-xml-4.4)
-       ("docbook-xml-4.2" ,docbook-xml-4.2)
-       ("docbook-xml-4.1.2" ,docbook-xml-4.1.2)
-       ("libxslt" ,libxslt)
-       ("docbook-xsl" ,docbook-xsl)
-       ("scrollkeeper" ,scrollkeeper)))
-    (home-page "https://www.gnucash.org/")
-    (synopsis "Documentation for GnuCash")
-    (description
-     "User guide and other documentation for GnuCash in various languages.
+  (let ((revision ""))              ;set to the empty string when no revision
+    (package
+      (name "gnucash-docs")
+      (version (package-version gnucash))
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
+                             version "/gnucash-docs-" version revision ".tar.gz"))
+         (sha256
+          (base32
+           "1h4hm58ikffbhplx4gm8pzm9blfwqa1sz8yc2fqi21vs5v0ijf9r"))))
+      (build-system gnu-build-system)
+      ;; These are native-inputs because they are only required for building the
+      ;; documentation.
+      (native-inputs
+       `(("libxml2" ,libxml2)
+         ;; The "check" target needs the docbook xml package for validating the
+         ;; DocBook XML during the tests.
+         ("docbook-xml" ,docbook-xml)
+         ("libxslt" ,libxslt)
+         ("docbook-xsl" ,docbook-xsl)
+         ("scrollkeeper" ,scrollkeeper)))
+      (home-page "https://www.gnucash.org/")
+      (synopsis "Documentation for GnuCash")
+      (description
+       "User guide and other documentation for GnuCash in various languages.
 This package exists because the GnuCash project maintains its documentation in
 an entirely separate package from the actual GnuCash program.  It is intended
 to be read using the GNOME Yelp program.")
-    (license (list license:fdl1.1+ license:gpl3+))))
+      (license (list license:fdl1.1+ license:gpl3+)))))
 
 (define-public gwenhywfar
   (package
     (name "gwenhywfar")
-    (version "4.20.0")
+    (version "4.20.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://www.aquamaniac.de/sites/download/"
-                           "download.php?package=01&release=208&file=02&"
-                           "dummy=gwenhywfar-" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (uri (string-append "https://www.aquamaniac.de/rdm/attachments/"
+                           "download/108/gwenhywfar-" version ".tar.gz"))
        (sha256
-        (base32
-         "1c0g3f8jk6j693774ifslx2ds4ksabgbbalhhm9gk20kpamxm22s"))))
+        (base32 "0w1j7ppr1247kr3bpn4dqwyxp6cl8mfgr0m4782iz8f8a4ixjkqg"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -212,7 +256,7 @@ to be read using the GNOME Yelp program.")
        ("gtk+" ,gtk+)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://www.aquamaniac.de/sites/aqbanking/index.php")
+    (home-page "https://www.aquamaniac.de/sites/aqbanking/index.php")
     (synopsis "Utility library for networking and security applications")
     (description
      "This package provides a helper library for networking and security
@@ -224,17 +268,14 @@ applications and libraries.  It is used by AqBanking.")
 (define-public aqbanking
   (package
     (name "aqbanking")
-    (version "5.7.8")
+    (version "5.8.1")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://www.aquamaniac.de/sites/download/"
-                           "download.php?package=03&release=217&file=02&"
-                           "dummy=aqbanking-" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (uri (string-append "https://www.aquamaniac.de/rdm/attachments/"
+                           "download/105/aqbanking-" version ".tar.gz"))
        (sha256
-        (base32
-         "0s67mysskbiw1h1p0np4ph4351r7wq3nc873vylam7lsqi66xy0n"))))
+        (base32 "0m44n2hyxprxzq7ijkrd7rmhhl0r033s1k21ix9y67a0p9skl1mg"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Parallel building fails because aqhbci is required before it's
@@ -252,7 +293,7 @@ applications and libraries.  It is used by AqBanking.")
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("libltdl" ,libltdl)))
-    (home-page "http://www.aquamaniac.de/sites/aqbanking/index.php")
+    (home-page "https://www.aquamaniac.de/sites/aqbanking/index.php")
     (synopsis "Interface for online banking tasks")
     (description
      "AqBanking is a modular and generic interface to online banking tasks,