about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking/taler/default.nix
blob: 6ba4bac67fcb80c50c20197dd8af05565bdd65ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
{ lib, stdenv, fetchgit, curl, gnunet, jansson, libgcrypt, libmicrohttpd_0_9_74
, qrencode, libsodium, libtool, libunistring, pkg-config, postgresql
, autoreconfHook, python39, recutils, wget, jq, gettext, texinfo
}:

let
  version = "0.9.3";

  taler-wallet-core = fetchgit {
    url = "https://git.taler.net/wallet-core.git";
    rev = "v${version}";
    sha256 = "sha256-uwbgIzSjLN+KQCY134VfnCuBEtvCO3a6mEw++HoZDHs=";
  };
in rec {
  taler-exchange = stdenv.mkDerivation rec {
    pname = "taler-exchange";
    inherit version;

    src = fetchgit {
      url = "https://git.taler.net/exchange.git";
      rev = "v${version}";
      # REMOVEME: this should only be a problem for specifically v0.9.3
      # When fetching submodules without deep clone we get the following error:
      # "Server does not allow request for unadvertised object"
      deepClone = true;
      fetchSubmodules = true;
      sha256 = "sha256-txWwW5vqTblNgVIXdDkpNNZOXpY0udMaz4Wog1GobzE=";
    };

    nativeBuildInputs = [
      autoreconfHook
      pkg-config
    ];
    buildInputs = [
      libgcrypt
      libmicrohttpd_0_9_74
      jansson
      libsodium
      postgresql
      curl
      recutils
      gettext
      texinfo # Fix 'makeinfo' is missing on your system.
      libunistring
      python39.pkgs.jinja2
      # jq is necessary for some tests and is checked by configure script
      jq
    ];
    propagatedBuildInputs = [ gnunet ];

    preConfigure = ''
      ./contrib/gana-generate.sh
    '';

    enableParallelBuilding = true;

    nativeCheckInputs = [ wget curl ];
    doInstallCheck = true;
    checkTarget = "check";

    meta = with lib; {
      description = ''
        Taler is an electronic payment system providing the ability to pay
        anonymously using digital cash.  Taler consists of a network protocol
        definition (using a RESTful API over HTTP), a Exchange (which creates
        digital coins), a Wallet (which allows customers to manage, store and
        spend digital coins), and a Merchant website which allows customers to
        spend their digital coins.  Naturally, each Merchant is different, but
        Taler includes code examples to help Merchants integrate Taler as a
        payment system.
      '';
      homepage = "https://taler.net/";
      license = licenses.agpl3Plus;
      maintainers = with maintainers; [ astro ];
      platforms = platforms.linux;
    };
  };

  taler-merchant = stdenv.mkDerivation rec {
    pname = "taler-merchant";
    inherit version;

    src = fetchgit {
      url = "https://git.taler.net/merchant.git";
      rev = "v${version}";
      fetchSubmodules = true;
      sha256 = "sha256-HewCqyO/7nnIQY9Tgva0k1nTk2LuwLyGK/UUxvx9BG0=";
    };
    postUnpack = ''
      ln -s ${taler-wallet-core}/spa.html $sourceRoot/contrib/
    '';

    nativeBuildInputs = [ pkg-config autoreconfHook ];
    buildInputs = taler-exchange.buildInputs ++ [
      qrencode
      taler-exchange
      # for ltdl.h
      libtool
    ];
    propagatedBuildInputs = [ gnunet ];

    # From ./bootstrap
    preAutoreconf = ''
      cd contrib
      find wallet-core/backoffice/ -type f -printf '  %p \\\n' | sort > Makefile.am.ext
      truncate -s -2 Makefile.am.ext
      cat Makefile.am.in Makefile.am.ext >> Makefile.am
      cd ..
    '';
    configureFlags = [
      "--with-gnunet=${gnunet}"
      "--with-exchange=${taler-exchange}"
    ];

    enableParallelBuilding = true;

    nativeCheckInputs = [ jq ];
    doInstallCheck = true;
    checkTarget = "check";

    meta = with lib; {
      description = ''
        This is the GNU Taler merchant backend. It provides the logic that should run
        at every GNU Taler merchant.  The GNU Taler merchant is a RESTful backend that
        can be used to setup orders and process payments.  This component allows
        merchants to receive payments without invading the customers' privacy. Of
        course, this applies mostly for digital goods, as the merchant does not need
        to know the customer's physical address.
      '';
      homepage = "https://taler.net/";
      license = licenses.agpl3Plus;
      maintainers = with maintainers; [ astro ];
      platforms = platforms.linux;
    };
  };
}