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
137
138
139
140
141
142
143
144
145
|
{ stdenv49
, lib, fetchurl, fetchFromGitHub
, which, findutils, m4, gawk
, python, openjdk, mono58, libressl
}:
let
# 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 = stdenv49.mkDerivation rec {
name = "boost-headers-1.52.0";
src = fetchurl {
url = "mirror://sourceforge/boost/boost_1_52_0.tar.bz2";
sha256 = "14mc7gsnnahdjaxbbslzk79rc0d12h1i681cd3srdwr3fzynlar2";
};
configurePhase = ":";
buildPhase = ":";
installPhase = "mkdir -p $out/include && cp -R boost $out/include/";
};
makeFdb =
{ version
, branch
, sha256
# the revision can be inferred from the fdb tagging policy
, rev ? "refs/tags/${version}"
# in theory newer versions of fdb support newer compilers, but they
# don't :( maybe one day
, stdenv ? stdenv49
# in theory newer versions of fdb support newer boost versions, but they
# don't :( maybe one day
, boost ? boost152
}: stdenv.mkDerivation rec {
name = "foundationdb-${version}";
inherit version;
src = fetchFromGitHub {
owner = "apple";
repo = "foundationdb";
inherit rev sha256;
};
nativeBuildInputs = [ gawk which m4 findutils mono58 ];
buildInputs = [ python openjdk libressl boost ];
patches =
[ # For 5.2+, we need a slightly adjusted patch to fix all the ldflags
(if lib.versionAtLeast version "5.2"
then ./ldflags.patch
else ./ldflags-5.1.patch)
] ++
# for 6.0+, we do NOT need to apply this version fix, since we can specify
# it ourselves. see configurePhase
(lib.optional (!lib.versionAtLeast version "6.0") ./fix-scm-version.patch);
postPatch = ''
# note: this does not do anything for 6.0+
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" ];
# on 6.0 and later, we can specify all this information manually
configurePhase = lib.optionalString (lib.versionAtLeast version "6.0") ''
export SOURCE_CONTROL=GIT
export SCBRANCH="${branch}"
export VERSION_ID="${rev}"
'';
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/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/fdb-java.jar
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 ];
};
};
in with builtins; {
foundationdb51 = makeFdb rec {
version = "5.1.7";
branch = "release-5.1";
sha256 = "1rc472ih24f9s5g3xmnlp3v62w206ny0pvvw02bzpix2sdrpbp06";
};
foundationdb52 = makeFdb rec {
version = "5.2.5";
branch = "release-5.2";
sha256 = "00csr4v9cwl9y8r63p73grc6cvhlqmzcniwrf80i0klxv5asg7q7";
};
foundationdb60 = makeFdb rec {
version = "6.0.0pre2227_${substring 0 8 rev}";
branch = "master";
rev = "8caa6eaecf1eeec0298fc77db334761b0c1d1523";
sha256 = "1q200rpsphl5fzwzp2vk7ifgsnqh95k0xfiicfi1c8253ylnsgll";
};
}
|