Commit c3f511b9 authored by Alexis Williams's avatar Alexis Williams
Browse files

dragonflydb: 0.1.0 -> 1.34.2

parent b3605e26
Loading
Loading
Loading
Loading
+115 −0
Original line number Diff line number Diff line
diff --git a/src/external_libs.cmake b/src/external_libs.cmake
index 62e6e879..8934777f 100644
--- a/src/external_libs.cmake
+++ b/src/external_libs.cmake
@@ -1,7 +1,6 @@
 add_third_party(
   lua
-  GIT_REPOSITORY https://github.com/dragonflydb/lua
-  GIT_TAG Dragonfly-5.4.6a
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/lua/. <SOURCE_DIR>
   CONFIGURE_COMMAND echo
   BUILD_IN_SOURCE 1
   BUILD_COMMAND ${DFLY_TOOLS_MAKE} all
@@ -19,18 +18,16 @@ endif()
 
 add_third_party(
   dconv
-  URL https://github.com/google/double-conversion/archive/refs/tags/v3.3.0.tar.gz
-  PATCH_COMMAND ${SED_REPL} "/static const std::ctype/d"
-                <SOURCE_DIR>/double-conversion/string-to-double.cc
-  COMMAND ${SED_REPL} "/std::use_facet</d" <SOURCE_DIR>/double-conversion/string-to-double.cc
-  COMMAND ${SED_REPL} "s/cType.tolower/std::tolower/g" <SOURCE_DIR>/double-conversion/string-to-double.cc
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/dconv/. <SOURCE_DIR>
+  PATCH_COMMAND echo
+  CMAKE_PASS_FLAGS "-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
   LIB libdouble-conversion.a
 )
 
 add_third_party(
   reflex
-  URL https://github.com/Genivia/RE-flex/archive/refs/tags/v5.2.2.tar.gz
-  PATCH_COMMAND autoreconf -fi
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/reflex/. <SOURCE_DIR>
+  PATCH_COMMAND echo
   CONFIGURE_COMMAND <SOURCE_DIR>/configure --disable-avx2 --prefix=${THIRD_PARTY_LIB_DIR}/reflex
           CXX=${CMAKE_CXX_COMPILER} CC=${CMAKE_C_COMPILER}
 )
@@ -41,16 +38,14 @@ set(REFLEX "${THIRD_PARTY_LIB_DIR}/reflex/bin/reflex")
 
 add_third_party(
   jsoncons
-  GIT_REPOSITORY https://github.com/dragonflydb/jsoncons
-  GIT_TAG Dragonfly.178
-  GIT_SHALLOW 1
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/jsoncons/. <SOURCE_DIR>
   CMAKE_PASS_FLAGS "-DJSONCONS_BUILD_TESTS=OFF -DJSONCONS_HAS_POLYMORPHIC_ALLOCATOR=ON"
   LIB "none"
 )
 
 add_third_party(
   lz4
-  URL https://github.com/lz4/lz4/archive/refs/tags/v1.10.0.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/lz4/. <SOURCE_DIR>
 
   BUILD_IN_SOURCE 1
   CONFIGURE_COMMAND echo skip
@@ -65,7 +60,7 @@ set(MIMALLOC_C_FLAGS "-O3 -g -DMI_STAT=1 -DNDEBUG")
 file(MAKE_DIRECTORY ${MIMALLOC_INCLUDE_DIR})
 
 ExternalProject_Add(mimalloc2_project
-  URL https://github.com/microsoft/mimalloc/archive/refs/tags/v2.2.4.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/mimalloc224/. <SOURCE_DIR>
   DOWNLOAD_DIR ${THIRD_PARTY_DIR}/mimalloc2
   SOURCE_DIR ${THIRD_PARTY_DIR}/mimalloc2
   # INSTALL_DIR ${MIMALLOC_ROOT_DIR}
@@ -118,21 +113,21 @@ set_target_properties(TRDP::mimalloc2 PROPERTIES IMPORTED_LOCATION ${MIMALLOC_RO
 
 add_third_party(
   croncpp
-  URL https://github.com/mariusbancila/croncpp/archive/refs/tags/v2023.03.30.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/croncpp/. <SOURCE_DIR>
   LIB "none"
 )
 
 if (WITH_SEARCH)
   add_third_party(
     uni-algo
-    URL https://github.com/uni-algo/uni-algo/archive/refs/tags/v1.0.0.tar.gz
+    DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/uni-algo/. <SOURCE_DIR>
 
     CMAKE_PASS_FLAGS "-DCMAKE_CXX_STANDARD:STRING=17"
   )
 
   add_third_party(
     hnswlib
-    URL https://github.com/nmslib/hnswlib/archive/refs/tags/v0.7.0.tar.gz
+    DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/hnswlib/. <SOURCE_DIR>
 
     BUILD_COMMAND echo SKIP
     INSTALL_COMMAND cp -R <SOURCE_DIR>/hnswlib ${THIRD_PARTY_LIB_DIR}/hnswlib/include/
@@ -142,21 +137,20 @@ endif()
 
 add_third_party(
   fast_float
-  URL https://github.com/fastfloat/fast_float/archive/refs/tags/v5.2.0.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/fast_float/. <SOURCE_DIR>
   LIB "none"
 )
 
 add_third_party(
   flatbuffers
-  URL https://github.com/google/flatbuffers/archive/refs/tags/v23.5.26.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/flatbuffers/. <SOURCE_DIR>
   CMAKE_PASS_FLAGS "-DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF
                     -DFLATBUFFERS_BUILD_FLATC=OFF"
 )
 
 add_third_party(
   hdr_histogram
-  GIT_REPOSITORY https://github.com/HdrHistogram/HdrHistogram_c/
-  GIT_TAG 652d51bcc36744fd1a6debfeb1a8a5f58b14022c
+  DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/hdr_histogram/. <SOURCE_DIR>
   CMAKE_PASS_FLAGS "-DHDR_LOG_REQUIRED=OFF -DHDR_HISTOGRAM_BUILD_PROGRAMS=OFF
                     -DHDR_HISTOGRAM_INSTALL_SHARED=OFF"
   LIB libhdr_histogram_static.a
+0 −132
Original line number Diff line number Diff line
diff --git a/helio/cmake/third_party.cmake b/helio/cmake/third_party.cmake
index aeb78d9..e9d4e6b 100644
--- a/helio/cmake/third_party.cmake
+++ b/helio/cmake/third_party.cmake
@@ -143,7 +143,7 @@ endfunction()
 
 FetchContent_Declare(
   gtest
-  URL https://github.com/google/googletest/archive/release-1.11.0.zip
+  DOWNLOAD_COMMAND true
 )
 
 FetchContent_GetProperties(gtest)
@@ -154,7 +154,7 @@ endif ()
 
 FetchContent_Declare(
   benchmark
-  URL https://github.com/google/benchmark/archive/v1.6.1.tar.gz
+  DOWNLOAD_COMMAND true
 )
 
 FetchContent_GetProperties(benchmark)
@@ -169,7 +169,7 @@ endif ()
 
 FetchContent_Declare(
   abseil_cpp
-  URL https://github.com/abseil/abseil-cpp/archive/20211102.0.tar.gz
+  DOWNLOAD_COMMAND true
   PATCH_COMMAND patch -p1 < "${CMAKE_CURRENT_LIST_DIR}/../patches/abseil-20211102.patch"
 )
 
@@ -183,11 +183,7 @@ endif()
 
 FetchContent_Declare(
   glog
-  GIT_REPOSITORY https://github.com/romange/glog
-  GIT_TAG Absl
-
-  GIT_PROGRESS    TRUE
-  GIT_SHALLOW     TRUE
+  DOWNLOAD_COMMAND true
 )
 
 FetchContent_GetProperties(glog)
@@ -233,10 +229,7 @@ endif()
 
 add_third_party(
   gperf
-  URL https://github.com/gperftools/gperftools/archive/gperftools-2.9.1.tar.gz
-  #GIT_REPOSITORY https://github.com/gperftools/gperftools
-  #GIT_TAG gperftools-2.9.1
-  GIT_SHALLOW TRUE
+  DOWNLOAD_COMMAND true
   PATCH_COMMAND autoreconf -i   # update runs every time for some reason
   # CMAKE_PASS_FLAGS "-DGPERFTOOLS_BUILD_HEAP_PROFILER=OFF -DGPERFTOOLS_BUILD_HEAP_CHECKER=OFF \
   #                   -DGPERFTOOLS_BUILD_DEBUGALLOC=OFF -DBUILD_TESTING=OFF  \
@@ -260,11 +253,12 @@ else()
 endif()
 
 add_third_party(mimalloc
-  URL https://github.com/microsoft/mimalloc/archive/refs/tags/v2.0.5.tar.gz
+  DOWNLOAD_COMMAND true
 
   # Add -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-O0 to debug
   CMAKE_PASS_FLAGS "-DCMAKE_BUILD_TYPE=Release -DMI_BUILD_SHARED=OFF -DMI_BUILD_TESTS=OFF \
-                    -DMI_INSTALL_TOPLEVEL=ON -DMI_OVERRIDE=${MI_OVERRIDE} -DCMAKE_C_FLAGS=-g"
+                    -DMI_INSTALL_TOPLEVEL=ON -DMI_OVERRIDE=${MI_OVERRIDE} -DCMAKE_C_FLAGS=-g \
+                    -DCMAKE_INSTALL_LIBDIR=${THIRD_PARTY_LIB_DIR}/mimalloc/lib"
 
   BUILD_COMMAND make -j4 mimalloc-static
   INSTALL_COMMAND make install
@@ -274,7 +268,7 @@ add_third_party(mimalloc
 )
 
 add_third_party(jemalloc
-  URL https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2
+  URL REPLACEJEMALLOCURL
   PATCH_COMMAND ./autogen.sh
   CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${THIRD_PARTY_LIB_DIR}/jemalloc --with-jemalloc-prefix=je_ --disable-libdl
 )
@@ -282,24 +276,23 @@ add_third_party(jemalloc
 
 add_third_party(
   xxhash
-  URL https://github.com/Cyan4973/xxHash/archive/v0.8.0.tar.gz
+  DOWNLOAD_COMMAND true
   SOURCE_SUBDIR cmake_unofficial
-  CMAKE_PASS_FLAGS "-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF"
+  CMAKE_PASS_FLAGS "-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF \
+                    -DCMAKE_INSTALL_LIBDIR=${THIRD_PARTY_LIB_DIR}/xxhash/lib"
 )
 
 
 add_third_party(
   uring
-  GIT_REPOSITORY https://github.com/axboe/liburing.git
-  GIT_TAG liburing-2.1
+  DOWNLOAD_COMMAND true
   CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${THIRD_PARTY_LIB_DIR}/uring
   BUILD_IN_SOURCE 1
 )
 
 add_third_party(
   rapidjson
-  GIT_REPOSITORY https://github.com/Tencent/rapidjson.git
-  GIT_TAG 1a803826f1197b5e30703afe4b9c0e7dd48074f5
+  DOWNLOAD_COMMAND true
   CMAKE_PASS_FLAGS "-DRAPIDJSON_BUILD_TESTS=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF \
                     -DRAPIDJSON_BUILD_DOC=OFF"
   LIB "none"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0dc0824..d5b38b3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,6 +1,6 @@
 add_third_party(
   lua
-  URL https://github.com/lua/lua/archive/refs/tags/v5.4.4.tar.gz
+  URL REPLACELUAURL
   PATCH_COMMAND patch -p1 -i "${CMAKE_SOURCE_DIR}/patches/lua-v5.4.4.patch"
   CONFIGURE_COMMAND echo
   BUILD_IN_SOURCE 1
@@ -11,7 +11,8 @@ add_third_party(
 
 add_third_party(
   dconv
-  URL https://github.com/google/double-conversion/archive/refs/tags/v3.2.0.tar.gz
+  DOWNLOAD_COMMAND true
+  CMAKE_PASS_FLAGS "-DCMAKE_INSTALL_LIBDIR=${THIRD_PARTY_LIB_DIR}/dconv/lib"
   LIB libdouble-conversion.a
 )
 
+0 −553

File deleted.

Preview size limit exceeded, changes collapsed.

+150 −0
Original line number Diff line number Diff line
diff --git a/helio/cmake/third_party.cmake b/helio/cmake/third_party.cmake
index 810a8fa..8b11922 100644
--- a/helio/cmake/third_party.cmake
+++ b/helio/cmake/third_party.cmake
@@ -151,7 +151,7 @@ endfunction()
 
 FetchContent_Declare(
   gtest
-  URL https://github.com/google/googletest/archive/v1.15.2.tar.gz
+  DOWNLOAD_COMMAND true
 )
 
 FetchContent_GetProperties(gtest)
@@ -162,7 +162,7 @@ endif ()
 
 FetchContent_Declare(
   benchmark
-  URL https://github.com/google/benchmark/archive/v1.9.1.tar.gz
+  DOWNLOAD_COMMAND true
 )
 
 FetchContent_GetProperties(benchmark)
@@ -181,7 +181,7 @@ endif ()
 
 FetchContent_Declare(
   abseil_cpp
-  URL https://github.com/abseil/abseil-cpp/releases/download/20250512.1/abseil-cpp-20250512.1.tar.gz
+  DOWNLOAD_COMMAND true
   PATCH_COMMAND patch -p1 < "${CMAKE_CURRENT_LIST_DIR}/../patches/abseil-20250512.1.patch"
 )
 
@@ -204,11 +204,7 @@ if (LEGACY_GLOG)
 
   FetchContent_Declare(
     glog
-    GIT_REPOSITORY https://github.com/romange/glog
-    GIT_TAG Absl
-
-    GIT_PROGRESS    TRUE
-    GIT_SHALLOW     TRUE
+    DOWNLOAD_COMMAND true
   )
 
   FetchContent_GetProperties(glog)
@@ -278,7 +274,7 @@ if (WITH_GPERF)
 
   add_third_party(
     gperf
-    URL https://github.com/gperftools/gperftools/archive/gperftools-2.16.tar.gz
+    DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/gperf/. <SOURCE_DIR>
 
     # GIT_SHALLOW TRUE
     # Remove building the unneeded programs (they fail on macos)
@@ -312,9 +308,7 @@ set(MIMALLOC_INCLUDE_DIR ${THIRD_PARTY_LIB_DIR}/mimalloc/include)
 set (MIMALLOC_PATCH_COMMAND patch -p1 -d ${THIRD_PARTY_DIR}/mimalloc/ -i ${CMAKE_CURRENT_LIST_DIR}/../patches/mimalloc-v2.1.6.patch)
 
 add_third_party(mimalloc
-   #GIT_REPOSITORY https://github.com/microsoft/mimalloc.git
-   #GIT_TAG 0f6d8293c74796fa913e4b5eb4361f1e4734f7c6
-   URL https://github.com/microsoft/mimalloc/archive/refs/tags/v2.1.6.tar.gz
+   DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/mimalloc216/. <SOURCE_DIR>
    PATCH_COMMAND "${MIMALLOC_PATCH_COMMAND}"
    # -DCMAKE_BUILD_TYPE=Release
    # Add -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-O0 to debug
@@ -328,7 +322,7 @@ add_third_party(mimalloc
 )
 
 add_third_party(jemalloc
-  URL https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2
+  DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/jemalloc/. <SOURCE_DIR>
   PATCH_COMMAND ./autogen.sh
   CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${THIRD_PARTY_LIB_DIR}/jemalloc --with-jemalloc-prefix=je_ --disable-libdl
 )
@@ -336,7 +330,7 @@ add_third_party(jemalloc
 
 add_third_party(
   xxhash
-  URL https://github.com/Cyan4973/xxHash/archive/v0.8.3.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/xxhash/. <SOURCE_DIR>
 
   # A bug in xxhash 0.8.1 that searches for a file that doesn't exist
   PATCH_COMMAND touch <SOURCE_DIR>/xxhsum.1
@@ -347,7 +341,7 @@ add_third_party(
 
 add_third_party(
   uring
-  URL https://github.com/axboe/liburing/archive/refs/tags/liburing-2.8.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/uring/. <SOURCE_DIR>
 
   CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${THIRD_PARTY_LIB_DIR}/uring
   BUILD_COMMAND make -C src
@@ -356,7 +350,7 @@ add_third_party(
 
 add_third_party(
   pugixml
-  URL https://github.com/zeux/pugixml/archive/refs/tags/v1.15.tar.gz
+  DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/pugixml/. <SOURCE_DIR>
 )
 
 if (WITH_AWS)
@@ -364,9 +358,7 @@ if (WITH_AWS)
 
   add_third_party(
     aws
-    GIT_REPOSITORY https://github.com/aws/aws-sdk-cpp.git
-    GIT_TAG 3e51fa016655eeb6b6610bdf8fe7cf33ebbf3e00
-    GIT_SHALLOW TRUE
+    DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/aws-sdk-cpp/. <SOURCE_DIR>
     PATCH_COMMAND "${AWS_PATCH_COMMAND}"
     CMAKE_PASS_FLAGS "-DBUILD_ONLY=s3 -DNO_HTTP_CLIENT=ON -DENABLE_TESTING=OFF  -DAUTORUN_UNIT_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_POLICY_VERSION_MINIMUM=3.5"
     LIB libaws-cpp-sdk-s3.a libaws-cpp-sdk-core.a libaws-crt-cpp.a libaws-c-mqtt.a libaws-c-event-stream.a libaws-c-s3.a libaws-c-auth.a  libaws-c-http.a libaws-c-io.a libs2n.a libaws-c-compression.a libaws-c-cal.a libaws-c-sdkutils.a libaws-checksums.a libaws-c-common.a
@@ -376,8 +368,7 @@ endif()
 if (WITH_GCP)
   add_third_party(
     rapidjson
-    GIT_REPOSITORY https://github.com/Tencent/rapidjson.git
-    GIT_TAG ab1842a
+    DOWNLOAD_COMMAND cp -r ${CMAKE_BINARY_DIR}/deps-nixpkgs/rapidjson/. <SOURCE_DIR>
     CMAKE_PASS_FLAGS "-DRAPIDJSON_BUILD_TESTS=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF \
                       -DRAPIDJSON_BUILD_DOC=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.5"
     LIB "none"
@@ -386,24 +377,23 @@ endif()
 
 add_third_party(
   cares
-  URL https://codeload.github.com/c-ares/c-ares/tar.gz/refs/tags/v1.34.5
+  DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/cares/. <SOURCE_DIR>
   CMAKE_PASS_FLAGS "-DCARES_SHARED:BOOL=OFF -DCARES_STATIC:BOOL=ON -DCARES_STATIC_PIC:BOOL=ON \
                     -DCMAKE_INSTALL_LIBDIR=lib"
 )
 
 add_third_party(
   zstd
-  URL https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.zst
+  DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/zstd/. <SOURCE_DIR>
   SOURCE_SUBDIR "build/cmake"
-  
+
   # for debug pass : "CFLAGS=-fPIC -O0 -ggdb"
   CMAKE_PASS_FLAGS "-DZSTD_BUILD_SHARED=OFF -DZSTD_BUILD_PROGRAMS=OFF -DZSTD_BUILD_TESTS=OFF"
 )
 
 add_third_party(
   expected
-  GIT_REPOSITORY https://github.com/martinmoene/expected-lite.git
-  GIT_TAG f17940fabae07063cabb67abf2c8d164d3146044 # Important fixes for monadic functions
+  DOWNLOAD_COMMAND cp -r ${CMAKE_CURRENT_BINARY_DIR}/deps-nixpkgs/expected/. <SOURCE_DIR>
   CMAKE_PASS_FLAGS "-DEXPECTED_LITE_OPT_BUILD_TESTS=0"
   LIB "none"
 )
+195 −49
Original line number Diff line number Diff line
{
  fetchFromGitHub,
  fetchurl,
  lib,
  stdenv,

  # Dependencies
  abseil-cpp,
  c-ares,
  croncpp,
  double-conversion,
  gperftools,
  mimalloc,
  rapidjson,
  liburing,
  xxHash,
  expected-lite,
  fast-float,
  flatbuffers_23,
  gbenchmark,
  glog,
  gperftools,
  gtest,
  hdrhistogram_c,
  hnswlib,
  jemalloc,
  gcc-unwrapped,
  liburing,
  lz4,
  pcre2,
  pugixml,
  rapidjson,
  re2,
  re-flex,
  uni-algo,
  xxHash,
  zstd,

  # Build tools
  autoconf,
  autoconf-archive,
  automake,
  automake116x,
  bison,
  cmake,
  gcc-unwrapped,
  ninja,

  # Runtime dependencies
  boost,
  libunwind,
  libtool,
  libunwind,
  openssl,
  zlib,

  # Options
  withAws ? true,
  withGcp ? true,
  withGperf ? true,
  withPcre ? true,
  withRe2 ? true,
  withSearch ? true,
  withAsan ? false,
  withUsan ? false,
}:

let
  pname = "dragonflydb";
  version = "0.1.0";
  version = "1.34.2";

  src = fetchFromGitHub {
    owner = pname;
    owner = "dragonflydb";
    repo = "dragonfly";
    tag = "v${version}";
    hash = "sha256-P6WMW/n+VezWDXGagT4B+ZYyCp8oufDV6MTrpKpLZcs=";
    hash = "sha256-n70IB32tZDe665hVLrKC0BSSJutmYhtPJvfNa48xaqA=";
    fetchSubmodules = true;
  };

  aws-sdk-cpp-1-11-162 = fetchFromGitHub {
    owner = "aws";
    repo = "aws-sdk-cpp";
    tag = "1.11.162";
    hash = "sha256-NxVE7H8BOetpbBkB2PTVBoHSXYm6cTp41F1LJmhtBbs=";
    fetchSubmodules = true;
  };

  # Needed exactly 5.4.4 for patch to work
  lua = fetchurl {
    url = "https://github.com/lua/lua/archive/refs/tags/v5.4.4.tar.gz";
    hash = "sha256-L/ibvqIqfIuRDWsAb1ukVZ7c9GiiVTfO35mI7ZD2tFA=";
  glog-absl = fetchFromGitHub {
    owner = "romange";
    repo = "glog";
    rev = "Absl";
    hash = "sha256-68Hx3kIPgyMSdHCUpYr68Cw8V4Umtyd+4VLZc3zUb1s=";
  };

  jsoncons-dragonfly = fetchFromGitHub {
    owner = "dragonflydb";
    repo = "jsoncons";
    rev = "Dragonfly.178";
    hash = "sha256-cxM95DFFo5z+eImgZzJw+ykaeSDtBF+hw5qo6gnL53s=";
  };

  lua-dragonfly = fetchFromGitHub {
    owner = "dragonflydb";
    repo = "lua";
    rev = "Dragonfly-5.4.6a";
    hash = "sha256-uLNe+hLihu4wMW/wstGnYdPa2bGPC5UiNE+VyNIYY2c=";
  };

  mimalloc216 = fetchFromGitHub {
    owner = "microsoft";
    repo = "mimalloc";
    tag = "v2.1.6";
    hash = "sha256-Ff3+RP+lAXCOeHJ87oG3c02rPP4WQIbg5L/CVe6gA3M=";
  };

  # Needed exactly 20211102.0 for patch to work
  abseil-cpp_202111 = fetchFromGitHub {
    owner = "abseil";
    repo = "abseil-cpp";
    rev = "20211102.0";
    sha256 = "sha256-sSXT6D4JSrk3dA7kVaxfKkzOMBpqXQb0WbMYWG+nGwk=";
  mimalloc224 = fetchFromGitHub {
    owner = "microsoft";
    repo = "mimalloc";
    tag = "v2.2.4";
    hash = "sha256-+8xZT+mVEqlqabQc+1buVH/X6FZxvCd0rWMyjPu9i4o=";
  };

  withUnwind = !stdenv.targetPlatform.isAarch64;
in
stdenv.mkDerivation {
  inherit pname version src;

  patches = [
    ./external-libs.patch
    ./helio-third-party.patch
  ];

  postPatch = ''
    mkdir -p ./build/{third_party,_deps}
    ln -s ${double-conversion.src} ./build/third_party/dconv
    ln -s ${mimalloc.src} ./build/third_party/mimalloc
    ln -s ${rapidjson.src} ./build/third_party/rapidjson
    ln -s ${gbenchmark.src} ./build/_deps/benchmark-src
    ln -s ${gtest.src} ./build/_deps/gtest-src
    cp -R --no-preserve=mode,ownership ${gperftools.src} ./build/third_party/gperf
    cp -R --no-preserve=mode,ownership ${liburing.src} ./build/third_party/uring
    cp -R --no-preserve=mode,ownership ${xxHash.src} ./build/third_party/xxhash
    cp -R --no-preserve=mode,ownership ${abseil-cpp_202111} ./build/_deps/abseil_cpp-src
    cp -R --no-preserve=mode,ownership ${glog.src} ./build/_deps/glog-src
    chmod u+x ./build/third_party/uring/configure
    cp ./build/third_party/xxhash/cli/xxhsum.{1,c} ./build/third_party/xxhash
    patch -p1 -d ./build/_deps/glog-src < ${./glog.patch}
    sed '
    s@REPLACEJEMALLOCURL@file://${jemalloc.src}@
    s@REPLACELUAURL@file://${lua}@
    ' ${./fixes.patch} | patch -p1
    chmod +x helio/blaze.sh
  '';

  preConfigure = ''
    # Create directory for nixpkgs dependencies
    mkdir -p build/_deps build/deps-nixpkgs

    # Copy FetchContent dependencies (in helio/cmake/third_party.cmake)
    # These go to build/_deps/ where FetchContent expects them
    cp -r --no-preserve=mode,ownership ${abseil-cpp.src} build/_deps/abseil_cpp-src
    cp -r --no-preserve=mode,ownership ${gbenchmark.src} build/_deps/benchmark-src
    cp -r --no-preserve=mode,ownership ${glog-absl} build/_deps/glog-src
    cp -r --no-preserve=mode,ownership ${gtest.src} build/_deps/gtest-src

    # Copy add_third_party dependencies to deps-nixpkgs
    cp -r --no-preserve=mode,ownership ${croncpp.src} build/deps-nixpkgs/croncpp
    cp -r --no-preserve=mode,ownership ${double-conversion.src} build/deps-nixpkgs/dconv
    cp -r --no-preserve=mode,ownership ${expected-lite.src} build/deps-nixpkgs/expected
    cp -r --no-preserve=mode,ownership ${fast-float.src} build/deps-nixpkgs/fast_float
    cp -r --no-preserve=mode,ownership ${flatbuffers_23.src} build/deps-nixpkgs/flatbuffers
    cp -r --no-preserve=mode,ownership ${hdrhistogram_c.src} build/deps-nixpkgs/hdr_histogram
    cp -r --no-preserve=mode,ownership ${jemalloc.src} build/deps-nixpkgs/jemalloc
    cp -r --no-preserve=mode,ownership ${jsoncons-dragonfly} build/deps-nixpkgs/jsoncons
    cp -r --no-preserve=mode,ownership ${liburing.src} build/deps-nixpkgs/uring
    cp -r --no-preserve=mode,ownership ${lua-dragonfly} build/deps-nixpkgs/lua
    cp -r --no-preserve=mode,ownership ${lz4.src} build/deps-nixpkgs/lz4
    cp -r --no-preserve=mode,ownership ${mimalloc216} build/deps-nixpkgs/mimalloc216
    cp -r --no-preserve=mode,ownership ${mimalloc224} build/deps-nixpkgs/mimalloc224
    cp -r --no-preserve=mode,ownership ${pugixml.src} build/deps-nixpkgs/pugixml
    cp -r --no-preserve=mode,ownership ${re-flex.src} build/deps-nixpkgs/reflex
    cp -r --no-preserve=mode,ownership ${xxHash.src} build/deps-nixpkgs/xxhash
    cp -r --no-preserve=mode,ownership ${zstd.src} build/deps-nixpkgs/zstd

    # c-ares is provided as a tarball, extract it
    mkdir -p build/deps-nixpkgs/cares
    tar -xzf ${c-ares.src} -C build/deps-nixpkgs/cares --strip-components=1

    ${
      if withAws then
        ''
          cp -r --no-preserve=mode,ownership ${aws-sdk-cpp-1-11-162} build/deps-nixpkgs/aws-sdk-cpp
        ''
      else
        ""
    }

    ${
      if withGcp then
        ''
          cp -r --no-preserve=mode,ownership ${rapidjson.src} build/deps-nixpkgs/rapidjson
        ''
      else
        ""
    }

    ${
      if withGperf then
        ''
          cp -r --no-preserve=mode,ownership ${gperftools.src} build/deps-nixpkgs/gperf
        ''
      else
        ""
    }

    ${
      if withSearch then
        ''
          cp -r --no-preserve=mode,ownership ${hnswlib.src} build/deps-nixpkgs/hnswlib
          cp -r --no-preserve=mode,ownership ${uni-algo.src} build/deps-nixpkgs/uni-algo
        ''
      else
        ""
    }

    # Fix permissions
    chmod -R u+w build/deps-nixpkgs build/_deps
    chmod u+x build/deps-nixpkgs/reflex/configure
    chmod u+x build/deps-nixpkgs/uring/configure
    touch build/deps-nixpkgs/xxhash/xxhsum.1
  '';

  nativeBuildInputs = [
    autoconf
    autoconf-archive
    automake
    automake116x
    bison
    cmake
    ninja
  ];

  buildInputs = [
    boost
    libunwind
    libtool
    openssl
  ];
    zlib
  ]
  ++ lib.optional withPcre pcre2
  ++ lib.optional withRe2 re2
  ++ lib.optional withUnwind libunwind;

  cmakeFlags = [
    "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
    "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
    (lib.cmakeFeature "CMAKE_AR" "${gcc-unwrapped}/bin/gcc-ar")
    (lib.cmakeFeature "CMAKE_RANLIB" "${gcc-unwrapped}/bin/gcc-ranlib")
    (lib.cmakeBool "ENABLE_GIT_VERSION" false)
    (lib.cmakeBool "WITH_ASAN" withAsan)
    (lib.cmakeBool "WITH_AWS" withAws)
    (lib.cmakeBool "WITH_GCP" withGcp)
    (lib.cmakeBool "WITH_GPERF" withGperf)
    (lib.cmakeBool "WITH_SEARCH" withSearch)
    (lib.cmakeBool "WITH_USAN" withUsan)
  ];

  ninjaFlags = [ "dragonfly" ];

  # dragonflydb's tests rely heavily on outdated Python packages we don't
  # have in nixpkgs, and it would be a highly non-trivial endeavor to
  # recreate all of them locally to get them to run properly.
  doCheck = false;
  dontUseNinjaInstall = true;

  dontUseNinjaInstall = true;
  installPhase = ''
    runHook preInstall

    mkdir -p $out/bin
    cp ./dragonfly $out/bin
    install -Dm755 ./dragonfly $out/bin/dragonfly

    runHook postInstall
  '';

@@ -112,6 +255,9 @@ stdenv.mkDerivation {
    homepage = "https://dragonflydb.io/";
    license = licenses.bsl11;
    platforms = platforms.linux;
    maintainers = with maintainers; [ yureien ];
    maintainers = with maintainers; [
      typedrat
      yureien
    ];
  };
}