diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/sql/mariadb/default.nix')
-rw-r--r-- | nixpkgs/pkgs/servers/sql/mariadb/default.nix | 154 |
1 files changed, 80 insertions, 74 deletions
diff --git a/nixpkgs/pkgs/servers/sql/mariadb/default.nix b/nixpkgs/pkgs/servers/sql/mariadb/default.nix index 767565dd5820..94cdf801ff29 100644 --- a/nixpkgs/pkgs/servers/sql/mariadb/default.nix +++ b/nixpkgs/pkgs/servers/sql/mariadb/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, fetchFromGitHub, cmake, pkgconfig, ncurses, zlib, xz, lzo, lz4, bzip2, snappy -, libiconv, openssl, pcre, boost, judy, bison, libxml2 +, libiconv, openssl, pcre, boost, judy, bison, libxml2, libkrb5 , libaio, libevent, jemalloc, cracklib, systemd, numactl, perl , fixDarwinDylibNames, cctools, CoreServices , asio, buildEnv, check, scons @@ -9,6 +9,8 @@ with stdenv.lib; let # in mariadb # spans the whole file +libExt = stdenv.hostPlatform.extensions.sharedLibrary; + 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 @@ -22,14 +24,14 @@ galeraLibs = buildEnv { }; common = rec { # attributes common to both builds - version = "10.2.17"; + version = "10.3.15"; src = fetchurl { 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" ]; - sha256 = "09xy6mgnz22mz8zgqlnddn8nzgs9xlz8lai4a7aa8x78in7hgcz7"; + sha256 = "0s399nxk2z8fgdr527p64y74zwjc3gpv7psf1n2r6ksl9njr3wr7"; name = "mariadb-${version}.tar.gz"; }; @@ -37,52 +39,54 @@ common = rec { # attributes common to both builds buildInputs = [ ncurses openssl zlib pcre jemalloc libiconv - ] ++ stdenv.lib.optionals stdenv.isLinux [ libaio systemd ] + ] ++ stdenv.lib.optionals stdenv.isLinux [ libaio systemd libkrb5 ] ++ stdenv.lib.optionals stdenv.isDarwin [ perl fixDarwinDylibNames cctools CoreServices ]; prePatch = '' sed -i 's,[^"]*/var/log,/var/log,g' storage/mroonga/vendor/groonga/CMakeLists.txt ''; - patches = [ ./cmake-includedir.patch ./include-dirs-path.patch ] - ++ stdenv.lib.optional stdenv.cc.isClang ./clang-isfinite.patch; + patches = [ ./cmake-includedir.patch ] + ++ optionals stdenv.isDarwin [ + # Derived from "Fixed c++11 narrowing error" + # https://github.com/MariaDB/server/commit/a0dfefb0f8a47145e599a5f1b0dc576fa7634b92 + ./fix-c++11-narrowing-error.patch + ]; cmakeFlags = [ "-DBUILD_CONFIG=mysql_release" "-DMANUFACTURER=NixOS.org" - "-DDEFAULT_CHARSET=utf8" - "-DDEFAULT_COLLATION=utf8_general_ci" + "-DDEFAULT_CHARSET=utf8mb4" + "-DDEFAULT_COLLATION=utf8mb4_unicode_ci" "-DSECURITY_HARDENED=ON" - "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock" + "-DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock" + "-DINSTALL_BINDIR=bin" + "-DINSTALL_DOCDIR=share/doc/mysql" + "-DINSTALL_DOCREADMEDIR=share/doc/mysql" + "-DINSTALL_INCLUDEDIR=include/mysql" + "-DINSTALL_INFODIR=share/mysql/docs" + "-DINSTALL_MANDIR=share/man" "-DINSTALL_MYSQLSHAREDIR=share/mysql" + "-DINSTALL_SCRIPTDIR=bin" + "-DINSTALL_SUPPORTFILESDIR=share/doc/mysql" + "-DINSTALL_MYSQLTESTDIR=OFF" + "-DINSTALL_SQLBENCHDIR=OFF" "-DWITH_ZLIB=system" "-DWITH_SSL=system" "-DWITH_PCRE=system" - + "-DWITH_SAFEMALLOC=OFF" + "-DEMBEDDED_LIBRARY=OFF" + ] ++ optional stdenv.isDarwin [ # 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. + # to pass in java explicitly. "-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" - ] - ++ optional stdenv.isDarwin "-DCURSES_LIBRARY=${ncurses.out}/lib/libncurses.dylib" - ++ optional stdenv.hostPlatform.isMusl "-DWITHOUT_TOKUDB=1" # mariadb docs say disable this for musl - ; - - preConfigure = '' - cmakeFlags="$cmakeFlags -DINSTALL_INCLUDEDIR=''${!outputDev}/include/mysql" - ''; - - postInstall = '' - rm "$out"/lib/*.a - find "''${!outputBin}/bin" -name '*test*' -delete - ''; + "-DCURSES_LIBRARY=${ncurses.out}/lib/libncurses.dylib" + ] ++ optional stdenv.hostPlatform.isMusl [ + "-DWITHOUT_TOKUDB=1" # mariadb docs say disable this for musl + ]; passthru.mysqlVersion = "5.7"; @@ -98,28 +102,27 @@ common = rec { # attributes common to both builds client = stdenv.mkDerivation (common // { name = "mariadb-client-${common.version}"; - outputs = [ "bin" "dev" "out" ]; + outputs = [ "out" "dev" "man" ]; propagatedBuildInputs = [ openssl zlib ]; # required from mariadb.pc + patches = [ ./cmake-plugin-includedir.patch ]; + cmakeFlags = common.cmakeFlags ++ [ "-DWITHOUT_SERVER=ON" + "-DWITH_WSREP=OFF" ]; - preConfigure = common.preConfigure + '' - cmakeFlags="$cmakeFlags \ - -DINSTALL_BINDIR=$bin/bin \ - -DINSTALL_SCRIPTDIR=$bin/bin \ - -DINSTALL_SUPPORTFILESDIR=$bin/share/mysql \ - -DINSTALL_DOCDIR=$bin/share/doc/mysql \ - -DINSTALL_DOCREADMEDIR=$bin/share/doc/mysql \ - " - ''; - - # prevent cycle; it needs to reference $dev - postInstall = common.postInstall + '' - moveToOutput bin/mysql_config "$dev" - moveToOutput bin/mariadb_config "$dev" + postInstall = '' + rm -r "$out"/share/mysql + rm -r "$out"/share/doc + rm "$out"/bin/{msql2mysql,mysql_plugin,mytop,wsrep_sst_rsync_wan,mysql_config,mariadb_config} + rm "$out"/lib/plugin/{daemon_example.ini,dialog.so,mysql_clear_password.so,sha256_password.so} + libmysqlclient_path=$(readlink -f $out/lib/libmysqlclient${libExt}) + rm "$out"/lib/{libmariadb${libExt},libmysqlclient${libExt},libmysqlclient_r${libExt}} + mv "$libmysqlclient_path" "$out"/lib/libmysqlclient${libExt} + ln -sv libmysqlclient${libExt} "$out"/lib/libmysqlclient_r${libExt} + mkdir -p "$dev"/lib && mv "$out"/lib/{libmariadbclient.a,libmysqlclient.a,libmysqlclient_r.a,libmysqlservices.a} "$dev"/lib ''; enableParallelBuilding = true; # the client should be OK @@ -128,6 +131,8 @@ client = stdenv.mkDerivation (common // { everything = stdenv.mkDerivation (common // { name = "mariadb-${common.version}"; + outputs = [ "out" "dev" "man" ]; + nativeBuildInputs = common.nativeBuildInputs ++ [ bison ]; buildInputs = common.buildInputs ++ [ @@ -137,45 +142,46 @@ everything = stdenv.mkDerivation (common // { cmakeFlags = common.cmakeFlags ++ [ "-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" - "-DINSTALL_DOCREADMEDIR=share/doc/mysql" - "-DINSTALL_DOCDIR=share/doc/mysql" - "-DINSTALL_SHAREDIR=share/mysql" - "-DINSTALL_MYSQLTESTDIR=OFF" - "-DINSTALL_SQLBENCHDIR=OFF" - - "-DENABLED_LOCAL_INFILE=ON" + "-DENABLED_LOCAL_INFILE=OFF" "-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" + "-DWITH_EXTRA_CHARSETS=all" + "-DWITH_EMBEDDED_SERVER=OFF" + "-DWITH_UNIT_TESTS=OFF" "-DWITH_WSREP=ON" "-DWITH_INNODB_DISALLOW_WRITES=ON" + "-DWITHOUT_EXAMPLE=1" + "-DWITHOUT_FEDERATED=1" ] ++ stdenv.lib.optionals stdenv.isDarwin [ - "-DWITHOUT_OQGRAPH_STORAGE_ENGINE=1" + "-DWITHOUT_OQGRAPH=1" "-DWITHOUT_TOKUDB=1" ]; - postInstall = common.postInstall + '' + preConfigure = '' + cmakeFlags="$cmakeFlags \ + -DINSTALL_SHAREDIR=$dev/share/mysql + -DINSTALL_SUPPORTFILESDIR=$dev/share/mysql" + ''; + + postInstall = '' + chmod +x "$out"/bin/wsrep_sst_common rm -r "$out"/data # Don't need testing data - rm "$out"/share/man/man1/mysql-test-run.pl.1 - rm "$out"/bin/rcmysql + rm "$out"/bin/{mysql_find_rows,mysql_waitpid,mysqlaccess,mysqladmin,mysqlbinlog,mysqlcheck} + rm "$out"/bin/{mysqldump,mysqlhotcopy,mysqlimport,mysqlshow,mysqlslap,mysqltest} + ${ # We don't build with GSSAPI on Darwin + optionalString (! stdenv.isDarwin) '' + rm "$out"/lib/mysql/plugin/auth_gssapi_client.so + '' + } + rm "$out"/lib/mysql/plugin/{client_ed25519.so,daemon_example.ini} + rm "$out"/lib/{libmysqlclient${libExt},libmysqlclient_r${libExt}} + mv "$out"/share/{groonga,groonga-normalizer-mysql} "$out"/share/doc/mysql + mkdir -p "$dev"/lib && mv "$out"/lib/{libmariadbclient.a,libmysqlclient.a,libmysqlclient_r.a,libmysqlservices.a} "$dev"/lib '' + optionalString (! stdenv.isDarwin) '' sed -i 's/-mariadb/-mysql/' "$out"/bin/galera_new_cluster ''; - CXXFLAGS = optionalString stdenv.isi686 "-fpermissive" - + optionalString stdenv.isDarwin " -std=c++11"; + CXXFLAGS = optionalString stdenv.isi686 "-fpermissive"; }); connector-c = stdenv.mkDerivation rec { @@ -221,13 +227,13 @@ connector-c = stdenv.mkDerivation rec { galera = stdenv.mkDerivation rec { name = "mariadb-galera-${version}"; - version = "25.3.24"; + version = "25.3.26"; src = fetchFromGitHub { owner = "codership"; repo = "galera"; rev = "release_${version}"; - sha256 = "1yx3rqy7r4w2l3hnrri30hvsa296v8xidi18p5fdzcpmnhnlwjbi"; + sha256 = "0fs0c1px9lknf1a5wwb12z1hj7j7b6hsfjddggikvkdkrnr2xs1f"; fetchSubmodules = true; }; @@ -243,9 +249,9 @@ galera = stdenv.mkDerivation rec { export LIBPATH="${galeraLibs}/lib" ''; - sconsFlags = "ssl=1 system_asio=1 strict_build_flags=0"; + sconsFlags = "ssl=1 system_asio=0 strict_build_flags=0"; - postInstall = '' + 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} |