mirror of
https://github.com/mrkkrp/megaparsec.git
synced 2024-11-23 10:23:39 +03:00
140 lines
3.4 KiB
Nix
140 lines
3.4 KiB
Nix
{ pkgs ? (import ./nix/nixpkgs)
|
||
, ghc ? "ghc865"
|
||
}:
|
||
|
||
let
|
||
|
||
megaparsecSource = pkgs.lib.sourceByRegex ./. [
|
||
"^CHANGELOG\.md$"
|
||
"^LICENSE\.md$"
|
||
"^README\.md$"
|
||
"^Text.*$"
|
||
"^bench.*$"
|
||
"^megaparsec\.cabal$"
|
||
];
|
||
|
||
megaparsecTestsSource = pkgs.lib.sourceByRegex ./megaparsec-tests [
|
||
"^LICENSE\.md$"
|
||
"^README\.md$"
|
||
"^megaparsec-tests\.cabal$"
|
||
"^src.*$"
|
||
"^tests.*$"
|
||
];
|
||
|
||
parsersBenchSource = pkgs.lib.sourceByRegex ./parsers-bench [
|
||
"^README\.md$"
|
||
"^parsers-bench\.cabal$"
|
||
"^ParsersBench.*$"
|
||
"^bench.*$"
|
||
"^data.*$"
|
||
];
|
||
|
||
doBenchmark = p:
|
||
let targets = ["bench-speed" "bench-memory"];
|
||
copying = pkgs.lib.concatMapStrings
|
||
(t: "cp dist/build/${t}/${t} $out/bench/\n")
|
||
targets;
|
||
in pkgs.haskell.lib.doBenchmark
|
||
(p.overrideAttrs (drv: {
|
||
postInstall = ''
|
||
mkdir -p $out/bench
|
||
if test -d data/
|
||
then
|
||
mkdir -p $out/bench/data
|
||
cp data/* $out/bench/data/
|
||
fi
|
||
${copying}
|
||
'';
|
||
}));
|
||
|
||
megaparsecOverlay = self: super: {
|
||
"megaparsec" = doBenchmark
|
||
(super.callCabal2nix "megaparsec" megaparsecSource { });
|
||
"megaparsec-tests" =
|
||
super.callCabal2nix "megaparsec-tests" megaparsecTestsSource { };
|
||
# The ‘parser-combinators-tests’ package is a bit special because it
|
||
# does not contain an executable nor a library, so its install phase
|
||
# normally fails. We want to build it and run the tests anyway, so we
|
||
# have to do these manipulations.
|
||
"parser-combinators-tests" = pkgs.haskell.lib.dontHaddock
|
||
(super.parser-combinators-tests.overrideAttrs (drv: {
|
||
installPhase = "mkdir $out";
|
||
broken = false;
|
||
}));
|
||
"modern-uri" = doBenchmark super.modern-uri;
|
||
"mmark" = doBenchmark super.mmark;
|
||
"parsers-bench" = doBenchmark
|
||
(super.callCabal2nix "parsers-bench" parsersBenchSource { });
|
||
};
|
||
|
||
updatedPkgs = pkgs // {
|
||
haskell = pkgs.haskell // {
|
||
packages = pkgs.haskell.packages // {
|
||
"${ghc}" = pkgs.haskell.packages.${ghc}.override {
|
||
overrides = megaparsecOverlay;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
|
||
haskellPackages = updatedPkgs.haskell.packages.${ghc};
|
||
|
||
patch = p: patch:
|
||
pkgs.haskell.lib.appendPatch p patch;
|
||
|
||
in {
|
||
# Base: Megaparsec and its unit tests:
|
||
base = pkgs.recurseIntoAttrs {
|
||
inherit (haskellPackages)
|
||
hspec-megaparsec
|
||
megaparsec
|
||
megaparsec-tests
|
||
parser-combinators-tests;
|
||
};
|
||
|
||
# Dependent packages of interest:
|
||
deps = pkgs.recurseIntoAttrs {
|
||
inherit (haskellPackages)
|
||
cachix
|
||
cassava-megaparsec
|
||
cue-sheet
|
||
dhall
|
||
hledger
|
||
hnix
|
||
language-puppet
|
||
mmark
|
||
modern-uri
|
||
replace-megaparsec
|
||
stache
|
||
tomland;
|
||
idris = patch haskellPackages.idris ./nix/patches/idris.patch;
|
||
};
|
||
|
||
# Benchmarks:
|
||
benches = pkgs.recurseIntoAttrs {
|
||
inherit (haskellPackages)
|
||
megaparsec
|
||
mmark
|
||
modern-uri
|
||
parsers-bench;
|
||
};
|
||
|
||
# For development:
|
||
shell = haskellPackages.shellFor {
|
||
packages = ps: [
|
||
ps.megaparsec
|
||
ps.megaparsec-tests
|
||
];
|
||
buildInputs = with haskellPackages; [
|
||
cabal-install
|
||
ghcid
|
||
];
|
||
};
|
||
|
||
# Distribution tarballs:
|
||
dist = with pkgs.haskell.lib; pkgs.recurseIntoAttrs {
|
||
megaparsec = sdistTarball haskellPackages.megaparsec;
|
||
megaparsec-tests = sdistTarball haskellPackages.megaparsec-tests;
|
||
};
|
||
}
|