diff options
author | Robert Hensing <robert@roberthensing.nl> | 2022-03-15 20:36:31 +0100 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2022-03-15 20:38:22 +0100 |
commit | 2e87d165f74411ae00f964a508945696969ff53d (patch) | |
tree | 607d4fb17da215dd57cf559f28172f3f2bd8139b | |
parent | 99a957451806bdbb866098560dc9b4d78d451719 (diff) | |
download | nixpkgs-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.nix | 16 | ||||
-rw-r--r-- | pkgs/test/haskell/shellFor/default.nix | 11 |
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 = '' |