3
0
Fork 0
forked from mirrors/nixpkgs

Merge pull request #79819 from NixOS/haskell-updates

Update Haskell package set to LTS 15.1 (plus other fixes)
This commit is contained in:
Peter Simons 2020-02-28 20:43:50 +01:00 committed by GitHub
commit df2176f7f3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 7733 additions and 10130 deletions

View file

@ -84,18 +84,18 @@ nix-env -qaP -A nixos.haskellPackages
nix-env -iA nixos.haskellPackages.cabal-install
```
Our current default compiler is GHC 8.6.x and the `haskellPackages` set
Our current default compiler is GHC 8.8.x and the `haskellPackages` set
contains packages built with that particular version. Nixpkgs contains the last
three major releases of GHC and there is a whole family of package sets
available that defines Hackage packages built with each of those compilers,
too:
```shell
nix-env -f "<nixpkgs>" -qaP -A haskell.packages.ghc844
nix-env -f "<nixpkgs>" -qaP -A haskell.packages.ghc882
nix-env -f "<nixpkgs>" -qaP -A haskell.packages.ghc865
nix-env -f "<nixpkgs>" -qaP -A haskell.packages.ghc8101
```
The name `haskellPackages` is really just a synonym for
`haskell.packages.ghc865`, because we prefer that package set internally and
`haskell.packages.ghc882`, because we prefer that package set internally and
recommend it to our users as their default choice, but ultimately you are free
to compile your Haskell packages with any GHC version you please. The following
command displays the complete list of available compilers:
@ -112,8 +112,10 @@ haskell.compiler.ghc865 ghc-8.6.5
haskell.compiler.integer-simple.ghc865 ghc-8.6.5
haskell.compiler.ghc881 ghc-8.8.1
haskell.compiler.integer-simple.ghc881 ghc-8.8.1
haskell.compiler.ghc882 ghc-8.8.1.20191211
haskell.compiler.integer-simple.ghc882 ghc-8.8.1.20191211
haskell.compiler.ghc882 ghc-8.8.2
haskell.compiler.integer-simple.ghc882 ghc-8.8.2
haskell.compiler.ghc883 ghc-8.8.3
haskell.compiler.integer-simple.ghc883 ghc-8.8.3
haskell.compiler.ghcjs ghcjs-8.6.0.1
```

View file

@ -1,6 +1,6 @@
{ fetchurl }:
fetchurl {
url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/10e6ea0c54a4aa41de51d1d7e2314115bb2e172a.tar.gz";
sha256 = "0kjy1dxa2kra4j02ni8lpg74jy7fl361yiha330c52spvd2v8i8h";
url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/3ff0be5c9ee1ead33e07158b9a4a579fa2fb7a7f.tar.gz";
sha256 = "15jqdjxyzcmg50zvl7szv6s2zi4k82as5wi6mkiwwpbdricg50pl";
}

View file

@ -84,6 +84,8 @@ let
targetCC = builtins.head toolsForTarget;
useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false);
in
stdenv.mkDerivation (rec {
version = "8.10.0.20200123";
@ -110,7 +112,7 @@ stdenv.mkDerivation (rec {
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString useLdGold ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
@ -158,7 +160,7 @@ stdenv.mkDerivation (rec {
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
] ++ stdenv.lib.optionals useLdGold [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"

View file

@ -79,6 +79,8 @@ let
targetCC = builtins.head toolsForTarget;
useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false);
in
stdenv.mkDerivation (rec {
version = "8.4.4";
@ -126,7 +128,7 @@ stdenv.mkDerivation (rec {
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString useLdGold ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
@ -173,7 +175,7 @@ stdenv.mkDerivation (rec {
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
] ++ stdenv.lib.optionals useLdGold [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"

View file

@ -84,6 +84,8 @@ let
targetCC = builtins.head toolsForTarget;
useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false);
in
stdenv.mkDerivation (rec {
version = "8.6.5";
@ -125,7 +127,7 @@ stdenv.mkDerivation (rec {
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString useLdGold ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
@ -173,7 +175,7 @@ stdenv.mkDerivation (rec {
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
] ++ stdenv.lib.optionals useLdGold [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"

View file

@ -84,6 +84,8 @@ let
targetCC = builtins.head toolsForTarget;
useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false);
in
stdenv.mkDerivation (rec {
version = "8.8.1";
@ -110,7 +112,7 @@ stdenv.mkDerivation (rec {
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString useLdGold ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
@ -158,7 +160,7 @@ stdenv.mkDerivation (rec {
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
] ++ stdenv.lib.optionals useLdGold [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"

View file

@ -84,6 +84,8 @@ let
targetCC = builtins.head toolsForTarget;
useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false);
in
stdenv.mkDerivation (rec {
version = "8.8.2";
@ -110,7 +112,7 @@ stdenv.mkDerivation (rec {
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString useLdGold ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
@ -147,18 +149,24 @@ stdenv.mkDerivation (rec {
# TODO(@Ericson2314): Always pass "--target" and always prefix.
configurePlatforms = [ "build" "host" ]
++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
# `--with` flags for libraries needed for RTS linker
configureFlags = [
"--datadir=$doc/share/doc/ghc"
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
] ++ stdenv.lib.optionals (libffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetPackages.libffi.dev}/include" "--with-ffi-libraries=${targetPackages.libffi.out}/lib"
] ++ stdenv.lib.optionals (libffi != null) [
"--with-system-libffi"
"--with-ffi-includes=${targetPackages.libffi.dev}/include"
"--with-ffi-libraries=${targetPackages.libffi.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && !enableIntegerSimple) [
"--with-gmp-includes=${targetPackages.gmp.dev}/include" "--with-gmp-libraries=${targetPackages.gmp.out}/lib"
"--with-gmp-includes=${targetPackages.gmp.dev}/include"
"--with-gmp-libraries=${targetPackages.gmp.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
"--with-iconv-includes=${libiconv}/include"
"--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
] ++ stdenv.lib.optionals useLdGold [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"

View file

@ -0,0 +1,232 @@
{ stdenv, pkgsBuildTarget, targetPackages
# build-tools
, bootPkgs
, autoconf, automake, coreutils, fetchurl, perl, python3, m4, sphinx
, bash
, libiconv ? null, ncurses
, # GHC can be built with system libffi or a bundled one.
libffi ? null
, useLLVM ? !stdenv.targetPlatform.isx86
, # LLVM is conceptually a run-time-only depedendency, but for
# non-x86, we need LLVM to bootstrap later stages, so it becomes a
# build-time dependency too.
buildLlvmPackages, llvmPackages
, # If enabled, GHC will be built with the GPL-free but slower integer-simple
# library instead of the faster but GPLed integer-gmp library.
enableIntegerSimple ? !(stdenv.lib.any (stdenv.lib.meta.platformMatch stdenv.hostPlatform) gmp.meta.platforms), gmp
, # If enabled, use -fPIC when compiling static libs.
enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
, # Whether to build dynamic libs for the standard library (on the target
# platform). Static libs are always built.
enableShared ? !stdenv.targetPlatform.isWindows && !stdenv.targetPlatform.useiOSPrebuilt
, # Whetherto build terminfo.
enableTerminfo ? !stdenv.targetPlatform.isWindows
, # What flavour to build. An empty string indicates no
# specific flavour and falls back to ghc default values.
ghcFlavour ? stdenv.lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
(if useLLVM then "perf-cross" else "perf-cross-ncg")
, # Whether to disable the large address space allocator
# necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64
}:
assert !enableIntegerSimple -> gmp != null;
let
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
inherit (bootPkgs) ghc;
# TODO(@Ericson2314) Make unconditional
targetPrefix = stdenv.lib.optionalString
(targetPlatform != hostPlatform)
"${targetPlatform.config}-";
buildMK = ''
BuildFlavour = ${ghcFlavour}
ifneq \"\$(BuildFlavour)\" \"\"
include mk/flavours/\$(BuildFlavour).mk
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO
BUILD_SPHINX_PDF = NO
'' + stdenv.lib.optionalString enableRelocatedStaticLibs ''
GhcLibHcOpts += -fPIC
GhcRtsHcOpts += -fPIC
'' + stdenv.lib.optionalString targetPlatform.useAndroidPrebuilt ''
EXTRA_CC_OPTS += -std=gnu99
'';
# Splicer will pull out correct variations
libDeps = platform: stdenv.lib.optional enableTerminfo [ ncurses ]
++ [libffi]
++ stdenv.lib.optional (!enableIntegerSimple) gmp
++ stdenv.lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv;
toolsForTarget = [
pkgsBuildTarget.targetPackages.stdenv.cc
] ++ stdenv.lib.optional useLLVM buildLlvmPackages.llvm;
targetCC = builtins.head toolsForTarget;
in
stdenv.mkDerivation (rec {
version = "8.8.3";
name = "${targetPrefix}ghc-${version}";
src = fetchurl {
url = "https://downloads.haskell.org/ghc/${version}/ghc-${version}-src.tar.xz";
sha256 = "128g932i3wix6ic03v04nh5755vyjiidzri9iybwad72yfmc1p70";
};
enableParallelBuilding = true;
outputs = [ "out" "doc" ];
postPatch = "patchShebangs .";
# GHC is a bit confused on its cross terminology.
preConfigure = ''
for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
export "''${env#TARGET_}=''${!env}"
done
# GHC is a bit confused on its cross terminology, as these would normally be
# the *host* tools.
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
export RANLIB="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ranlib"
export READELF="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}readelf"
export STRIP="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}strip"
echo -n "${buildMK}" > mk/build.mk
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
export NIX_LDFLAGS+=" -no_dtrace_dof"
'' + stdenv.lib.optionalString targetPlatform.useAndroidPrebuilt ''
sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets
'' + stdenv.lib.optionalString targetPlatform.isMusl ''
echo "patching llvm-targets for musl targets..."
echo "Cloning these existing '*-linux-gnu*' targets:"
grep linux-gnu llvm-targets | sed 's/^/ /'
echo "(go go gadget sed)"
sed -i 's,\(^.*linux-\)gnu\(.*\)$,\0\n\1musl\2,' llvm-targets
echo "llvm-targets now contains these '*-linux-musl*' targets:"
grep linux-musl llvm-targets | sed 's/^/ /'
echo "And now patching to preserve '-musleabi' as done with '-gnueabi'"
# (aclocal.m4 is actual source, but patch configure as well since we don't re-gen)
for x in configure aclocal.m4; do
substituteInPlace $x \
--replace '*-android*|*-gnueabi*)' \
'*-android*|*-gnueabi*|*-musleabi*)'
done
'';
# TODO(@Ericson2314): Always pass "--target" and always prefix.
configurePlatforms = [ "build" "host" ]
++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
# `--with` flags for libraries needed for RTS linker
configureFlags = [
"--datadir=$doc/share/doc/ghc"
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
] ++ stdenv.lib.optionals (libffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetPackages.libffi.dev}/include" "--with-ffi-libraries=${targetPackages.libffi.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && !enableIntegerSimple) [
"--with-gmp-includes=${targetPackages.gmp.dev}/include" "--with-gmp-libraries=${targetPackages.gmp.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"
] ++ stdenv.lib.optionals (disableLargeAddressSpace) [
"--disable-large-address-space"
];
# Make sure we never relax`$PATH` and hooks support for compatability.
strictDeps = true;
# Dont add -liconv to LDFLAGS automatically so that GHC will add it itself.
dontAddExtraLibs = true;
nativeBuildInputs = [
perl autoconf automake m4 python3 sphinx
ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour
];
# For building runtime libs
depsBuildTarget = toolsForTarget;
buildInputs = [ perl bash ] ++ (libDeps hostPlatform);
propagatedBuildInputs = [ targetPackages.stdenv.cc ]
++ stdenv.lib.optional useLLVM llvmPackages.llvm;
depsTargetTarget = map stdenv.lib.getDev (libDeps targetPlatform);
depsTargetTargetPropagated = map (stdenv.lib.getOutput "out") (libDeps targetPlatform);
# required, because otherwise all symbols from HSffi.o are stripped, and
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!targetPlatform.isDarwin) "--keep-file-symbols";
checkTarget = "test";
hardeningDisable = [ "format" ] ++ stdenv.lib.optional stdenv.targetPlatform.isMusl "pie";
postInstall = ''
# Install the bash completion file.
install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/${targetPrefix}ghc
# Patch scripts to include "readelf" and "cat" in $PATH.
for i in "$out/bin/"*; do
test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done
'';
passthru = {
inherit bootPkgs targetPrefix;
inherit llvmPackages;
inherit enableShared;
# Our Cabal compiler name
haskellCompilerName = "ghc-${version}";
};
meta = {
homepage = http://haskell.org/ghc;
description = "The Glasgow Haskell Compiler";
maintainers = with stdenv.lib.maintainers; [ marcweber andres peti ];
inherit (ghc.meta) license platforms;
};
} // stdenv.lib.optionalAttrs targetPlatform.useAndroidPrebuilt {
dontStrip = true;
dontPatchELF = true;
noAuditTmpdir = true;
})

View file

@ -85,6 +85,8 @@ let
targetCC = builtins.head toolsForTarget;
useLdGold = targetPlatform.isLinux && !(targetPlatform.useLLVM or false);
in
stdenv.mkDerivation (rec {
inherit version;
@ -117,7 +119,7 @@ stdenv.mkDerivation (rec {
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
# and more generally have a faster linker.
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString useLdGold ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
@ -167,7 +169,7 @@ stdenv.mkDerivation (rec {
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
] ++ stdenv.lib.optionals useLdGold [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"

View file

@ -69,12 +69,12 @@ self: super: {
# The Hackage tarball is purposefully broken, because it's not intended to be, like, useful.
# https://git-annex.branchable.com/bugs/bash_completion_file_is_missing_in_the_6.20160527_tarball_on_hackage/
git-annex = (overrideSrc super.git-annex {
git-annex = (overrideSrc (appendPatch super.git-annex ./patches/git-annex-fix-build-with-ghc-8.8.x.patch) {
src = pkgs.fetchgit {
name = "git-annex-${super.git-annex.version}-src";
url = "git://git-annex.branchable.com/";
rev = "refs/tags/" + super.git-annex.version;
sha256 = "1shb1jgm78bx88rbsr1nmimjzzfqw96qdr38mcrr1c2qz5ky820v";
sha256 = "0pl0yip7zp4i78cj9jqkmm33wqaaaxjq3ggnfmv95y79yijd6yh4";
};
}).override {
dbus = if pkgs.stdenv.isLinux then self.dbus else null;
@ -394,11 +394,6 @@ self: super: {
Random123 = dontCheck super.Random123;
systemd = dontCheck super.systemd;
# use the correct version of network
systemd_2_2_0 = dontCheck (super.systemd_2_2_0.override {
network = self.network_3_1_1_1;
});
# https://github.com/eli-frey/cmdtheline/issues/28
cmdtheline = dontCheck super.cmdtheline;
@ -526,7 +521,9 @@ self: super: {
# Won't compile with recent versions of QuickCheck.
inilist = dontCheck super.inilist;
MissingH = dontCheck super.MissingH;
# Doesn't accept recent versions of 'base' or QuickCheck.
MissingH = dontCheck (doJailbreak super.MissingH);
# https://github.com/yaccz/saturnin/issues/3
Saturnin = dontCheck super.Saturnin;
@ -688,15 +685,6 @@ self: super: {
# https://github.com/goldfirere/singletons/issues/122
singletons = dontCheck super.singletons;
# Fix an aarch64 issue with cryptonite-0.25:
# https://github.com/haskell-crypto/cryptonite/issues/234
# This has been committed upstream, but there is, as of yet, no new release.
# Also, disable the test suite to avoid https://github.com/haskell-crypto/cryptonite/issues/260.
cryptonite = appendPatch (dontCheck super.cryptonite) (pkgs.fetchpatch {
url = https://github.com/haskell-crypto/cryptonite/commit/4622e5fc8ece82f4cf31358e31cd02cf020e558e.patch;
sha256 = "1m2d47ni4jbrpvxry50imj91qahr3r7zkqm157clrzlmw6gzpgnq";
});
# Djinn's last release was 2014, incompatible with Semigroup-Monoid Proposal
# https://github.com/augustss/djinn/pull/8
djinn = appendPatch super.djinn (pkgs.fetchpatch {
@ -1042,34 +1030,7 @@ self: super: {
vector-algorithms = dontCheck super.vector-algorithms;
# The test suite attempts to use the network.
dhall =
generateOptparseApplicativeCompletion "dhall" (
dontCheck super.dhall
);
# https://github.com/dhall-lang/dhall-haskell/commit/dedd5e0ea6fd12f87d887af3d2220eebc61ee8af
# This raises the lower bound on prettyprinter to 1.5.1 since
# `removeTrailingWhitespace` is buggy in earlier versions.
# This will probably be able to be removed when we update to LTS-15.
dhall_1_29_0 =
dontCheck (super.dhall_1_29_0.override {
prettyprinter = self.prettyprinter_1_6_0;
prettyprinter-ansi-terminal =
self.prettyprinter-ansi-terminal.override {
prettyprinter = self.prettyprinter_1_6_0;
};
});
dhall-bash_1_0_27 = super.dhall-bash_1_0_27.override { dhall = self.dhall_1_29_0; };
dhall-json_1_6_1 = super.dhall-json_1_6_1.override {
dhall = self.dhall_1_29_0;
prettyprinter = self.prettyprinter_1_6_0;
prettyprinter-ansi-terminal =
self.prettyprinter-ansi-terminal.override {
prettyprinter = self.prettyprinter_1_6_0;
};
};
# Tests for dhall access the network.
dhall_1_27_0 = dontCheck super.dhall_1_27_0;
dhall = generateOptparseApplicativeCompletion "dhall" (dontCheck super.dhall);
# Missing test files in source distribution, fixed once 1.4.0 is bumped
# https://github.com/dhall-lang/dhall-haskell/pull/997
@ -1096,7 +1057,6 @@ self: super: {
# The test suite is broken. Break out of "base-compat >=0.9.3 && <0.10, hspec >=2.4.4 && <2.5".
haddock-library = doJailbreak (dontCheck super.haddock-library);
haddock-library_1_8_0 = doJailbreak super.haddock-library_1_8_0;
# Generate shell completion.
cabal2nix = generateOptparseApplicativeCompletion "cabal2nix" super.cabal2nix;
@ -1205,12 +1165,6 @@ self: super: {
# Fix build with attr-2.4.48 (see #53716)
xattr = appendPatch super.xattr ./patches/xattr-fix-build.patch;
# These packages needs network 3.x, which is not in LTS-13.x.
network-bsd_2_8_1_0 = super.network-bsd_2_8_1_0.override { network = self.network_3_0_1_1; };
lambdabot-core = super.lambdabot-core.overrideScope (self: super: { network = self.network_3_0_1_1; hslogger = self.hslogger_1_3_0_0; });
lambdabot-reference-plugins = super.lambdabot-reference-plugins.overrideScope (self: super: { network = self.network_3_0_1_1; hslogger = self.hslogger_1_3_0_0; });
lambdabot-haskell-plugins = super.lambdabot-haskell-plugins.overrideScope (self: super: { network = self.network_3_0_1_1; });
# Some tests depend on a postgresql instance
# Haddock failure: https://github.com/haskell/haddock/issues/979
esqueleto = dontHaddock (dontCheck super.esqueleto);
@ -1235,12 +1189,6 @@ self: super: {
# Test suite won't link for no apparent reason.
constraints-deriving = dontCheck super.constraints-deriving;
# Use a matching version of ghc-lib-parser.
ghc-lib-parser-ex = super.ghc-lib-parser-ex.override { ghc-lib-parser = self.ghc-lib-parser_8_8_2_20200205; };
# https://github.com/sol/hpack/issues/366
hpack = self.hpack_0_33_0;
# QuickCheck >=2.3 && <2.13, hspec >=2.1 && <2.7
graphviz = dontCheck super.graphviz;
@ -1256,10 +1204,6 @@ self: super: {
'';
});
# The LTS-14.x version of their dependencies are too old.
cabal-plan = super.cabal-plan.overrideScope (self: super: { optparse-applicative = self.optparse-applicative_0_15_1_0; ansi-terminal = self.ansi-terminal_0_10_2; base-compat = self.base-compat_0_11_1; semialign = self.semialign_1_1; time-compat = doJailbreak super.time-compat; });
hoogle = super.hoogle.override { haskell-src-exts = self.haskell-src-exts_1_23_0; };
# Version bounds for http-client are too strict:
# https://github.com/bitnomial/prometheus/issues/34
prometheus = doJailbreak super.prometheus;
@ -1296,10 +1240,6 @@ self: super: {
# upstream issue: https://github.com/vmchale/atspkg/issues/12
language-ats = dontCheck super.language-ats;
# polysemy-plugin requires polysemy >= 1.2.0.0
polysemy = self.polysemy_1_2_3_0;
polysemy-zoo = self.polysemy-zoo_0_6_0_1;
# https://github.com/Happstack/web-routes-th/pull/3
web-routes-th = doJailbreak super.web-routes-th;
@ -1330,32 +1270,8 @@ self: super: {
# https://github.com/kazu-yamamoto/dns/issues/150
dns = dontCheck super.dns;
# needs newer version of the systemd package
spacecookie = super.spacecookie.override { systemd = self.systemd_2_2_0; };
# 2019-12-19 - glirc wants regex-tdfa >=1.3 which results in errors with regex-base which errors more
# hoping to make a proper derivation with plugins enabled and more reliable building -- kiwi
# 2020-01-17 - as of recently the basic doJailbreak is not enough and have to override regex-tdfa which needs an override for regex-base
glirc = doJailbreak (super.glirc.override {
regex-tdfa = self.regex-tdfa_1_3_1_0;
});
regex-tdfa_1_3_1_0 = doJailbreak (super.regex-tdfa_1_3_1_0.override {
regex-base = self.regex-base_0_94_0_0;
});
# 2020-01-19 - there were conflicting versions of brick, vty, and brick-skylighting;
# multiple versions of them were being pulled in by the others which is not allowed.
# There are more complicated ways of doing this but I was able to make it fairly simple -- kiwi
matterhorn = doJailbreak (super.matterhorn.override {
brick-skylighting = self.brick-skylighting.override {
brick = self.brick_0_51;
};
});
# 2020-01-19 - because of QuickCheck bounds | was broken anyway and is needed for matterhorn -- kiwi
Unique = doJailbreak super.Unique;
# Support recent versions of fast-logger.
spacecookie = doJailbreak super.spacecookie;
# apply patches from https://github.com/snapframework/snap-server/pull/126
# manually until they are accepted upstream
@ -1380,17 +1296,97 @@ self: super: {
# Needs ghc-lib-parser 8.8.1 (does not build with 8.8.0)
ormolu = doJailbreak (super.ormolu.override {
ghc-lib-parser = self.ghc-lib-parser_8_8_2_20200205;
ghc-lib-parser = self.ghc-lib-parser_8_8_3_20200224;
});
# krank-0.1.0 does not accept PyF-0.9.0.0.
krank = doJailbreak super.krank;
# prettyprinter-1.6.0 fails its doctest suite.
prettyprinter_1_6_0 = dontCheck super.prettyprinter_1_6_0;
# the test suite has an overly tight restriction on doctest
# See https://github.com/ekmett/perhaps/pull/5
perhaps = doJailbreak super.perhaps;
# it wants to build a statically linked binary by default
hledger-flow = overrideCabal super.hledger-flow ( drv: {
postPatch = (drv.postPatch or "") + ''
substituteInPlace hledger-flow.cabal --replace "-static" ""
'';
});
# cabal-fmt requires Cabal3
cabal-fmt = super.cabal-fmt.override { Cabal = self.Cabal_3_0_0_0; };
# Several gtk2hs-provided packages at v0.13.8.0 fail to build on Darwin
# until we pick up https://github.com/gtk2hs/gtk2hs/pull/293 so apply that
# patch here. That single patch is for the gtk2hs super-repo, out of which
# we extract the patch for each indvidiual project (glib/gio/pango/gtk/gtk3).
glib = appendPatch super.glib (pkgs.fetchpatch {
url = "https://github.com/gtk2hs/gtk2hs/commit/1cf2f9bff2427d39986e32880d1383cfff49ab0e.patch";
includes = [ "glib.cabal" ];
stripLen = 1;
sha256 = "1zdss1xgsbijs3kx8dp5a81qryrfc1zm1xrd20whna3dqakf8b7g";
});
gio = appendPatch super.gio (pkgs.fetchpatch {
url = "https://github.com/gtk2hs/gtk2hs/commit/1cf2f9bff2427d39986e32880d1383cfff49ab0e.patch";
includes = [ "gio.cabal" ];
stripLen = 1;
sha256 = "0d72k6gqvgax9jcqi3gz1gqnar7jg8p5065z3mw2fcwvdw46s2zv";
});
pango = appendPatch super.pango (pkgs.fetchpatch {
url = "https://github.com/gtk2hs/gtk2hs/commit/1cf2f9bff2427d39986e32880d1383cfff49ab0e.patch";
includes = [ "pango.cabal" ];
stripLen = 1;
sha256 = "0dc221wlmyhc24h6ybfhbkxmcx4i6bvkbr1zgqidbnj3yp6w0l5w";
});
# gtk/gtk3 have an additional complication: independent of the above
# 0.13.8.0-specific fix, they need to be told on Darwin to use the Quartz
# rather than X11 backend (see eg https://github.com/gtk2hs/gtk2hs/issues/249).
gtk3 =
let
patchedGtk3 = appendPatch super.gtk3 (pkgs.fetchpatch {
url = "https://github.com/gtk2hs/gtk2hs/commit/1cf2f9bff2427d39986e32880d1383cfff49ab0e.patch";
includes = [ "gtk3.cabal" ];
stripLen = 1;
sha256 = "0zvj0dzfwf9bksfhi0m4v0h5aij236gd0qhyr1adpdcjrkd8zbkd";
});
in
# The appendConfigureFlags should remain even after we can drop patchedGtk3.
appendConfigureFlags patchedGtk3 (pkgs.lib.optional pkgs.stdenv.isDarwin "-f have-quartz-gtk");
gtk =
let
patchedGtk = appendPatch super.gtk (pkgs.fetchpatch {
url = "https://github.com/gtk2hs/gtk2hs/commit/1cf2f9bff2427d39986e32880d1383cfff49ab0e.patch";
includes = [ "gtk.cabal-renamed" ];
stripLen = 1;
sha256 = "0wb0scvmhg8b42hxpns9m6zak3r8b25a2z7wg6vl56n17nb635l7";
# One final complication: the gtk cabal file in the source repo (as seen
# by the patch) is `gtk.cabal-renamed`, but this gets changed to the usual
# `gtk.cabal` before uploading to Hackage by a script.
postFetch = ''
substituteInPlace $out --replace "-renamed" ""
'';
});
in
# The appendConfigureFlags should remain even after we can drop patchedGtk.
appendConfigureFlags patchedGtk (pkgs.lib.optional pkgs.stdenv.isDarwin "-f have-quartz-gtk");
# Chart-tests needs and compiles some modules from Chart itself
Chart-tests = (addExtraLibrary super.Chart-tests self.QuickCheck).overrideAttrs (old: {
preCheck = old.postPatch or "" + ''
tar --one-top-level=../chart --strip-components=1 -xf ${self.Chart.src}
'';
});
# Unnecessary upper bound on vector <0.12.1
bitwise-enum = doJailbreak super.bitwise-enum;
# This breaks because of version bounds, but compiles and runs fine.
# Last commit is 5 years ago, so we likely won't get upstream fixed soon.
# https://bitbucket.org/rvlm/hakyll-contrib-hyphenation/src/master/
# Therefore we jailbreak it.
hakyll-contrib-hyphenation = doJailbreak super.hakyll-contrib-hyphenation;
# https://github.com/bergmark/feed/issues/43
feed = dontCheck super.feed;
} // import ./configuration-tensorflow.nix {inherit pkgs haskellLib;} self super

View file

@ -44,27 +44,21 @@ self: super: {
# Jailbreak to fix the build.
async = doJailbreak super.async;
ChasingBottoms = doJailbreak super.ChasingBottoms;
hashable = doJailbreak super.hashable;
primitive_0_7_0_0 = doJailbreak (dontCheck super.primitive_0_7_0_0); # evaluating the test suite gives an infinite recursion
regex-base_0_94_0_0 = doJailbreak super.regex-base_0_94_0_0;
regex-compat_0_95_2_0 = doJailbreak super.regex-compat_0_95_2_0;
regex-posix_0_96_0_0 = doJailbreak super.regex-posix_0_96_0_0;
parallel = doJailbreak super.parallel;
regex-base = doJailbreak super.regex-base;
regex-compat = doJailbreak super.regex-compat;
regex-pcre-builtin = doJailbreak super.regex-pcre-builtin;
regex-posix = doJailbreak super.regex-posix;
regex-tdfa = doJailbreak super.regex-tdfa;
split = doJailbreak super.split;
tar = doJailbreak super.tar;
tasty-expected-failure = doJailbreak super.tasty-expected-failure;
unliftio-core = doJailbreak super.unliftio-core;
vector = doJailbreak super.vector;
zlib = doJailbreak super.zlib;
parallel = doJailbreak super.parallel;
split = doJailbreak super.split;
# Use the latest version to fix the build.
generic-deriving = self.generic-deriving_1_13_1;
optparse-applicative = self.optparse-applicative_0_15_1_0;
primitive = self.primitive_0_7_0_0;
regex-base = self.regex-base_0_94_0_0;
regex-compat = self.regex-compat_0_95_2_0;
regex-pcre-builtin = self.regex-pcre-builtin_0_95_1_1_8_43;
regex-posix = self.regex-posix_0_96_0_0;
regex-tdfa = self.regex-tdfa_1_3_1_0;
}

View file

@ -68,86 +68,26 @@ self: super: {
io-streams-haproxy = doJailbreak super.io-streams-haproxy; # base >=4.5 && <4.13
snap-server = doJailbreak super.snap-server;
xmobar = doJailbreak super.xmobar;
# use latest version to fix the build
brick = self.brick_0_51;
dbus = self.dbus_1_2_11;
doctemplates = self.doctemplates_0_8;
exact-pi = doJailbreak super.exact-pi;
generics-sop = self.generics-sop_0_5_0_0;
hackage-db = self.hackage-db_2_1_0;
haddock-library = self.haddock-library_1_8_0;
haskell-src-meta = self.haskell-src-meta_0_8_5;
haskell-src-meta_0_8_5 = dontCheck super.haskell-src-meta_0_8_5;
HaTeX = self.HaTeX_3_22_0_0;
HsYAML = self.HsYAML_0_2_1_0;
json-autotype = doJailbreak super.json-autotype;
lens = self.lens_4_19;
memory = self.memory_0_15_0;
microlens = self.microlens_0_4_11_2;
microlens-ghc = self.microlens-ghc_0_4_12;
microlens-mtl = self.microlens-mtl_0_2_0_1;
microlens-platform = self.microlens-platform_0_4_1;
microlens-th = self.microlens-th_0_4_3_4;
network = self.network_3_1_1_1;
optparse-applicative = self.optparse-applicative_0_15_1_0;
pandoc = dontCheck super.pandoc_2_9_1_1; # https://github.com/jgm/pandoc/issues/6086
pandoc-types = self.pandoc-types_1_20;
prettyprinter = self.prettyprinter_1_6_0;
primitive = dontCheck super.primitive_0_7_0_0; # evaluating the test suite gives an infinite recursion
regex-base = self.regex-base_0_94_0_0;
regex-compat = self.regex-compat_0_95_2_0;
regex-pcre-builtin = self.regex-pcre-builtin_0_95_1_1_8_43;
regex-posix = self.regex-posix_0_96_0_0;
regex-tdfa = self.regex-tdfa_1_3_1_0;
shelly = self.shelly_1_9_0;
singletons = self.singletons_2_6;
skylighting = self.skylighting_0_8_3_2;
skylighting-core = self.skylighting-core_0_8_3_2;
sop-core = self.sop-core_0_5_0_0;
texmath = self.texmath_0_12;
th-desugar = self.th-desugar_1_10;
tls = self.tls_1_5_3;
trifecta = self.trifecta_2_1;
vty = self.vty_5_26;
xml-conduit = overrideCabal super.xml-conduit (drv: { version = "1.9.0.0"; sha256 = "1p57v127882rxvvmwjmvnqdmk3x2wg1z4d8y03849h0xaz1vid0w"; });
xmonad-contrib = self.xmonad-contrib_0_16;
time-compat = doJailbreak super.time-compat;
http-media = doJailbreak super.http-media;
servant-server = doJailbreak super.servant-server;
# These packages don't work and need patching and/or an update.
hackage-security = appendPatch (doJailbreak super.hackage-security) (pkgs.fetchpatch {
url = "https://raw.githubusercontent.com/hvr/head.hackage/master/patches/hackage-security-0.5.3.0.patch";
sha256 = "0l8x0pbsn18fj5ak5q0g5rva4xw1s9yc4d86a1pfyaz467b9i5a4";
});
polyparse = appendPatch (doJailbreak super.polyparse) (pkgs.fetchpatch {
url = "https://raw.githubusercontent.com/hvr/head.hackage/master/patches/polyparse-1.12.1.patch";
sha256 = "01b2gnsq0x4fd9na8zpk6pajym55mbz64hgzawlwxdw0y6681kr5";
});
foundation = dontCheck super.foundation;
vault = dontHaddock super.vault;
# https://github.com/snapframework/snap-core/issues/288
snap-core = overrideCabal super.snap-core (drv: { prePatch = "substituteInPlace src/Snap/Internal/Core.hs --replace 'fail = Fail.fail' ''"; });
# needs a release
json = overrideCabal super.json (drv: { prePatch = "substituteInPlace json.cabal --replace '4.13' '4.14'"; patches = [(
pkgs.fetchpatch {
url = "https://github.com/GaloisInc/json/commit/9d36ca5d865be7e4b2126b68a444b901941d2492.patch";
sha256 = "0vyi5nbivkqg6zngq7rb3wwcj9043m4hmyk155nrcddl8j2smfzv";
}
)]; });
# Upstream ships a broken Setup.hs file.
csv = overrideCabal super.csv (drv: { prePatch = "rm Setup.hs"; });
# mark broken packages
bencode = markBrokenVersion "0.6.0.0" super.bencode;
easytest = markBroken super.easytest;
easytest_0_3 = markBroken super.easytest_0_3;
haskell-src = markBrokenVersion "1.0.3.0" super.haskell-src;
# The LTS-14.x version of the dependencies are too old.
policeman = super.policeman.overrideScope (self: super: { ansi-terminal = self.ansi-terminal_0_10_2; relude = self.relude_0_6_0_0; });
# https://github.com/kowainik/relude/issues/241
relude_0_6_0_0 = dontCheck super.relude_0_6_0_0;
relude = dontCheck super.relude;
}

File diff suppressed because it is too large Load diff

View file

@ -640,18 +640,22 @@ self: super: builtins.intersectAttrs super {
# we can safely jailbreak spago and use the older directory package from
# LTS-14.
spagoWithOverrides = doJailbreak (super.spago.override {
# spago requires dhall_1_27_0.
dhall = self.dhall_1_27_0;
# spago requires dhall-1.29.0.
dhall = self.dhall_1_29_0;
});
# This defines the version of the purescript-docs-search release we are using.
# This is defined in the src/Spago/Prelude.hs file in the spago source.
docsSearchVersion = "v0.0.8";
docsSearchAppJsFile = pkgs.fetchurl {
url = "https://github.com/spacchetti/purescript-docs-search/releases/download/v0.0.5/docs-search-app.js";
sha256 = "11721x455qzh40vzfmralaynn9v8b5wix86r107hhs08vhryjib2";
url = "https://github.com/spacchetti/purescript-docs-search/releases/download/${docsSearchVersion}/docs-search-app.js";
sha256 = "00pzi7pgjicpa0mg0al80gh2q1q2lqiyb3kjarpydlmn8dfjny7v";
};
purescriptDocsSearchFile = pkgs.fetchurl {
url = "https://github.com/spacchetti/purescript-docs-search/releases/download/v0.0.5/purescript-docs-search";
sha256 = "16p1fmdvpwz1yswav8qjsd26c9airb22xncqw1rjnbd8lcpqx0p5";
url = "https://github.com/spacchetti/purescript-docs-search/releases/download/${docsSearchVersion}/purescript-docs-search";
sha256 = "1hsi1hc4p1z2xbw82w2jxmmczw6mravli1r89vrkivb72sqdjya7";
};
spagoFixHpack = overrideCabal spagoWithOverrides (drv: {
@ -676,6 +680,11 @@ self: super: builtins.intersectAttrs super {
# https://github.com/spacchetti/spago/issues/510
cp ${docsSearchAppJsFile} "$sourceRoot/templates/docs-search-app.js"
cp ${purescriptDocsSearchFile} "$sourceRoot/templates/purescript-docs-search"
# For some weird reason, on Darwin, the open(2) call to embed these files
# requires write permissions. The easiest resolution is just to permit that
# (doesn't cause any harm on other systems).
chmod u+w "$sourceRoot/templates/docs-search-app.js" "$sourceRoot/templates/purescript-docs-search"
'';
});
@ -688,4 +697,17 @@ self: super: builtins.intersectAttrs super {
# checks SQL statements at compile time, and so requires a running PostgreSQL
# database to run it's test suite
postgresql-typed = dontCheck super.postgresql-typed;
# mplayer-spot uses mplayer at runtime.
mplayer-spot =
let path = pkgs.stdenv.lib.makeBinPath [ pkgs.mplayer ];
in overrideCabal (addBuildTool super.mplayer-spot pkgs.makeWrapper) (oldAttrs: {
postInstall = ''
wrapProgram $out/bin/mplayer-spot --prefix PATH : "${path}"
'';
});
# break infinite recursion with base-orphans
primitive = dontCheck super.primitive;
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,125 @@
From f8d8959e43abd88c5e977079f0948e45cf4c0b0c Mon Sep 17 00:00:00 2001
From: Peter Simons <simons@cryp.to>
Date: Fri, 28 Feb 2020 11:56:48 +0100
Subject: [PATCH] Fix build with ghc-8.8.x.
The 'fail' method has been moved to the 'MonadFail' class. I made the changes
so that the code still compiles with previous versions of 'base' that don't
have the new MonadFail class exported by Prelude yet.
---
CmdLine/GitAnnex/Options.hs | 5 +++--
Command/Expire.hs | 5 +++--
Command/Init.hs | 7 ++++---
Utility/HumanTime.hs | 5 +++--
4 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/CmdLine/GitAnnex/Options.hs b/CmdLine/GitAnnex/Options.hs
index 030c83dd5..a9a36d76f 100644
--- a/CmdLine/GitAnnex/Options.hs
+++ b/CmdLine/GitAnnex/Options.hs
@@ -9,6 +9,7 @@
module CmdLine.GitAnnex.Options where
+import Control.Monad.Fail as Fail ( MonadFail(..) )
import Options.Applicative
import qualified Data.Map as M
@@ -215,8 +216,8 @@ parseAllOption = flag' WantAllKeys
<> help "operate on all versions of all files"
)
-parseKey :: Monad m => String -> m Key
-parseKey = maybe (fail "invalid key") return . deserializeKey
+parseKey :: MonadFail m => String -> m Key
+parseKey = maybe (Fail.fail "invalid key") return . deserializeKey
-- Options to match properties of annexed files.
annexedMatchingOptions :: [GlobalOption]
diff --git a/Command/Expire.hs b/Command/Expire.hs
index 83c38e569..37dc33883 100644
--- a/Command/Expire.hs
+++ b/Command/Expire.hs
@@ -17,6 +17,7 @@ import Annex.VectorClock
import qualified Remote
import Utility.HumanTime
+import Control.Monad.Fail as Fail ( MonadFail(..) )
import Data.Time.Clock.POSIX
import qualified Data.Map as M
@@ -105,9 +106,9 @@ parseExpire ps = do
Nothing -> giveup $ "bad expire time: " ++ s
Just d -> Just (now - durationToPOSIXTime d)
-parseActivity :: Monad m => String -> m Activity
+parseActivity :: MonadFail m => String -> m Activity
parseActivity s = case readish s of
- Nothing -> fail $ "Unknown activity. Choose from: " ++
+ Nothing -> Fail.fail $ "Unknown activity. Choose from: " ++
unwords (map show [minBound..maxBound :: Activity])
Just v -> return v
diff --git a/Command/Init.hs b/Command/Init.hs
index db6cb14fb..879a1110f 100644
--- a/Command/Init.hs
+++ b/Command/Init.hs
@@ -13,6 +13,7 @@ import Annex.Version
import Types.RepoVersion
import qualified Annex.SpecialRemote
+import Control.Monad.Fail as Fail ( MonadFail(..) )
import qualified Data.Map as M
cmd :: Command
@@ -33,14 +34,14 @@ optParser desc = InitOptions
<> help "Override default annex.version"
))
-parseRepoVersion :: Monad m => String -> m RepoVersion
+parseRepoVersion :: MonadFail m => String -> m RepoVersion
parseRepoVersion s = case RepoVersion <$> readish s of
- Nothing -> fail $ "version parse error"
+ Nothing -> Fail.fail $ "version parse error"
Just v
| v `elem` supportedVersions -> return v
| otherwise -> case M.lookup v autoUpgradeableVersions of
Just v' -> return v'
- Nothing -> fail $ s ++ " is not a currently supported repository version"
+ Nothing -> Fail.fail $ s ++ " is not a currently supported repository version"
seek :: InitOptions -> CommandSeek
seek = commandAction . start
diff --git a/Utility/HumanTime.hs b/Utility/HumanTime.hs
index 01fbeacfb..d2e70f332 100644
--- a/Utility/HumanTime.hs
+++ b/Utility/HumanTime.hs
@@ -19,6 +19,7 @@ module Utility.HumanTime (
import Utility.PartialPrelude
import Utility.QuickCheck
+import Control.Monad.Fail as Fail ( MonadFail(..) )
import qualified Data.Map as M
import Data.Time.Clock
import Data.Time.Clock.POSIX (POSIXTime)
@@ -44,7 +45,7 @@ daysToDuration :: Integer -> Duration
daysToDuration i = Duration $ i * dsecs
{- Parses a human-input time duration, of the form "5h", "1m", "5h1m", etc -}
-parseDuration :: Monad m => String -> m Duration
+parseDuration :: MonadFail m => String -> m Duration
parseDuration = maybe parsefail (return . Duration) . go 0
where
go n [] = return n
@@ -55,7 +56,7 @@ parseDuration = maybe parsefail (return . Duration) . go 0
u <- M.lookup c unitmap
go (n + num * u) rest
_ -> return $ n + num
- parsefail = fail "duration parse error; expected eg \"5m\" or \"1h5m\""
+ parsefail = Fail.fail "duration parse error; expected eg \"5m\" or \"1h5m\""
fromDuration :: Duration -> String
fromDuration Duration { durationSeconds = d }
--
2.25.1

View file

@ -1,14 +1,53 @@
{ haskellPackages
, haskell
{ haskell
, haskellPackages
, lib
, nodejs
, purescript
, runCommand
}:
haskell.lib.justStaticExecutables (haskell.lib.overrideCabal haskellPackages.spago (oldAttrs: {
maintainers = (oldAttrs.maintainers or []) ++ [
lib.maintainers.cdepillabout
];
let
spago =
haskell.lib.justStaticExecutables
(haskell.lib.overrideCabal haskellPackages.spago (oldAttrs: {
maintainers = (oldAttrs.maintainers or []) ++ [
lib.maintainers.cdepillabout
];
}));
in
spago.overrideAttrs (oldAttrs: {
passthru = (oldAttrs.passthru or {}) // {
updateScript = ./update.sh;
# These tests can be run with the following command. The tests access the
# network, so they cannot be run in the nix sandbox. sudo is needed in
# order to change the sandbox option.
#
# $ sudo nix-build -A spago.passthru.tests --option sandbox relaxed
#
tests =
runCommand
"spago-tests"
{
__noChroot = true;
nativeBuildInputs = [
nodejs
purescript
spago
];
}
''
# spago expects HOME to be set because it creates a cache file under
# home.
HOME=$(pwd)
spago --verbose init
spago --verbose build
spago --verbose test
touch $out
'';
};
}))
})

View file

@ -11,11 +11,11 @@
}:
mkDerivation {
pname = "spago";
version = "0.13.1";
version = "0.14.0";
src = fetchgit {
url = "https://github.com/spacchetti/spago.git";
sha256 = "0l6sy1hz5dbnrjkvb2f44afhd48nwqx5kx1h29ns93xbbd57hci8";
rev = "b87858609c671d8f3dc78f858ce1d8c492bd1062";
url = "https://github.com/purescript/spago.git";
sha256 = "12i1430prqspy73nwfxc17zf51yprhrxxcnhw4rks6jhkgwxf4a4";
rev = "7a99343e4876a465600eaa64b0697a9f0b2a49a9";
fetchSubmodules = true;
};
isLibrary = true;
@ -42,6 +42,7 @@ mkDerivation {
];
testToolDepends = [ hspec-discover ];
prePatch = "hpack";
homepage = "https://github.com/spacchetti/spago#readme";
homepage = "https://github.com/purescript/spago#readme";
license = stdenv.lib.licenses.bsd3;
broken = true; # Build is broken in lts-15.x.
}

View file

@ -20,11 +20,14 @@ spago_derivation_file="${script_dir}/spago.nix"
old_version="$(sed -En 's/.*\bversion = "(.*?)".*/\1/p' "$spago_derivation_file")"
# This is the latest release version of spago on GitHub.
new_version=$(curl --silent "https://api.github.com/repos/spacchetti/spago/releases" | jq '.[0].tag_name' --raw-output)
new_version=$(curl --silent "https://api.github.com/repos/purescript/spago/releases" | jq '.[0].tag_name' --raw-output)
echo "Updating spago from old version $old_version to new version $new_version."
echo "Running cabal2nix and outputting to ${spago_derivation_file}..."
cabal2nix --revision "$new_version" "https://github.com/spacchetti/spago.git" > "$spago_derivation_file"
cabal2nix --revision "$new_version" "https://github.com/purescript/spago.git" > "$spago_derivation_file"
# TODO: This should ideally also automatically update the docsSearchVersion
# from pkgs/development/haskell/configuration-nix.nix.
echo "Finished."

View file

@ -8284,7 +8284,7 @@ in
# Please update doc/languages-frameworks/haskell.section.md, “Our
# current default compiler is”, if you bump this:
haskellPackages = dontRecurseIntoAttrs haskell.packages.ghc865;
haskellPackages = dontRecurseIntoAttrs haskell.packages.ghc882;
inherit (haskellPackages) ghc;

View file

@ -68,6 +68,12 @@ in {
buildLlvmPackages = buildPackages.llvmPackages_7;
llvmPackages = pkgs.llvmPackages_7;
};
ghc883 = callPackage ../development/compilers/ghc/8.8.3.nix {
bootPkgs = packages.ghc863Binary;
inherit (buildPackages.python3Packages) sphinx;
buildLlvmPackages = buildPackages.llvmPackages_7;
llvmPackages = pkgs.llvmPackages_7;
};
ghc8101 = callPackage ../development/compilers/ghc/8.10.1.nix {
bootPkgs = packages.ghc863Binary;
inherit (buildPackages.python3Packages) sphinx;
@ -137,6 +143,11 @@ in {
ghc = bh.compiler.ghc882;
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.8.x.nix { };
};
ghc883 = callPackage ../development/haskell-modules {
buildHaskellPackages = bh.packages.ghc883;
ghc = bh.compiler.ghc883;
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.8.x.nix { };
};
ghc8101 = callPackage ../development/haskell-modules {
buildHaskellPackages = bh.packages.ghc8101;
ghc = bh.compiler.ghc8101;