about summary refs log tree commit diff
path: root/pkgs/tools/networking/maxscale/default.nix
blob: c4e16ef8b1ced2313d5ac5023262e8b9f2da395e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glibc
, bison, curl, flex, gperftools, jansson, jemalloc, kerberos, lua, libmysqlclient
, ncurses, openssl, pcre, pcre2, perl, rabbitmq-c, sqlite, tcl
, libaio, libedit, libtool, libui, libuuid, zlib
}:

stdenv.mkDerivation rec {
  pname = "maxscale";
  version = "2.1.17";

  src = fetchFromGitHub {
    owner = "mariadb-corporation";
    repo = "MaxScale";
    rev = "${pname}-${version}";
    sha256 = "161kc6aqqj3z509q4qwvsd86h06hlyzdask4gawn2ij0h3ca58q6";
  };

  nativeBuildInputs = [ cmake pkg-config ];

  buildInputs = [
    bison curl flex gperftools jansson jemalloc kerberos lua libmysqlclient
    ncurses openssl pcre pcre2 perl rabbitmq-c sqlite tcl
    libaio libedit libtool libui libuuid zlib
  ];

  patches = [ ./getopt.patch ];

  preConfigure = ''
    for i in `grep -l -R '#include <getopt.h>' .`; do
      substituteInPlace $i --replace "#include <getopt.h>" "#include <${glibc.dev}/include/getopt.h>"
    done
 '';

  cmakeFlags = [
    "-DUSE_C99=YES"
    "-DDEFAULT_ADMIN_USER=root"
    "-DWITH_MAXSCALE_CNF=YES"
    "-DSTATIC_EMBEDDED=YES"
    "-DBUILD_RABBITMQ=YES"
    "-DBUILD_BINLOG=YES"
    "-DBUILD_CDC=NO"
    "-DBUILD_MMMON=YES"
    "-DBUILD_LUAFILTER=YES"
    "-DLUA_LIBRARIES=${lua}/lib"
    "-DLUA_INCLUDE_DIR=${lua}/include"
    "-DGCOV=NO"
    "-DWITH_SCRIPTS=OFF"
    "-DBUILD_TESTS=NO"
    "-DBUILD_TOOLS=NO"
    "-DPROFILE=NO"
    "-DWITH_TCMALLOC=YES"
    "-DWITH_JEMALLOC=YES"
    "-DINSTALL_EXPERIMENTAL=YES"
    "-DTARGET_COMPONENT=all"
  ];

  CFLAGS = "-std=gnu99";

  enableParallelBuilding = false;

  dontStrip = true;

  postInstall = ''
    find $out/bin -type f -perm -0100 | while read f1; do
      patchelf \
        --set-rpath "$(patchelf --print-rpath $f1):${libmysqlclient}/lib/mariadb:$out/lib/maxscale" \
        --set-interpreter "$(cat ${stdenv.cc}/nix-support/dynamic-linker)" $f1 \
        && patchelf --shrink-rpath $f1
    done

    find $out/lib/maxscale -type f -perm -0100 | while read f2; do
      patchelf \
        --set-rpath "$(patchelf --print-rpath $f2)":$out/lib/maxscale $f2
    done

    mv $out/share/maxscale/create_grants $out/bin
    rm -rf $out/{etc,var}
  '';

  meta = with lib; {
     description = "MaxScale database proxy extends MariaDB Server's high availability";
     homepage = "https://mariadb.com/products/technology/maxscale";
     license = licenses.bsl11;
     platforms = platforms.linux;
     maintainers = with maintainers; [ izorkin ];
     broken = true;
 };
}