Initial commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
{
|
||||
lib,
|
||||
|
||||
src,
|
||||
version,
|
||||
nameSuffix,
|
||||
|
||||
stdenv,
|
||||
featureFlags ? [ ],
|
||||
extensions ? [ ],
|
||||
enableInteractive ? false,
|
||||
|
||||
unzip,
|
||||
zlib,
|
||||
readline,
|
||||
ncurses,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "sqlite-amalgamation${nameSuffix}";
|
||||
inherit version src;
|
||||
|
||||
outputs = [
|
||||
# "bin"
|
||||
"dev"
|
||||
"out"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
unzip
|
||||
];
|
||||
buildInputs = [
|
||||
zlib
|
||||
]
|
||||
++ lib.optionals enableInteractive [
|
||||
readline
|
||||
ncurses
|
||||
];
|
||||
|
||||
# required for aarch64 but applied for all arches for simplicity
|
||||
preConfigure = ''
|
||||
patchShebangs configure
|
||||
'';
|
||||
|
||||
# sqlite relies on autosetup now; so many of the
|
||||
# previously-understood flags are gone. They should instead be set
|
||||
# on a per-output basis.
|
||||
setOutputFlags = false;
|
||||
|
||||
configureFlags = [
|
||||
# "--bindir=${placeholder "bin"}/bin"
|
||||
"--includedir=${placeholder "dev"}/include"
|
||||
"--libdir=${placeholder "out"}/lib"
|
||||
]
|
||||
++ lib.optional (!enableInteractive) "--disable-readline"
|
||||
# autosetup only looks up readline.h in predefined set of directories.
|
||||
++ lib.optional enableInteractive "--with-readline-header=${lib.getDev readline}/include/readline/readline.h"
|
||||
++ lib.optional (stdenv.hostPlatform.isStatic) "--disable-shared";
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = toString featureFlags;
|
||||
|
||||
# Test for features which may not be available at compile time
|
||||
preBuild = ''
|
||||
# Necessary for FTS5 on Linux
|
||||
export NIX_CFLAGS_LINK="$NIX_CFLAGS_LINK -lm"
|
||||
|
||||
echo ""
|
||||
echo "NIX_CFLAGS_COMPILE = $NIX_CFLAGS_COMPILE"
|
||||
echo ""
|
||||
'';
|
||||
|
||||
makeTarget = "sqlite3.c";
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm444 sqlite3.{c,h} -t "$out"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# dontInstall = true;
|
||||
})
|
||||
@@ -0,0 +1,135 @@
|
||||
{ config, lib, ... }:
|
||||
{
|
||||
options = {
|
||||
enableMinimal = lib.mkEnableOption "" // {
|
||||
description = "Whether to disable most feature flags by default.";
|
||||
};
|
||||
|
||||
enableDebug = lib.mkEnableOption "" // {
|
||||
description = "Whether to compile with various debug options enabled.";
|
||||
};
|
||||
|
||||
enableInteractive = lib.mkEnableOption "" // {
|
||||
description = "Whether to compile with recommended libraries for interactive shell usage.";
|
||||
};
|
||||
|
||||
# https://sqlite.org/compile.html
|
||||
features = lib.mkOption {
|
||||
default = { };
|
||||
type = lib.types.submodule {
|
||||
freeformType = with lib.types; attrsOf (oneOf int bool str);
|
||||
options = let
|
||||
toggleDefaultIfNotMinimal = name: extraOpts: lib.mkEnableOption "" // {
|
||||
description = "Whether to compile with `-DSQLITE_${name}` set.";
|
||||
default = !config.enableMinimal;
|
||||
defaultText = "!enableMinimal";
|
||||
} // extraOpts;
|
||||
|
||||
toggleDefaultIfDebug = name: extraOpts: lib.mkEnableOption "" // {
|
||||
description = "Whether to compile with `-DSQLITE_${name}` set.";
|
||||
default = config.enableDebug;
|
||||
defaultText = "enableDebug";
|
||||
} // extraOpts;
|
||||
|
||||
toggleDefaultOff = name: extraOpts: lib.mkEnableOption "" // {
|
||||
description = "Whether to compile with `-DSQLITE_${name}` set.";
|
||||
} // extraOpts;
|
||||
|
||||
toggleDefaultOn = name: extraOpts: lib.mkEnableOption "" // {
|
||||
description = "Whether to compile with `-DSQLITE_${name}` set.";
|
||||
default = true;
|
||||
} // extraOpts;
|
||||
|
||||
defaultIfDebugToggles = [
|
||||
"DEBUG"
|
||||
"ENABLE_EXPLAIN_COMMENTS"
|
||||
"ENABLE_IOTRACE"
|
||||
"MEMDEBUG"
|
||||
"STRICT_SUBTYPE"
|
||||
];
|
||||
|
||||
defaultIfNotMinimalToggles = [
|
||||
"ENABLE_FTS5"
|
||||
"ENABLE_GEOPOLY"
|
||||
# "ENABLE_JSON1"
|
||||
"ENABLE_NORMALIZE"
|
||||
"ENABLE_OFFSET_SQL_FUNC"
|
||||
"ENABLE_PERCENTILE"
|
||||
"ENABLE_PREUPDATE_HOOK"
|
||||
"ENABLE_RBU"
|
||||
"ENABLE_RTREE"
|
||||
"SECURE_DELETE"
|
||||
];
|
||||
|
||||
defaultOffToggles = [
|
||||
"ENABLE_ALLOCA"
|
||||
"ENABLE_API_ARMOR"
|
||||
"ENABLE_ATOMIC_WRITE"
|
||||
"ENABLE_BATCH_ATOMIC_WRITE"
|
||||
"ENABLE_BYTECODE_VTAB"
|
||||
"ENABLE_COLUMN_METADATA"
|
||||
"ENABLE_DBSTAT_VTAB"
|
||||
"ENABLE_FTS3"
|
||||
"ENABLE_FTS3_PARENTHESIS"
|
||||
"ENABLE_FTS3_TOKENIZER"
|
||||
"ENABLE_FTS4"
|
||||
"ENABLE_HIDDEN_COLUMNS"
|
||||
"ENABLE_ICU"
|
||||
"ENABLE_LOCKING_STYLE"
|
||||
"ENABLE_MEMORY_MANAGEMENT"
|
||||
"ENABLE_MEMSYS3"
|
||||
"ENABLE_MEMSYS5"
|
||||
"ENABLE_NULL_TRIM"
|
||||
"ENABLE_ORDERED_SET_AGGREGATES"
|
||||
"ENABLE_QPSG"
|
||||
"ENABLE_SESSION"
|
||||
"ENABLE_SNAPSHOT"
|
||||
"ENABLE_SORTER_REFERENCES"
|
||||
"ENABLE_SQLLOG"
|
||||
"ENABLE_STMTVTAB"
|
||||
"ENABLE_STMT_SCANSTATUS"
|
||||
"ENABLE_STMT_SCANSTATUS"
|
||||
"ENABLE_UNKNOWN_SQL_FUNCTION"
|
||||
"ENABLE_UNLOCK_NOTIFY"
|
||||
"SOUNDEX"
|
||||
"USE_FCNTL_TRACE"
|
||||
];
|
||||
|
||||
defaultOnToggles = [
|
||||
"ENABLE_MATH_FUNCTIONS"
|
||||
];
|
||||
in lib.mergeAttrsList [
|
||||
(lib.genAttrs defaultIfDebugToggles (name: toggleDefaultIfDebug name { }))
|
||||
(lib.genAttrs defaultIfNotMinimalToggles (name: toggleDefaultIfNotMinimal name { }))
|
||||
(lib.genAttrs defaultOffToggles (name: toggleDefaultOff name { }))
|
||||
(lib.genAttrs defaultOnToggles (name: toggleDefaultOn name { }))
|
||||
{
|
||||
MAX_VARIABLE_NUMBER = lib.mkOption {
|
||||
default = 250000;
|
||||
};
|
||||
|
||||
MAX_EXPR_DEPTH = lib.mkOption {
|
||||
default = 10000;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
featureFlags = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
# TODO: handle interactive mode, icu, zlib
|
||||
# buildInputs = [];
|
||||
|
||||
featureFlags = lib.filter (x: x != null) (
|
||||
lib.mapAttrsToList (
|
||||
k: v: if lib.isInt v then "-DSQLITE_${k}=${toString v}" else
|
||||
if lib.isBool v then if v then "-DSQLITE_${k}" else null
|
||||
else "-DSQLITE_${k}=${v}")
|
||||
config.features);
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
{ lib }:
|
||||
{
|
||||
pkgs,
|
||||
src ? pkgs.sqlite.src,
|
||||
version ? pkgs.sqlite.version,
|
||||
|
||||
# Controls whether the packages are compiled via the amalgamation.
|
||||
amalgamate ? true,
|
||||
|
||||
# Enables a few sqlite compile time flags useful for debugging.
|
||||
enableDebug ? false,
|
||||
|
||||
# Disables most sqlite extensions, creating a relatively minimal build.
|
||||
enableMinimal ? false,
|
||||
|
||||
# Enables building with readline and ncurses, providing better support for interactive
|
||||
# use in a shell.
|
||||
enableInteractive ? false,
|
||||
|
||||
# Manually tweak compile time flags.
|
||||
# See https://sqlite.org/compile.html for available options.
|
||||
#
|
||||
# Note that the `SQLITE_` prefix is stripped, so
|
||||
# `SQLITE_OPTION_XYZ` should be set as `OPTION_XYZ`
|
||||
features ? { },
|
||||
|
||||
# Custom SQLite extensions and their entrypoints.
|
||||
# extensions ? [ ],
|
||||
|
||||
# Additional libraries to link against, useful when the extensions
|
||||
# use external libraries.
|
||||
# extraLibraries ? [ ],
|
||||
}: let
|
||||
config = (lib.evalModules {
|
||||
modules = [
|
||||
./build-config.nix
|
||||
{
|
||||
inherit
|
||||
enableMinimal
|
||||
enableDebug
|
||||
enableInteractive;
|
||||
}
|
||||
];
|
||||
}).config;
|
||||
|
||||
suffix = lib.pipe null [
|
||||
(null: [
|
||||
(lib.optionalString enableMinimal "minimal")
|
||||
(lib.optionalString enableDebug "debug")
|
||||
(lib.optionalString enableInteractive "interactive")
|
||||
])
|
||||
(lib.filter (x: x != ""))
|
||||
(lib.concatStringsSep "-")
|
||||
(x: if x == "" then "" else "-${x}")
|
||||
];
|
||||
in {
|
||||
inherit config;
|
||||
inherit suffix;
|
||||
|
||||
# "sqlite"
|
||||
# "sqlite-static"
|
||||
} // lib.optionalAttrs amalgamate {
|
||||
amalgamation = pkgs.callPackage ./amalgamation.nix {
|
||||
inherit (pkgs.sqlite) version src;
|
||||
nameSuffix = suffix;
|
||||
inherit enableInteractive;
|
||||
inherit (config) featureFlags;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user