summary refs log tree commit diff
path: root/pkgs/servers/foundationdb/default.nix
blob: 3397c2ba386ec27cfcfd1ed7da59154d5e4cd077 (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
{ stdenv, fetchurl, fetchFromGitHub
, which, findutils, m4, gawk, python, openjdk, mono58, libressl_2_6
}:

let
  version = "5.1.7";
  branch  = "release-5.1";
  rev     = "9ad8d02386d4a6a5efecf898df80f2747695c627";
  sha256  = "1rc472ih24f9s5g3xmnlp3v62w206ny0pvvw02bzpix2sdrpbp06";

  # hysterical raisins dictate a version of boost this old. however,
  # we luckily do not need to build anything, we just need the header
  # files.
  boost152 = stdenv.mkDerivation rec {
    name = "boost-headers-1.52.0";

    src = fetchurl {
      url = "mirror://sourceforge/boost/boost_1_52_0.tar.bz2";
      sha256 = "14mc7gsnnahdjaxbbslzk79rc0d12h1i681cd3srdwr3fzynlar2";
    };

    buildPhase = ":";
    configurePhase = ":";
    installPhase = ''
      mkdir -p $out/include/
      cp -R boost $out/include/
    '';
  };

in stdenv.mkDerivation rec {
  name = "foundationdb-${version}";
  inherit version;

  src = fetchFromGitHub {
    owner = "apple";
    repo  = "foundationdb";
    inherit rev sha256;
  };

  nativeBuildInputs = [ gawk which m4 findutils boost152 mono58 ];
  buildInputs = [ python openjdk libressl_2_6 ];

  patches =
    [ ./fix-scm-version.patch
      ./ldflags.patch
    ];

  postPatch = ''
    substituteInPlace ./build/scver.mk \
      --subst-var-by NIXOS_FDB_VERSION_ID "${rev}" \
      --subst-var-by NIXOS_FDB_SCBRANCH   "${branch}"

    substituteInPlace ./Makefile \
      --replace 'shell which ccache' 'shell true' \
      --replace -Werror ""

    substituteInPlace ./Makefile \
      --replace libstdc++_pic libstdc++

    substituteInPlace ./build/link-validate.sh \
      --replace 'exit 1' '#exit 1'

    patchShebangs .
  '';

  enableParallelBuilding = true;
  makeFlags = [ "all" "fdb_c" "fdb_java" "KVRELEASE=1" ];

  configurePhase = ":";
  installPhase = ''
    mkdir -vp $out/{bin,libexec/plugins} $lib/{lib,share/java} $dev/include/foundationdb

    cp -v ./lib/libfdb_c.so     $lib/lib
    cp -v ./lib/libfdb_java.so  $lib/lib

    cp -v ./lib/libFDBLibTLS.so $out/libexec/plugins/FDBLibTLS.so

    cp -v ./bindings/c/foundationdb/fdb_c.h           $dev/include/foundationdb
    cp -v ./bindings/c/foundationdb/fdb_c_options.g.h $dev/include/foundationdb

    cp -v ./bindings/java/foundationdb-client.jar     $lib/share/java

    for x in fdbbackup fdbcli fdbserver fdbmonitor; do
      cp -v "./bin/$x" $out/bin;
    done

    ln -sfv $out/bin/fdbbackup $out/bin/dr_agent
    ln -sfv $out/bin/fdbbackup $out/bin/fdbrestore
    ln -sfv $out/bin/fdbbackup $out/bin/fdbdr

    ln -sfv $out/bin/fdbbackup $out/libexec/backup_agent
  '';

  outputs = [ "out" "lib" "dev" ];

  meta = with stdenv.lib; {
    description = "Open source, distributed, transactional key-value store";
    homepage    = https://www.foundationdb.org;
    license     = licenses.asl20;
    platforms   = platforms.linux;
    maintainers = with maintainers; [ thoughtpolice ];
  };
}