diff options
author | Ryan Trinkle <ryan.trinkle@gmail.com> | 2016-07-26 16:58:56 -0400 |
---|---|---|
committer | Ryan Trinkle <ryan.trinkle@gmail.com> | 2016-07-26 16:58:56 -0400 |
commit | c564997ba0372147a2b0f376073fdfdd37306152 (patch) | |
tree | bfd834296ab915841adbdc6479c83a21e01165ab /pkgs/development/compilers | |
parent | 3badad811c600db9867f15a326efa69898299099 (diff) | |
download | nixlib-c564997ba0372147a2b0f376073fdfdd37306152.tar nixlib-c564997ba0372147a2b0f376073fdfdd37306152.tar.gz nixlib-c564997ba0372147a2b0f376073fdfdd37306152.tar.bz2 nixlib-c564997ba0372147a2b0f376073fdfdd37306152.tar.lz nixlib-c564997ba0372147a2b0f376073fdfdd37306152.tar.xz nixlib-c564997ba0372147a2b0f376073fdfdd37306152.tar.zst nixlib-c564997ba0372147a2b0f376073fdfdd37306152.zip |
ghcjs: refactor stage2 handling
Previously, the stage2 information was stored in haskell-modules, and imported directly from there. However, the correct stage2 information is determined by the version of ghcjs-boot repository. This commit makes the stage2 information part of the ghcjs derivation, which improves organization and makes it possible to override stage2 when overriding ghcjs.
Diffstat (limited to 'pkgs/development/compilers')
-rw-r--r-- | pkgs/development/compilers/ghcjs/default.nix | 3 | ||||
-rwxr-xr-x | pkgs/development/compilers/ghcjs/gen-stage2.rb | 54 | ||||
-rw-r--r-- | pkgs/development/compilers/ghcjs/stage2.nix | 344 |
3 files changed, 401 insertions, 0 deletions
diff --git a/pkgs/development/compilers/ghcjs/default.nix b/pkgs/development/compilers/ghcjs/default.nix index fb8d789f533d..f677cd771229 100644 --- a/pkgs/development/compilers/ghcjs/default.nix +++ b/pkgs/development/compilers/ghcjs/default.nix @@ -136,6 +136,9 @@ in mkDerivation (rec { isGhcjs = true; inherit nodejs ghcjsBoot; inherit (ghcjsNodePkgs) "socket.io"; + mkStage2 = import ./stage2.nix { + inherit ghcjsBoot; + }; }; homepage = "https://github.com/ghcjs/ghcjs"; diff --git a/pkgs/development/compilers/ghcjs/gen-stage2.rb b/pkgs/development/compilers/ghcjs/gen-stage2.rb new file mode 100755 index 000000000000..709e635db55c --- /dev/null +++ b/pkgs/development/compilers/ghcjs/gen-stage2.rb @@ -0,0 +1,54 @@ +#!/usr/bin/env ruby + +require 'pathname' + +# from boot.yaml in ghcjs/ghcjs +stage2_packages = [ + "boot/async", + "boot/aeson", + "boot/attoparsec", + "boot/case-insensitive", + "boot/dlist", + "boot/extensible-exceptions", + "boot/hashable", + "boot/mtl", + "boot/old-time", + "boot/parallel", + "boot/scientific", + "boot/stm", + "boot/syb", + "boot/text", + "boot/unordered-containers", + "boot/vector", + "ghcjs/ghcjs-base", + # not listed under stage2, but needed when "quick booting". + "boot/cabal/Cabal" +] + +nixpkgs = File.expand_path("../../../../..", __FILE__) +boot = ARGV[0] || `nix-build #{nixpkgs} -A haskell.packages.ghcjs.ghc.ghcjsBoot`.chomp + +out = "".dup +out << "{ ghcjsBoot }: { callPackage }:\n" +out << "\n" +out << "{\n" + +stage2_packages.each do |package| + name = Pathname.new(package).basename + nix = `cabal2nix file://#{boot}/#{package} --jailbreak` + nix.sub!(/src =.*?$/, "src = \"${ghcjsBoot}/#{package}\";") + nix.sub!(" doCheck = false;\n", "") + nix.sub!("libraryHaskellDepends", "doCheck = false;\n libraryHaskellDepends") + # cabal2nix somehow generates the deps for 'text' as if it had selected flag + # 'integer-simple' (despite not passing the flag within the generated + # expression). We want integer-gmp instead. + nix.gsub!(/integer-simple/, "integer-gmp") + nix = nix.split("\n").join("\n ") + + out << " #{name} = callPackage\n" + out << " (#{nix}) {};\n" +end + +out << "}" + +puts out diff --git a/pkgs/development/compilers/ghcjs/stage2.nix b/pkgs/development/compilers/ghcjs/stage2.nix new file mode 100644 index 000000000000..8c68b6f15a67 --- /dev/null +++ b/pkgs/development/compilers/ghcjs/stage2.nix @@ -0,0 +1,344 @@ +{ ghcjsBoot }: { callPackage }: + +{ + async = callPackage + ({ mkDerivation, base, HUnit, stdenv, stm, test-framework + , test-framework-hunit + }: + mkDerivation { + pname = "async"; + version = "2.0.1.6"; + src = "${ghcjsBoot}/boot/async"; + doCheck = false; + libraryHaskellDepends = [ base stm ]; + testHaskellDepends = [ + base HUnit test-framework test-framework-hunit + ]; + jailbreak = true; + homepage = "https://github.com/simonmar/async"; + description = "Run IO operations asynchronously and wait for their results"; + license = stdenv.lib.licenses.bsd3; + }) {}; + aeson = callPackage + ({ mkDerivation, attoparsec, base, bytestring, containers, deepseq + , dlist, ghc-prim, hashable, HUnit, mtl, QuickCheck, scientific + , stdenv, syb, template-haskell, test-framework + , test-framework-hunit, test-framework-quickcheck2, text, time + , transformers, unordered-containers, vector + }: + mkDerivation { + pname = "aeson"; + version = "0.9.0.1"; + src = "${ghcjsBoot}/boot/aeson"; + doCheck = false; + libraryHaskellDepends = [ + attoparsec base bytestring containers deepseq dlist ghc-prim + hashable mtl scientific syb template-haskell text time transformers + unordered-containers vector + ]; + testHaskellDepends = [ + attoparsec base bytestring containers ghc-prim HUnit QuickCheck + template-haskell test-framework test-framework-hunit + test-framework-quickcheck2 text time unordered-containers vector + ]; + jailbreak = true; + homepage = "https://github.com/bos/aeson"; + description = "Fast JSON parsing and encoding"; + license = stdenv.lib.licenses.bsd3; + }) {}; + attoparsec = callPackage + ({ mkDerivation, array, base, bytestring, containers, deepseq + , QuickCheck, quickcheck-unicode, scientific, stdenv + , test-framework, test-framework-quickcheck2, text, transformers + , vector + }: + mkDerivation { + pname = "attoparsec"; + version = "0.13.0.1"; + src = "${ghcjsBoot}/boot/attoparsec"; + doCheck = false; + libraryHaskellDepends = [ + array base bytestring containers deepseq scientific text + transformers + ]; + testHaskellDepends = [ + array base bytestring containers deepseq QuickCheck + quickcheck-unicode scientific test-framework + test-framework-quickcheck2 text transformers vector + ]; + jailbreak = true; + homepage = "https://github.com/bos/attoparsec"; + description = "Fast combinator parsing for bytestrings and text"; + license = stdenv.lib.licenses.bsd3; + }) {}; + case-insensitive = callPackage + ({ mkDerivation, base, bytestring, deepseq, hashable, HUnit, stdenv + , test-framework, test-framework-hunit, text + }: + mkDerivation { + pname = "case-insensitive"; + version = "1.2.0.4"; + src = "${ghcjsBoot}/boot/case-insensitive"; + doCheck = false; + libraryHaskellDepends = [ base bytestring deepseq hashable text ]; + testHaskellDepends = [ + base bytestring HUnit test-framework test-framework-hunit text + ]; + jailbreak = true; + homepage = "https://github.com/basvandijk/case-insensitive"; + description = "Case insensitive string comparison"; + license = stdenv.lib.licenses.bsd3; + }) {}; + dlist = callPackage + ({ mkDerivation, base, Cabal, deepseq, QuickCheck, stdenv }: + mkDerivation { + pname = "dlist"; + version = "0.7.1.1"; + src = "${ghcjsBoot}/boot/dlist"; + doCheck = false; + libraryHaskellDepends = [ base deepseq ]; + testHaskellDepends = [ base Cabal QuickCheck ]; + jailbreak = true; + homepage = "https://github.com/spl/dlist"; + description = "Difference lists"; + license = stdenv.lib.licenses.bsd3; + }) {}; + extensible-exceptions = callPackage + ({ mkDerivation, base, stdenv }: + mkDerivation { + pname = "extensible-exceptions"; + version = "0.1.1.4"; + src = "${ghcjsBoot}/boot/extensible-exceptions"; + doCheck = false; + libraryHaskellDepends = [ base ]; + jailbreak = true; + description = "Extensible exceptions"; + license = stdenv.lib.licenses.bsd3; + }) {}; + hashable = callPackage + ({ mkDerivation, base, bytestring, ghc-prim, HUnit, integer-gmp + , QuickCheck, random, stdenv, test-framework, test-framework-hunit + , test-framework-quickcheck2, text, unix + }: + mkDerivation { + pname = "hashable"; + version = "1.2.3.2"; + src = "${ghcjsBoot}/boot/hashable"; + doCheck = false; + libraryHaskellDepends = [ + base bytestring ghc-prim integer-gmp text + ]; + testHaskellDepends = [ + base bytestring ghc-prim HUnit QuickCheck random test-framework + test-framework-hunit test-framework-quickcheck2 text unix + ]; + jailbreak = true; + homepage = "http://github.com/tibbe/hashable"; + description = "A class for types that can be converted to a hash value"; + license = stdenv.lib.licenses.bsd3; + }) {}; + mtl = callPackage + ({ mkDerivation, base, stdenv, transformers }: + mkDerivation { + pname = "mtl"; + version = "2.2.1"; + src = "${ghcjsBoot}/boot/mtl"; + doCheck = false; + libraryHaskellDepends = [ base transformers ]; + jailbreak = true; + homepage = "http://github.com/ekmett/mtl"; + description = "Monad classes, using functional dependencies"; + license = stdenv.lib.licenses.bsd3; + }) {}; + old-time = callPackage + ({ mkDerivation, base, old-locale, stdenv }: + mkDerivation { + pname = "old-time"; + version = "1.1.0.3"; + src = "${ghcjsBoot}/boot/old-time"; + doCheck = false; + libraryHaskellDepends = [ base old-locale ]; + jailbreak = true; + description = "Time library"; + license = stdenv.lib.licenses.bsd3; + }) {}; + parallel = callPackage + ({ mkDerivation, array, base, containers, deepseq, stdenv }: + mkDerivation { + pname = "parallel"; + version = "3.2.0.6"; + src = "${ghcjsBoot}/boot/parallel"; + doCheck = false; + libraryHaskellDepends = [ array base containers deepseq ]; + jailbreak = true; + description = "Parallel programming library"; + license = stdenv.lib.licenses.bsd3; + }) {}; + scientific = callPackage + ({ mkDerivation, array, base, bytestring, deepseq, ghc-prim + , hashable, integer-gmp, QuickCheck, smallcheck, stdenv, tasty + , tasty-ant-xml, tasty-hunit, tasty-quickcheck, tasty-smallcheck + , text + }: + mkDerivation { + pname = "scientific"; + version = "0.3.3.8"; + src = "${ghcjsBoot}/boot/scientific"; + doCheck = false; + libraryHaskellDepends = [ + array base bytestring deepseq ghc-prim hashable integer-gmp text + ]; + testHaskellDepends = [ + base bytestring QuickCheck smallcheck tasty tasty-ant-xml + tasty-hunit tasty-quickcheck tasty-smallcheck text + ]; + jailbreak = true; + homepage = "https://github.com/basvandijk/scientific"; + description = "Numbers represented using scientific notation"; + license = stdenv.lib.licenses.bsd3; + }) {}; + stm = callPackage + ({ mkDerivation, array, base, stdenv }: + mkDerivation { + pname = "stm"; + version = "2.4.4"; + src = "${ghcjsBoot}/boot/stm"; + doCheck = false; + libraryHaskellDepends = [ array base ]; + jailbreak = true; + description = "Software Transactional Memory"; + license = stdenv.lib.licenses.bsd3; + }) {}; + syb = callPackage + ({ mkDerivation, base, containers, HUnit, mtl, stdenv }: + mkDerivation { + pname = "syb"; + version = "0.5.1"; + src = "${ghcjsBoot}/boot/syb"; + doCheck = false; + libraryHaskellDepends = [ base ]; + testHaskellDepends = [ base containers HUnit mtl ]; + jailbreak = true; + homepage = "http://www.cs.uu.nl/wiki/GenericProgramming/SYB"; + description = "Scrap Your Boilerplate"; + license = stdenv.lib.licenses.bsd3; + }) {}; + text = callPackage + ({ mkDerivation, array, base, binary, bytestring, deepseq, directory + , ghc-prim, HUnit, integer-gmp, QuickCheck, quickcheck-unicode + , random, stdenv, test-framework, test-framework-hunit + , test-framework-quickcheck2 + }: + mkDerivation { + pname = "text"; + version = "1.2.1.1"; + src = "${ghcjsBoot}/boot/text"; + doCheck = false; + libraryHaskellDepends = [ + array base binary bytestring deepseq ghc-prim integer-gmp + ]; + testHaskellDepends = [ + array base binary bytestring deepseq directory ghc-prim HUnit + integer-gmp QuickCheck quickcheck-unicode random test-framework + test-framework-hunit test-framework-quickcheck2 + ]; + jailbreak = true; + homepage = "https://github.com/bos/text"; + description = "An efficient packed Unicode text type"; + license = stdenv.lib.licenses.bsd3; + }) {}; + unordered-containers = callPackage + ({ mkDerivation, base, ChasingBottoms, containers, deepseq, hashable + , HUnit, QuickCheck, stdenv, test-framework, test-framework-hunit + , test-framework-quickcheck2 + }: + mkDerivation { + pname = "unordered-containers"; + version = "0.2.5.1"; + src = "${ghcjsBoot}/boot/unordered-containers"; + doCheck = false; + libraryHaskellDepends = [ base deepseq hashable ]; + testHaskellDepends = [ + base ChasingBottoms containers hashable HUnit QuickCheck + test-framework test-framework-hunit test-framework-quickcheck2 + ]; + jailbreak = true; + homepage = "https://github.com/tibbe/unordered-containers"; + description = "Efficient hashing-based container types"; + license = stdenv.lib.licenses.bsd3; + }) {}; + vector = callPackage + ({ mkDerivation, base, deepseq, ghc-prim, primitive, QuickCheck + , random, stdenv, template-haskell, test-framework + , test-framework-quickcheck2, transformers + }: + mkDerivation { + pname = "vector"; + version = "0.11.0.0"; + src = "${ghcjsBoot}/boot/vector"; + doCheck = false; + libraryHaskellDepends = [ base deepseq ghc-prim primitive ]; + testHaskellDepends = [ + base QuickCheck random template-haskell test-framework + test-framework-quickcheck2 transformers + ]; + jailbreak = true; + homepage = "https://github.com/haskell/vector"; + description = "Efficient Arrays"; + license = stdenv.lib.licenses.bsd3; + }) {}; + ghcjs-base = callPackage + ({ mkDerivation, aeson, array, attoparsec, base, bytestring + , containers, deepseq, directory, dlist, ghc-prim, ghcjs-prim + , hashable, HUnit, integer-gmp, primitive, QuickCheck + , quickcheck-unicode, random, scientific, stdenv, test-framework + , test-framework-hunit, test-framework-quickcheck2, text, time + , transformers, unordered-containers, vector + }: + mkDerivation { + pname = "ghcjs-base"; + version = "0.2.0.0"; + src = "${ghcjsBoot}/ghcjs/ghcjs-base"; + doCheck = false; + libraryHaskellDepends = [ + aeson attoparsec base bytestring containers deepseq dlist ghc-prim + ghcjs-prim hashable integer-gmp primitive scientific text time + transformers unordered-containers vector + ]; + testHaskellDepends = [ + array base bytestring deepseq directory ghc-prim ghcjs-prim HUnit + primitive QuickCheck quickcheck-unicode random test-framework + test-framework-hunit test-framework-quickcheck2 text + ]; + jailbreak = true; + homepage = "http://github.com/ghcjs/ghcjs-base"; + description = "Base library for GHCJS"; + license = stdenv.lib.licenses.mit; + }) {}; + Cabal = callPackage + ({ mkDerivation, array, base, binary, bytestring, containers + , deepseq, directory, extensible-exceptions, filepath, HUnit + , old-time, pretty, process, QuickCheck, regex-posix, stdenv + , test-framework, test-framework-hunit, test-framework-quickcheck2 + , time, unix + }: + mkDerivation { + pname = "Cabal"; + version = "1.22.8.0"; + src = "${ghcjsBoot}/boot/cabal/Cabal"; + doCheck = false; + libraryHaskellDepends = [ + array base binary bytestring containers deepseq directory filepath + pretty process time unix + ]; + testHaskellDepends = [ + base bytestring containers directory extensible-exceptions filepath + HUnit old-time process QuickCheck regex-posix test-framework + test-framework-hunit test-framework-quickcheck2 unix + ]; + jailbreak = true; + homepage = "http://www.haskell.org/cabal/"; + description = "A framework for packaging Haskell software"; + license = stdenv.lib.licenses.bsd3; + }) {}; +} |