mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 23:36:16 +02:00
WIP
This commit is contained in:
parent
0ca49b0c86
commit
ce598bae14
5 changed files with 117 additions and 100 deletions
|
@ -26,12 +26,4 @@ releaseTools.coverageAnalysis {
|
|||
;
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
dontInstall = false;
|
||||
|
||||
lcovFilter = [ "*/boost/*" "*-tab.*" ];
|
||||
|
||||
hardeningDisable = ["fortify"];
|
||||
|
||||
NIX_CFLAGS_COMPILE = "-DCOVERAGE=1";
|
||||
}
|
||||
|
|
|
@ -276,7 +276,12 @@
|
|||
coverage = nixpkgsFor.x86_64-linux.native.callPackage ./coverage.nix {};
|
||||
|
||||
# API docs for Nix's unstable internal C++ interfaces.
|
||||
internal-api-docs = nixpkgsFor.x86_64-linux.native.callPackage ./internal-api-docs.nix {};
|
||||
internal-api-docs = nixpkgsFor.x86_64-linux.native.callPackage ./package.nix {
|
||||
doBuild = false;
|
||||
doCheck = false;
|
||||
doInstallCheck = false;
|
||||
enableInternalAPIDocs = true;
|
||||
};
|
||||
|
||||
# System tests.
|
||||
tests = import ./tests/nixos { inherit lib nixpkgs nixpkgsFor; } // {
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
{ nix
|
||||
, doxygen
|
||||
}:
|
||||
|
||||
nix.overrideAttrs (old: {
|
||||
pname = "nix-internal-api-docs";
|
||||
|
||||
configureFlags = old.configureFlags ++ [
|
||||
"--enable-internal-api-docs"
|
||||
];
|
||||
nativeBuildInputs = old.nativeBuildInputs ++ [
|
||||
doxygen
|
||||
];
|
||||
|
||||
dontBuild = true;
|
||||
doCheck = false;
|
||||
|
||||
installTargets = [ "internal-api-html" ];
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/nix-support
|
||||
echo "doc internal-api-docs $out/share/doc/nix/internal-api/html" >> $out/nix-support/hydra-build-products
|
||||
'';
|
||||
})
|
141
package.nix
141
package.nix
|
@ -1,6 +1,7 @@
|
|||
{ lib
|
||||
, callPackage
|
||||
, stdenv
|
||||
, releaseTools
|
||||
, versionSuffix ? ""
|
||||
, officialRelease ? false
|
||||
, buildUnreleasedNotes ? false
|
||||
|
@ -21,6 +22,7 @@
|
|||
, git
|
||||
, gtest
|
||||
, jq
|
||||
, doxygen
|
||||
, libarchive
|
||||
, libcpuid
|
||||
, libgit2
|
||||
|
@ -45,16 +47,35 @@
|
|||
# faithfully reflects how the underlying configure + make build system
|
||||
# work. The top-level flake.nix will choose useful combinations.
|
||||
|
||||
, pname ? "nix"
|
||||
|
||||
, doBuild ? true
|
||||
, doCheck ? stdenv.buildPlatform.canExecute stdenv.hostPlatform
|
||||
, doInstallCheck ? stdenv.buildPlatform.canExecute stdenv.hostPlatform
|
||||
|
||||
, withCoverageChecks ? false
|
||||
|
||||
# Whether to build the internal API docs, can be done separately from
|
||||
# everything else.
|
||||
, enableInternalAPIDocs ? false
|
||||
|
||||
# Whether to install unit tests. This is useful when cross compiling
|
||||
# since we cannot run them natively during the build, but can do so
|
||||
# later.
|
||||
, installUnitTests ? stdenv.hostPlatform != stdenv.buildPlatform
|
||||
|
||||
, test-daemon ? null
|
||||
, test-client ? null
|
||||
}:
|
||||
|
||||
let
|
||||
version = lib.fileContents ./.version + versionSuffix;
|
||||
canRunInstalled = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
|
||||
|
||||
attrs = {
|
||||
inherit doBuild doCheck doInstallCheck;
|
||||
};
|
||||
|
||||
filesets = {
|
||||
baseFiles = fileset.fileFilter (f: f.name != ".gitignore") ./.;
|
||||
|
||||
|
@ -78,17 +99,30 @@ let
|
|||
(fileset.fileFilter (f: lib.strings.hasPrefix "nix-profile" f.name) ./scripts)
|
||||
];
|
||||
};
|
||||
|
||||
mkDerivation =
|
||||
if withCoverageChecks
|
||||
then releaseTools.coverageAnalysis
|
||||
else stdenv.mkDerivation;
|
||||
in
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: let
|
||||
mkDerivation (finalAttrs: let
|
||||
|
||||
inherit (finalAttrs)
|
||||
doCheck
|
||||
doInstallCheck
|
||||
;
|
||||
|
||||
doBuild = !finalAttrs.dontBuild;
|
||||
|
||||
# Either running the unit tests during the build, or installing them
|
||||
# to be run later, requiresthe unit tests to be built.
|
||||
buildUnitTests = finalAttrs.doCheck || installUnitTests;
|
||||
buildUnitTests = doCheck || installUnitTests;
|
||||
|
||||
anySortOfTesting = buildUnitTests || doInstallCheck;
|
||||
|
||||
in {
|
||||
pname = "nix";
|
||||
inherit version;
|
||||
inherit pname version;
|
||||
|
||||
src =
|
||||
let
|
||||
|
@ -96,9 +130,10 @@ in {
|
|||
in
|
||||
fileset.toSource {
|
||||
root = ./.;
|
||||
fileset = fileset.intersect filesets.baseFiles (fileset.unions [
|
||||
fileset = fileset.intersect filesets.baseFiles (fileset.unions ([
|
||||
filesets.configureFiles
|
||||
filesets.topLevelBuildFiles
|
||||
] ++ lib.optionals doBuild [
|
||||
./boehmgc-coroutine-sp-fallback.diff
|
||||
./doc
|
||||
./misc
|
||||
|
@ -107,8 +142,9 @@ in {
|
|||
./unit-test-data
|
||||
./COPYING
|
||||
./scripts/local.mk
|
||||
] ++ lib.optionals anySortOfTesting [
|
||||
filesets.functionalTestFiles
|
||||
]);
|
||||
]));
|
||||
};
|
||||
|
||||
VERSION_SUFFIX = versionSuffix;
|
||||
|
@ -159,7 +195,13 @@ in {
|
|||
})
|
||||
;
|
||||
|
||||
doCheck = stdenv.hostPlatform != stdenv.buildPlatform;
|
||||
propagatedBuildInputs = [
|
||||
boehmgc
|
||||
nlohmann_json
|
||||
];
|
||||
|
||||
dontBuild = !attrs.doBuild;
|
||||
doCheck = attrs.doCheck;
|
||||
|
||||
checkInputs = [
|
||||
# see buildInputs. The configure script always wants its test libs
|
||||
|
@ -169,11 +211,8 @@ in {
|
|||
git
|
||||
mercurial
|
||||
openssh
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
boehmgc
|
||||
nlohmann_json
|
||||
] ++ lib.optionals enableInternalAPIDocs [
|
||||
doxygen
|
||||
];
|
||||
|
||||
disallowedReferences = [ boost ];
|
||||
|
@ -198,30 +237,41 @@ in {
|
|||
''}
|
||||
'';
|
||||
|
||||
configureFlags =
|
||||
lib.optionals stdenv.isLinux [
|
||||
"--with-boost=${boost}/lib"
|
||||
"--with-sandbox-shell=${sh}/bin/busybox"
|
||||
]
|
||||
++ lib.optional (stdenv.isLinux && !(stdenv.hostPlatform.isStatic && stdenv.system == "aarch64-linux"))
|
||||
"LDFLAGS=-fuse-ld=gold"
|
||||
++ [ "--sysconfdir=/etc" ]
|
||||
++ lib.optional stdenv.hostPlatform.isStatic "--enable-embedded-sandbox-shell"
|
||||
++ lib.optional buildUnitTests "RAPIDCHECK_HEADERS=${lib.getDev rapidcheck}/extras/gtest/include"
|
||||
++ lib.optionals installUnitTests [
|
||||
"--enable-install-unit-tests"
|
||||
configureFlags = [
|
||||
"--sysconfdir=/etc"
|
||||
(lib.enableFeature doBuild "build")
|
||||
(lib.enableFeature anySortOfTesting "test")
|
||||
(lib.enableFeature enableInternalAPIDocs "internal-api-docs")
|
||||
(lib.enableFeature canRunInstalled "doc-gen")
|
||||
(lib.enableFeature installUnitTests "install-unit-tests")
|
||||
] ++ lib.optionals installUnitTests [
|
||||
"--with-check-bin-dir=${builtins.placeholder "check"}/bin"
|
||||
"--with-check-lib-dir=${builtins.placeholder "check"}/lib"
|
||||
]
|
||||
++ lib.optional (!canRunInstalled) "--disable-doc-gen";
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
"--with-boost=${boost}/lib"
|
||||
"--with-sandbox-shell=${sh}/bin/busybox"
|
||||
] ++ lib.optional (stdenv.isLinux && !(stdenv.hostPlatform.isStatic && stdenv.system == "aarch64-linux"))
|
||||
"LDFLAGS=-fuse-ld=gold"
|
||||
++ lib.optional stdenv.hostPlatform.isStatic "--enable-embedded-sandbox-shell"
|
||||
++ lib.optional buildUnitTests "RAPIDCHECK_HEADERS=${lib.getDev rapidcheck}/extras/gtest/include";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = "profiledir=$(out)/etc/profile.d PRECOMPILE_HEADERS=1";
|
||||
|
||||
installTargets = lib.optional doBuild "install"
|
||||
++ lib.optional enableInternalAPIDocs "internal-api-html";
|
||||
|
||||
installFlags = "sysconfdir=$(out)/etc";
|
||||
|
||||
postInstall = ''
|
||||
# In this case we are probably just running tests, and so there isn't
|
||||
# anything to install, we just make an empty directory to signify tests
|
||||
# succeeded.
|
||||
installPhase = if finalAttrs.installTargets != [] then null else ''
|
||||
mkdir -p $out
|
||||
'';
|
||||
|
||||
postInstall = lib.optionalString doBuild ''
|
||||
mkdir -p $doc/nix-support
|
||||
echo "doc manual $doc/share/doc/nix/manual" >> $doc/nix-support/hydra-build-products
|
||||
${lib.optionalString stdenv.hostPlatform.isStatic ''
|
||||
|
@ -238,19 +288,29 @@ in {
|
|||
$out/lib/libboost_regex.dylib \
|
||||
$out/lib/libnixexpr.dylib
|
||||
''}
|
||||
'' + lib.optionalString enableInternalAPIDocs ''
|
||||
mkdir -p $out/nix-support
|
||||
echo "doc internal-api-docs $out/share/doc/nix/internal-api/html" >> $out/nix-support/hydra-build-products
|
||||
'';
|
||||
|
||||
doInstallCheck = finalAttrs.doCheck;
|
||||
doInstallCheck = attrs.doInstallCheck;
|
||||
|
||||
installCheckFlags = "sysconfdir=$(out)/etc";
|
||||
installCheckTarget = "installcheck"; # work around buggy detection in stdenv
|
||||
|
||||
# Needed for tests if we are not doing a build, but testing existing
|
||||
# built Nix.
|
||||
preInstallCheck = lib.optionalString (! doBuild) ''
|
||||
mkdir -p src/nix-channel
|
||||
'';
|
||||
|
||||
separateDebugInfo = !stdenv.hostPlatform.isStatic;
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie";
|
||||
|
||||
passthru ={
|
||||
passthru = {
|
||||
inherit filesets;
|
||||
|
||||
perl-bindings = callPackage ./perl {
|
||||
|
@ -258,6 +318,25 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
meta.platforms = lib.platforms.unix;
|
||||
meta.mainProgram = "nix";
|
||||
meta = {
|
||||
platforms = lib.platforms.unix;
|
||||
mainProgram = "nix";
|
||||
broken = !(lib.all (a: a) [
|
||||
(installUnitTests -> doBuild)
|
||||
(doCheck -> doBuild)
|
||||
]);
|
||||
};
|
||||
|
||||
} // lib.optionalAttrs withCoverageChecks {
|
||||
lcovFilter = [ "*/boost/*" "*-tab.*" ];
|
||||
|
||||
hardeningDisable = ["fortify"];
|
||||
|
||||
NIX_CFLAGS_COMPILE = "-DCOVERAGE=1";
|
||||
|
||||
dontInstall = false;
|
||||
} // lib.optionalAttrs (test-daemon != null) {
|
||||
NIX_DAEMON_PACKAGE = test-daemon;
|
||||
} // lib.optionalAttrs (test-client != null) {
|
||||
NIX_CLIENT_PACKAGE = test-client;
|
||||
})
|
||||
|
|
|
@ -6,45 +6,10 @@
|
|||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
NIX_DAEMON_PACKAGE = daemon;
|
||||
NIX_CLIENT_PACKAGE = client;
|
||||
name =
|
||||
"nix-tests"
|
||||
+ lib.optionalString
|
||||
(lib.versionAtLeast daemon.version "2.4pre20211005" &&
|
||||
lib.versionAtLeast client.version "2.4pre20211005")
|
||||
"-${client.version}-against-${daemon.version}";
|
||||
|
||||
inherit (client)
|
||||
version
|
||||
VERSION_SUFFIX
|
||||
nativeBuildInputs
|
||||
buildInputs
|
||||
propagatedBuildInputs
|
||||
;
|
||||
|
||||
src = fileset.toSource {
|
||||
root = ./.;
|
||||
fileset = with client.passthru.filesets;
|
||||
fileset.intersect baseFiles (fileset.unions [
|
||||
configureFiles
|
||||
topLevelBuildFiles
|
||||
functionalTestFiles
|
||||
]);
|
||||
};
|
||||
|
||||
configureFlags = client.configureFlags # otherwise configure fails
|
||||
++ [ "--disable-build" ];
|
||||
|
||||
dontBuild = true;
|
||||
doInstallCheck = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
'';
|
||||
|
||||
installCheckPhase = ''
|
||||
mkdir -p src/nix-channel
|
||||
make installcheck -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES
|
||||
'';
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue