aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2023-02-20 20:27:50 +0100
committerRobert Hensing <robert@roberthensing.nl>2023-02-24 09:50:21 +0100
commit8648ebc2cc320578c8b00695d35b3f44141c7bbe (patch)
treee75e859c8e94af7c510c6fb85074cb53bb36c1c9
parent92611e6e4c1c5c712ca7d5f9a258640662d006df (diff)
Add ./configure --disable-tests option
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. This isn't fine grained as to allow picking `check` but not `installcheck` or vice versa, but it's good enough for now. I've tried to use Nixpkgs' `checkInputs`, but those inputs weren't discovered properly by the configure script. We can emulate its behavior very well though.
-rw-r--r--Makefile19
-rw-r--r--Makefile.config.in1
-rw-r--r--configure.ac10
-rw-r--r--flake.nix36
-rw-r--r--mk/disable-tests.mk12
5 files changed, 61 insertions, 17 deletions
diff --git a/Makefile b/Makefile
index 8675c9925..31e4961bc 100644
--- a/Makefile
+++ b/Makefile
@@ -2,13 +2,10 @@ makefiles = \
mk/precompiled-headers.mk \
local.mk \
src/libutil/local.mk \
- src/libutil/tests/local.mk \
src/libstore/local.mk \
- src/libstore/tests/local.mk \
src/libfetchers/local.mk \
src/libmain/local.mk \
src/libexpr/local.mk \
- src/libexpr/tests/local.mk \
src/libcmd/local.mk \
src/nix/local.mk \
src/resolve-system-dependencies/local.mk \
@@ -19,12 +16,22 @@ makefiles = \
misc/systemd/local.mk \
misc/launchd/local.mk \
misc/upstart/local.mk \
- doc/manual/local.mk \
- tests/local.mk \
- tests/plugins/local.mk
+ doc/manual/local.mk
-include Makefile.config
+ifeq ($(tests), yes)
+makefiles += \
+ src/libutil/tests/local.mk \
+ src/libstore/tests/local.mk \
+ src/libexpr/tests/local.mk \
+ tests/local.mk \
+ tests/plugins/local.mk
+else
+makefiles += \
+ mk/disable-tests.mk
+endif
+
OPTIMIZE = 1
ifeq ($(OPTIMIZE), 1)
diff --git a/Makefile.config.in b/Makefile.config.in
index 1c5405c6d..a6c84f2ad 100644
--- a/Makefile.config.in
+++ b/Makefile.config.in
@@ -45,3 +45,4 @@ sandbox_shell = @sandbox_shell@
storedir = @storedir@
sysconfdir = @sysconfdir@
system = @system@
+tests = @tests@
diff --git a/configure.ac b/configure.ac
index 09b3651b9..36e119bed 100644
--- a/configure.ac
+++ b/configure.ac
@@ -145,6 +145,13 @@ if test "x$GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC" = xyes; then
LDFLAGS="-latomic $LDFLAGS"
fi
+# 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)
+
# LTO is currently broken with clang for unknown reasons; ld segfaults in the llvm plugin
AC_ARG_ENABLE(lto, AS_HELP_STRING([--enable-lto],[Enable LTO (only supported with GCC) [default=no]]),
lto=$enableval, lto=no)
@@ -270,6 +277,8 @@ if test "$gc" = yes; then
fi
+if test "$tests" = yes; then
+
# Look for gtest.
PKG_CHECK_MODULES([GTEST], [gtest_main])
@@ -282,6 +291,7 @@ dnl No good for C++ libs with mangled symbols
dnl AC_CHECK_LIB([rapidcheck], [])
AC_LANG_POP(C++)
+fi
# Look for nlohmann/json.
PKG_CHECK_MODULES([NLOHMANN_JSON], [nlohmann_json >= 3.9])
diff --git a/flake.nix b/flake.nix
index 563a46d65..5f2b46d57 100644
--- a/flake.nix
+++ b/flake.nix
@@ -89,15 +89,16 @@
});
configureFlags =
- [
- "CXXFLAGS=-I${lib.getDev rapidcheck}/extras/gtest/include"
- ] ++ lib.optionals stdenv.isLinux [
+ lib.optionals stdenv.isLinux [
"--with-boost=${boost}/lib"
"--with-sandbox-shell=${sh}/bin/busybox"
]
++ lib.optionals (stdenv.isLinux && !(isStatic && stdenv.system == "aarch64-linux")) [
"LDFLAGS=-fuse-ld=gold"
];
+ testConfigureFlags = [
+ "CXXFLAGS=-I${lib.getDev rapidcheck}/extras/gtest/include"
+ ];
nativeBuildDeps =
[
@@ -124,13 +125,16 @@
libarchive
boost
lowdown-nix
- gtest
- rapidcheck
]
++ lib.optionals stdenv.isLinux [libseccomp]
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
++ lib.optional stdenv.hostPlatform.isx86_64 libcpuid;
+ checkDeps = [
+ gtest
+ rapidcheck
+ ];
+
awsDeps = lib.optional (stdenv.isLinux || stdenv.isDarwin)
(aws-sdk-cpp.override {
apis = ["s3" "transfer"];
@@ -200,7 +204,7 @@
VERSION_SUFFIX = versionSuffix;
nativeBuildInputs = nativeBuildDeps;
- buildInputs = buildDeps ++ awsDeps;
+ buildInputs = buildDeps ++ awsDeps ++ checkDeps;
propagatedBuildInputs = propagatedDeps;
enableParallelBuilding = true;
@@ -305,7 +309,7 @@
};
let
canRunInstalled = currentStdenv.buildPlatform.canExecute currentStdenv.hostPlatform;
- in currentStdenv.mkDerivation {
+ in currentStdenv.mkDerivation (finalAttrs: {
name = "nix-${version}";
inherit version;
@@ -318,7 +322,8 @@
nativeBuildInputs = nativeBuildDeps;
buildInputs = buildDeps
# There have been issues building these dependencies
- ++ lib.optionals (currentStdenv.hostPlatform == currentStdenv.buildPlatform) awsDeps;
+ ++ lib.optionals (currentStdenv.hostPlatform == currentStdenv.buildPlatform) awsDeps
+ ++ lib.optionals finalAttrs.doCheck checkDeps;
propagatedBuildInputs = propagatedDeps;
@@ -348,6 +353,7 @@
configureFlags = configureFlags ++
[ "--sysconfdir=/etc" ] ++
lib.optional stdenv.hostPlatform.isStatic "--enable-embedded-sandbox-shell" ++
+ (if finalAttrs.doCheck then testConfigureFlags else [ "--disable-tests" ]) ++
lib.optional (!canRunInstalled) "--disable-doc-gen";
enableParallelBuilding = true;
@@ -369,7 +375,7 @@
''}
'';
- doInstallCheck = true;
+ doInstallCheck = finalAttrs.doCheck;
installCheckFlags = "sysconfdir=$(out)/etc";
separateDebugInfo = !currentStdenv.hostPlatform.isStatic;
@@ -411,7 +417,7 @@
});
meta.platforms = lib.platforms.unix;
- };
+ });
lowdown-nix = with final; currentStdenv.mkDerivation rec {
name = "lowdown-0.9.0";
@@ -462,6 +468,14 @@
buildNoGc = forAllSystems (system: self.packages.${system}.nix.overrideAttrs (a: { configureFlags = (a.configureFlags or []) ++ ["--enable-gc=no"];}));
+ buildNoTests = forAllSystems (system:
+ self.packages.${system}.nix.overrideAttrs (a: {
+ doCheck =
+ assert ! a?dontCheck;
+ false;
+ })
+ );
+
# Perl bindings for various platforms.
perlBindings = forAllSystems (system: nixpkgsFor.${system}.native.nix.perl-bindings);
@@ -634,7 +648,7 @@
nativeBuildInputs = nativeBuildDeps
++ (lib.optionals stdenv.cc.isClang [ pkgs.bear pkgs.clang-tools ]);
- buildInputs = buildDeps ++ propagatedDeps ++ awsDeps;
+ buildInputs = buildDeps ++ propagatedDeps ++ awsDeps ++ checkDeps;
inherit configureFlags;
diff --git a/mk/disable-tests.mk b/mk/disable-tests.mk
new file mode 100644
index 000000000..f72f84412
--- /dev/null
+++ b/mk/disable-tests.mk
@@ -0,0 +1,12 @@
+# This file is only active for `./configure --disable-tests`.
+# Running `make check` or `make installcheck` would indicate a mistake in the
+# caller.
+
+installcheck:
+ @echo "Tests are disabled. Configure without '--disable-tests', or avoid calling 'make installcheck'."
+ @exit 1
+
+# This currently has little effect.
+check:
+ @echo "Tests are disabled. Configure without '--disable-tests', or avoid calling 'make check'."
+ @exit 1