;;; This file is part of GNU Taler.
;;; Copyright (C) 2018 GNUnet e.V.
;;;
;;; GNU Taler is free software: you can redistribute it and/or modify it
;;; under the terms of the GNU Affero General Public License as published
;;; by the Free Software Foundation, either version 3 of the License,
;;; or (at your option) any later version.
;;;
;;; GNU Taler 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
;;; Affero General Public License for more details.
;;;
;;; You should have received a copy of the GNU Affero General Public License
;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.


(define-module (gnu packages taler-exchange)
  #:use-module (ice-9 popen)
  #:use-module (ice-9 rdelim)
  #:use-module (gnu packages)
  #:use-module (gnu packages aidc)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages backup)
  #:use-module (gnu packages base)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages curl)
  #:use-module (gnu packages databases)
  #:use-module (gnu packages file)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gnunet)
  #:use-module (gnu packages gnupg)
  #:use-module (gnu packages groff)
  #:use-module (gnu packages gstreamer)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages guile)
  #:use-module (gnu packages image)
  #:use-module (gnu packages libidn)
  #:use-module (gnu packages libunistring)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages maths)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages music)
  #:use-module (gnu packages ncurses)
  #:use-module (gnu packages nettle)
  #:use-module (gnu packages package-management)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages pulseaudio)
  #:use-module (gnu packages python)
  #:use-module (gnu packages texinfo)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages video)
  #:use-module (gnu packages web)
  #:use-module (gnu packages xiph)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module ((guix build utils) #:prefix build-utils:)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix utils)
  #:use-module (guix gexp)
  #:use-module (guix git-download)
  #:use-module (guix build-system gnu))

(define (repeat f n)
  (if (= n 1)
      f
      (lambda (x) (f ((repeat f (- n 1)) x)))))

(define %source-dir ((repeat dirname 5) (current-filename)))

(define (git-output . args)
  "Execute 'git ARGS ...' command and return its output without trailing
newspace."
  (build-utils:with-directory-excursion %source-dir
    (let* ((port   (apply open-pipe* OPEN_READ "git" args))
           (output (read-string port)))
      (close-port port)
      (string-trim-right output #\newline))))

(define (current-git-version)
  (git-output "describe" "--tags"))

(define (git-sources)
  (local-file %source-dir
	      #:recursive? #t
	      #:select? (git-predicate %source-dir)))

(define-public taler-exchange
  (package
   (name "taler-exchange")
   (version (current-git-version))
   (source (git-sources))
   (build-system gnu-build-system)
   (inputs
    `(("gnurl" ,gnurl)
      ("libgcrypt" ,libgcrypt)
      ("libmicrohttpd" ,libmicrohttpd)
      ("libltdl" ,libltdl)
      ("jansson" ,jansson)
      ("gnunet" ,gnunet)
      ("zlib" ,zlib)
      ("perl" ,perl)
      ("nettle" ,nettle) ; only needed for gnurl detection (FIXME!)
      ("libidn2" ,libidn2) ; only needed for gnurl detection (FIXME!)
      ("gnutls" ,gnutls) ; only needed for gnurl detection (FIXME!)
      ("postgresql" ,postgresql)))
   (native-inputs
    `(("pkg-config" ,pkg-config)
      ("autoconf" ,autoconf)
      ("automake" ,automake)
      ("gnu-gettext" ,gnu-gettext)
      ("which" ,which)
      ("texinfo" ,texinfo-5) ; Debian stable: 5.2
      ("libtool" ,libtool)))
   (arguments
    '(#:parallel-tests? #f
      #:tests? #f
      #:phases
      (modify-phases %standard-phases
        ;(add-after 'install 'fail
        ;  (lambda _
	;    (invoke "false")))
        (add-after 'unpack 'patch-bin-sh
          (lambda _
            (for-each (lambda (f) (chmod f #o755))
                      (find-files "po" ""))
            #t))
        (add-after 'install 'check
          (assoc-ref %standard-phases 'check))
        (delete 'check))))
   (synopsis "GNU Taler exchange")
   (description "GNU Taler is an electronic payment system")
   (license license:agpl3+)
   (home-page "https://taler.net/")))