From e0b29501689922319d685c46a6258cb111e9d965 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Sat, 28 Jun 2014 21:46:35 -0700 Subject: [PATCH] Initial work on ghcjs --- .../tools/haskell/Cabal-ghcjs/default.nix | 42 +++++++++++++ .../haskell/cabal-install-ghcjs/#default.nix# | 35 +++++++++++ .../haskell/cabal-install-ghcjs/default.nix | 36 +++++++++++ .../tools/haskell/ghcjs/default.nix | 62 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + pkgs/top-level/haskell-defaults.nix | 4 ++ pkgs/top-level/haskell-packages.nix | 18 ++++++ 7 files changed, 198 insertions(+) create mode 100644 pkgs/development/tools/haskell/Cabal-ghcjs/default.nix create mode 100644 pkgs/development/tools/haskell/cabal-install-ghcjs/#default.nix# create mode 100644 pkgs/development/tools/haskell/cabal-install-ghcjs/default.nix create mode 100644 pkgs/development/tools/haskell/ghcjs/default.nix diff --git a/pkgs/development/tools/haskell/Cabal-ghcjs/default.nix b/pkgs/development/tools/haskell/Cabal-ghcjs/default.nix new file mode 100644 index 00000000000..db0447030f0 --- /dev/null +++ b/pkgs/development/tools/haskell/Cabal-ghcjs/default.nix @@ -0,0 +1,42 @@ +{ cabal, filepath, HTTP, HUnit, mtl, network, QuickCheck +, random, stm, testFramework, testFrameworkHunit +, testFrameworkQuickcheck2, time, zlib, fetchgit +}: + +cabal.mkDerivation (self: { + pname = "Cabal-ghcjs"; + version = "9e87d6a3"; + src = fetchgit { + url = git://github.com/ghcjs/cabal.git; + rev = "9e87d6a39ec63f569fea899fc1ace332ea7eea78"; + sha256 = "07bgsqzmiqzw14i91y5nmk5m9sqnxn503xzv2jan5g33z1vcwdcj"; + }; + preConfigure = "cd Cabal"; + configureFlags = "--program-suffix=-js"; + + # jww (2014-05-31): Why is this failing? + # BuildDeps/InternalLibrary4: + # : [Failed] + # expected: 'setup install' should succeed + # output: "/private/var/folders/8h/tky3qz1d63l05l5jp_nzwzjr0000gn/T/nix-build-haskell-Cabal-ghcjs-ghc7.8.2-9e87d6a3-shared.drv-0/git-export/Cabal/tests/Setup configure --user -w /nix/store/v1gr2sk0117ycn9bmwyp3whgxqkbd5sl-ghc-7.8.2-wrapper/bin/ghc" in PackageTests/BuildDeps/InternalLibrary4/to-install + # Configuring InternalLibrary4-0.2... + # Setup: Use of GHC's environment variable GHC_PACKAGE_PATH is incompatible with + # Cabal. Use the flag --package-db to specify a package database (it can be used + # multiple times). + doCheck = false; + + buildDepends = [ + filepath HTTP mtl network random stm time zlib QuickCheck + ]; + testDepends = [ + filepath HTTP HUnit mtl network QuickCheck stm testFramework + testFrameworkHunit testFrameworkQuickcheck2 time zlib + ]; + meta = { + homepage = "http://www.haskell.org/cabal/"; + description = "The command-line interface for Cabal and Hackage"; + license = self.stdenv.lib.licenses.bsd3; + platforms = self.ghc.meta.platforms; + maintainers = [ self.stdenv.lib.maintainers.andres ]; + }; +}) diff --git a/pkgs/development/tools/haskell/cabal-install-ghcjs/#default.nix# b/pkgs/development/tools/haskell/cabal-install-ghcjs/#default.nix# new file mode 100644 index 00000000000..f761a96bc3f --- /dev/null +++ b/pkgs/development/tools/haskell/cabal-install-ghcjs/#default.nix# @@ -0,0 +1,35 @@ +{ cabal, CabalGhcjs, filepath, HTTP, HUnit, mtl, network, QuickCheck +, random, stm, testFramework, testFrameworkHunit +, testFrameworkQuickcheck2, time, zlib, fetchgit +}: + +cabal.mkDerivation (self: { + pname = "cabal-install-ghcjs"; + version = "9e87d6a3"; + src = fetchgit { + url = git://github.com/ghcjs/cabal.git; + rev = "9e87d6a39ec63f569fea899fc1ace332ea7eea78"; + sha256 = "07bgsqzmiqzw14i91y5nmk5m9sqnxn503xzv2jan5g33z1vcwdcj"; + }; + isLibrary = true; + isExecutable = true; + preConfigure = "cd cabal-install"; + buildDepends = [ + CabalGhcjs filepath HTTP mtl network random stm time zlib + ]; + testDepends = [ + CabalGhcjs filepath HTTP HUnit mtl network QuickCheck stm testFramework + testFrameworkHunit testFrameworkQuickcheck2 time zlib + ]; + postInstall = '' + mkdir $out/etc + mv bash-completion $out/etc/bash_completion.d + ''; + meta = { + homepage = "http://www.haskell.org/cabal/"; + description = "The command-line interface for Cabal and Hackage"; + license = self.stdenv.lib.licenses.bsd3; + platforms = self.ghc.meta.platforms; + maintainers = [ self.stdenv.lib.maintainers.andres ]; + }; +}) diff --git a/pkgs/development/tools/haskell/cabal-install-ghcjs/default.nix b/pkgs/development/tools/haskell/cabal-install-ghcjs/default.nix new file mode 100644 index 00000000000..9102c77f2f6 --- /dev/null +++ b/pkgs/development/tools/haskell/cabal-install-ghcjs/default.nix @@ -0,0 +1,36 @@ +{ cabal, CabalGhcjs, filepath, HTTP, HUnit, mtl, network, QuickCheck +, random, stm, testFramework, testFrameworkHunit +, testFrameworkQuickcheck2, time, zlib, fetchgit +}: + +cabal.mkDerivation (self: { + pname = "cabal-install-ghcjs"; + version = "9e87d6a3"; + src = fetchgit { + url = git://github.com/ghcjs/cabal.git; + rev = "9e87d6a39ec63f569fea899fc1ace332ea7eea78"; + sha256 = "07bgsqzmiqzw14i91y5nmk5m9sqnxn503xzv2jan5g33z1vcwdcj"; + }; + isLibrary = true; + isExecutable = true; + configureFlags = "--program-suffix=-js"; + preConfigure = "cd cabal-install"; + buildDepends = [ + CabalGhcjs filepath HTTP mtl network random stm time zlib + ]; + testDepends = [ + CabalGhcjs filepath HTTP HUnit mtl network QuickCheck stm testFramework + testFrameworkHunit testFrameworkQuickcheck2 time zlib + ]; + postInstall = '' + mkdir $out/etc + mv bash-completion $out/etc/bash_completion.d + ''; + meta = { + homepage = "http://www.haskell.org/cabal/"; + description = "The command-line interface for Cabal and Hackage"; + license = self.stdenv.lib.licenses.bsd3; + platforms = self.ghc.meta.platforms; + maintainers = [ self.stdenv.lib.maintainers.andres ]; + }; +}) diff --git a/pkgs/development/tools/haskell/ghcjs/default.nix b/pkgs/development/tools/haskell/ghcjs/default.nix new file mode 100644 index 00000000000..cf7c49b237a --- /dev/null +++ b/pkgs/development/tools/haskell/ghcjs/default.nix @@ -0,0 +1,62 @@ +{ 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_7_0_2 +, parallel, safe, shelly, split, stringsearch, syb, systemFileio +, systemFilepath, tar, terminfo, textBinary, unorderedContainers +, vector, wlPprintText, yaml, fetchgit, Cabal, cabalInstall +, regexPosix, alex, happy, git, gnumake, gcc, autoconf, patch +, automake, libtool +}: + +cabal.mkDerivation (self: rec { + pname = "ghcjs"; + version = "c9ce6b9d"; + src = fetchgit { + url = git://github.com/ghcjs/ghcjs.git; + rev = "c9ce6b9d87296b1236d5ef0f7d5236b2cedcff84"; + sha256 = "0cla5bchprc8g5n39fkssnv3lj378h948irsnr7dslaki6laaagw"; + }; + bootSrc = fetchgit { + url = git://github.com/ghcjs/ghcjs-boot.git; + rev = "2daaf8fc0efd5b5906a7157a172ce77ca3b28d81"; + sha256 = "0kwn3lh196rp02kz2vxd0mkqyix99xqzs4vsazv0s49ari0dc4w8"; + }; + isLibrary = true; + isExecutable = true; + jailbreak = true; + noHaddock = true; + buildDepends = [ + filepath HTTP mtl network random stm time zlib aeson attoparsec + bzlib dataDefault ghcPaths hashable haskellSrcExts haskellSrcMeta + lens optparseApplicative_0_7_0_2 parallel safe shelly split + stringsearch syb systemFileio systemFilepath tar terminfo textBinary + unorderedContainers vector wlPprintText yaml + alex happy git gnumake gcc autoconf automake libtool patch + ]; + testDepends = [ + HUnit regexPosix 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 + ''; + postInstall = '' + cp -R ${bootSrc} ghcjs-boot + cd ghcjs-boot + chmod -R u+w . # because fetchgit made it read-only + ensureDir $out/share/ghcjs + PATH=$out/bin:${Cabal}/bin:$PATH \ + $out/bin/ghcjs-boot --init --with-cabal ${cabalInstall}/bin/cabal-js + ''; + 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 ]; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 796da97595e..8973819071a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2956,6 +2956,7 @@ let # Reasonably current HEAD snapshot. haskellPackages_ghc782 = haskell.packages_ghc782; haskellPackages_ghcHEAD = haskell.packages_ghcHEAD; + haskellPackages_ghcjs = haskell.packages_ghcjs; haskellPlatformPackages = recurseIntoAttrs (import ../development/libraries/haskell/haskell-platform { inherit pkgs; }); diff --git a/pkgs/top-level/haskell-defaults.nix b/pkgs/top-level/haskell-defaults.nix index a770cbdda8f..bd447aed065 100644 --- a/pkgs/top-level/haskell-defaults.nix +++ b/pkgs/top-level/haskell-defaults.nix @@ -214,6 +214,10 @@ }; }; + packages_ghcjs = packages_ghc782 // { + ghc = ../development/tools/haskell/ghcjs; + }; + packages_ghc782 = packages { ghcPath = ../development/compilers/ghc/7.8.2.nix; ghcBinary = ghc742Binary; diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix index c9071817a53..6c091fac581 100644 --- a/pkgs/top-level/haskell-packages.nix +++ b/pkgs/top-level/haskell-packages.nix @@ -843,6 +843,11 @@ self : let callPackage = x : y : modifyPrio (newScope self x y); in cabal = self.cabal.override { enableLibraryProfiling = false; }; # pkg cannot be built with profiling enabled }; + ghcjs = callPackage ../development/tools/haskell/ghcjs { + Cabal = self.Cabal_1_18_1_3; + cabalInstall = self.cabalInstallGhcjs; + }; + ghcjsDom = callPackage ../development/libraries/haskell/ghcjs-codemirror {}; ghcjsCodemirror = callPackage ../development/libraries/haskell/ghcjs-codemirror {}; @@ -2825,6 +2830,19 @@ self : let callPackage = x : y : modifyPrio (newScope self x y); in cabalInstall_1_20_0_2 = callPackage ../tools/package-management/cabal-install/1.20.0.2.nix { Cabal = self.Cabal_1_20_0_1; }; cabalInstall = self.cabalInstall_1_20_0_2; + CabalGhcjs = callPackage ../development/tools/haskell/Cabal-ghcjs { + QuickCheck = self.QuickCheck_2_6; + testFrameworkQuickcheck2 = self.testFrameworkQuickcheck2.override { + QuickCheck = self.QuickCheck_2_6; + }; + }; + cabalInstallGhcjs = callPackage ../development/tools/haskell/cabal-install-ghcjs { + QuickCheck = self.QuickCheck_2_6; + testFrameworkQuickcheck2 = self.testFrameworkQuickcheck2.override { + QuickCheck = self.QuickCheck_2_6; + }; + }; + codex = callPackage ../development/tools/haskell/codex {}; commandQq = callPackage ../development/libraries/haskell/command-qq {};