{ 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 (if lib.versionAtLeast version "6.0" then ./ldflags-6.0.patch else ./ldflags-5.2.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 . '' + lib.optionalString (lib.versionAtLeast version "6.0") '' substituteInPlace ./Makefile \ --replace 'TLS_LIBS +=' '#TLS_LIBS +=' \ --replace 'LDFLAGS :=' 'LDFLAGS := -ltls -lssl -lcrypto' ''; separateDebugInfo = true; enableParallelBuilding = true; makeFlags = [ "all" "fdb_java" "fdb_python" ] # Don't compile FDBLibTLS if we don't need it in 6.0 or later; # it gets statically linked in ++ lib.optional (!lib.versionAtLeast version "6.0") [ "fdb_c" ] # Needed environment overrides ++ [ "KVRELEASE=1" "NOSTRIP=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 mkdir -vp $python/lib/${python.libPrefix}/site-packages '' + lib.optionalString (!lib.versionAtLeast version "6.0") '' # we only copy the TLS library on < 6.0, since it's compiled-in otherwise cp -v ./lib/libFDBLibTLS.so $out/libexec/plugins/FDBLibTLS.so '' + '' # C API cp -v ./lib/libfdb_c.so $lib/lib cp -v ./bindings/c/foundationdb/fdb_c.h $dev/include/foundationdb cp -v ./bindings/c/foundationdb/fdb_c_options.g.h $dev/include/foundationdb # java cp -v ./bindings/java/foundationdb-client.jar $lib/share/java/fdb-java.jar # python rm -f ./bindings/python/fdb/*.pth # remove useless files cp -R ./bindings/python/fdb $python/lib/${python.libPrefix}/site-packages/fdb # symlink a copy of the shared object into place, so that impl.py can load it ln -sv $lib/lib/libfdb_c.so $python/lib/${python.libPrefix}/site-packages/fdb/libfdb_c.so # binaries 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" "python" ]; 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.8"; branch = "release-5.2"; sha256 = "1kbmmhk2m9486r4kyjlc7bb3wd50204i0p6dxcmvl6pbp1bs0wlb"; }; foundationdb60 = makeFdb rec { version = "6.0.11pre2716_${substring 0 8 rev}"; branch = "release-6.0"; rev = "9e8c1941ec2cdbba0c584e1acf00906cffd7a67a"; sha256 = "11n5yq68w32hsq5r0g34hg5wvyv9n2lkhw60b9a1vvlw1x41wxld"; }; }