haskellPackages: Add buildFromCabalSdist (faster, tested)
This commit is contained in:
parent
d06c3e06e5
commit
cf5e2d5103
7 changed files with 94 additions and 0 deletions
|
@ -299,6 +299,9 @@ rec {
|
||||||
directly. The effect is that the package is built as if it were published
|
directly. The effect is that the package is built as if it were published
|
||||||
on hackage. This can be used as a test for the source distribution,
|
on hackage. This can be used as a test for the source distribution,
|
||||||
assuming the build fails when packaging mistakes are in the cabal file.
|
assuming the build fails when packaging mistakes are in the cabal file.
|
||||||
|
|
||||||
|
A faster implementation using `cabal-install` is available as
|
||||||
|
`buildFromCabalSdist` in your Haskell package set.
|
||||||
*/
|
*/
|
||||||
buildFromSdist = pkg: overrideCabal (drv: {
|
buildFromSdist = pkg: overrideCabal (drv: {
|
||||||
src = "${sdistTarball pkg}/${pkg.pname}-${pkg.version}.tar.gz";
|
src = "${sdistTarball pkg}/${pkg.pname}-${pkg.version}.tar.gz";
|
||||||
|
|
|
@ -538,4 +538,44 @@ in package-set { inherit pkgs lib callPackage; } self // {
|
||||||
withHoogle = self.ghcWithHoogle;
|
withHoogle = self.ghcWithHoogle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Run `cabal sdist` on a source.
|
||||||
|
|
||||||
|
Unlike `haskell.lib.sdistTarball`, this does not require any dependencies
|
||||||
|
to be present, as it uses `cabal-install` instead of building `Setup.hs`.
|
||||||
|
This makes `cabalSdist` faster than `sdistTarball`.
|
||||||
|
*/
|
||||||
|
cabalSdist = {
|
||||||
|
src,
|
||||||
|
name ? if src?name then "${src.name}-sdist.tar.gz" else "source.tar.gz"
|
||||||
|
}:
|
||||||
|
pkgs.runCommandNoCCLocal name
|
||||||
|
{
|
||||||
|
inherit src;
|
||||||
|
nativeBuildInputs = [ buildHaskellPackages.cabal-install ];
|
||||||
|
dontUnpack = false;
|
||||||
|
} ''
|
||||||
|
unpackPhase
|
||||||
|
cd "''${sourceRoot:-.}"
|
||||||
|
patchPhase
|
||||||
|
mkdir out
|
||||||
|
HOME=$PWD cabal sdist --output-directory out
|
||||||
|
mv out/*.tar.gz $out
|
||||||
|
'';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Like `haskell.lib.buildFromSdist`, but using `cabal sdist` instead of
|
||||||
|
building `./Setup`.
|
||||||
|
|
||||||
|
Unlike `haskell.lib.buildFromSdist`, this does not require any dependencies
|
||||||
|
to be present. This makes `buildFromCabalSdist` faster than `haskell.lib.buildFromSdist`.
|
||||||
|
*/
|
||||||
|
buildFromCabalSdist = pkg:
|
||||||
|
haskellLib.overrideSrc
|
||||||
|
{
|
||||||
|
src = self.cabalSdist { inherit (pkg) src; };
|
||||||
|
version = pkg.version;
|
||||||
|
}
|
||||||
|
pkg;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
28
pkgs/test/haskell/cabalSdist/default.nix
Normal file
28
pkgs/test/haskell/cabalSdist/default.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{ lib, haskellPackages, runCommand }:
|
||||||
|
|
||||||
|
let
|
||||||
|
localRaw = haskellPackages.callCabal2nix "local" ./local {};
|
||||||
|
in
|
||||||
|
lib.recurseIntoAttrs rec {
|
||||||
|
|
||||||
|
helloFromCabalSdist = haskellPackages.buildFromCabalSdist haskellPackages.hello;
|
||||||
|
|
||||||
|
# A more complicated example with a cabal hook.
|
||||||
|
hercules-ci-cnix-store = haskellPackages.buildFromCabalSdist haskellPackages.hercules-ci-cnix-store;
|
||||||
|
|
||||||
|
localFromCabalSdist = haskellPackages.buildFromCabalSdist localRaw;
|
||||||
|
|
||||||
|
assumptionLocalHasDirectReference = runCommand "localHasDirectReference" {
|
||||||
|
drvPath = builtins.unsafeDiscardOutputDependency localRaw.drvPath;
|
||||||
|
} ''
|
||||||
|
grep ${./local} $drvPath >/dev/null
|
||||||
|
touch $out
|
||||||
|
'';
|
||||||
|
|
||||||
|
localHasNoDirectReference = runCommand "localHasNoDirectReference" {
|
||||||
|
drvPath = builtins.unsafeDiscardOutputDependency localFromCabalSdist.drvPath;
|
||||||
|
} ''
|
||||||
|
grep -v ${./local} $drvPath >/dev/null
|
||||||
|
touch $out
|
||||||
|
'';
|
||||||
|
}
|
5
pkgs/test/haskell/cabalSdist/local/CHANGELOG.md
Normal file
5
pkgs/test/haskell/cabalSdist/local/CHANGELOG.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Revision history for local
|
||||||
|
|
||||||
|
## 0.1.0.0 -- YYYY-mm-dd
|
||||||
|
|
||||||
|
* First version. Released on an unsuspecting world.
|
4
pkgs/test/haskell/cabalSdist/local/app/Main.hs
Normal file
4
pkgs/test/haskell/cabalSdist/local/app/Main.hs
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
module Main where
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = putStrLn "Hello, Haskell!"
|
13
pkgs/test/haskell/cabalSdist/local/local.cabal
Normal file
13
pkgs/test/haskell/cabalSdist/local/local.cabal
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
cabal-version: 2.4
|
||||||
|
name: local
|
||||||
|
version: 0.1.0.0
|
||||||
|
|
||||||
|
synopsis: Nixpkgs test case
|
||||||
|
license: MIT
|
||||||
|
extra-source-files: CHANGELOG.md
|
||||||
|
|
||||||
|
executable local
|
||||||
|
main-is: Main.hs
|
||||||
|
build-depends: base
|
||||||
|
hs-source-dirs: app
|
||||||
|
default-language: Haskell2010
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
lib.recurseIntoAttrs {
|
lib.recurseIntoAttrs {
|
||||||
shellFor = callPackage ./shellFor { };
|
shellFor = callPackage ./shellFor { };
|
||||||
|
cabalSdist = callPackage ./cabalSdist { };
|
||||||
documentationTarball = callPackage ./documentationTarball { };
|
documentationTarball = callPackage ./documentationTarball { };
|
||||||
setBuildTarget = callPackage ./setBuildTarget { };
|
setBuildTarget = callPackage ./setBuildTarget { };
|
||||||
writers = callPackage ./writers { };
|
writers = callPackage ./writers { };
|
||||||
|
|
Loading…
Reference in a new issue