summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2022-03-15 20:36:31 +0100
committerRobert Hensing <robert@roberthensing.nl>2022-03-15 20:38:22 +0100
commit2e87d165f74411ae00f964a508945696969ff53d (patch)
tree607d4fb17da215dd57cf559f28172f3f2bd8139b
parent99a957451806bdbb866098560dc9b4d78d451719 (diff)
downloadnixpkgs-2e87d165f74411ae00f964a508945696969ff53d.tar
nixpkgs-2e87d165f74411ae00f964a508945696969ff53d.tar.gz
nixpkgs-2e87d165f74411ae00f964a508945696969ff53d.tar.bz2
nixpkgs-2e87d165f74411ae00f964a508945696969ff53d.tar.lz
nixpkgs-2e87d165f74411ae00f964a508945696969ff53d.tar.xz
nixpkgs-2e87d165f74411ae00f964a508945696969ff53d.tar.zst
nixpkgs-2e87d165f74411ae00f964a508945696969ff53d.zip
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.
-rw-r--r--pkgs/development/haskell-modules/make-package-set.nix16
-rw-r--r--pkgs/test/haskell/shellFor/default.nix11
2 files changed, 25 insertions, 2 deletions
diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix
index 86f29e73113..80dc94af4df 100644
--- a/pkgs/development/haskell-modules/make-package-set.nix
+++ b/pkgs/development/haskell-modules/make-package-set.nix
@@ -384,6 +384,18 @@ in package-set { inherit pkgs lib callPackage; } self // {
         # for the "shellFor" environment (ensuring that any test/benchmark
         # dependencies for "foo" will be available within the nix-shell).
       , genericBuilderArgsModifier ? (args: args)
+
+        # Extra dependencies, in the form of cabal2nix build attributes.
+        #
+        # An example use case is when you have Haskell scripts that use
+        # libraries that don't occur in your packages' dependencies.
+        #
+        # Example:
+        #
+        #   extraDependencies = p: {
+        #     libraryHaskellDepends = [ p.releaser ];
+        #   };
+      , extraDependencies ? p: {}
       , ...
       } @ args:
       let
@@ -474,7 +486,7 @@ in package-set { inherit pkgs lib callPackage; } self // {
         # See the Note in `zipperCombinedPkgs` for what gets filtered out from
         # each of these dependency lists.
         packageInputs =
-          pkgs.lib.zipAttrsWith (_name: zipperCombinedPkgs) cabalDepsForSelected;
+          pkgs.lib.zipAttrsWith (_name: zipperCombinedPkgs) (cabalDepsForSelected ++ [ (extraDependencies self) ]);
 
         # A attribute set to pass to `haskellPackages.mkDerivation`.
         #
@@ -514,7 +526,7 @@ in package-set { inherit pkgs lib callPackage; } self // {
         # pkgWithCombinedDepsDevDrv :: Derivation
         pkgWithCombinedDepsDevDrv = pkgWithCombinedDeps.envFunc { inherit withHoogle; };
 
-        mkDerivationArgs = builtins.removeAttrs args [ "genericBuilderArgsModifier" "packages" "withHoogle" "doBenchmark" ];
+        mkDerivationArgs = builtins.removeAttrs args [ "genericBuilderArgsModifier" "packages" "withHoogle" "doBenchmark" "extraDependencies" ];
 
       in pkgWithCombinedDepsDevDrv.overrideAttrs (old: mkDerivationArgs // {
         nativeBuildInputs = old.nativeBuildInputs ++ mkDerivationArgs.nativeBuildInputs or [];
diff --git a/pkgs/test/haskell/shellFor/default.nix b/pkgs/test/haskell/shellFor/default.nix
index 04f5e045361..aa06ff6e52f 100644
--- a/pkgs/test/haskell/shellFor/default.nix
+++ b/pkgs/test/haskell/shellFor/default.nix
@@ -2,6 +2,7 @@
 
 (haskellPackages.shellFor {
   packages = p: [ p.constraints p.linear ];
+  extraDependencies = p: { libraryHaskellDepends = [ p.releaser ]; };
   nativeBuildInputs = [ cabal-install ];
   phases = [ "unpackPhase" "buildPhase" "installPhase" ];
   unpackPhase = ''
@@ -16,6 +17,16 @@
     export HOME=$(mktemp -d)
     mkdir -p $HOME/.cabal
     touch $HOME/.cabal/config
+
+    # Check extraDependencies.libraryHaskellDepends arg
+    ghci <<EOF
+    :m + Releaser.Primitives
+    :m + System.IO
+    writeFile "done" "done"
+    EOF
+    [[ done == $(cat done) ]]
+
+    # Check packages arg
     cabal v2-build --offline --verbose constraints linear --ghc-options="-O0 -j$NIX_BUILD_CORES"
   '';
   installPhase = ''