about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/servers/foundationdb/default.nix176
-rw-r--r--pkgs/servers/foundationdb/vsmake.nix177
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