nixpkgs/pkgs/development/tools/haskell/ghcjs/default.nix
2014-12-01 11:53:38 +01:00

88 lines
3.8 KiB
Nix

{ nodejs, cabal, filepath, HTTP, HUnit, mtl, network, QuickCheck, random, stm
, testFramework, testFrameworkHunit, testFrameworkQuickcheck2, time
, zlib, aeson, attoparsec, bzlib, dataDefault, ghcPaths, hashable
, haskellSrcExts, haskellSrcMeta, lens, optparseApplicative_0_11_0_1
, parallel, safe, shelly, split, stringsearch, syb, systemFileio
, systemFilepath, tar, terminfo, textBinary, unorderedContainers
, vector, wlPprintText, yaml, fetchgit, Cabal, CabalGhcjs, cabalInstall
, regexPosix, alex, happy, git, gnumake, gcc, autoconf, patch
, automake, libtool, cabalInstallGhcjs, gmp, base16Bytestring
, cryptohash, executablePath, transformersCompat, haddockApi
, haddock, hspec, xhtml, primitive, cacert, pkgs, ghc
}:
cabal.mkDerivation (self: rec {
pname = "ghcjs";
version = "0.1.0";
src = fetchgit {
url = git://github.com/ghcjs/ghcjs.git;
rev = "5c2d279982466e076223fcbe1e1096e22956e5a9";
sha256 = "0bc37b4e8bd039208a126fea39850c99459265cb273ac7237939cdbaee6ef71f";
};
shims = fetchgit {
url = git://github.com/ghcjs/shims.git;
rev = "5e11d33cb74f8522efca0ace8365c0dc994b10f6";
sha256 = "64be139022e6f662086103fca3838330006d38e6454bd3f7b66013031a47278e";
};
isLibrary = true;
isExecutable = true;
jailbreak = true;
noHaddock = true;
doCheck = false;
ghcjsPrim = cabal.mkDerivation (self: {
pname = "ghcjs-prim";
version = "0.1.0.0";
src = fetchgit {
url = git://github.com/ghcjs/ghcjs-prim.git;
rev = "915f263c06b7f4a246c6e02ecdf2b9a0550ed967";
sha256 = "34dd58b6e2d0ce780da46b509fc2701c28a7b2182f8d700b53a80981ac8bcf86";
};
buildDepends = [ primitive ];
});
buildDepends = [
filepath HTTP mtl network random stm time zlib aeson attoparsec
bzlib dataDefault ghcPaths hashable haskellSrcExts haskellSrcMeta
lens optparseApplicative_0_11_0_1 parallel safe shelly split
stringsearch syb systemFileio systemFilepath tar terminfo textBinary
unorderedContainers vector wlPprintText yaml
alex happy git gnumake gcc autoconf automake libtool patch gmp
base16Bytestring cryptohash executablePath haddockApi
transformersCompat QuickCheck haddock hspec xhtml
ghcjsPrim regexPosix
];
buildTools = [ nodejs git ];
testDepends = [
HUnit testFramework testFrameworkHunit
];
postConfigure = ''
echo Patching ghcjs with absolute paths to the Nix store
sed -i -e "s|getAppUserDataDirectory \"ghcjs\"|return \"$out/share/ghcjs\"|" \
src/Compiler/Info.hs
sed -i -e "s|str = \\[\\]|str = [\"--prefix=$out\", \"--libdir=$prefix/lib/$compiler\", \"--libsubdir=$pkgid\"]|" \
src-bin/Boot.hs
'';
libdir = "/share/ghcjs/${pkgs.stdenv.system}-${version}-${ghc.ghc.version}";
postInstall = ''
export HOME=$(pwd)
export GIT_SSL_CAINFO="${cacert}/etc/ca-bundle.crt"
git clone git://github.com/ghcjs/ghcjs-boot.git
cd ghcjs-boot
git checkout 8bf2861c0c776eec42e0a1833f220e36681e810c
git submodule update --init --recursive
( cd boot ; chmod u+w . ; ln -s .. ghcjs-boot )
chmod -R u+w . # because fetchgit made it read-only
local GHCJS_LIBDIR=$out${libdir}
mkdir -p $GHCJS_LIBDIR
cp -R ${shims} $GHCJS_LIBDIR/shims
${cabalInstallGhcjs}/bin/cabal-js update
PATH=$out/bin:${CabalGhcjs}/bin:$PATH LD_LIBRARY_PATH=${gmp}/lib:${gcc.gcc}/lib64:$LD_LIBRARY_PATH \
env -u GHC_PACKAGE_PATH $out/bin/ghcjs-boot --dev --with-cabal ${cabalInstallGhcjs}/bin/cabal-js --with-gmp-includes ${gmp}/include --with-gmp-libraries ${gmp}/lib
'';
meta = {
homepage = "https://github.com/ghcjs/ghcjs";
description = "GHCJS is a Haskell to JavaScript compiler that uses the GHC API";
license = self.stdenv.lib.licenses.bsd3;
platforms = self.ghc.meta.platforms;
maintainers = [ self.stdenv.lib.maintainers.jwiegley ];
};
})