nixpkgs/pkgs/development/compilers/ghc/head.nix
Matthew Pickering 4541b10904 Refactor ghcHEAD postPatch / preConfigure phases
This is for GHC developers using NixOS where patchShebangs is
inconvenient as it dirties the tree but unnecessary for compilation.
2016-12-26 13:27:34 +00:00

117 lines
3.6 KiB
Nix

{ stdenv, fetchgit, bootPkgs, perl, gmp, ncurses, libiconv, binutils, coreutils
, autoconf, automake, happy, alex, python3, crossSystem, selfPkgs, cross ? null
}:
let
inherit (bootPkgs) ghc;
commonBuildInputs = [ ghc perl autoconf automake happy alex python3 ];
version = "8.1.20161224";
commonPreConfigure = ''
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
export NIX_LDFLAGS="$NIX_LDFLAGS -rpath $out/lib/ghc-${version}"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
export NIX_LDFLAGS+=" -no_dtrace_dof"
'';
in stdenv.mkDerivation (rec {
inherit version;
name = "ghc-${version}";
rev = "2689a1692636521777f007861a484e7064b2d696";
src = fetchgit {
url = "git://git.haskell.org/ghc.git";
inherit rev;
sha256 = "0rk6xy7kgxx849nprq1ji459p88nyy93236g841m5p6mdh7mmrcr";
};
postPatch = "patchShebangs .";
preConfigure = ''
echo ${version} >VERSION
echo ${rev} >GIT_COMMIT_ID
./boot
'' + commonPreConfigure ;
buildInputs = commonBuildInputs;
enableParallelBuilding = true;
configureFlags = [
"CC=${stdenv.cc}/bin/cc"
"--with-gmp-includes=${gmp.dev}/include" "--with-gmp-libraries=${gmp.out}/lib"
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
] ++ stdenv.lib.optional stdenv.isDarwin [
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
];
# required, because otherwise all symbols from HSffi.o are stripped, and
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!stdenv.isDarwin) "--keep-file-symbols";
checkTarget = "test";
postInstall = ''
paxmark m $out/lib/${name}/bin/{ghc,haddock}
# Install the bash completion file.
install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/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 [ binutils coreutils ]}"' $i
done
'';
passthru = {
inherit bootPkgs;
} // stdenv.lib.optionalAttrs (crossSystem != null) {
crossCompiler = selfPkgs.ghc.override {
cross = crossSystem;
bootPkgs = selfPkgs;
};
};
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 (cross != null) {
name = "${cross.config}-ghc-${version}";
# Some fixes for cross-compilation to iOS. See https://phabricator.haskell.org/D2710 (D2711,D2712,D2713)
patches = [ ./D2710.patch ./D2711.patch ./D2712.patch ./D2713.patch ];
preConfigure = commonPreConfigure + ''
sed 's|#BuildFlavour = quick-cross|BuildFlavour = perf-cross|' mk/build.mk.sample > mk/build.mk
'';
configureFlags = [
"CC=${stdenv.ccCross}/bin/${cross.config}-cc"
"LD=${stdenv.binutilsCross}/bin/${cross.config}-ld"
"AR=${stdenv.binutilsCross}/bin/${cross.config}-ar"
"NM=${stdenv.binutilsCross}/bin/${cross.config}-nm"
"RANLIB=${stdenv.binutilsCross}/bin/${cross.config}-ranlib"
"--target=${cross.config}"
"--enable-bootstrap-with-devel-snapshot"
];
buildInputs = commonBuildInputs ++ [ stdenv.ccCross stdenv.binutilsCross ];
dontSetConfigureCross = true;
passthru = {
inherit bootPkgs cross;
cc = "${stdenv.ccCross}/bin/${cross.config}-cc";
ld = "${stdenv.binutilsCross}/bin/${cross.config}-ld";
};
})