mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-13 21:50:33 +03:00
Merge c73deb7619
into haskell-updates
This commit is contained in:
commit
73a1ced090
338 changed files with 6254 additions and 2711 deletions
|
@ -487,7 +487,7 @@ so:
|
|||
|
||||
```nix
|
||||
let
|
||||
pkgs = import <nixpkgs> {};
|
||||
pkgs = import <nixpkgs> { };
|
||||
inherit (pkgs) haskell;
|
||||
inherit (haskell.lib.compose) overrideCabal;
|
||||
|
||||
|
@ -511,7 +511,7 @@ let
|
|||
previousIntermediates = turtle-full-build-with-incremental-output.intermediates;
|
||||
}) turtle;
|
||||
in
|
||||
turtle-incremental-build
|
||||
turtle-incremental-build
|
||||
```
|
||||
|
||||
## Development environments {#haskell-development-environments}
|
||||
|
@ -590,7 +590,9 @@ that:
|
|||
|
||||
```nix
|
||||
# Retrieve nixpkgs impurely from NIX_PATH for now, you can pin it instead, of course.
|
||||
{ pkgs ? import <nixpkgs> {} }:
|
||||
{
|
||||
pkgs ? import <nixpkgs> { },
|
||||
}:
|
||||
|
||||
# use the nixpkgs default haskell package set
|
||||
pkgs.haskellPackages.callPackage ./my-project.nix { }
|
||||
|
@ -660,7 +662,9 @@ Say our example above depends on `distribution-nixpkgs` and we have a project
|
|||
file set up for both, we can add the following `shell.nix` expression:
|
||||
|
||||
```nix
|
||||
{ pkgs ? import <nixpkgs> {} }:
|
||||
{
|
||||
pkgs ? import <nixpkgs> { },
|
||||
}:
|
||||
|
||||
pkgs.haskellPackages.shellFor {
|
||||
packages = hpkgs: [
|
||||
|
@ -709,7 +713,12 @@ linked to work reliably. You can override the list of supported GHC versions
|
|||
with e.g.
|
||||
|
||||
```nix
|
||||
pkgs.haskell-language-server.override { supportedGhcVersions = [ "90" "94" ]; }
|
||||
pkgs.haskell-language-server.override {
|
||||
supportedGhcVersions = [
|
||||
"90"
|
||||
"94"
|
||||
];
|
||||
}
|
||||
```
|
||||
Where all strings `version` are allowed such that
|
||||
`haskell.packages.ghc${version}` is an existing package set.
|
||||
|
@ -892,11 +901,9 @@ for this to work.
|
|||
derivation:
|
||||
|
||||
```nix
|
||||
pkgs.haskell.lib.overrideCabal
|
||||
(pkgs.haskell.lib.justStaticExecutables my-haskell-package)
|
||||
(drv: {
|
||||
disallowGhcReference = false;
|
||||
})
|
||||
pkgs.haskell.lib.overrideCabal (pkgs.haskell.lib.justStaticExecutables my-haskell-package) (drv: {
|
||||
disallowGhcReference = false;
|
||||
})
|
||||
```
|
||||
|
||||
Then use `strings` to determine which libraries are responsible:
|
||||
|
@ -912,14 +919,12 @@ for this to work.
|
|||
Finally, use `remove-references-to` to delete those store paths from the produced output:
|
||||
|
||||
```nix
|
||||
pkgs.haskell.lib.overrideCabal
|
||||
(pkgs.haskell.lib.justStaticExecutables my-haskell-package)
|
||||
(drv: {
|
||||
postInstall = ''
|
||||
${drv.postInstall or ""}
|
||||
remove-references-to -t ${pkgs.haskellPackages.hs-opentelemetry-sdk}
|
||||
'';
|
||||
})
|
||||
pkgs.haskell.lib.overrideCabal (pkgs.haskell.lib.justStaticExecutables my-haskell-package) (drv: {
|
||||
postInstall = ''
|
||||
${drv.postInstall or ""}
|
||||
remove-references-to -t ${pkgs.haskellPackages.hs-opentelemetry-sdk}
|
||||
'';
|
||||
})
|
||||
```
|
||||
|
||||
[164630]: https://github.com/NixOS/nixpkgs/issues/164630
|
||||
|
@ -1128,12 +1133,20 @@ Haskell packages using [import from derivation][import-from-derivation].
|
|||
|
||||
```nix
|
||||
# cabal get mtl-2.2.1 && cd mtl-2.2.1 && cabal2nix .
|
||||
{ mkDerivation, base, lib, transformers }:
|
||||
{
|
||||
mkDerivation,
|
||||
base,
|
||||
lib,
|
||||
transformers,
|
||||
}:
|
||||
mkDerivation {
|
||||
pname = "mtl";
|
||||
version = "2.2.1";
|
||||
src = ./.;
|
||||
libraryHaskellDepends = [ base transformers ];
|
||||
libraryHaskellDepends = [
|
||||
base
|
||||
transformers
|
||||
];
|
||||
homepage = "http://github.com/ekmett/mtl";
|
||||
description = "Monad classes, using functional dependencies";
|
||||
license = lib.licenses.bsd3;
|
||||
|
@ -1280,60 +1293,69 @@ in
|
|||
# recommended to only use such an overlay if you are enabling profiling on a
|
||||
# platform that doesn't by default, because compiling GHC from scratch is
|
||||
# quite expensive.
|
||||
(final: prev:
|
||||
let
|
||||
inherit (final) lib;
|
||||
in
|
||||
(
|
||||
final: prev:
|
||||
let
|
||||
inherit (final) lib;
|
||||
in
|
||||
|
||||
{
|
||||
haskell = prev.haskell // {
|
||||
compiler = prev.haskell.compiler // {
|
||||
${ghcName} = prev.haskell.compiler.${ghcName}.override {
|
||||
# Unfortunately, the GHC setting is named differently for historical reasons
|
||||
enableProfiledLibs = enableProfiling;
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
|
||||
(final: prev:
|
||||
let
|
||||
inherit (final) lib;
|
||||
haskellLib = final.haskell.lib.compose;
|
||||
in
|
||||
|
||||
{
|
||||
haskell = prev.haskell // {
|
||||
packages = prev.haskell.packages // {
|
||||
${ghcName} = prev.haskell.packages.${ghcName}.override {
|
||||
overrides = hfinal: hprev: {
|
||||
mkDerivation = args: hprev.mkDerivation (args // {
|
||||
# Since we are forcing our ideas upon mkDerivation, this change will
|
||||
# affect every package in the package set.
|
||||
enableLibraryProfiling = enableProfiling;
|
||||
|
||||
# To actually use profiling on an executable, executable profiling
|
||||
# needs to be enabled for the executable you want to profile. You
|
||||
# can either do this globally or…
|
||||
enableExecutableProfiling = enableProfiling;
|
||||
});
|
||||
|
||||
# …only for the package that contains an executable you want to profile.
|
||||
# That saves on unnecessary rebuilds for packages that you only depend
|
||||
# on for their library, but also contain executables (e.g. pandoc).
|
||||
my-executable = haskellLib.enableExecutableProfiling hprev.my-executable;
|
||||
|
||||
# If you are disabling profiling to save on build time, but want to
|
||||
# retain the ability to substitute from the binary cache. Drop the
|
||||
# override for mkDerivation above and instead have an override like
|
||||
# this for the specific packages you are building locally and want
|
||||
# to make cheaper to build.
|
||||
my-library = haskellLib.disableLibraryProfiling hprev.my-library;
|
||||
{
|
||||
haskell = prev.haskell // {
|
||||
compiler = prev.haskell.compiler // {
|
||||
${ghcName} = prev.haskell.compiler.${ghcName}.override {
|
||||
# Unfortunately, the GHC setting is named differently for historical reasons
|
||||
enableProfiledLibs = enableProfiling;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
(
|
||||
final: prev:
|
||||
let
|
||||
inherit (final) lib;
|
||||
haskellLib = final.haskell.lib.compose;
|
||||
in
|
||||
|
||||
{
|
||||
haskell = prev.haskell // {
|
||||
packages = prev.haskell.packages // {
|
||||
${ghcName} = prev.haskell.packages.${ghcName}.override {
|
||||
overrides = hfinal: hprev: {
|
||||
mkDerivation =
|
||||
args:
|
||||
hprev.mkDerivation (
|
||||
args
|
||||
// {
|
||||
# Since we are forcing our ideas upon mkDerivation, this change will
|
||||
# affect every package in the package set.
|
||||
enableLibraryProfiling = enableProfiling;
|
||||
|
||||
# To actually use profiling on an executable, executable profiling
|
||||
# needs to be enabled for the executable you want to profile. You
|
||||
# can either do this globally or…
|
||||
enableExecutableProfiling = enableProfiling;
|
||||
}
|
||||
);
|
||||
|
||||
# …only for the package that contains an executable you want to profile.
|
||||
# That saves on unnecessary rebuilds for packages that you only depend
|
||||
# on for their library, but also contain executables (e.g. pandoc).
|
||||
my-executable = haskellLib.enableExecutableProfiling hprev.my-executable;
|
||||
|
||||
# If you are disabling profiling to save on build time, but want to
|
||||
# retain the ability to substitute from the binary cache. Drop the
|
||||
# override for mkDerivation above and instead have an override like
|
||||
# this for the specific packages you are building locally and want
|
||||
# to make cheaper to build.
|
||||
my-library = haskellLib.disableLibraryProfiling hprev.my-library;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
)
|
||||
]
|
||||
```
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue