2016-07-31 21:46:48 +02:00
|
|
|
{ stdenv, fetchurl, cmake, pkgconfig, ncurses, zlib, xz, lzo, lz4, bzip2, snappy
|
2018-01-05 15:52:58 +01:00
|
|
|
, libiconv, openssl, pcre, boost, judy, bison, libxml2
|
2018-07-21 02:44:44 +02:00
|
|
|
, libaio, libevent, jemalloc, cracklib, systemd, numactl, perl
|
2015-11-15 20:57:06 +01:00
|
|
|
, fixDarwinDylibNames, cctools, CoreServices
|
2018-06-11 20:42:53 +02:00
|
|
|
, asio, buildEnv, check, scons
|
2015-03-11 22:12:00 +01:00
|
|
|
}:
|
2014-02-24 21:34:57 +01:00
|
|
|
|
2015-03-11 22:12:00 +01:00
|
|
|
with stdenv.lib;
|
2016-07-31 21:46:48 +02:00
|
|
|
|
|
|
|
let # in mariadb # spans the whole file
|
|
|
|
|
2016-08-07 22:44:57 +02:00
|
|
|
mariadb = everything // {
|
|
|
|
inherit client; # libmysqlclient.so in .out, necessary headers in .dev and utils in .bin
|
|
|
|
server = everything; # a full single-output build, including everything in `client` again
|
2017-07-09 17:43:03 +02:00
|
|
|
inherit connector-c; # libmysqlclient.so
|
2017-12-29 18:28:53 +01:00
|
|
|
inherit galera;
|
|
|
|
};
|
|
|
|
|
|
|
|
galeraLibs = buildEnv {
|
|
|
|
name = "galera-lib-inputs-united";
|
|
|
|
paths = [ openssl.out boost check ];
|
2016-07-31 21:46:48 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
common = rec { # attributes common to both builds
|
2018-08-06 05:12:18 +02:00
|
|
|
version = "10.2.16";
|
2014-02-24 21:34:57 +01:00
|
|
|
|
|
|
|
src = fetchurl {
|
2018-06-12 01:31:05 +02:00
|
|
|
urls = [
|
|
|
|
"https://downloads.mariadb.org/f/mariadb-${version}/source/mariadb-${version}.tar.gz"
|
|
|
|
"https://downloads.mariadb.com/MariaDB/mariadb-${version}/source/mariadb-${version}.tar.gz"
|
|
|
|
];
|
2018-08-06 05:12:18 +02:00
|
|
|
sha256 = "1i2dwpp96ywjk147qqpcad8vqcy4rxmfbv2cb8ww3sffpa9yx0n1";
|
2017-07-06 19:02:03 +02:00
|
|
|
name = "mariadb-${version}.tar.gz";
|
2014-02-24 21:34:57 +01:00
|
|
|
};
|
|
|
|
|
2017-07-29 23:34:16 +02:00
|
|
|
nativeBuildInputs = [ cmake pkgconfig ];
|
2017-12-21 09:32:59 +01:00
|
|
|
|
2017-07-29 23:34:16 +02:00
|
|
|
buildInputs = [
|
2018-01-06 19:43:26 +01:00
|
|
|
ncurses openssl zlib pcre jemalloc libiconv
|
2017-07-29 23:34:16 +02:00
|
|
|
] ++ stdenv.lib.optionals stdenv.isLinux [ libaio systemd ]
|
2018-01-06 19:43:26 +01:00
|
|
|
++ stdenv.lib.optionals stdenv.isDarwin [ perl fixDarwinDylibNames cctools CoreServices ];
|
2017-07-29 23:34:16 +02:00
|
|
|
|
2016-07-31 21:46:48 +02:00
|
|
|
prePatch = ''
|
|
|
|
sed -i 's,[^"]*/var/log,/var/log,g' storage/mroonga/vendor/groonga/CMakeLists.txt
|
|
|
|
'';
|
|
|
|
|
2018-05-05 16:46:27 +02:00
|
|
|
patches = [ ./cmake-includedir.patch ./include-dirs-path.patch ]
|
2018-01-06 11:17:59 +01:00
|
|
|
++ stdenv.lib.optional stdenv.cc.isClang ./clang-isfinite.patch;
|
2017-12-25 14:00:03 +01:00
|
|
|
|
2015-03-11 22:12:00 +01:00
|
|
|
cmakeFlags = [
|
|
|
|
"-DBUILD_CONFIG=mysql_release"
|
2016-07-31 21:46:48 +02:00
|
|
|
"-DMANUFACTURER=NixOS.org"
|
2015-03-11 22:12:00 +01:00
|
|
|
"-DDEFAULT_CHARSET=utf8"
|
|
|
|
"-DDEFAULT_COLLATION=utf8_general_ci"
|
2016-07-31 21:46:48 +02:00
|
|
|
"-DSECURITY_HARDENED=ON"
|
|
|
|
|
2015-03-11 22:12:00 +01:00
|
|
|
"-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
|
2016-07-31 21:46:48 +02:00
|
|
|
"-DINSTALL_MYSQLSHAREDIR=share/mysql"
|
|
|
|
|
|
|
|
"-DWITH_ZLIB=system"
|
|
|
|
"-DWITH_SSL=system"
|
2017-12-25 14:00:03 +01:00
|
|
|
"-DWITH_PCRE=system"
|
2016-08-14 20:29:02 +02:00
|
|
|
|
|
|
|
# On Darwin without sandbox, CMake will find the system java and attempt to build with java support, but
|
|
|
|
# then it will fail during the actual build. Let's just disable the flag explicitly until someone decides
|
|
|
|
# to pass in java explicitly. This should have no effect on Linux.
|
|
|
|
"-DCONNECT_WITH_JDBC=OFF"
|
|
|
|
|
|
|
|
# Same as above. Somehow on Darwin CMake decides that we support GSS even though we aren't provding the
|
|
|
|
# library through Nix, and then breaks later on. This should have no effect on Linux.
|
|
|
|
"-DPLUGIN_AUTH_GSSAPI=NO"
|
|
|
|
"-DPLUGIN_AUTH_GSSAPI_CLIENT=NO"
|
2016-07-31 21:46:48 +02:00
|
|
|
]
|
|
|
|
++ optional stdenv.isDarwin "-DCURSES_LIBRARY=${ncurses.out}/lib/libncurses.dylib"
|
2018-02-06 00:16:20 +01:00
|
|
|
++ optional stdenv.hostPlatform.isMusl "-DWITHOUT_TOKUDB=1" # mariadb docs say disable this for musl
|
2016-07-31 21:46:48 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
preConfigure = ''
|
|
|
|
cmakeFlags="$cmakeFlags -DINSTALL_INCLUDEDIR=''${!outputDev}/include/mysql"
|
|
|
|
'';
|
|
|
|
|
|
|
|
postInstall = ''
|
|
|
|
rm "$out"/lib/*.a
|
|
|
|
find "''${!outputBin}/bin" -name '*test*' -delete
|
|
|
|
'';
|
|
|
|
|
2017-07-06 19:02:03 +02:00
|
|
|
passthru.mysqlVersion = "5.7";
|
2016-07-31 21:46:48 +02:00
|
|
|
|
|
|
|
meta = with stdenv.lib; {
|
|
|
|
description = "An enhanced, drop-in replacement for MySQL";
|
|
|
|
homepage = https://mariadb.org/;
|
|
|
|
license = licenses.gpl2;
|
|
|
|
maintainers = with maintainers; [ thoughtpolice wkennington ];
|
|
|
|
platforms = platforms.all;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
client = stdenv.mkDerivation (common // {
|
|
|
|
name = "mariadb-client-${common.version}";
|
|
|
|
|
2016-08-29 02:30:01 +02:00
|
|
|
outputs = [ "bin" "dev" "out" ];
|
2016-07-31 21:46:48 +02:00
|
|
|
|
|
|
|
propagatedBuildInputs = [ openssl zlib ]; # required from mariadb.pc
|
|
|
|
|
|
|
|
cmakeFlags = common.cmakeFlags ++ [
|
|
|
|
"-DWITHOUT_SERVER=ON"
|
|
|
|
];
|
|
|
|
|
|
|
|
preConfigure = common.preConfigure + ''
|
|
|
|
cmakeFlags="$cmakeFlags \
|
2017-12-28 09:50:51 +01:00
|
|
|
-DINSTALL_BINDIR=$bin/bin \
|
|
|
|
-DINSTALL_SCRIPTDIR=$bin/bin \
|
2016-07-31 21:46:48 +02:00
|
|
|
-DINSTALL_SUPPORTFILESDIR=$bin/share/mysql \
|
2017-12-28 09:50:51 +01:00
|
|
|
-DINSTALL_DOCDIR=$bin/share/doc/mysql \
|
|
|
|
-DINSTALL_DOCREADMEDIR=$bin/share/doc/mysql \
|
2016-07-31 21:46:48 +02:00
|
|
|
"
|
|
|
|
'';
|
|
|
|
|
|
|
|
# prevent cycle; it needs to reference $dev
|
|
|
|
postInstall = common.postInstall + ''
|
2017-12-25 14:00:03 +01:00
|
|
|
moveToOutput bin/mysql_config "$dev"
|
2017-07-22 18:54:41 +02:00
|
|
|
moveToOutput bin/mariadb_config "$dev"
|
2016-07-31 21:46:48 +02:00
|
|
|
'';
|
|
|
|
|
|
|
|
enableParallelBuilding = true; # the client should be OK
|
|
|
|
});
|
|
|
|
|
2016-08-07 22:44:57 +02:00
|
|
|
everything = stdenv.mkDerivation (common // {
|
2016-07-31 21:46:48 +02:00
|
|
|
name = "mariadb-${common.version}";
|
|
|
|
|
|
|
|
nativeBuildInputs = common.nativeBuildInputs ++ [ bison ];
|
|
|
|
|
|
|
|
buildInputs = common.buildInputs ++ [
|
|
|
|
xz lzo lz4 bzip2 snappy
|
|
|
|
libxml2 boost judy libevent cracklib
|
treewide: isArm -> isAarch32
Following legacy packing conventions, `isArm` was defined just for
32-bit ARM instruction set. This is confusing to non packagers though,
because Aarch64 is an ARM instruction set.
The official ARM overview for ARMv8[1] is surprisingly not confusing,
given the overall state of affairs for ARM naming conventions, and
offers us a solution. It divides the nomenclature into three levels:
```
ISA: ARMv8 {-A, -R, -M}
/ \
Mode: Aarch32 Aarch64
| / \
Encoding: A64 A32 T32
```
At the top is the overall v8 instruction set archicture. Second are the
two modes, defined by bitwidth but differing in other semantics too, and
buttom are the encodings, (hopefully?) isomorphic if they encode the
same mode.
The 32 bit encodings are mostly backwards compatible with previous
non-Thumb and Thumb encodings, and if so we can pun the mode names to
instead mean "sets of compatable or isomorphic encodings", and then
voilà we have nice names for 32-bit and 64-bit arm instruction sets
which do not use the word ARM so as to not confused either laymen or
experienced ARM packages.
[1]: https://developer.arm.com/products/architecture/a-profile
2018-03-20 03:41:06 +01:00
|
|
|
] ++ optional (stdenv.isLinux && !stdenv.isAarch32) numactl;
|
2016-07-31 21:46:48 +02:00
|
|
|
|
|
|
|
cmakeFlags = common.cmakeFlags ++ [
|
2015-03-11 22:12:00 +01:00
|
|
|
"-DMYSQL_DATADIR=/var/lib/mysql"
|
|
|
|
"-DINSTALL_SYSCONFDIR=etc/mysql"
|
|
|
|
"-DINSTALL_INFODIR=share/mysql/docs"
|
|
|
|
"-DINSTALL_MANDIR=share/man"
|
|
|
|
"-DINSTALL_PLUGINDIR=lib/mysql/plugin"
|
|
|
|
"-DINSTALL_SCRIPTDIR=bin"
|
|
|
|
"-DINSTALL_SUPPORTFILESDIR=share/mysql"
|
2016-07-31 21:46:48 +02:00
|
|
|
"-DINSTALL_DOCREADMEDIR=share/doc/mysql"
|
|
|
|
"-DINSTALL_DOCDIR=share/doc/mysql"
|
2015-03-11 22:12:00 +01:00
|
|
|
"-DINSTALL_SHAREDIR=share/mysql"
|
2018-01-01 09:45:45 +01:00
|
|
|
"-DINSTALL_MYSQLTESTDIR=OFF"
|
|
|
|
"-DINSTALL_SQLBENCHDIR=OFF"
|
2016-07-31 21:46:48 +02:00
|
|
|
|
|
|
|
"-DENABLED_LOCAL_INFILE=ON"
|
2015-03-11 22:12:00 +01:00
|
|
|
"-DWITH_READLINE=ON"
|
|
|
|
"-DWITH_EXTRA_CHARSETS=complex"
|
|
|
|
"-DWITH_EMBEDDED_SERVER=ON"
|
|
|
|
"-DWITH_ARCHIVE_STORAGE_ENGINE=1"
|
|
|
|
"-DWITH_BLACKHOLE_STORAGE_ENGINE=1"
|
|
|
|
"-DWITH_INNOBASE_STORAGE_ENGINE=1"
|
|
|
|
"-DWITH_PARTITION_STORAGE_ENGINE=1"
|
|
|
|
"-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1"
|
|
|
|
"-DWITHOUT_FEDERATED_STORAGE_ENGINE=1"
|
2015-10-17 23:14:34 +02:00
|
|
|
"-DWITH_WSREP=ON"
|
2017-12-29 18:28:53 +01:00
|
|
|
"-DWITH_INNODB_DISALLOW_WRITES=ON"
|
2015-06-19 08:47:08 +02:00
|
|
|
] ++ stdenv.lib.optionals stdenv.isDarwin [
|
|
|
|
"-DWITHOUT_OQGRAPH_STORAGE_ENGINE=1"
|
|
|
|
"-DWITHOUT_TOKUDB=1"
|
|
|
|
];
|
2014-02-24 21:34:57 +01:00
|
|
|
|
2016-07-31 21:46:48 +02:00
|
|
|
postInstall = common.postInstall + ''
|
2018-01-01 09:45:45 +01:00
|
|
|
rm -r "$out"/data # Don't need testing data
|
2016-07-31 21:46:48 +02:00
|
|
|
rm "$out"/share/man/man1/mysql-test-run.pl.1
|
2017-12-28 09:50:51 +01:00
|
|
|
rm "$out"/bin/rcmysql
|
2018-06-11 20:04:25 +02:00
|
|
|
'' + optionalString (! stdenv.isDarwin) ''
|
2017-12-29 18:28:53 +01:00
|
|
|
sed -i 's/-mariadb/-mysql/' "$out"/bin/galera_new_cluster
|
2014-04-30 16:54:35 +02:00
|
|
|
'';
|
2017-07-30 22:08:19 +02:00
|
|
|
|
2018-01-06 11:17:59 +01:00
|
|
|
CXXFLAGS = optionalString stdenv.isi686 "-fpermissive"
|
|
|
|
+ optionalString stdenv.isDarwin " -std=c++11";
|
2016-07-31 21:46:48 +02:00
|
|
|
});
|
2015-04-01 21:36:19 +02:00
|
|
|
|
2017-07-09 17:43:03 +02:00
|
|
|
connector-c = stdenv.mkDerivation rec {
|
|
|
|
name = "mariadb-connector-c-${version}";
|
2018-06-10 14:24:27 +02:00
|
|
|
version = "2.3.6";
|
2017-07-09 17:43:03 +02:00
|
|
|
|
|
|
|
src = fetchurl {
|
2018-06-12 01:31:05 +02:00
|
|
|
url = "https://downloads.mariadb.org/interstitial/connector-c-${version}/mariadb-connector-c-${version}-src.tar.gz/from/http%3A//nyc2.mirrors.digitalocean.com/mariadb/";
|
2018-06-10 14:24:27 +02:00
|
|
|
sha256 = "15iy5iqp0njbwbn086x2dq8qnbkaci7ydvi84cf5z8fxvljis9vb";
|
2017-07-09 17:43:03 +02:00
|
|
|
name = "mariadb-connector-c-${version}-src.tar.gz";
|
|
|
|
};
|
|
|
|
|
|
|
|
# outputs = [ "dev" "out" ]; FIXME: cmake variables don't allow that < 3.0
|
2017-08-24 03:55:32 +02:00
|
|
|
cmakeFlags = [
|
|
|
|
"-DWITH_EXTERNAL_ZLIB=ON"
|
|
|
|
"-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
|
|
|
|
];
|
2017-07-09 17:43:03 +02:00
|
|
|
|
2018-01-27 22:52:33 +01:00
|
|
|
# The cmake setup-hook uses $out/lib by default, this is not the case here.
|
|
|
|
preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
|
|
|
|
cmakeFlagsArray+=("-DCMAKE_INSTALL_NAME_DIR=$out/lib/mariadb")
|
|
|
|
'';
|
|
|
|
|
2017-07-09 17:43:03 +02:00
|
|
|
nativeBuildInputs = [ cmake ];
|
|
|
|
propagatedBuildInputs = [ openssl zlib ];
|
2018-01-06 19:43:26 +01:00
|
|
|
buildInputs = [ libiconv ];
|
2017-07-09 17:43:03 +02:00
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
postFixup = ''
|
|
|
|
ln -sv mariadb_config $out/bin/mysql_config
|
2017-12-25 15:59:05 +01:00
|
|
|
ln -sv mariadb $out/lib/mysql
|
|
|
|
ln -sv mariadb $out/include/mysql
|
2017-07-09 17:43:03 +02:00
|
|
|
'';
|
|
|
|
|
|
|
|
meta = with stdenv.lib; {
|
|
|
|
description = "Client library that can be used to connect to MySQL or MariaDB";
|
|
|
|
license = licenses.lgpl21;
|
|
|
|
maintainers = with maintainers; [ globin ];
|
|
|
|
platforms = platforms.all;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2017-12-29 18:28:53 +01:00
|
|
|
galera = stdenv.mkDerivation rec {
|
|
|
|
name = "mariadb-galera-${version}";
|
|
|
|
version = "25.3.23";
|
|
|
|
|
|
|
|
src = fetchurl {
|
|
|
|
url = "https://mirrors.nxthost.com/mariadb/mariadb-10.2.14/galera-${version}/src/galera-${version}.tar.gz";
|
|
|
|
sha256 = "11pfc85z29jk0h6g6bmi3hdv4in4yb00xsr2r0qm1b0y7m2wq3ra";
|
|
|
|
};
|
|
|
|
|
2018-06-11 20:42:53 +02:00
|
|
|
buildInputs = [ asio boost check openssl scons ];
|
2017-12-29 18:28:53 +01:00
|
|
|
|
|
|
|
patchPhase = ''
|
|
|
|
substituteInPlace SConstruct \
|
|
|
|
--replace "boost_library_path = '''" "boost_library_path = '${boost}/lib'"
|
|
|
|
'';
|
|
|
|
|
|
|
|
preConfigure = ''
|
2018-06-11 20:42:53 +02:00
|
|
|
export CPPFLAGS="-I${asio}/include -I${boost.dev}/include -I${check}/include -I${openssl.dev}/include"
|
2017-12-29 18:28:53 +01:00
|
|
|
export LIBPATH="${galeraLibs}/lib"
|
|
|
|
'';
|
|
|
|
|
|
|
|
buildPhase = ''
|
|
|
|
scons -j$NIX_BUILD_CORES ssl=1 system_asio=1 strict_build_flags=0
|
|
|
|
'';
|
|
|
|
|
|
|
|
installPhase = ''
|
|
|
|
# copied with modifications from scripts/packages/freebsd.sh
|
|
|
|
GALERA_LICENSE_DIR="$share/licenses/${name}"
|
|
|
|
install -d $out/{bin,lib/galera,share/doc/galera,$GALERA_LICENSE_DIR}
|
|
|
|
install -m 555 "garb/garbd" "$out/bin/garbd"
|
|
|
|
install -m 444 "libgalera_smm.so" "$out/lib/galera/libgalera_smm.so"
|
|
|
|
install -m 444 "scripts/packages/README" "$out/share/doc/galera/"
|
|
|
|
install -m 444 "scripts/packages/README-MySQL" "$out/share/doc/galera/"
|
|
|
|
install -m 444 "scripts/packages/freebsd/LICENSE" "$out/$GALERA_LICENSE_DIR"
|
|
|
|
install -m 444 "LICENSE" "$out/$GALERA_LICENSE_DIR/GPLv2"
|
|
|
|
install -m 444 "asio/LICENSE_1_0.txt" "$out/$GALERA_LICENSE_DIR/LICENSE.asio"
|
|
|
|
install -m 444 "www.evanjones.ca/LICENSE" "$out/$GALERA_LICENSE_DIR/LICENSE.crc32c"
|
|
|
|
install -m 444 "chromium/LICENSE" "$out/$GALERA_LICENSE_DIR/LICENSE.chromium"
|
|
|
|
'';
|
|
|
|
|
|
|
|
meta = {
|
|
|
|
description = "Galera 3 wsrep provider library";
|
|
|
|
homepage = http://galeracluster.com/;
|
|
|
|
license = licenses.lgpl2;
|
|
|
|
maintainers = with maintainers; [ izorkin ];
|
|
|
|
platforms = platforms.all;
|
|
|
|
};
|
|
|
|
};
|
2016-07-31 21:46:48 +02:00
|
|
|
in mariadb
|