forked from mirrors/nixpkgs
20560e667a
These versions have been removed: - 6.4.2-binary.nix - 6.4.2.nix - 6.6.1.nix - 6.8.2.nix - 6.8.3.nix - 6.10.1-binary.nix - 6.10.1.nix - 6.10.2.nix - 6.10.3.nix - 6.11.nix - 6.12.1-binary.nix - 6.12.1.nix - 6.12.2.nix - 7.0.1.nix - 7.0.2.nix - 7.0.3.nix - 7.2.1.nix - 7.4.1.nix - 7.6.1.nix - 7.6.2.nix - 7.8.3-binary.nix As a rule of thumb, we keep the latest version in every major release. If someone feels up to the task of fixing versions 6.4.x, 6.6.x, and 6.8.x, then please don't hesitate to revive those builds. Fixes https://github.com/NixOS/nixpkgs/issues/5630.
315 lines
14 KiB
Nix
315 lines
14 KiB
Nix
# Haskell / GHC infrastructure in Nixpkgs
|
||
#
|
||
# In this file, we
|
||
#
|
||
# * define sets of default package versions for each GHC compiler version,
|
||
# * associate GHC versions with bootstrap compiler versions and package defaults.
|
||
#
|
||
# The actual Haskell packages are composed in haskell-packages.nix. There is
|
||
# more documentation in there.
|
||
|
||
{ makeOverridable, lowPrio, hiPrio, stdenv, pkgs, newScope, config, callPackage } : rec {
|
||
|
||
# haskell-packages.nix provides the latest possible version of every package,
|
||
# and this file overrides those version choices per compiler when appropriate.
|
||
# Older compilers inherit the overrides from newer ones.
|
||
|
||
ghcHEADPrefs = self : super : super // {
|
||
cabalInstall_1_20_0_6 = super.cabalInstall_1_20_0_6.override { Cabal = null; };
|
||
mtl = self.mtl_2_2_1;
|
||
ghcjsBase = null;
|
||
ghcjsDom = with self; super.ghcjsDom.override {
|
||
cabal = self.cabal.override {
|
||
extension = self: super: {
|
||
configureFlags = [ "-f-ghcjs" "-fwebkit" "-f-gtk3" ];
|
||
buildDepends = [ mtl glib transformers gtk webkit ];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
|
||
ghc784Prefs = self : super : ghcHEADPrefs self super // {
|
||
cabalInstall_1_20_0_6 = super.cabalInstall_1_20_0_6.override { Cabal = self.Cabal_1_20_0_3; };
|
||
codex = super.codex.override { hackageDb = super.hackageDb.override { Cabal = self.Cabal_1_20_0_3; }; };
|
||
jailbreakCabal = super.jailbreakCabal.override { Cabal = self.Cabal_1_20_0_3; };
|
||
MonadRandom = self.MonadRandom_0_2_0_1; # newer versions require transformers >= 0.4.x
|
||
mtl = self.mtl_2_1_3_1;
|
||
transformersCompat = super.transformersCompat.override { cabal = self.cabal.override {
|
||
extension = self: super: { configureFlags = "-fthree " + super.configureFlags or ""; };
|
||
}; };
|
||
};
|
||
|
||
ghc763Prefs = self : super : ghc784Prefs self super // {
|
||
Cabal_1_22_0_0 = super.Cabal_1_22_0_0.override {
|
||
binary = self.binary_0_7_2_2.override { cabal = self.cabal.override { extension = self: super: { doCheck = false; }; }; };
|
||
};
|
||
aeson = self.aeson_0_7_0_4;
|
||
ariadne = super.ariadne.override {
|
||
haskellNames = self.haskellNames.override {
|
||
haskellPackages = self.haskellPackages.override { Cabal = self.Cabal_1_18_1_3; };
|
||
};
|
||
};
|
||
attoparsec = self.attoparsec_0_11_3_1;
|
||
binaryConduit = super.binaryConduit.override { binary = self.binary_0_7_2_2; };
|
||
bson = super.bson.override { dataBinaryIeee754 = self.dataBinaryIeee754.override { binary = self.binary_0_7_2_2; }; };
|
||
cabal2nix = super.cabal2nix.override { hackageDb = super.hackageDb.override { Cabal = self.Cabal_1_18_1_3; }; };
|
||
cabalInstall_1_16_0_2 = super.cabalInstall_1_16_0_2.override {
|
||
HTTP = self.HTTP.override { network = self.network_2_5_0_0; };
|
||
network = self.network_2_5_0_0;
|
||
};
|
||
criterion = super.criterion.override {
|
||
statistics = self.statistics.override {
|
||
vectorBinaryInstances = self.vectorBinaryInstances.override { binary = self.binary_0_7_2_2; };
|
||
};
|
||
};
|
||
entropy = super.entropy.override { cabal = self.cabal.override { Cabal = self.Cabal_1_18_1_3; }; };
|
||
gloss = null; # requires base >= 4.7
|
||
modularArithmetic = null; # requires base >= 4.7
|
||
pipesBinary = super.pipesBinary.override { binary = self.binary_0_7_2_2; };
|
||
rank1dynamic = super.rank1dynamic.override { binary = self.binary_0_7_2_2; };
|
||
distributedStatic = super.distributedStatic.override { binary = self.binary_0_7_2_2; };
|
||
networkTransport = super.networkTransport.override { binary = self.binary_0_7_2_2; };
|
||
distributedProcess = super.distributedProcess.override { binary = self.binary_0_7_2_2; };
|
||
scientific = self.scientific_0_2_0_2;
|
||
singletons = null; # requires base >= 4.7
|
||
transformers = self.transformers_0_3_0_0; # core packagen in ghc > 7.6.x
|
||
zipArchive = super.zipArchive_0_2_2_1; # works without binary 0.7.x
|
||
};
|
||
|
||
ghc742Prefs = self : super : ghc763Prefs self super // {
|
||
aeson = self.aeson_0_7_0_4.override { blazeBuilder = self.blazeBuilder; };
|
||
extensibleExceptions = null; # core package in ghc <= 7.4.x
|
||
hackageDb = super.hackageDb.override { Cabal = self.Cabal_1_16_0_3; };
|
||
haskeline = super.haskeline.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
primitive = self.primitive_0_5_3_0; # later versions don't compile
|
||
random = self.random_1_0_1_1; # requires base >= 4.6.x
|
||
};
|
||
|
||
ghc722Prefs = self : super : ghc742Prefs self super // {
|
||
cabalInstall = self.cabalInstall_1_20_0_6;
|
||
caseInsensitive = self.caseInsensitive_1_0_0_1;
|
||
deepseq = self.deepseq_1_3_0_2;
|
||
DrIFT = null; # doesn't compile with old GHC versions
|
||
syb = self.syb_0_4_0;
|
||
};
|
||
|
||
ghc704Prefs = self : super : ghc722Prefs self super // {
|
||
binary = self.binary_0_7_2_2; # core package in ghc >= 7.2.2
|
||
caseInsensitive = super.caseInsensitive; # undo the override from ghc 7.2.2
|
||
HsSyck = self.HsSyck_0_51;
|
||
random = null; # core package in ghc <= 7.0.x
|
||
};
|
||
|
||
ghc6123Prefs = self : super : ghc704Prefs self super // {
|
||
alex = self.alex_3_1_3;
|
||
async = self.async_2_0_1_4;
|
||
attoparsec = self.attoparsec_0_10_4_0;
|
||
cabalInstall = self.cabalInstall_1_16_0_2;
|
||
cgi = self.cgi_3001_1_7_5;
|
||
deepseq = self.deepseq_1_2_0_1;
|
||
dlist = super.dlist.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
exceptions = null; # none of our versions compile
|
||
jailbreakCabal = super.jailbreakCabal.override { Cabal = self.Cabal_1_16_0_3; };
|
||
logict = super.logict.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
monadPar = self.monadPar_0_1_0_3;
|
||
nats = null; # none of our versions compile
|
||
networkUri = super.networkUri.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
parallel = self.parallel_3_2_0_3;
|
||
primitive = self.primitive_0_5_0_1;
|
||
reflection = super.reflection.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
scientific = null; # none of our versions compile
|
||
split = self.split_0_1_4_3;
|
||
stm = self.stm_2_4_2;
|
||
syb = null; # core package in ghc < 7
|
||
tagged = super.tagged.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
temporary = null; # none of our versions compile
|
||
vector = super.vector_0_10_9_3;
|
||
vectorAlgorithms = super.vectorAlgorithms.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
};
|
||
|
||
ghc6104Prefs = self : super : ghc6123Prefs self super // {
|
||
alex = self.alex_2_3_5.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
async = null; # none of our versions compile
|
||
attoparsec = null; # none of our versions compile
|
||
binary = super.binary_0_7_2_2.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
cabalInstall_1_16_0_2 = super.cabalInstall_1_16_0_2;
|
||
caseInsensitive = super.caseInsensitive.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
happy = super.happy.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
hashable = super.hashable.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
hashtables = super.hashtables.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
hsyslog = super.hsyslog.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
HTTP = super.HTTP.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
HUnit = super.HUnit.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
network = super.network_2_2_1_7.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
parsec = super.parsec.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
QuickCheck = super.QuickCheck.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
stm = self.stm_2_4_2.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
systemFilepath = super.systemFilepath.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
systemFileio = super.systemFileio.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
tar = super.tar.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
text = self.text_0_11_2_3.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
tfRandom = null; # does not compile
|
||
time = self.time_1_1_2_4.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
zlib = super.zlib.override { cabal = self.cabal.override { Cabal = self.Cabal_1_16_0_3; }; };
|
||
};
|
||
|
||
# Abstraction for Haskell packages collections
|
||
packagesFun = makeOverridable
|
||
({ ghc
|
||
, prefFun
|
||
, extension ? (self : super : {})
|
||
, profExplicit ? false, profDefault ? false
|
||
, modifyPrio ? lowPrio
|
||
} :
|
||
let haskellPackagesClass = import ./haskell-packages.nix {
|
||
inherit pkgs newScope ghc modifyPrio;
|
||
enableLibraryProfiling =
|
||
if profExplicit then profDefault
|
||
else config.cabal.libraryProfiling or profDefault;
|
||
};
|
||
haskellPackagesPrefsClass = self : let super = haskellPackagesClass self; in super // prefFun self super;
|
||
haskellPackagesExtensionClass = self : let super = haskellPackagesPrefsClass self; in super // extension self super;
|
||
haskellPackages = haskellPackagesExtensionClass haskellPackages;
|
||
in haskellPackages);
|
||
|
||
defaultVersionPrioFun =
|
||
profDefault :
|
||
if config.cabal.libraryProfiling or false == profDefault
|
||
then (x : x)
|
||
else lowPrio;
|
||
|
||
packages = args : let r = packagesFun args;
|
||
in r // { lowPrio = r.override { modifyPrio = lowPrio; };
|
||
highPrio = r.override { modifyPrio = hiPrio; };
|
||
noProfiling = r.override { profDefault = false;
|
||
profExplicit = true;
|
||
modifyPrio = defaultVersionPrioFun false; };
|
||
profiling = r.override { profDefault = true;
|
||
profExplicit = true;
|
||
modifyPrio = defaultVersionPrioFun true; };
|
||
};
|
||
|
||
# Compiler configurations
|
||
#
|
||
# Here, we associate compiler versions with bootstrap compiler versions and
|
||
# preference functions.
|
||
|
||
packages_ghc784 =
|
||
packages { ghc = pkgs.haskell-ng.compiler.ghc784;
|
||
prefFun = ghc784Prefs;
|
||
};
|
||
|
||
packages_ghcjs =
|
||
packages {
|
||
ghc = pkgs.haskell-ng.compiler.ghc784;
|
||
prefFun = self : super : super // {
|
||
ghc = let parent = packages_ghc784; in
|
||
callPackage ../development/compilers/ghcjs/wrapper.nix {
|
||
ghc = parent.ghcjs // { inherit parent; };
|
||
};
|
||
cabal = self.cabalJs;
|
||
buildLocalCabalWithArgs = args: super.buildLocalCabalWithArgs (args // {
|
||
nativePkgs = packages_ghc784;
|
||
});
|
||
ghcjsDom = with self; super.ghcjsDom.override {
|
||
cabal = self.cabal.override {
|
||
extension = self: super: {
|
||
configureFlags = [ ];
|
||
buildDepends = [ mtl ghcjsBase ];
|
||
};
|
||
};
|
||
};
|
||
# This is the list of packages that are built into a booted ghcjs installation
|
||
# It can be generated with the command:
|
||
# nix-shell '<nixpkgs>' -A pkgs.haskellPackages_ghcjs.ghc --command "ghcjs-pkg list | sed -n 's/^ \(.*\)-\([0-9.]*\)$/\1_\2/ p' | sed 's/\./_/g' | sed 's/-\(.\)/\U\1/' | sed 's/^\([^_]*\)\(.*\)$/\1 = null;/'"
|
||
Cabal = null;
|
||
aeson = null;
|
||
array = null;
|
||
async = null;
|
||
attoparsec = null;
|
||
base = null;
|
||
binary = null;
|
||
rts = null;
|
||
bytestring = null;
|
||
caseInsensitive = null;
|
||
containers = null;
|
||
deepseq = null;
|
||
directory = null;
|
||
dlist = null;
|
||
extensibleExceptions = null;
|
||
filepath = null;
|
||
ghcPrim = null;
|
||
ghcjsBase = null;
|
||
ghcjsPrim = null;
|
||
hashable = null;
|
||
integerGmp = null;
|
||
mtl = null;
|
||
oldLocale = null;
|
||
oldTime = null;
|
||
parallel = null;
|
||
pretty = null;
|
||
primitive = null;
|
||
process = null;
|
||
scientific = null;
|
||
stm = null;
|
||
syb = null;
|
||
templateHaskell = null;
|
||
text = null;
|
||
time = null;
|
||
transformers = null;
|
||
unix = null;
|
||
unorderedContainers = null;
|
||
vector = null;
|
||
|
||
# GHCJS-specific workarounds
|
||
split = super.split.override {
|
||
cabal = self.cabal.override {
|
||
extension = self: super: {
|
||
doCheck = false; # Under ghcjs, the tests hang
|
||
};
|
||
};
|
||
};
|
||
dependentMap = super.dependentMap.override {
|
||
cabal = self.cabal.override {
|
||
extension = self: super: {
|
||
preConfigure = ''
|
||
sed -i 's/^.*ghc-options:.*$//' *.cabal
|
||
''; # Without this, we get "target ‘base’ is not a module name or a source file"
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
|
||
packages_ghc763 =
|
||
packages { ghc = pkgs.haskell-ng.compiler.ghc763;
|
||
prefFun = ghc763Prefs;
|
||
};
|
||
|
||
packages_ghc742 =
|
||
packages { ghc = pkgs.haskell-ng.compiler.ghc742;
|
||
prefFun = ghc742Prefs;
|
||
};
|
||
|
||
packages_ghc722 =
|
||
packages { ghc = pkgs.haskell-ng.compiler.ghc722;
|
||
prefFun = ghc722Prefs;
|
||
};
|
||
|
||
packages_ghc704 =
|
||
packages { ghc = pkgs.haskell-ng.compiler.ghc704;
|
||
prefFun = ghc704Prefs;
|
||
};
|
||
|
||
packages_ghc6123 =
|
||
packages { ghc = pkgs.haskell-ng.compiler.ghc6123;
|
||
prefFun = ghc6123Prefs;
|
||
};
|
||
|
||
packages_ghc6104 =
|
||
packages { ghc = pkgs.haskell-ng.compiler.ghc6104;
|
||
prefFun = ghc6104Prefs;
|
||
};
|
||
|
||
}
|