2024-06-04 16:28:27 +03:00
|
|
|
{ lib
|
|
|
|
, stdenv
|
|
|
|
, releaseTools
|
|
|
|
|
|
|
|
, meson
|
|
|
|
, ninja
|
|
|
|
, pkg-config
|
2024-06-28 21:26:04 +03:00
|
|
|
, unixtools
|
2024-06-04 16:28:27 +03:00
|
|
|
|
|
|
|
, nix-util
|
|
|
|
, boost
|
|
|
|
, curl
|
|
|
|
, aws-sdk-cpp
|
|
|
|
, libseccomp
|
|
|
|
, nlohmann_json
|
|
|
|
, sqlite
|
|
|
|
|
|
|
|
, busybox-sandbox-shell ? null
|
|
|
|
|
|
|
|
# Configuration Options
|
|
|
|
|
|
|
|
, versionSuffix ? ""
|
|
|
|
|
2024-06-28 21:26:04 +03:00
|
|
|
, embeddedSandboxShell ? stdenv.hostPlatform.isStatic
|
|
|
|
|
2024-06-04 16:28:27 +03:00
|
|
|
# Check test coverage of Nix. Probably want to use with at least
|
|
|
|
# one of `doCheck` or `doInstallCheck` enabled.
|
|
|
|
, withCoverageChecks ? false
|
|
|
|
}:
|
|
|
|
|
|
|
|
let
|
2024-06-26 04:18:01 +03:00
|
|
|
inherit (lib) fileset;
|
|
|
|
|
2024-06-04 16:28:27 +03:00
|
|
|
version = lib.fileContents ./.version + versionSuffix;
|
|
|
|
|
|
|
|
mkDerivation =
|
|
|
|
if withCoverageChecks
|
|
|
|
then
|
|
|
|
# TODO support `finalAttrs` args function in
|
|
|
|
# `releaseTools.coverageAnalysis`.
|
|
|
|
argsFun:
|
|
|
|
releaseTools.coverageAnalysis (let args = argsFun args; in args)
|
|
|
|
else stdenv.mkDerivation;
|
|
|
|
in
|
|
|
|
|
|
|
|
mkDerivation (finalAttrs: {
|
|
|
|
pname = "nix-store";
|
|
|
|
inherit version;
|
|
|
|
|
|
|
|
src = fileset.toSource {
|
|
|
|
root = ./.;
|
|
|
|
fileset = fileset.unions [
|
|
|
|
./meson.build
|
|
|
|
./meson.options
|
|
|
|
./linux/meson.build
|
|
|
|
./unix/meson.build
|
|
|
|
./windows/meson.build
|
|
|
|
(fileset.fileFilter (file: file.hasExt "cc") ./.)
|
|
|
|
(fileset.fileFilter (file: file.hasExt "hh") ./.)
|
|
|
|
(fileset.fileFilter (file: file.hasExt "sb") ./.)
|
|
|
|
(fileset.fileFilter (file: file.hasExt "md") ./.)
|
|
|
|
(fileset.fileFilter (file: file.hasExt "sql") ./.)
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
outputs = [ "out" "dev" ];
|
|
|
|
|
|
|
|
nativeBuildInputs = [
|
|
|
|
meson
|
|
|
|
ninja
|
|
|
|
pkg-config
|
2024-06-28 21:26:04 +03:00
|
|
|
] ++ lib.optional embeddedSandboxShell unixtools.hexdump;
|
2024-06-04 16:28:27 +03:00
|
|
|
|
|
|
|
buildInputs = [
|
|
|
|
boost
|
|
|
|
curl
|
|
|
|
sqlite
|
|
|
|
] ++ lib.optional stdenv.hostPlatform.isLinux libseccomp
|
|
|
|
# There have been issues building these dependencies
|
|
|
|
++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform && (stdenv.isLinux || stdenv.isDarwin))
|
|
|
|
(aws-sdk-cpp.override {
|
|
|
|
apis = ["s3" "transfer"];
|
|
|
|
customMemoryManagement = false;
|
|
|
|
})
|
|
|
|
;
|
|
|
|
|
|
|
|
propagatedBuildInputs = [
|
|
|
|
nix-util
|
|
|
|
nlohmann_json
|
|
|
|
];
|
|
|
|
|
|
|
|
preConfigure =
|
2024-06-28 02:19:32 +03:00
|
|
|
# "Inline" .version so it's not a symlink, and includes the suffix.
|
|
|
|
# Do the meson utils, without modification.
|
2024-06-04 16:28:27 +03:00
|
|
|
''
|
|
|
|
echo ${version} > .version
|
2024-06-28 02:19:32 +03:00
|
|
|
cp -r ${../../build-utils-meson} build-utils-meson
|
2024-06-04 16:28:27 +03:00
|
|
|
'';
|
|
|
|
|
|
|
|
mesonFlags = [
|
|
|
|
(lib.mesonEnable "seccomp-sandboxing" stdenv.hostPlatform.isLinux)
|
2024-06-28 21:26:04 +03:00
|
|
|
(lib.mesonBool "embedded-sandbox-shell" embeddedSandboxShell)
|
2024-06-04 16:28:27 +03:00
|
|
|
] ++ lib.optionals stdenv.hostPlatform.isLinux [
|
|
|
|
(lib.mesonOption "sandbox-shell" "${busybox-sandbox-shell}/bin/busybox")
|
|
|
|
];
|
|
|
|
|
|
|
|
env = {
|
|
|
|
# Needed for Meson to find Boost.
|
|
|
|
# https://github.com/NixOS/nixpkgs/issues/86131.
|
|
|
|
BOOST_INCLUDEDIR = "${lib.getDev boost}/include";
|
|
|
|
BOOST_LIBRARYDIR = "${lib.getLib boost}/lib";
|
|
|
|
} // lib.optionalAttrs (stdenv.isLinux && !(stdenv.hostPlatform.isStatic && stdenv.system == "aarch64-linux")) {
|
|
|
|
LDFLAGS = "-fuse-ld=gold";
|
|
|
|
};
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
separateDebugInfo = !stdenv.hostPlatform.isStatic;
|
|
|
|
|
|
|
|
# TODO Always true after https://github.com/NixOS/nixpkgs/issues/318564
|
|
|
|
strictDeps = !withCoverageChecks;
|
|
|
|
|
|
|
|
hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie";
|
|
|
|
|
|
|
|
meta = {
|
|
|
|
platforms = lib.platforms.unix ++ lib.platforms.windows;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // lib.optionalAttrs withCoverageChecks {
|
|
|
|
lcovFilter = [ "*/boost/*" "*-tab.*" ];
|
|
|
|
|
|
|
|
hardeningDisable = [ "fortify" ];
|
|
|
|
})
|