From a1c1411536b2b2c78a30287e0f6b8de850b7a3b0 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 19 May 2026 22:04:01 +0900 Subject: [PATCH] Register extensions with `sqlite3_auto_extension` --- src/core-init-ext.nix | 10 +++++++--- src/mk-sqlite.nix | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core-init-ext.nix b/src/core-init-ext.nix index b77b613..3112d63 100644 --- a/src/core-init-ext.nix +++ b/src/core-init-ext.nix @@ -4,6 +4,7 @@ extensions, nameSuffix, version, + headers, stdenv, writeText, @@ -27,13 +28,14 @@ let ${lib.concatMapStringsSep "\n" (sym: "void ${sym}(void);") shutdownSymbols} ''; + # TODO: how should shutdown be handled with use of sqlite3_auto_extension? Is there a separate place for registering these? coreInitImpl = writeText "sqlite-core-init.c" '' #include "${coreInitHeaders}" + #include int core_init(const char *dummy) { - int err = 0; - ${lib.concatMapStringsSep "\n" (sym: "err += ${sym}(dummy);") initSymbols} - return err; + ${lib.concatMapStringsSep "\n" (sym: "sqlite3_auto_extension((void(*)(void))${sym});") initSymbols} + return SQLITE_OK; } void core_shutdown(void) { @@ -47,6 +49,8 @@ in stdenv.mkDerivation (finalAttrs: { src = null; dontUnpack = true; + buildInputs = [ headers ]; + buildPhase = '' runHook preBuild "$CC" -c '${coreInitImpl}' -o sqlite-core-init.o diff --git a/src/mk-sqlite.nix b/src/mk-sqlite.nix index 4dea3c0..09795b9 100644 --- a/src/mk-sqlite.nix +++ b/src/mk-sqlite.nix @@ -76,6 +76,7 @@ let then null else pkgs.callPackage ./core-init-ext.nix ({ inherit version src; + inherit headers; inherit extensions; inherit extraLibraries; nameSuffix = suffix;