git.iko.soy/typeable/nixpkgs
on master help sign in
haskellPackages.shellFor: Add extraDependencies

An example use case is when you have Haskell scripts that use libraries that don't occur in your packages' dependencies.

commit2e87d165f74411ae00f964a508945696969ff53d authorRobert Hensing <robert@roberthensing.nl> dateTue 15 Mar 2022, 20:36 (5 years ago) parent99a9574
2 files changed+25−2
pkgs/development/haskell-modules/make-package-set.nix+14−2 pkgs/test/haskell/shellFor/default.nix+11
pkgs/development/haskell-modules/make-package-set.nix+14−2
@@ -384,6 +384,18 @@ in package-set { inherit pkgs lib callPackage; } self // {
384384 # for the "shellFor" environment (ensuring that any test/benchmark
385385 # dependencies for "foo" will be available within the nix-shell).
386386 , 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: {}
387399 , ...
388400 } @ args:
389401 let
@@ -474,7 +486,7 @@ in package-set { inherit pkgs lib callPackage; } self // {
474486 # See the Note in `zipperCombinedPkgs` for what gets filtered out from
475487 # each of these dependency lists.
476488 packageInputs =
477− pkgs.lib.zipAttrsWith (_name: zipperCombinedPkgs) cabalDepsForSelected;
489+ pkgs.lib.zipAttrsWith (_name: zipperCombinedPkgs) (cabalDepsForSelected ++ [ (extraDependencies self) ]);
478490
479491 # A attribute set to pass to `haskellPackages.mkDerivation`.
480492 #
@@ -514,7 +526,7 @@ in package-set { inherit pkgs lib callPackage; } self // {
514526 # pkgWithCombinedDepsDevDrv :: Derivation
515527 pkgWithCombinedDepsDevDrv = pkgWithCombinedDeps.envFunc { inherit withHoogle; };
516528
517− mkDerivationArgs = builtins.removeAttrs args [ "genericBuilderArgsModifier" "packages" "withHoogle" "doBenchmark" ];
529+ mkDerivationArgs = builtins.removeAttrs args [ "genericBuilderArgsModifier" "packages" "withHoogle" "doBenchmark" "extraDependencies" ];
518530
519531 in pkgWithCombinedDepsDevDrv.overrideAttrs (old: mkDerivationArgs // {
520532 nativeBuildInputs = old.nativeBuildInputs ++ mkDerivationArgs.nativeBuildInputs or [];
pkgs/test/haskell/shellFor/default.nix+11
@@ -2,6 +2,7 @@
22
33(haskellPackages.shellFor {
44 packages = p: [ p.constraints p.linear ];
5+ extraDependencies = p: { libraryHaskellDepends = [ p.releaser ]; };
56 nativeBuildInputs = [ cabal-install ];
67 phases = [ "unpackPhase" "buildPhase" "installPhase" ];
78 unpackPhase = ''
@@ -16,6 +17,16 @@
1617 export HOME=$(mktemp -d)
1718 mkdir -p $HOME/.cabal
1819 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
1930 cabal v2-build --offline --verbose constraints linear --ghc-options="-O0 -j$NIX_BUILD_CORES"
2031 '';
2132 installPhase = ''