{ stdenv, targetPackages , buildPlatform, hostPlatform, targetPlatform # build-tools , bootPkgs, alex, happy , autoconf, automake, coreutils, fetchgit, perl, python3 , libiconv ? null, ncurses , # 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 ? false, gmp ? null , version ? "8.4.20180115" }: assert !enableIntegerSimple -> gmp != null; let inherit (bootPkgs) ghc; rev = "3e3a096885c0fcd0703edbeffb4e47f5cbd8f4cc"; # TODO(@Ericson2314) Make unconditional targetPrefix = stdenv.lib.optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-"; buildMK = stdenv.lib.optionalString enableIntegerSimple '' INTEGER_LIBRARY = integer-simple '' + stdenv.lib.optionalString (targetPlatform != hostPlatform) '' BuildFlavour = perf-cross ''; in stdenv.mkDerivation rec { inherit version rev; name = "${targetPrefix}ghc-${version}"; src = fetchgit { url = "git://git.haskell.org/ghc.git"; inherit rev; sha256 = "06slymbsd7vsfp4hh40v7cxf7nmp0kvlni2wfq7ag5wlqh04slgs"; }; postPatch = "patchShebangs ."; preConfigure = '' echo -n "${buildMK}" > mk/build.mk echo ${version} >VERSION echo ${rev} >GIT_COMMIT_ID ./boot 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" ''; buildInputs = [ ghc perl autoconf automake happy alex python3 ]; enableParallelBuilding = true; configureFlags = [ "CC=${stdenv.cc}/bin/cc" "--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib" "--datadir=$doc/share/doc/ghc" ] ++ stdenv.lib.optional (! enableIntegerSimple) [ "--with-gmp-includes=${gmp.dev}/include" "--with-gmp-libraries=${gmp.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 (!targetPlatform.isDarwin) "--keep-file-symbols"; checkTarget = "test"; postInstall = '' paxmark m $out/lib/${name}/bin/${if targetPlatform != hostPlatform then "ghc" else "{ghc,haddock}"} # 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 ''; outputs = [ "out" "doc" ]; passthru = { inherit bootPkgs targetPrefix; }; meta = { homepage = http://haskell.org/ghc; description = "The Glasgow Haskell Compiler"; maintainers = with stdenv.lib.maintainers; [ marcweber andres peti ]; inherit (ghc.meta) license platforms; }; }