From 58758c0f87c3c643cf6cd188e17597c5299b66d4 Mon Sep 17 00:00:00 2001 From: Alois Wohlschlager Date: Fri, 2 Aug 2024 18:52:38 +0200 Subject: [PATCH] package: improve support for building without BDW-GC Expose an option for disabling the BDW-GC build dependency entirely. Fix the place where one of its headers was included (unnecessarily) without proper guarding. Finally, use this machinery to exclude BDW-GC from the ASAN builds entirely (its usage has already been disabled due to compatibility issues anyway), to ensure this configuration is not regressed again. Change-Id: I2ebe8094abf67e7d1e99eed971de3e99d071c10b --- package.nix | 16 ++++++++-------- src/libexpr/eval.hh | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/package.nix b/package.nix index 7ebe2721b..ef0c1da9d 100644 --- a/package.nix +++ b/package.nix @@ -58,8 +58,11 @@ buildUnreleasedNotes ? true, internalApiDocs ? false, + # Support garbage collection in the evaluator. + enableGC ? sanitize == null || !builtins.elem "address" sanitize, # List of Meson sanitize options. Accepts values of b_sanitize, e.g. # "address", "undefined", "thread". + # Enabling the "address" sanitizer will disable garbage collection in the evaluator. sanitize ? null, # Turn compiler warnings into errors. werror ? false, @@ -118,10 +121,7 @@ let # The internal API docs need these for the build, but if we're not building # Nix itself, then these don't need to be propagated. - maybePropagatedInputs = [ - boehmgc-nix - nlohmann_json - ]; + maybePropagatedInputs = lib.optional enableGC boehmgc-nix ++ [ nlohmann_json ]; # .gitignore has already been processed, so any changes in it are irrelevant # at this point. It is not represented verbatim for test purposes because @@ -179,10 +179,9 @@ stdenv.mkDerivation (finalAttrs: { mesonFlags = let - sanitizeOpts = lib.optionals (sanitize != null) ( - [ "-Db_sanitize=${builtins.concatStringsSep "," sanitize}" ] - ++ lib.optional (builtins.elem "address" sanitize) "-Dgc=disabled" - ); + sanitizeOpts = lib.optional ( + sanitize != null + ) "-Db_sanitize=${builtins.concatStringsSep "," sanitize}"; in lib.optionals hostPlatform.isLinux [ # You'd think meson could just find this in PATH, but busybox is in buildInputs, @@ -196,6 +195,7 @@ stdenv.mkDerivation (finalAttrs: { # mesonConfigurePhase automatically passes -Dauto_features=enabled, # so we must explicitly enable or disable features that we are not passing # dependencies for. + (lib.mesonEnable "gc" enableGC) (lib.mesonEnable "internal-api-docs" internalApiDocs) (lib.mesonBool "enable-tests" finalAttrs.finalPackage.doCheck) (lib.mesonBool "enable-docs" canRunInstalled) diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index e54eede40..a264dd348 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -13,7 +13,6 @@ #include "search-path.hh" #include "repl-exit-status.hh" -#include #include #include #include