diff options
author | Andres Löh <mail@andres-loeh.de> | 2008-01-22 16:26:57 +0000 |
---|---|---|
committer | Andres Löh <mail@andres-loeh.de> | 2008-01-22 16:26:57 +0000 |
commit | d8694e68ebdd8a264f200e4ac9398e7b7cded28c (patch) | |
tree | a4b64f4ba1f6a5f718a8ae365be902b3f29f43e7 /pkgs/development/libraries/haskell | |
parent | dffda95fdd383a01da15d2545fb1006b4a293e39 (diff) | |
download | nixpkgs-d8694e68ebdd8a264f200e4ac9398e7b7cded28c.tar nixpkgs-d8694e68ebdd8a264f200e4ac9398e7b7cded28c.tar.gz nixpkgs-d8694e68ebdd8a264f200e4ac9398e7b7cded28c.tar.bz2 nixpkgs-d8694e68ebdd8a264f200e4ac9398e7b7cded28c.tar.lz nixpkgs-d8694e68ebdd8a264f200e4ac9398e7b7cded28c.tar.xz nixpkgs-d8694e68ebdd8a264f200e4ac9398e7b7cded28c.tar.zst nixpkgs-d8694e68ebdd8a264f200e4ac9398e7b7cded28c.zip |
* added generic Cabal builder
* transformed zlib, vty, binary, X11 to use generic Cabal builder * note that Cabal library packages are now by default prefixed with "haskell-" svn path=/nixpkgs/trunk/; revision=10247
Diffstat (limited to 'pkgs/development/libraries/haskell')
-rw-r--r-- | pkgs/development/libraries/haskell/X11/default.nix | 44 | ||||
-rw-r--r-- | pkgs/development/libraries/haskell/binary/default.nix | 38 | ||||
-rw-r--r-- | pkgs/development/libraries/haskell/cabal/cabal.nix | 92 | ||||
-rw-r--r-- | pkgs/development/libraries/haskell/vty/default.nix | 39 | ||||
-rw-r--r-- | pkgs/development/libraries/haskell/zlib/default.nix | 41 |
5 files changed, 108 insertions, 146 deletions
diff --git a/pkgs/development/libraries/haskell/X11/default.nix b/pkgs/development/libraries/haskell/X11/default.nix index a0873e97938..39fb5628467 100644 --- a/pkgs/development/libraries/haskell/X11/default.nix +++ b/pkgs/development/libraries/haskell/X11/default.nix @@ -1,49 +1,13 @@ -{stdenv, fetchurl, ghc, libX11, xineramaSupport ? true, libXinerama ? null, libXext ? null}: +{cabal, libX11, xineramaSupport ? true, libXinerama ? null, libXext ? null}: assert xineramaSupport -> (libXinerama != null && libXext != null); -stdenv.mkDerivation (rec { - +cabal.mkDerivation (self : { pname = "X11"; version = "1.4.1"; - - name = "${pname}-${version}"; - - src = fetchurl { - url = "http://hackage.haskell.org/packages/archive/${pname}/${version}/${name}.tar.gz"; - sha256 = "e51038541415686f0e278ccdbc0b2373cd11f212de99023b7b8f8e776aa09f79"; - }; - - buildInputs = [ghc]; - - propagatedBuildInputs = [libX11] ++ - (if xineramaSupport then [libXinerama libXext] else []); - + sha256 = "e51038541415686f0e278ccdbc0b2373cd11f212de99023b7b8f8e776aa09f79"; + propagatedBuildInputs = [libX11] ++ (if xineramaSupport then [libXinerama libXext] else []); meta = { description = "A Haskell binding to the X11 graphics library"; }; - - extraLibDirs = "${libX11}/lib" + (if xineramaSupport then " ${libXinerama}/lib ${libXext}/lib" else ""); - - configurePhase = '' - echo "extra-lib-dirs: ${extraLibDirs}" >> X11.buildinfo.in - ghc --make Setup.hs - ./Setup configure --prefix="$out" - ''; - - buildPhase = '' - ./Setup build - ''; - - installPhase = '' - ./Setup copy - ./Setup register --gen-script - mkdir $out/nix-support - sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh - cp register.sh $out/nix-support/register-ghclib.sh - sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh - mkdir $out/bin - cp register.sh $out/bin/register-ghclib-${name}.sh - ''; - }) diff --git a/pkgs/development/libraries/haskell/binary/default.nix b/pkgs/development/libraries/haskell/binary/default.nix index 9f208e1ced1..081779fd312 100644 --- a/pkgs/development/libraries/haskell/binary/default.nix +++ b/pkgs/development/libraries/haskell/binary/default.nix @@ -1,41 +1,11 @@ -{stdenv, fetchurl, ghc}: - -stdenv.mkDerivation (rec { +{cabal}: +cabal.mkDerivation (self : { pname = "binary"; version = "0.4.1"; - - name = "${pname}-${version}"; - - src = fetchurl { - url = "http://hackage.haskell.org/packages/archive/${pname}/${version}/${pname}-${version}.tar.gz"; - sha256 = "bb74824306843da25f6d97c271e2a06ee3a7e05fc529156fb81d7c576688e549"; - }; - - buildInputs = [ghc]; - + sha256 = "bb74824306843da25f6d97c271e2a06ee3a7e05fc529156fb81d7c576688e549"; meta = { description = "Efficient, pure binary serialisation using lazy ByteStrings"; }; +}) - configurePhase = '' - ghc --make Setup.lhs - ./Setup configure --prefix="$out" - ''; - - buildPhase = '' - ./Setup build - ''; - - installPhase = '' - ./Setup copy - ./Setup register --gen-script - mkdir $out/nix-support - sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh - cp register.sh $out/nix-support/register-ghclib.sh - sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh - mkdir $out/bin - cp register.sh $out/bin/register-ghclib-${name}.sh - ''; - -}) diff --git a/pkgs/development/libraries/haskell/cabal/cabal.nix b/pkgs/development/libraries/haskell/cabal/cabal.nix new file mode 100644 index 00000000000..5c53ca8a8ca --- /dev/null +++ b/pkgs/development/libraries/haskell/cabal/cabal.nix @@ -0,0 +1,92 @@ +# generic builder for Cabal packages + +attrs : +{ + mkDerivation = + transform : + let dtransform = + self : { + + # pname should be defined by the client to be the package basename + # version should be defined by the client to be the package version + + # fname is the internal full name of the package + fname = "${self.pname}-${self.version}"; + + # name is the external full name of the package; usually we prefix + # all packages with haskell- to avoid name clashes for libraries; + # if that is not desired (for applications), name can be set to + # fname. + name = "haskell-${self.fname}"; + + # the default download location for Cabal packages is Hackage, + # you still have to specify the checksum + src = attrs.fetchurl { + url = "http://hackage.haskell.org/packages/archive/${self.pname}/${self.version}/${self.fname}.tar.gz"; + inherit (self) sha256; + }; + + # default buildInputs are just ghc, if more buildInputs are required + # buildInputs can be extended by the client, but often propagatedBuildInputs + # is preferable anyway + buildInputs = [attrs.ghc]; + + # we make sure that propagatedBuildInputs is defined, so that we don't + # have to check for its existence + propagatedBuildInputs = []; + + # library directories that have to be added to the Cabal files + extraLibDirs = map (x : x + "/lib") self.propagatedBuildInputs; + + # file(s) that have to be patched with information about extra libraries; + # can be redefined to the empty list by the client if this is not desired + patchLibFiles = [ "${self.pname}.cabal" ]; + + # patches files, compiles Setup, and configures + configurePhase = '' + eval "$preConfigure" + + for i in ${toString self.patchLibFiles}; do + echo "patching $i" + test -f $i && sed -i '/extra-libraries/ { s|\( *\)extra-libraries.*|&\n\1extra-lib-dirs: ${toString self.extraLibDirs}| }' $i + done + for i in Setup.hs Setup.lhs; do + test -f $i && ghc --make $i + done + ./Setup configure --prefix="$out" + + eval "$postConfigure" + ''; + + # builds via Cabal + buildPhase = '' + eval "$preBuild" + + ./Setup build + + eval "$postBuild" + ''; + + # installs via Cabal; creates a registration file for nix-support + # so that the package can be used in other Haskell-builds; also + # creates a register-${name}.sh in userspace that can be used to + # register the library in a user environment (but this scheme + # should sooner or later be deprecated in favour of using a + # ghc-wrapper). + installPhase = '' + eval "$preInstall" + + ./Setup copy + ./Setup register --gen-script + mkdir $out/nix-support + sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh + cp register.sh $out/nix-support/register-ghclib.sh + sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh + mkdir $out/bin + cp register.sh $out/bin/register-${self.name}.sh + + eval "$postInstall" + ''; + }; + in attrs.stdenv.mkDerivation ((rec { f = dtransform f // transform f; }).f); +} diff --git a/pkgs/development/libraries/haskell/vty/default.nix b/pkgs/development/libraries/haskell/vty/default.nix index ff0f66c2692..930e19ae89c 100644 --- a/pkgs/development/libraries/haskell/vty/default.nix +++ b/pkgs/development/libraries/haskell/vty/default.nix @@ -1,42 +1,13 @@ -{stdenv, fetchurl, ghc}: - -stdenv.mkDerivation (rec { +{cabal}: +cabal.mkDerivation (self : { pname = "vty"; version = "3.0.0"; - - name = "${pname}-${version}"; - - src = fetchurl { - url = "http://hackage.haskell.org/packages/archive/${pname}/${version}/${name}.tar.gz"; - sha256 = "44ae53d06b8b45c14cd3861e860a38730ed9995ed56b1b3d9aba6641771f1947"; - }; - - buildInputs = [ghc]; - + sha256 = "44ae53d06b8b45c14cd3861e860a38730ed9995ed56b1b3d9aba6641771f1947"; meta = { description = "vty is a *very* simplistic library in the niche of ncurses"; }; - - configurePhase = '' - sed -i 's|^Build-Depends:.*$|&, bytestring, containers|' ${pname}.cabal - ghc --make Setup.lhs - ./Setup configure -v --prefix="$out" - ''; - - buildPhase = '' - ./Setup build + preConfigure = '' + sed -i 's|^Build-Depends:.*$|&, bytestring, containers|' ${self.pname}.cabal ''; - - installPhase = '' - ./Setup copy - ./Setup register --gen-script - mkdir $out/nix-support - sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh - cp register.sh $out/nix-support/register-ghclib.sh - sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh - mkdir $out/bin - cp register.sh $out/bin/register-ghclib-${name}.sh - ''; - }) diff --git a/pkgs/development/libraries/haskell/zlib/default.nix b/pkgs/development/libraries/haskell/zlib/default.nix index 8159836930a..268a43b5ea3 100644 --- a/pkgs/development/libraries/haskell/zlib/default.nix +++ b/pkgs/development/libraries/haskell/zlib/default.nix @@ -1,46 +1,11 @@ -{stdenv, fetchurl, ghc, zlib}: - -stdenv.mkDerivation (rec { +{cabal, zlib}: +cabal.mkDerivation (self : { pname = "zlib"; version = "0.4.0.2"; - - name = "${pname}-Haskell-${version}"; - - src = fetchurl { - url = "http://hackage.haskell.org/packages/archive/${pname}/${version}/${pname}-${version}.tar.gz"; - sha256 = "e6e9e51ca5b7f1685eb031f826f7865acc10cc2c8d0dfad975e0e81fd17f17ed"; - }; - - buildInputs = [ghc]; - + sha256 = "e6e9e51ca5b7f1685eb031f826f7865acc10cc2c8d0dfad975e0e81fd17f17ed"; propagatedBuildInputs = [zlib]; - meta = { description = "Compression and decompression in the gzip and zlib formats"; }; - - extraLibDirs = "${zlib}/lib"; - - configurePhase = '' - sed -i '/extra-libraries/a\ \ \ \ extra-lib-dirs: ${extraLibDirs}' ${pname}.cabal - ghc --make Setup.hs - ./Setup configure --prefix="$out" - ''; - - buildPhase = '' - ./Setup build - ''; - - installPhase = '' - ./Setup copy - ./Setup register --gen-script - mkdir $out/nix-support - sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh - cp register.sh $out/nix-support/register-ghclib.sh - sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh - mkdir $out/bin - cp register.sh $out/bin/register-ghclib-${name}.sh - ''; - }) |