Merge pull request #164305 from hercules-ci/haskellPackages-shellFor-extraDependencies

haskellPackages.shellFor: Add extraDependencies

authored by Robert Hensing and committed by GitHub 9bc841fe 7e1810ce

+25 -2
+14 -2
pkgs/development/haskell-modules/make-package-set.nix
··· 384 384 # for the "shellFor" environment (ensuring that any test/benchmark 385 385 # dependencies for "foo" will be available within the nix-shell). 386 386 , genericBuilderArgsModifier ? (args: args) 387 + 388 + # Extra dependencies, in the form of cabal2nix build attributes. 389 + # 390 + # An example use case is when you have Haskell scripts that use 391 + # libraries that don't occur in your packages' dependencies. 392 + # 393 + # Example: 394 + # 395 + # extraDependencies = p: { 396 + # libraryHaskellDepends = [ p.releaser ]; 397 + # }; 398 + , extraDependencies ? p: {} 387 399 , ... 388 400 } @ args: 389 401 let ··· 474 486 # See the Note in `zipperCombinedPkgs` for what gets filtered out from 475 487 # each of these dependency lists. 476 488 packageInputs = 477 - pkgs.lib.zipAttrsWith (_name: zipperCombinedPkgs) cabalDepsForSelected; 489 + pkgs.lib.zipAttrsWith (_name: zipperCombinedPkgs) (cabalDepsForSelected ++ [ (extraDependencies self) ]); 478 490 479 491 # A attribute set to pass to `haskellPackages.mkDerivation`. 480 492 # ··· 514 526 # pkgWithCombinedDepsDevDrv :: Derivation 515 527 pkgWithCombinedDepsDevDrv = pkgWithCombinedDeps.envFunc { inherit withHoogle; }; 516 528 517 - mkDerivationArgs = builtins.removeAttrs args [ "genericBuilderArgsModifier" "packages" "withHoogle" "doBenchmark" ]; 529 + mkDerivationArgs = builtins.removeAttrs args [ "genericBuilderArgsModifier" "packages" "withHoogle" "doBenchmark" "extraDependencies" ]; 518 530 519 531 in pkgWithCombinedDepsDevDrv.overrideAttrs (old: mkDerivationArgs // { 520 532 nativeBuildInputs = old.nativeBuildInputs ++ mkDerivationArgs.nativeBuildInputs or [];
+11
pkgs/test/haskell/shellFor/default.nix
··· 2 2 3 3 (haskellPackages.shellFor { 4 4 packages = p: [ p.constraints p.linear ]; 5 + extraDependencies = p: { libraryHaskellDepends = [ p.releaser ]; }; 5 6 nativeBuildInputs = [ cabal-install ]; 6 7 phases = [ "unpackPhase" "buildPhase" "installPhase" ]; 7 8 unpackPhase = '' ··· 16 17 export HOME=$(mktemp -d) 17 18 mkdir -p $HOME/.cabal 18 19 touch $HOME/.cabal/config 20 + 21 + # Check extraDependencies.libraryHaskellDepends arg 22 + ghci <<EOF 23 + :m + Releaser.Primitives 24 + :m + System.IO 25 + writeFile "done" "done" 26 + EOF 27 + [[ done == $(cat done) ]] 28 + 29 + # Check packages arg 19 30 cabal v2-build --offline --verbose constraints linear --ghc-options="-O0 -j$NIX_BUILD_CORES" 20 31 ''; 21 32 installPhase = ''