mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-27 05:43:50 +03:00
* Revert to GHC 6.10.1 binary for bootstrapping GHC 6.10.2 at Andres'
suggestion. It's good to use an older GHC for bootstrapping because old versions can build newer versions but not vice versa. svn path=/nixpkgs/trunk/; revision=15120
This commit is contained in:
parent
77f1001802
commit
6f2da398be
106
pkgs/development/compilers/ghc/6.10.1-binary.nix
Normal file
106
pkgs/development/compilers/ghc/6.10.1-binary.nix
Normal file
@ -0,0 +1,106 @@
|
||||
{stdenv, fetchurl, perl, libedit, ncurses, gmp}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "6.10.1";
|
||||
|
||||
name = "ghc-${version}-binary";
|
||||
|
||||
src =
|
||||
if stdenv.system == "i686-linux" then
|
||||
fetchurl {
|
||||
# This binary requires libedit.so.0 (rather than libedit.so.2).
|
||||
url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-i386-unknown-linux.tar.bz2";
|
||||
sha256 = "18l0vwlf7y86s65klpdvz4ccp8kydvcmyh03c86hld8jvx16q7zz";
|
||||
}
|
||||
else if stdenv.system == "x86_64-linux" then
|
||||
fetchurl {
|
||||
# Idem.
|
||||
url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-x86_64-unknown-linux.tar.bz2";
|
||||
sha256 = "14jvvn333i36wm7mmvi47jr93f5hxrw1h2dpjvqql0rp00svhzzg";
|
||||
}
|
||||
else if stdenv.system == "x86_64-linux" then
|
||||
fetchurl {
|
||||
# Idem.
|
||||
url = "http://haskell.org/ghc/dist/${version}/maeder/ghc-${version}-i386-apple-darwin.tar.bz2";
|
||||
sha256 = "0lax61cfzxkrjb7an3magdax6c8fygsirpw9qfmc651k2sfby1mq";
|
||||
}
|
||||
else throw "cannot bootstrap GHC on this platform";
|
||||
|
||||
buildInputs = [perl];
|
||||
|
||||
postUnpack =
|
||||
# Strip is harmful, see also below. It's important that this happens
|
||||
# first. The GHC Cabal build system makes use of strip by default and
|
||||
# has hardcoded paths to /usr/bin/strip in many places. We replace
|
||||
# those below, making them point to our dummy script.
|
||||
''
|
||||
mkdir "$TMP/bin"
|
||||
for i in strip; do
|
||||
echo '#!/bin/sh' >> "$TMP/bin/$i"
|
||||
chmod +x "$TMP/bin/$i"
|
||||
PATH="$TMP/bin:$PATH"
|
||||
done
|
||||
'' +
|
||||
# On Linux, use patchelf to modify the executables so that they can
|
||||
# find editline/gmp.
|
||||
(if stdenv.isLinux then ''
|
||||
find . -type f -perm +100 \
|
||||
-exec patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
|
||||
--set-rpath "${libedit}/lib:${ncurses}/lib:${gmp}/lib" {} \;
|
||||
for prog in ld ar gcc strip ranlib; do
|
||||
find . -name "setup-config" -exec sed -i "s@/usr/bin/$prog@$(type -p $prog)@g" {} \;
|
||||
done
|
||||
'' else "");
|
||||
|
||||
configurePhase = ''
|
||||
./configure --prefix=$out --with-gmp-libraries=${gmp}/lib --with-gmp-includes=${gmp}/include
|
||||
'';
|
||||
|
||||
# Stripping combined with patchelf breaks the executables (they die
|
||||
# with a segfault or the kernel even refuses the execve). (NIXPKGS-85)
|
||||
dontStrip = true;
|
||||
|
||||
# No building is necessary, but calling make without flags ironically
|
||||
# calls install-strip ...
|
||||
buildPhase = "true";
|
||||
|
||||
# The binaries for Darwin use frameworks, so fake those frameworks,
|
||||
# and create some wrapper scripts that set DYLD_FRAMEWORK_PATH so
|
||||
# that the executables work with no special setup.
|
||||
postInstall =
|
||||
(if stdenv.isDarwin then
|
||||
''
|
||||
ensureDir $out/frameworks/GMP.framework/Versions/A
|
||||
ln -s ${gmp}/lib/libgmp.dylib $out/frameworks/GMP.framework/GMP
|
||||
ln -s ${gmp}/lib/libgmp.dylib $out/frameworks/GMP.framework/Versions/A/GMP
|
||||
# !!! fix this
|
||||
ensureDir $out/frameworks/GNUeditline.framework/Versions/A
|
||||
ln -s ${libedit}/lib/libeditline.dylib $out/frameworks/GNUeditline.framework/GNUeditline
|
||||
ln -s ${libedit}/lib/libeditline.dylib $out/frameworks/GNUeditline.framework/Versions/A/GNUeditline
|
||||
|
||||
mv $out/bin $out/bin-orig
|
||||
mkdir $out/bin
|
||||
for i in $(cd $out/bin-orig && ls); do
|
||||
echo \"#! $SHELL -e\" >> $out/bin/$i
|
||||
echo \"DYLD_FRAMEWORK_PATH=$out/frameworks exec $out/bin-orig/$i -framework-path $out/frameworks \\\"\\$@\\\"\" >> $out/bin/$i
|
||||
chmod +x $out/bin/$i
|
||||
done
|
||||
'' else "")
|
||||
+
|
||||
''
|
||||
# bah, the passing gmp doesn't work, so let's add it to the final package.conf in a quick but dirty way
|
||||
sed -i "s@^\(.*pkgName = PackageName \"rts\".*\libraryDirs = \\[\)\(.*\)@\\1\"${gmp}/lib\",\2@" $out/lib/ghc-${version}/package.conf
|
||||
|
||||
# Sanity check, can ghc create executables?
|
||||
cd $TMP
|
||||
mkdir test-ghc; cd test-ghc
|
||||
cat > main.hs << EOF
|
||||
module Main where
|
||||
main = putStrLn "yes"
|
||||
EOF
|
||||
$out/bin/ghc --make main.hs
|
||||
echo compilation ok
|
||||
[ $(./main) == "yes" ]
|
||||
'';
|
||||
|
||||
}
|
@ -1845,13 +1845,13 @@ let
|
||||
perl = perl58;
|
||||
});
|
||||
|
||||
ghc682 = import ../development/compilers/ghc/6.8.2.nix {
|
||||
inherit fetchurl stdenv readline perl gmp ncurses m4;
|
||||
ghc661 = import ../development/compilers/ghc/6.6.1.nix {
|
||||
inherit fetchurl stdenv readline perl58 gmp ncurses m4;
|
||||
ghc = ghc642Binary;
|
||||
};
|
||||
|
||||
ghc661 = import ../development/compilers/ghc/6.6.1.nix {
|
||||
inherit fetchurl stdenv readline perl58 gmp ncurses m4;
|
||||
ghc682 = import ../development/compilers/ghc/6.8.2.nix {
|
||||
inherit fetchurl stdenv readline perl gmp ncurses m4;
|
||||
ghc = ghc642Binary;
|
||||
};
|
||||
|
||||
@ -1867,9 +1867,13 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
ghc6101Binary = lowPrio (import ../development/compilers/ghc/6.10.1-binary.nix {
|
||||
inherit fetchurl stdenv perl ncurses gmp libedit;
|
||||
});
|
||||
|
||||
ghc6102 = import ../development/compilers/ghc/6.10.2.nix {
|
||||
inherit fetchurl stdenv perl ncurses gmp libedit;
|
||||
ghc = ghc6102Binary;
|
||||
ghc = ghc6101Binary;
|
||||
};
|
||||
|
||||
ghc6102Binary = lowPrio (import ../development/compilers/ghc/6.10.2-binary.nix {
|
||||
|
Loading…
Reference in New Issue
Block a user