aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-04 04:01:54 +0100
committereldritch horrors <pennae@lix.systems>2024-03-04 04:36:42 +0100
commitfd1299cef399ec0c33e2b7416c63d78553dc3ced (patch)
tree08a99151470e625c961d44a81462504fbb4257ea
parent4517de00cb0a1cb096d163d9c422ac4f55e383ed (diff)
Merge pull request #9106 from Ericson2314/positive-source-filtering
Use positive source filtering for the standalone functional tests job and Perl bindings (cherry picked from commit 6b6bd9003062c86a49d4384381941cf57f269c45) Change-Id: I896be67654f893d543ed6beb5d0d0d6c6d36e027
-rw-r--r--Makefile15
-rw-r--r--Makefile.config.in3
-rw-r--r--configure.ac11
-rw-r--r--flake.nix73
-rw-r--r--local.mk2
-rw-r--r--perl/Makefile8
-rw-r--r--tests/functional/local.mk6
7 files changed, 79 insertions, 39 deletions
diff --git a/Makefile b/Makefile
index e0be7cdcd..2b8108150 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,7 @@
+-include Makefile.config
+clean-files += Makefile.config
+
+ifeq ($(ENABLE_BUILD), yes)
makefiles = \
mk/precompiled-headers.mk \
local.mk \
@@ -18,15 +22,18 @@ makefiles = \
misc/upstart/local.mk \
doc/manual/local.mk \
doc/internal-api/local.mk
+endif
--include Makefile.config
-
-ifeq ($(tests), yes)
+ifeq ($(ENABLE_BUILD)_$(ENABLE_TESTS), yes_yes)
UNIT_TEST_ENV = _NIX_TEST_UNIT_DATA=unit-test-data
makefiles += \
tests/unit/libutil/local.mk \
tests/unit/libutil-support/local.mk \
- tests/unit/libstore/local.mk \
+ tests/unit/libstore/local.mk
+endif
+
+ifeq ($(ENABLE_TESTS), yes)
+makefiles += \
tests/unit/libstore-support/local.mk \
tests/unit/libexpr/local.mk \
tests/unit/libexpr-support/local.mk \
diff --git a/Makefile.config.in b/Makefile.config.in
index 707cfe0e3..19992fa20 100644
--- a/Makefile.config.in
+++ b/Makefile.config.in
@@ -46,5 +46,6 @@ sandbox_shell = @sandbox_shell@
storedir = @storedir@
sysconfdir = @sysconfdir@
system = @system@
-tests = @tests@
+ENABLE_BUILD = @ENABLE_BUILD@
+ENABLE_TESTS = @ENABLE_TESTS@
internal_api_docs = @internal_api_docs@
diff --git a/configure.ac b/configure.ac
index 6d78237f0..225baf6b5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -152,12 +152,17 @@ if test "x$GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC" = xyes; then
LDFLAGS="-latomic $LDFLAGS"
fi
+# Running the functional tests without building Nix is useful for testing
+# different pre-built versions of Nix against each other.
+AC_ARG_ENABLE(build, AS_HELP_STRING([--disable-build],[Do not build nix]),
+ ENABLE_BUILD=$enableval, ENABLE_BUILD=yes)
+AC_SUBST(ENABLE_BUILD)
# Building without tests is useful for bootstrapping with a smaller footprint
# or running the tests in a separate derivation. Otherwise, we do compile and
# run them.
AC_ARG_ENABLE(tests, AS_HELP_STRING([--disable-tests],[Do not build the tests]),
- tests=$enableval, tests=yes)
-AC_SUBST(tests)
+ ENABLE_TESTS=$enableval, ENABLE_TESTS=yes)
+AC_SUBST(ENABLE_TESTS)
# Building without API docs is the default as Nix' C++ interfaces are internal and unstable.
AC_ARG_ENABLE(internal_api_docs, AS_HELP_STRING([--enable-internal-api-docs],[Build API docs for Nix's internal unstable C++ interfaces]),
@@ -289,7 +294,7 @@ if test "$gc" = yes; then
fi
-if test "$tests" = yes; then
+if test "$ENABLE_TESTS" = yes; then
# Look for gtest.
PKG_CHECK_MODULES([GTEST], [gtest_main])
diff --git a/flake.nix b/flake.nix
index 1d03f1a1f..bc14941fd 100644
--- a/flake.nix
+++ b/flake.nix
@@ -59,30 +59,42 @@
# that would interfere with repo semantics.
fileset.fileFilter (f: f.name != ".gitignore") ./.;
+ configureFiles = fileset.unions [
+ ./.version
+ ./bootstrap.sh
+ ./configure.ac
+ ./m4
+ # TODO: do we really need README.md? It doesn't seem used in the build.
+ ./README.md
+ ];
+
+ topLevelBuildFiles = fileset.unions [
+ ./local.mk
+ ./Makefile
+ ./Makefile.config.in
+ ./mk
+ ];
+
+ functionalTestFiles = fileset.unions [
+ ./tests/functional
+ ./tests/unit
+ (fileset.fileFilter (f: lib.strings.hasPrefix "nix-profile" f.name) ./scripts)
+ ];
+
nixSrc = fileset.toSource {
root = ./.;
fileset = fileset.intersect baseFiles (fileset.unions [
- ./.version
+ configureFiles
+ topLevelBuildFiles
./boehmgc-coroutine-sp-fallback.diff
- ./bootstrap.sh
- ./configure.ac
./doc
- ./local.mk
- ./m4
- ./Makefile
- ./Makefile.config.in
./misc
- ./mk
./precompiled-headers.h
./src
- ./tests/functional
- ./tests/unit
./unit-test-data
./COPYING
./scripts/local.mk
- (fileset.fileFilter (f: lib.strings.hasPrefix "nix-profile" f.name) ./scripts)
- # TODO: do we really need README.md? It doesn't seem used in the build.
- ./README.md
+ functionalTestFiles
]);
};
@@ -253,7 +265,6 @@
testNixVersions = pkgs: client: daemon: with commonDeps { inherit pkgs; }; with pkgs.lib; pkgs.stdenv.mkDerivation {
NIX_DAEMON_PACKAGE = daemon;
NIX_CLIENT_PACKAGE = client;
- HAVE_LOCAL_NIX_BUILD = false;
name =
"nix-tests"
+ optionalString
@@ -262,7 +273,14 @@
"-${client.version}-against-${daemon.version}";
inherit version;
- src = nixSrc;
+ src = fileset.toSource {
+ root = ./.;
+ fileset = fileset.intersect baseFiles (fileset.unions [
+ configureFiles
+ topLevelBuildFiles
+ functionalTestFiles
+ ]);
+ };
VERSION_SUFFIX = versionSuffix;
@@ -272,19 +290,20 @@
enableParallelBuilding = true;
- configureFlags = testConfigureFlags; # otherwise configure fails
+ configureFlags =
+ testConfigureFlags # otherwise configure fails
+ ++ [ "--disable-build" ];
+ dontBuild = true;
doInstallCheck = true;
- buildPhase = ''
- # Remove the source files to make sure that we're not accidentally rebuilding Nix
- rm src/**/*.cc
- '';
-
installPhase = ''
mkdir -p $out
'';
- installCheckPhase = "make installcheck -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES";
+ installCheckPhase = ''
+ mkdir -p src/nix-channel
+ make installcheck -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES
+ '';
};
binaryTarball = nix: pkgs:
@@ -460,7 +479,15 @@
passthru.perl-bindings = with final; perl.pkgs.toPerlModule (currentStdenv.mkDerivation {
name = "nix-perl-${version}";
- src = self;
+ src = fileset.toSource {
+ root = ./.;
+ fileset = fileset.intersect baseFiles (fileset.unions [
+ ./perl
+ ./.version
+ ./m4
+ ./mk
+ ]);
+ };
nativeBuildInputs =
[ buildPackages.autoconf-archive
diff --git a/local.mk b/local.mk
index 6951c179e..3f3abb9f0 100644
--- a/local.mk
+++ b/local.mk
@@ -1,5 +1,3 @@
-clean-files += Makefile.config
-
GLOBAL_CXXFLAGS += -Wno-deprecated-declarations -Werror=switch
# Allow switch-enum to be overridden for files that do not support it, usually because of dependency headers.
ERROR_SWITCH_ENUM = -Werror=switch-enum
diff --git a/perl/Makefile b/perl/Makefile
index c2c95f255..832668dd1 100644
--- a/perl/Makefile
+++ b/perl/Makefile
@@ -1,6 +1,12 @@
makefiles = local.mk
-GLOBAL_CXXFLAGS += -g -Wall -std=c++2a -I ../src
+GLOBAL_CXXFLAGS += -g -Wall -std=c++2a
+
+# A convenience for concurrent development of Nix and its Perl bindings.
+# Not needed in a standalone build of the Perl bindings.
+ifneq ("$(wildcard ../src)", "")
+ GLOBAL_CXXFLAGS += -I ../src
+endif
-include Makefile.config
diff --git a/tests/functional/local.mk b/tests/functional/local.mk
index 5eec6df9e..a2f900a9e 100644
--- a/tests/functional/local.mk
+++ b/tests/functional/local.mk
@@ -1,7 +1,3 @@
-# whether to run the tests that assume that we have a local build of
-# Nix
-HAVE_LOCAL_NIX_BUILD ?= 1
-
nix_tests = \
test-infra.sh \
init.sh \
@@ -130,7 +126,7 @@ ifeq ($(HAVE_LIBCPUID), 1)
nix_tests += compute-levels.sh
endif
-ifeq ($(HAVE_LOCAL_NIX_BUILD), 1)
+ifeq ($(ENABLE_BUILD), yes)
nix_tests += test-libstoreconsumer.sh
ifeq ($(BUILD_SHARED_LIBS), 1)