diff options
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/servers/foundationdb/default.nix | 176 | ||||
-rw-r--r-- | pkgs/servers/foundationdb/vsmake.nix | 177 |
2 files changed, 182 insertions, 171 deletions
diff --git a/pkgs/servers/foundationdb/default.nix b/pkgs/servers/foundationdb/default.nix index 86c1b9065a99..f6a6329adb50 100644 --- a/pkgs/servers/foundationdb/default.nix +++ b/pkgs/servers/foundationdb/default.nix @@ -3,190 +3,24 @@ , which, findutils, m4, gawk , python, openjdk, mono, libressl -}: +}@args: 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 - - # if an release is unofficial/a prerelease, then make sure this is set - , officialRelease ? true - }: stdenv.mkDerivation rec { - name = "foundationdb-${version}"; - inherit version; - - src = fetchFromGitHub { - owner = "apple"; - repo = "foundationdb"; - inherit rev sha256; - }; - - nativeBuildInputs = [ python openjdk gawk which m4 findutils mono ]; - buildInputs = [ 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) - # Versions less than 6.0 have a busted Python 3 build due to an outdated - # use of 'print'. Also apply an update to the six module with many bugfixes, - # which is in 6.0+ as well - ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch { - name = "update-python-six.patch"; - url = "https://github.com/apple/foundationdb/commit/4bd9efc4fc74917bc04b07a84eb065070ea7edb2.patch"; - sha256 = "030679lmc86f1wzqqyvxnwjyfrhh54pdql20ab3iifqpp9i5mi85"; - })) - ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch { - name = "import-for-python-print.patch"; - url = "https://github.com/apple/foundationdb/commit/ded17c6cd667f39699cf663c0e87fe01e996c153.patch"; - sha256 = "11y434w68cpk7shs2r22hyrpcrqi8vx02cw7v5x79qxvnmdxv2an"; - })) - ; - - 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" - ] ++ lib.optional officialRelease [ "RELEASE=true" ]; - - # 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 - - '' + 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 - cp -v ./fdbclient/vexillographer/fdb.options $dev/include/foundationdb - - # java - cp -v ./bindings/java/foundationdb-client.jar $lib/share/java/fdb-java.jar - - # python - cp LICENSE ./bindings/python - substitute ./bindings/python/setup.py.in ./bindings/python/setup.py \ - --replace 'VERSION' "${version}" - rm -f ./bindings/python/setup.py.in - rm -f ./bindings/python/fdb/*.pth # remove useless files - rm -f ./bindings/python/*.rst ./bindings/python/*.mk - - cp -R ./bindings/python/ tmp-pythonsrc/ - tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/ - - # 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" "pythonsrc" ]; - - meta = with stdenv.lib; { - description = "Open source, distributed, transactional key-value store"; - homepage = https://www.foundationdb.org; - license = licenses.asl20; - platforms = [ "x86_64-linux" ]; - maintainers = with maintainers; [ thoughtpolice ]; - }; - }; - + vsmake = import ./vsmake.nix args; in with builtins; { - - foundationdb51 = makeFdb rec { + foundationdb51 = vsmake rec { version = "5.1.7"; branch = "release-5.1"; sha256 = "1rc472ih24f9s5g3xmnlp3v62w206ny0pvvw02bzpix2sdrpbp06"; }; - foundationdb52 = makeFdb rec { + foundationdb52 = vsmake rec { version = "5.2.8"; branch = "release-5.2"; sha256 = "1kbmmhk2m9486r4kyjlc7bb3wd50204i0p6dxcmvl6pbp1bs0wlb"; }; - foundationdb60 = makeFdb rec { + foundationdb60 = vsmake rec { version = "6.0.18"; branch = "release-6.0"; sha256 = "0q1mscailad0z7zf1nypv4g7gx3damfp45nf8nzyq47nsw5gz69p"; diff --git a/pkgs/servers/foundationdb/vsmake.nix b/pkgs/servers/foundationdb/vsmake.nix new file mode 100644 index 000000000000..c782e0e98313 --- /dev/null +++ b/pkgs/servers/foundationdb/vsmake.nix @@ -0,0 +1,177 @@ +# This builder is for FoundationDB's original, somewhat strange visual studio + +# make build system. In FoundationDB 6.1 and later, there's a new CMake system +# (which will eventually become the default version.) +{ stdenv49 +, lib, fetchurl, fetchpatch, fetchFromGitHub + +, which, findutils, m4, gawk +, python, openjdk, mono, 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 + + # if an release is unofficial/a prerelease, then make sure this is set + , officialRelease ? true + }: stdenv.mkDerivation rec { + name = "foundationdb-${version}"; + inherit version; + + src = fetchFromGitHub { + owner = "apple"; + repo = "foundationdb"; + inherit rev sha256; + }; + + nativeBuildInputs = [ python openjdk gawk which m4 findutils mono ]; + buildInputs = [ 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) + # Versions less than 6.0 have a busted Python 3 build due to an outdated + # use of 'print'. Also apply an update to the six module with many bugfixes, + # which is in 6.0+ as well + ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch { + name = "update-python-six.patch"; + url = "https://github.com/apple/foundationdb/commit/4bd9efc4fc74917bc04b07a84eb065070ea7edb2.patch"; + sha256 = "030679lmc86f1wzqqyvxnwjyfrhh54pdql20ab3iifqpp9i5mi85"; + })) + ++ (lib.optional (!lib.versionAtLeast version "6.0") (fetchpatch { + name = "import-for-python-print.patch"; + url = "https://github.com/apple/foundationdb/commit/ded17c6cd667f39699cf663c0e87fe01e996c153.patch"; + sha256 = "11y434w68cpk7shs2r22hyrpcrqi8vx02cw7v5x79qxvnmdxv2an"; + })) + ; + + 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" + ] ++ lib.optional officialRelease [ "RELEASE=true" ]; + + # 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 + + '' + 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 + cp -v ./fdbclient/vexillographer/fdb.options $dev/include/foundationdb + + # java + cp -v ./bindings/java/foundationdb-client.jar $lib/share/java/fdb-java.jar + + # python + cp LICENSE ./bindings/python + substitute ./bindings/python/setup.py.in ./bindings/python/setup.py \ + --replace 'VERSION' "${version}" + rm -f ./bindings/python/setup.py.in + rm -f ./bindings/python/fdb/*.pth # remove useless files + rm -f ./bindings/python/*.rst ./bindings/python/*.mk + + cp -R ./bindings/python/ tmp-pythonsrc/ + tar -zcf $pythonsrc --transform s/tmp-pythonsrc/python-foundationdb/ ./tmp-pythonsrc/ + + # 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" "pythonsrc" ]; + + meta = with stdenv.lib; { + description = "Open source, distributed, transactional key-value store"; + homepage = https://www.foundationdb.org; + license = licenses.asl20; + platforms = [ "x86_64-linux" ]; + maintainers = with maintainers; [ thoughtpolice ]; + }; + }; +in makeFdb |