{ stdenv, lib, applyPatches, fetchFromGitHub, autoconf, automake, bison, cmake, libtool, civetweb, coreutils, curl, flex, gnutls, libconfig, libdaemon, libev, libgcrypt, libinjection, libmicrohttpd, libuuid, lz4, nlohmann_json, openssl, pcre, perl, python3, prometheus-cpp, zlib, texinfo, }: stdenv.mkDerivation (finalAttrs: { pname = "proxysql"; version = "2.6.0"; src = fetchFromGitHub { owner = "sysown"; repo = "proxysql"; rev = finalAttrs.version; hash = "sha256-vFPTBSp5DPNRuhtSD34ah2074almS+jiYxBE1L9Pz6g="; }; patches = [ ./makefiles.patch ./dont-phone-home.patch ]; nativeBuildInputs = [ autoconf automake cmake libtool perl python3 texinfo # for makeinfo ]; buildInputs = [ bison curl flex gnutls libgcrypt libuuid zlib ]; enableParallelBuilding = true; GIT_VERSION = finalAttrs.version; dontConfigure = true; # replace and fix some vendored dependencies preBuild = # sh '' pushd deps function replace_dep() { local folder="$1" local src="$2" local symlink="$3" local name="$4" pushd "$folder" rm -rf "$symlink" if [ -d "$src" ]; then cp -R "$src"/. "$symlink" chmod -R u+w "$symlink" else tar xf "$src" ln -s "$name" "$symlink" fi popd } ${lib.concatMapStringsSep "\n" ( x: ''replace_dep "${x.f}" "${x.p.src}" "${ x.p.pname or (builtins.parseDrvName x.p.name).name }" "${x.p.name}"'' ) ( map (x: { inherit (x) f; p = x.p // { src = applyPatches { inherit (x.p) src patches; }; }; }) [ { f = "curl"; p = curl; } { f = "libconfig"; p = libconfig; } { f = "libdaemon"; p = libdaemon; } { f = "libev"; p = libev; } { f = "libinjection"; p = libinjection; } { f = "libmicrohttpd"; p = libmicrohttpd; } { f = "libssl"; p = openssl; } { f = "lz4"; p = lz4; } { f = "pcre"; p = pcre; } { f = "prometheus-cpp"; p = prometheus-cpp; } ] ) } pushd libhttpserver tar xf libhttpserver-*.tar.gz sed -i s_/bin/pwd_${coreutils}/bin/pwd_g libhttpserver/configure.ac popd pushd json rm json.hpp ln -s ${nlohmann_json.src}/single_include/nlohmann/json.hpp . popd pushd prometheus-cpp/prometheus-cpp/3rdparty replace_dep . "${civetweb.src}" civetweb popd sed -i s_/usr/bin/env_${coreutils}/bin/env_g libssl/openssl/config pushd libmicrohttpd/libmicrohttpd autoreconf popd pushd libconfig/libconfig autoreconf popd pushd libdaemon/libdaemon autoreconf popd pushd pcre/pcre autoreconf popd popd patchShebangs . ''; preInstall = '' mkdir -p $out/{etc,bin,lib/systemd/system} ''; postInstall = '' sed -i s_/usr/bin/proxysql_$out/bin/proxysql_ $out/lib/systemd/system/*.service ''; meta = with lib; { broken = stdenv.hostPlatform.isDarwin; description = "High-performance MySQL proxy"; mainProgram = "proxysql"; homepage = "https://proxysql.com/"; license = with licenses; [ gpl3Only ]; maintainers = teams.helsinki-systems.members; platforms = platforms.unix; }; })