nixpkgs/pkgs/servers/nosql/mongodb/mongodb.nix
Andreas Rammhold cd20497c66
mongodb: pick python version from scons
The python modules that we to the enviroment should always come from the
same python version as scons as otherwise they can't be loaded.

This unbreaks the build of mongodb 4.2 which pinned python to 3.8 while
our python attribute moved on to 3.9 which is what scons uses now.
2021-08-14 13:42:01 +02:00

137 lines
4.1 KiB
Nix

{ lib, stdenv, fetchurl, sconsPackages, boost, gperftools, pcre-cpp, snappy, zlib, libyamlcpp
, sasl, openssl, libpcap, curl, Security, CoreFoundation, cctools }:
# Note:
# The command line tools are written in Go as part of a different package (mongodb-tools)
with lib;
{ version, sha256, patches ? []
, license ? lib.licenses.sspl
}@args:
let
variants = if versionAtLeast version "4.2"
then rec { python = scons.python.withPackages (ps: with ps; [ pyyaml cheetah3 psutil setuptools ]);
scons = sconsPackages.scons_latest;
mozjsVersion = "60";
mozjsReplace = "defined(HAVE___SINCOS)";
}
else rec { python = scons.python.withPackages (ps: with ps; [ pyyaml typing cheetah ]);
scons = sconsPackages.scons_3_1_2;
mozjsVersion = "45";
mozjsReplace = "defined(HAVE_SINCOS)";
};
system-libraries = [
"boost"
"pcre"
"snappy"
"yaml"
"zlib"
#"asio" -- XXX use package?
#"stemmer" -- not nice to package yet (no versioning, no makefile, no shared libs).
#"valgrind" -- mongodb only requires valgrind.h, which is vendored in the source.
#"wiredtiger"
] ++ optionals stdenv.isLinux [ "tcmalloc" ];
inherit (lib) systems subtractLists;
in stdenv.mkDerivation rec {
inherit version;
pname = "mongodb";
src = fetchurl {
url = "https://fastdl.mongodb.org/src/mongodb-src-r${version}.tar.gz";
inherit sha256;
};
nativeBuildInputs = [ variants.scons ];
buildInputs = [
boost
curl
gperftools
libpcap
libyamlcpp
openssl
pcre-cpp
variants.python
sasl
snappy
zlib
] ++ lib.optionals stdenv.isDarwin [ Security CoreFoundation cctools ];
# MongoDB keeps track of its build parameters, which tricks nix into
# keeping dependencies to build inputs in the final output.
# We remove the build flags from buildInfo data.
inherit patches;
postPatch = ''
# fix environment variable reading
substituteInPlace SConstruct \
--replace "env = Environment(" "env = Environment(ENV = os.environ,"
'' + lib.optionalString stdenv.isDarwin ''
substituteInPlace src/third_party/mozjs-${variants.mozjsVersion}/extract/js/src/jsmath.cpp --replace '${variants.mozjsReplace}' 0
substituteInPlace src/third_party/s2/s1angle.cc --replace drem remainder
substituteInPlace src/third_party/s2/s1interval.cc --replace drem remainder
substituteInPlace src/third_party/s2/s2cap.cc --replace drem remainder
substituteInPlace src/third_party/s2/s2latlng.cc --replace drem remainder
substituteInPlace src/third_party/s2/s2latlngrect.cc --replace drem remainder
'' + lib.optionalString stdenv.isi686 ''
# don't fail by default on i686
substituteInPlace src/mongo/db/storage/storage_options.h \
--replace 'engine("wiredTiger")' 'engine("mmapv1")'
'';
NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang
"-Wno-unused-command-line-argument";
sconsFlags = [
"--release"
"--ssl"
#"--rocksdb" # Don't have this packaged yet
"--wiredtiger=on"
"--js-engine=mozjs"
"--use-sasl-client"
"--disable-warnings-as-errors"
"VARIANT_DIR=nixos" # Needed so we don't produce argument lists that are too long for gcc / ld
] ++ map (lib: "--use-system-${lib}") system-libraries;
preBuild = ''
sconsFlags+=" CC=$CC"
sconsFlags+=" CXX=$CXX"
'' + optionalString stdenv.isAarch64 ''
sconsFlags+=" CCFLAGS='-march=armv8-a+crc'"
'';
preInstall = ''
mkdir -p "$out/lib"
'';
postInstall = ''
rm -f "$out/bin/install_compass" || true
'';
doInstallCheck = true;
installCheckPhase = ''
runHook preInstallCheck
"$out/bin/mongo" --version
runHook postInstallCheck
'';
prefixKey = "--prefix=";
enableParallelBuilding = true;
hardeningEnable = [ "pie" ];
meta = {
description = "A scalable, high-performance, open source NoSQL database";
homepage = "http://www.mongodb.org";
inherit license;
maintainers = with maintainers; [ bluescreen303 offline cstrahan ];
platforms = subtractLists systems.doubles.i686 systems.doubles.unix;
};
}