diff --git a/flake.nix b/flake.nix index 647d15b4a..25d025b1c 100644 --- a/flake.nix +++ b/flake.nix @@ -163,16 +163,6 @@ build-release-notes = final.buildPackages.callPackage ./maintainers/build-release-notes.nix { }; clangbuildanalyzer = final.buildPackages.callPackage ./misc/clangbuildanalyzer.nix { }; - boehmgc-nix = (final.boehmgc.override { - enableLargeConfig = true; - }).overrideAttrs (o: { - patches = (o.patches or [ ]) ++ [ - ./boehmgc-coroutine-sp-fallback.diff - - # https://github.com/ivmai/bdwgc/pull/586 - ./boehmgc-traceable_allocator-public.diff - ]; - }); default-busybox-sandbox-shell = final.busybox.override { useMusl = true; @@ -203,10 +193,13 @@ nix = final.callPackage ./package.nix { inherit versionSuffix fileset; stdenv = currentStdenv; - boehmgc = final.boehmgc-nix; busybox-sandbox-shell = final.busybox-sandbox-shell or final.default-busybox-sandbox-shell; nix-doc = final.nix-doc; }; + + # Export the patched version of boehmgc that Lix uses into the overlay + # for consumers of this flake. + boehmgc-nix = final.nix.boehmgc-nix; }; in { @@ -268,7 +261,6 @@ inherit versionSuffix fileset officialRelease buildUnreleasedNotes; inherit (pkgs) build-release-notes; internalApiDocs = true; - boehmgc = pkgs.boehmgc-nix; busybox-sandbox-shell = pkgs.busybox-sandbox-shell; }; in @@ -406,7 +398,6 @@ let nix = pkgs.callPackage ./package.nix { inherit stdenv versionSuffix fileset; - boehmgc = pkgs.boehmgc-nix; busybox-sandbox-shell = pkgs.busybox-sandbox-shell or pkgs.default-busybox-sandbox; forDevShell = true; }; diff --git a/package.nix b/package.nix index 6931726ad..8b1fb48ff 100644 --- a/package.nix +++ b/package.nix @@ -5,6 +5,11 @@ autoconf-archive, autoreconfHook, aws-sdk-cpp, + # If the patched version of Boehm isn't passed, then patch it based off of + # pkgs.boehmgc. This allows `callPackage`ing this file without needing to + # to implement behavior that this package flat out doesn't build without + # anyway, but also allows easily overriding the patch logic. + boehmgc-nix ? __forDefaults.boehmgc-nix, boehmgc, nlohmann_json, bison, @@ -63,6 +68,20 @@ # stuff for argument defaults. __forDefaults ? { canRunInstalled = stdenv.buildPlatform.canExecute stdenv.hostPlatform; + + boehmgc-nix = (boehmgc.override { + enableLargeConfig = true; + }).overrideAttrs { + patches = [ + # We do *not* include prev.patches (which doesn't exist in normal pkgs.boehmgc anyway) + # because if the caller of this package passed a patched boehm as `boehmgc` instead of + # `boehmgc-nix` then this will almost certainly have duplicate patches, which means + # the patches won't apply and we'll get a build failure. + ./boehmgc-coroutine-sp-fallback.diff + # https://github.com/ivmai/bdwgc/pull/586 + ./boehmgc-traceable_allocator-public.diff + ]; + }; }, }: let inherit (__forDefaults) canRunInstalled; @@ -81,7 +100,7 @@ # 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 + boehmgc-nix nlohmann_json ]; @@ -324,4 +343,8 @@ in stdenv.mkDerivation (finalAttrs: { passthru.perl-bindings = pkgs.callPackage ./perl { inherit fileset stdenv buildWithMeson; }; + + # Export the patched version of boehmgc. + # flake.nix exports that into its overlay. + passthru.boehmgc-nix = __forDefaults.boehmgc-nix; })