about summary refs log tree commit diff
path: root/pkgs/servers/foundationdb/default.nix
diff options
context:
space:
mode:
authorAustin Seipp <aseipp@pobox.com>2019-05-02 19:46:55 -0500
committerAustin Seipp <aseipp@pobox.com>2019-05-15 09:54:07 -0500
commit34e15b1c73553e958d8357681f6fb8ff8711646c (patch)
tree8f8068b30aee576cc26dd2ff23c116583f60748a /pkgs/servers/foundationdb/default.nix
parentb71c308591e1bfc3708c31dc1a94fcae636b5557 (diff)
downloadnixlib-34e15b1c73553e958d8357681f6fb8ff8711646c.tar
nixlib-34e15b1c73553e958d8357681f6fb8ff8711646c.tar.gz
nixlib-34e15b1c73553e958d8357681f6fb8ff8711646c.tar.bz2
nixlib-34e15b1c73553e958d8357681f6fb8ff8711646c.tar.lz
nixlib-34e15b1c73553e958d8357681f6fb8ff8711646c.tar.xz
nixlib-34e15b1c73553e958d8357681f6fb8ff8711646c.tar.zst
nixlib-34e15b1c73553e958d8357681f6fb8ff8711646c.zip
foundationdb: refactor 'vsmake' build system into its own file [NFC]
FoundationDB is currently in the process of migrating to CMake, and it
will eventually be the only build system. In preparation for this, split
off the current (somewhat nasty) builder into its own file, and allow
default.nix to be more declarative -- containing only the main supported
versions.

Similarly, a cmake.nix file will be added later.

There is no functional change here (NFC), only an organizational change
(file moves, no hash changes).

Signed-off-by: Austin Seipp <aseipp@pobox.com>
Diffstat (limited to 'pkgs/servers/foundationdb/default.nix')
-rw-r--r--pkgs/servers/foundationdb/default.nix176
1 files changed, 5 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";