about summary refs log tree commit diff stats
path: root/pkgs/by-name/st/stalwart-mail-free/package.nix
blob: 6e2a71cfe9b3c1e1feb089a03b858f106922ce80 (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
{
  pkgsUnstable,
  callPackage,
  nixLib,
}: let
  spamfilter = callPackage ./spam-filter.nix {};

  mail-send = callPackage ./mail-send.nix {};

  # Need to use the newer `rustPlatform`
  inherit (pkgsUnstable) rustPlatform;
in
  pkgsUnstable.stalwart-mail.override {
    rustPlatform =
      rustPlatform
      // {
        buildRustPackage = prev:
          rustPlatform.buildRustPackage (
            prev
            // {
              pname = "stalwart-mail-free";
              passthru = nixLib.warnMerge (prev.passthru or {}) {
                inherit spamfilter;
              } "stalwart-mail passthru";

              useFetchCargoVendor = true;
              cargoHash = "sha256-Qg01QXP/ImRCUw3aXcZbnM1hysHUwozCdQ7LecjUa0o=";

              buildNoDefaultFeatures = true;
              buildFeatures = [
                "rocks"
                "redis"
              ];

              postUnpack =
                (prev.postUnpack or "")
                + ''
                  cp --recursive "${mail-send}" ./source/crates/mail-send
                  chmod -R +w "./source/crates/mail-send"
                '';

              cargoPatches =
                (prev.cargoPatches or [])
                ++ [
                  # `stalwart-mail` does enable their `enterprise` feature per default.
                  # We want a AGPL only build (i.e., without unfree dependencies), therefore disable the
                  # `enterprise` feature here.
                  # We cannot use the `buildFeatures` attribute because it does not actually change the
                  # correct features. As such we simply patch the correct `Cargo.toml` file.
                  ./patches/crates-main-Cargo.toml-Use-libre-features.patch

                  # `stalwart-mail` uses their bundled store, which makes it impossible to use our
                  # own CA certificate (e.g., for tests). Thus use a native version.
                  ./patches/crates-Use-the-platform-CA-bundle-instead-of-the-bun.patch
                ];

              # Check that the enterprise feature is really disabled.
              postCheck =
                (prev.postCheck or "")
                +
                # bash
                ''
                  if grep "enterprise" ./target/*/release/stalwart-mail.d; then
                    echo "ERROR: Proprietary 'enterprise' feature active."
                    exit 1
                  fi
                '';

              meta.mainProgram = prev.meta.mainProgram or "stalwart-mail";
            }
          );
      };
  }