@@ -50,6 +50,7 @@ let self =
50, writeHieFiles ? component.writeHieFiles
50, writeHieFiles ? component.writeHieFiles
52, ghcOptions ? component.ghcOptions
52, ghcOptions ? component.ghcOptions
53+, contentAddressed ? component.contentAddressed
54# Options for Haddock generation
55# Options for Haddock generation
55, doHaddock ? component.doHaddock # Enable haddock and hoogle generation
56, doHaddock ? component.doHaddock # Enable haddock and hoogle generation
@@ -316,7 +317,13 @@ let
316 componentDrv = drv;
317 componentDrv = drv;
320+ contentAddressedAttrs = lib.optionalAttrs contentAddressed {
321+ __contentAddressed = true;
322+ outputHashMode = "recursive";
323+ outputHashAlgo = "sha256";
319− drv = stdenv.mkDerivation (commonAttrs // {
326+ drv = stdenv.mkDerivation (commonAttrs // contentAddressedAttrs // {
320 pname = nameOnly;
327 pname = nameOnly;
321 inherit (package.identifier) version;
328 inherit (package.identifier) version;
@@ -405,7 +412,17 @@ let
405 (lib.optionalString stdenv.hostPlatform.isWindows ''
412 (lib.optionalString stdenv.hostPlatform.isWindows ''
406 export pkgsHostTargetAsString="''${pkgsHostTarget[@]}"
413 export pkgsHostTargetAsString="''${pkgsHostTarget[@]}"
415+ # The following could be refactored but would lead to many rebuilds
417+ # In case of content addressed components we need avoid parallel building (passing -j1)
418+ # in order to have a deterministic output and therefore avoid potential situations
419+ # where the binary cache becomes useless
420+ # See also https://gitlab.haskell.org/ghc/ghc/-/issues/12935
421+ (if contentAddressed then ''
423+ $SETUP_HS build ${haskellLib.componentTarget componentId} -j1 ${lib.concatStringsSep " " setupBuildFlags}
408− (if stdenv.hostPlatform.isGhcjs then ''
425+ '' else if stdenv.hostPlatform.isGhcjs then ''
409 runHook preBuild
426 runHook preBuild
410 # https://gitlab.haskell.org/ghc/ghc/issues/9221
427 # https://gitlab.haskell.org/ghc/ghc/issues/9221
411 $SETUP_HS build ${haskellLib.componentTarget componentId} ${lib.concatStringsSep " " setupBuildFlags}
428 $SETUP_HS build ${haskellLib.componentTarget componentId} ${lib.concatStringsSep " " setupBuildFlags}