diff options
author | Marc Weber <marco-oweber@gmx.de> | 2008-02-09 14:08:37 +0000 |
---|---|---|
committer | Marc Weber <marco-oweber@gmx.de> | 2008-02-09 14:08:37 +0000 |
commit | 0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51 (patch) | |
tree | e7254d9ca2609e40c8c91b75386cc176385c9a57 | |
parent | cb418b6e341b689b80422cee2d01e12f30939810 (diff) | |
download | nixlib-0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51.tar nixlib-0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51.tar.gz nixlib-0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51.tar.bz2 nixlib-0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51.tar.lz nixlib-0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51.tar.xz nixlib-0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51.tar.zst nixlib-0efd4183e18e0c0ee9bbda22224ac8c32dbaaf51.zip |
updated version of my ghc and packages proposal. Now compiles HAppS.
Examples on how to add ghc extra_libs, libraries from hackage are included svn path=/nixpkgs/trunk/; revision=10565
-rw-r--r-- | pkgs/development/compilers/ghcs/default.nix | 71 | ||||
-rw-r--r-- | pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs | 48 | ||||
-rw-r--r-- | pkgs/development/compilers/ghcs/splitpackagedb.hs | 2 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 218 |
4 files changed, 294 insertions, 45 deletions
diff --git a/pkgs/development/compilers/ghcs/default.nix b/pkgs/development/compilers/ghcs/default.nix index b4e14c9921d8..a4c7c603ceac 100644 --- a/pkgs/development/compilers/ghcs/default.nix +++ b/pkgs/development/compilers/ghcs/default.nix @@ -5,7 +5,7 @@ and add all together using GHC_PACKAGE_PATH First I've tried separating the build of ghc from it's lib. It hase been to painful. I've failed. - Now there is splitpackagedb.hs which just takes the installed package.conf + Now there is nix_ghc_pkg_tool.hs which just takes the installed package.conf and creates a new package db file for each contained package. The final attribute set looks similar to this: @@ -31,13 +31,17 @@ */ - # creates a nix package out of the single package.conf files created when after installing ghc (see splitpackagedb.hs) - packageByPackageDB = otherPkg : name : packageconfpath : propagatedBuildInputs : stdenv.mkDerivation { - inherit name otherPkg propagatedBuildInputs; + # creates a nix package out of the single package.conf files created when after installing ghc (see nix_ghc_pkg_tool.hs) + packageByPackageDB = ghc : # ghc + name : + packageconfpath : + propagatedBuildInputs : + stdenv.mkDerivation { + inherit name; phases = "buildPhase fixupPhase"; - buildInputs = [ghcPkgUtil]; - buildPhase = "setupHookRegisteringPackageDatabase \"$otherPkg/${packageconfpath}\" - "; + buildInputs = [ ghcPkgUtil ]; + propagatedBuildInputs = [ ghc ] ++ propagatedBuildInputs; + buildPhase = "setupHookRegisteringPackageDatabase \"${ghc}/${packageconfpath}\""; }; # used to automatically get dependencies ( used for core_libs ) @@ -58,7 +62,8 @@ #this only works for ghc-6.8 right now ghcAndLibraries = { version, src /* , core_libraries, extra_libraries */ - , extra_src }: + , extra_src + , alias_names }: recurseIntoAttrs ( rec { inherit src extra_src version; @@ -74,7 +79,8 @@ sed -i \"s|^\(library-dirs.*$\)|\1 \\\"$ncurses/lib\\\"|\" libraries/readline/package.conf.in "; - splitpackagedb = ./splitpackagedb.hs; + # TODO add unique (filter duplicates?) shouldn't be there? + nix_ghc_pkg_tool = ./nix_ghc_pkg_tool.hs; configurePhase = "./configure" +" --prefix=\$out " @@ -89,9 +95,10 @@ # note : I don't know yet wether it's a good idea to have RUNGHC.. It's faster # but you can't pass packages, can you? postInstall = " - cp \$splitpackagedb splitpackagedb.hs - \$out/bin/ghc-\$version --make -o splitpackagedb splitpackagedb.hs; - ./splitpackagedb \$out/lib/ghc-\$version/package.conf \$out/lib/ghc-\$version + cp \$nix_ghc_pkg_tool nix_ghc_pkg_tool.hs + \$out/bin/ghc-\$version --make -o nix_ghc_pkg_tool nix_ghc_pkg_tool.hs; + ./nix_ghc_pkg_tool split \$out/lib/ghc-\$version/package.conf \$out/lib/ghc-\$version + cp nix_ghc_pkg_tool \$out/bin if test -x \$out/bin/runghc; then RUNHGHC=\$out/bin/runghc # > ghc-6.7/8 ? @@ -110,7 +117,7 @@ core_libs = resolveDeps ghc [ { name = "Cabal-1.2.3.0"; deps = ["base-3.0.1.0" "pretty-1.0.0.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "directory-1.0.0.0" "unix-2.3.0.0" "process-1.0.0.0" "array-0.1.0.0" "containers-0.1.0.1" "rts-1.0" "filepath-1.1.0.0"];} # { name = "array-0.1.0.0"; deps = ["base-3.0.1.0"];} - { name = "base-3.0.1.0"; deps = [];} # + { name = "base-3.0.1.0"; deps = ["rts-1.0"];} # { name = "bytestring-0.9.0.1"; deps = [ "base-3.0.1.0" "array-0.1.0.0" ];} { name = "containers-0.1.0.1"; deps = [ "base-3.0.1.0" "array-0.1.0.0" ];} { name = "directory-1.0.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0"];} @@ -125,17 +132,21 @@ { name = "process-1.0.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "unix-2.3.0.0"];} { name = "random-1.0.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0"];} { name = "readline-1.0.1.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "unix-2.3.0.0" "process-1.0.0.0" ];} - { name = "rts-1.0"; deps = [ "base-3.0.1.0" ];} # + { name = "rts-1.0"; deps = [];} # { name = "template-haskell-2.2.0.0"; deps = [ "base-3.0.1.0" "pretty-1.0.0.0" "array-0.1.0.0" "packedstring-0.1.0.0" "containers-0.1.0.1" ];} + { name = "unix-2.3.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" ];} ]; - - - extra_libs = []; - #all_libs = core_libs ++ extra_libs; + extra_libs = {}; # TODO ? at the moment outside of this package + # contains core_libs { "base-3.0.1.0" = <derivation> ... + # and alias names base = base-3.0.1.0 + # (without version) } + # to get a specific version don't use set.xy-7 but (__getAttr "xy-7" set) + all_libs = let all = core_libs // extra_libs; + in all // ( builtins.listToAttrs ( lib.mapRecordFlatten (attr : v : lib.nv attr (__getAttr v all ) ) alias_names ) ); } ); ghc68 = ghcAndLibraries rec { @@ -156,6 +167,30 @@ #sha256 = "0py7d9nh3lkhjxr3yb3n9345d0hmzq79bi40al5rcr3sb84rnp9r"; }; + # to be able to use just array instead of array-0.1.0.0 (versions are likely to change, dependencies not that often) + alias_names = { + cabal = "Cabal-1.2.3.0"; + array = "array-0.1.0.0"; + base = "base-3.0.1.0"; + bytestring = "bytestring-0.9.0.1"; + containers = "containers-0.1.0.1"; + directory = "directory-1.0.0.0"; + filepath = "filepath-1.1.0.0"; + haskell98 = "haskell98-1.0.1.0"; + hpc = "hpc-0.5.0.0"; + packedstring = "packedstring-0.1.0.0"; + pretty = "pretty-1.0.0.0"; + process = "process-1.0.0.0"; + random = "random-1.0.0.0"; + readline = "readline-1.0.1.0"; + rts = "rts-1.0"; + template = "template-haskell-2.2.0.0"; + unix = "unix-2.3.0.0"; + template_haskell = "template-haskell-2.2.0.0"; + old_time = "old-time-1.0.0.0"; + old_locale = "old-locale-1.0.0.0"; + }; + # this will change because of dependency hell :) #core_libraries = [ "Cabal" /* "Win32" */ "array" "base" "bytestring" "containers" #"directory" "doc" "filepath" "haskell98" "hpc" "old-locale" "old-time" diff --git a/pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs b/pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs new file mode 100644 index 000000000000..494b37807fa8 --- /dev/null +++ b/pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs @@ -0,0 +1,48 @@ +-- packages: filepath,Cabal,directory +{-# OPTIONS_GHC -fglasgow-exts #-} +module Main where +import Distribution.InstalledPackageInfo (InstalledPackageInfo (..)) +import Distribution.Package (showPackageId) +import System.FilePath +import System.Environment +import System.Directory +import System.IO +import System.Exit +import Data.List + +usage = unlines [ + " usage a) <app-name> split in_path out_path" + , " b) <app-anme> join out_path" + , "This small helper executable servers two purposes:" + , "a) split the main package db created by ghc installation into single libs" + , " so that nix can add them piecwise as needed to buildInputs" + , "b) merge databases into one single file, so when building a library" + , " we can create one db containing all dependencies passed by GHC_PACKAGE_PATH" + , " I think this is a better solution than patching and mantaining cabal so" + , " that it support GHC_PACKAGE_PATH (not only by accident) ?" + ] + +mySplit :: (Eq Char) => [Char] ->[[ Char ]] +mySplit [] = [] +mySplit list = let (l, l') = span (not . (`elem` ":;")) list + in l: mySplit (drop 1 l') + +myReadFile f = doesFileExist f >>= \fe -> + if fe then readFile f + else do hPutStrLn stderr $ "unable to read file " ++ f + exitWith (ExitFailure 1) + +main = do + args <- getArgs + case args of + ["split", inFile, outDir] -> do + -- prior to 6.9.x (when exactly) this must be InstalledPackageInfo only (not InstalledPackageInfo_ String) + -- (packagedb :: [InstalledPackageInfo_ String] ) <- fmap read $ myReadFile inFile + (packagedb :: [InstalledPackageInfo] ) <- fmap read $ myReadFile inFile + mapM_ (\pi -> let fn = outDir </> (showPackageId $ package pi) ++ ".conf" + in writeFile fn (show [pi]) + ) packagedb + ["join", outpath] -> do + getEnv "GHC_PACKAGE_PATH" >>= mapM myReadFile . nub . mySplit + >>= writeFile outpath . show . concat . map (read :: String -> [InstalledPackageInfo]) + _ -> putStrLn usage diff --git a/pkgs/development/compilers/ghcs/splitpackagedb.hs b/pkgs/development/compilers/ghcs/splitpackagedb.hs index 0f7ceb0d4019..ef2e82932f3a 100644 --- a/pkgs/development/compilers/ghcs/splitpackagedb.hs +++ b/pkgs/development/compilers/ghcs/splitpackagedb.hs @@ -18,6 +18,8 @@ main = do args <- getArgs case args of [inFile, outDir] -> do + -- prior to 6.9.x (when exactly) this must be InstalledPackageInfo only (not InstalledPackageInfo_ String) + -- (packagedb :: [InstalledPackageInfo_ String] ) <- fmap read $ readFile inFile (packagedb :: [InstalledPackageInfo] ) <- fmap read $ readFile inFile mapM_ (\pi -> let fn = outDir </> (showPackageId $ package pi) ++ ".conf" in writeFile fn (show [pi]) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d7320bf33728..9d6cb3265890 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1072,7 +1072,8 @@ rec { profiledCompiler = true; }); - # This new ghc stuff is under heavy development and might change ! + # This new ghc stuff is under heavy development and will change ! + # ========= ======================================================= # usage: see ghcPkgUtil.sh - use setup-new2 because of PATH_DELIMITER # depreceated -> use functions defined in builderDefs @@ -1095,43 +1096,206 @@ rec { stdenv = stdenvUsingSetupNew2; }; + # args must contain src name buildInputs + # using this derivation .. my system is dying (> 2.5 g memory usage -> segfault ?) + # experimental ! + ghc_cabal_derivation_X = + lib.sumArgs ( + x : ( let localDefs = (((builderDefs x) + { debug = true; }) null # end sumArgs + ); in with localDefs; + stdenv.mkDerivation rec { + inherit name propagatedBuildInputs; + builder = writeScript (name + "-builder") + (textClosure localDefs [ cabalBuild ]); + })); + + # args must contain src name buildInputs + # classic expression style.. seems to work fine + # used now + ghc_cabal_derivation = args : null_ : with lib; with args; + stdenvUsingSetupNew2.mkDerivation { + inherit name propagatedBuildInputs src goSrcDir; + phases = "unpackPhase buildPhase"; + buildInputs = (if (args ? buildInputs) then args.buildInputs else []) + ++ [ ghcPkgUtil ]; + buildPhase =" + echo buildPhase is + createEmptyPackageDatabaseAndSetupHook + export GHC_PACKAGE_PATH + + \$goSrcDir + ghc --make Setup.*hs -o setup + CABAL_SETUP=./setup + + nix_ghc_pkg_tool join local-pkg-db + + \$CABAL_SETUP configure --package-db=local-pkg-db + \$CABAL_SETUP build + \$CABAL_SETUP copy --destdir=\$out + \$CABAL_SETUP register --gen-script + sed -e \"s=/usr/local/lib=\$out/usr/local/lib=g\" \\ + -e \"s#bin/ghc-pkg --package-conf.*#bin/ghc-pkg --package-conf=\$PACKAGE_DB register -#\" \\ + -i register.sh + ./register.sh + rm \${PACKAGE_DB}.old + + ensureDir \"\$out/nix-support\" + echo \"\$propagatedBuildInputs\" > \"\$out/nix-support/propagated-build-inputs\" + "; + }; + # this will change in the future - ghc68_extra_libs = ghc: - let deriv = name : goSrcDir : deps : - let localDefs = builderDefs { - inherit goSrcDir; - src = ghc.extra_src; - } null; - in with localDefs; - stdenv.mkDerivation rec { - inherit name; - builder = writeScript (name + "-builder") - (textClosure localDefs [ cabalBuild ]); - }; - # using nvs to be able to use mtl-1.1.0.0 as name - in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "cd libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); + # TODO enhance speed ! ? + ghc68_extra_libs = ghc: rec { + # name (using lowercase letters everywhere because using installing packages having different capitalization is discouraged) - this way there is not that much to remember? + + cabal_darcs_name = "cabal--darcs"; + + # introducing p here to speed things up. + # It merges derivations (defined below) and additional inputs. I hope that using as few nix functions as possible results in greates speed? + # unfortunately with x; won't work because it forces nix to evaluate all attributes of x which would lead to infinite recursion + pkgs = let x = ghc.all_libs // derivations; in { + # ghc extra packages + mtl = { name="mtl-1.1.0.0"; goSrcDir="libraries/mtl"; p_deps=[ x.base ]; src = ghc.extra_src; }; + parsec = { name="parsec-2.1.0.0"; goSrcDir="libraries/parsec"; p_deps=[ x.base ]; src = ghc.extra_src; }; + network = { name="network-2.1.0.0"; goSrcDir="libraries/network"; p_deps=[ x.base x.parsec x.haskell98 ]; src = ghc.extra_src; }; + regex_base = { name="regex-base-0.72.0.1"; goSrcDir="libraries/regex-base"; p_deps=[ x.base x.array x.bytestring x.haskell98 ]; src = ghc.extra_src; }; + regex_posix = { name="regex-posix-0.72.0.2"; goSrcDir="libraries/regex-posix"; p_deps=[ x.regex_base x.haskell98 ]; src = ghc.extra_src; }; + regex_compat = { name="regex-compat-0.71.0.1"; goSrcDir="libraries/regex-compat"; p_deps=[ x.base x.regex_posix x.regex_base x.haskell98 ]; src = ghc.extra_src; }; + stm = { name="stm-2.1.1.0"; goSrcDir="libraries/stm"; p_deps=[ x.base x.array ]; src = ghc.extra_src; }; + hunit = { name="HUnit-1.2.0.0"; goSrcDir="libraries/HUnit"; p_deps=[ x.base ]; src = ghc.extra_src; }; + quickcheck = { name="QuickCheck-1.1.0.0"; goSrcDir="libraries/QuickCheck"; p_deps=[x.base x.random]; src = ghc.extra_src; }; + + + # other pacakges (hackage etc) + binary = rec { name = "binary-0.4.1"; p_deps = [ x.base x.bytestring x.containers x.array ]; + src = fetchurl { url = "http://hackage.haskell.org/packages/archive/binary/0.4.1/binary-0.4.1.tar.gz"; + sha256 = "0jg5i1k5fz0xp1piaaf5bzhagqvfl3i73hlpdmgs4gc40r1q4x5v"; }; + }; + # 1.13 is stable. There are more recent non stable versions + haxml = rec { name = "HaXml-1.13.3"; p_deps = [ x.base x.rts x.directory x.process x.pretty x.containers x.filepath x.haskell98 ]; + src = fetchurl { url = "http://www.haskell.org/HaXml/${name}.tar.gz"; + sha256 = "08d9wy0rg9m66dd10x0zvkl74l25vxdakz7xp3j88s2gd31jp1v0"; }; + }; + xhtml = rec { name = "xhtml-3000.0.2.2"; p_deps = [ x.base ]; + src = fetchurl { url = "http://hackage.haskell.org/packages/archive/xhtml/3000.0.2.2/xhtml-3000.0.2.2.tar.gz"; + sha256 = "112mbq26ksh7r22y09h0xvm347kba3p4ns12vj5498fqqj333878"; }; + }; + html = rec { name = "html-1.0.1.1"; p_deps = [ x.base ]; + src = fetchurl { url = "http://hackage.haskell.org/packages/archive/html/1.0.1.1/html-1.0.1.1.tar.gz"; + sha256 = "10fayfm18p83zlkr9ikxlqgnzxg1ckdqaqvz6wp1xj95fy3p6yl1"; }; + }; + crypto = rec { name = "crypto-4.1.0"; p_deps = [ x.base x.array x.pretty x.quickcheck x.random x.hunit ]; + src = fetchurl { url = "http://hackage.haskell.org/packages/archive/Crypto/4.1.0/Crypto-4.1.0.tar.gz"; + sha256 = "13rbpbn6p1da6qa9m6f7dmkzdkmpnx6jiyyndzaz99nzqlrwi109"; }; + }; + hslogger = rec { name = "hslogger-1.0.4"; p_deps = [ x.containers x.directory x.mtl x.network x.process]; + src = fetchurl { url = "http://hackage.haskell.org/packages/archive/hslogger/1.0.4/hslogger-1.0.4.tar.gz"; + sha256 = "0kmz8xs1q41rg2xwk22fadyhxdg5mizhw0r4d74y43akkjwj96ar"; }; + }; + + + # HAPPS - Libraries + http_darcs = { name="http-darcs"; p_deps = [x.network x.parsec]; + src = fetchdarcs { url = "http://darcs.haskell.org/http/"; md5 = "4475f858cf94f4551b77963d08d7257c"; }; + }; + syb_with_class_darcs = { name="syb-with-class-darcs"; p_deps = [x.template_haskell x.bytestring ]; + src = fetchdarcs { url = "http://happs.org/HAppS/syb-with-class"; md5 = "b42336907f7bfef8bea73bc36282d6ac"; }; + }; + + happs_data_darcs = { name="HAppS-Data-darcs"; p_deps=[ x.base x.mtl x.template_haskell x.syb_with_class_darcs x.haxml x.happs_util_darcs x.regex_compat x.bytestring x.pretty ]; + src = fetchdarcs { url = "http://happs.org/repos/HAppS-Data"; md5 = "10c505dd687e9dc999cb187090af9ba7"; }; + }; + happs_util_darcs = { name="HAppS-Util-darcs"; p_deps=[ x.base x.mtl x.hslogger x.template_haskell x.array x.bytestring x.old_time x.process x.directory ]; + src = fetchdarcs { url = "http://happs.org/repos/HAppS-Util"; md5 = "693cb79017e522031c307ee5e59fc250"; }; + }; + happs_state_darcs = { name="HAppS-State-darcs"; p_deps=[ x.base x.haxml + x.mtl x.network x.stm x.template_haskell x.hslogger + x.happs_util_darcs x.happs_data_darcs x.bytestring x.containers + x.random x.old_time x.old_locale x.unix x.directory x.binary ]; + src = fetchdarcs { url = "http://happs.org/repos/HAppS-State"; + md5 = "956e5c293b60f4a98148fedc5fa38acc"; + }; + }; + happs_plugins_darcs = { name="HAppS-plugins-darcs"; p_deps=[ x.base x.mtl x.hslogger x.happs_util_darcs x.happs_data_darcs x.happs_state_darcs ]; + src = fetchdarcs { url = "http://happs.org/repos/HAppS-Util"; md5 = "693cb79017e522031c307ee5e59fc250"; }; + }; + # there is no .cabal yet + #happs_smtp_darcs = { name="HAppS-smtp-darcs"; p_deps=[]; + #src = fetchdarcs { url = "http://happs.org/repos/HAppS-smtp"; md5 = "5316917e271ea1ed8ad261080bcb47db"; }; + #}; + + happs_ixset_darcs = { name="HAppS-IxSet-darcs"; p_deps=[ x.base x.mtl + x.hslogger x.happs_util_darcs x.happs_state_darcs x.happs_data_darcs + x.template_haskell x.syb_with_class_darcs x.containers ]; + src = fetchdarcs { url = "http://happs.org/repos/HAppS-IxSet"; + #md5 = "fa6b24517f09aa16e972f087430967fd"; + #tag = "0.9.2"; + # no tag + md5 = "fa6b24517f09aa16e972f087430967fd"; + }; + }; + happs_darcs = { name="happs-darcs"; p_deps=[x.haxml x.parsec x.mtl + x.network x.regex_compat x.hslogger x.happs_data_darcs + x.happs_util_darcs x.happs_state_darcs x.happs_ixset_darcs x.http_darcs + x.template_haskell x.xhtml x.html x.bytestring x.random + x.containers x.old_time x.old_locale x.directory x.unix]; + src = fetchdarcs { url = "http://happs.org/repos/HAppS-HTTP"; md5 = "e1bb17eb30a39d30b8c34dffbf80edc2"; }; + }; + # we need recent version of cabal (because only this supports --pkg-config propably) Thu Feb 7 14:54:07 CET 2008 + # is be added to buildInputs automatically + cabal_darcs = { name=cabal_darcs_name; p_deps = with ghc.all_libs; [base rts directory process pretty containers filepath]; + src = fetchdarcs { url = "http://darcs.haskell.org/cabal"; md5 = "8b0bc3c7f2676ce642f98b1568794cd6"; }; + }; + }; + toDerivation = attrs : with attrs; + ghc_cabal_derivation { + inherit name src; + propagatedBuildInputs = p_deps ++ (lib.optional (attrs.name != cabal_darcs_name) derivations.cabal_darcs ); + goSrcDir = "cd ${if attrs ? goSrcDir then attrs.goSrcDir else "."}"; + patches = if attrs ? patches then attrs.patches else []; + # add cabal, take deps either from this list or from ghc.core_libs + } null; + # result is { mtl = <deriv>; + # "mtl-1.." = <the same deriv> + # ...} + # containing the derivations defined here and in ghc.all_libs + derivations = with lib; builtins.listToAttrs (lib.concatLists ( lib.mapRecordFlatten + ( n : attrs : let d = (toDerivation attrs); in [ (nv n d) (nv attrs.name d) ] ) pkgs ) ); + }.derivations; + # the wrappers basically does one thing: It defines GHC_PACKAGE_PATH before calling ghc{i,-pkg} # So you can have different wrappers with different library combinations # So installing ghc libraries isn't done by nix-env -i package but by adding the lib to the libraries list below + # the lib to the libraries list below + # Doesn't create that much useless symlinks (you seldomly want to read the + # .hi and .o files, right? ghcLibraryWrapper68 = let ghc = ghcsAndLibs.ghc68.ghc; in createGhcWrapper rec { ghcPackagedLibs = true; name = "ghc${ghc.version}_wrapper"; suffix = "${ghc.version}wrapper"; - libraries = map ( a : __getAttr a ghcsAndLibs.ghc68.core_libs ) [ - "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "array-0.1.0.0" "containers-0.1.0.1" - "hpc-0.5.0.0" "bytestring-0.9.0.1" "pretty-1.0.0.0" "packedstring-0.1.0.0" "template-haskell-2.2.0.0" - "unix-2.3.0.0" "process-1.0.0.0" "readline-1.0.1.0" "Cabal-1.2.3.0" "random-1.0.0.0" "haskell98-1.0.1.0" "ghc-${ghc.version}" - "array-0.1.0.0" "bytestring-0.9.0.1" "containers-0.1.0.1" "directory-1.0.0.0" "filepath-1.1.0.0" - "ghc-${ghc.version}" "haskell98-1.0.1.0" "hpc-0.5.0.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" - "packedstring-0.1.0.0" "pretty-1.0.0.0" "process-1.0.0.0" "random-1.0.0.0" - "readline-1.0.1.0" "rts-1.0" "unix-2.3.0.0" "base-3.0.1.0" - ] ++ map ( a : __getAttr a (ghc68_extra_libs ghcsAndLibs.ghc68 ) ) [ - "mtl-1.1.0.0" - ]; - # (flatten ghcsAndLibs.ghc68.core_libs); + libraries = + # core_libs distributed with this ghc version + #(lib.flatten ghcsAndLibs.ghc68.core_libs) + map ( a : __getAttr a ghcsAndLibs.ghc68.all_libs ) [ + "cabal" "array" "base" "bytestring" "containers" "containers" "directory" + "filepath" "ghc-${ghc.version}" "haskell98" "hpc" "old_locale" "old_time" + "old_time" "packedstring" "pretty" "process" "random" "readline" "rts" + "template" "unix" "template_haskell" ] + # some extra libs + + ++ (lib.flattenAttrs (ghc68_extra_libs ghcsAndLibs.ghc68) ); + # or specify the ones you want to install using this list (possible values see attributes in ghc68_extra_libs + #++ map ( a : __getAttr a (ghc68_extra_libs ghcsAndLibs.ghc68 ) ) + #[ "mtl" "parsec" "cabal_darcs" "haxml" "network" "regex_base" + #"regex_compat" "regex_posix" "stm" "hunit" "quickcheck" "crypto" + #"hslogger" "http_darcs" "syb_with_class_darcs" + #]; + # some additional libs inherit ghc; }; |