summary refs log tree commit diff
path: root/pkgs/development/libraries/haskell
diff options
context:
space:
mode:
authorAndres Löh <mail@andres-loeh.de>2008-01-22 16:26:57 +0000
committerAndres Löh <mail@andres-loeh.de>2008-01-22 16:26:57 +0000
commitd8694e68ebdd8a264f200e4ac9398e7b7cded28c (patch)
treea4b64f4ba1f6a5f718a8ae365be902b3f29f43e7 /pkgs/development/libraries/haskell
parentdffda95fdd383a01da15d2545fb1006b4a293e39 (diff)
downloadnixpkgs-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.nix44
-rw-r--r--pkgs/development/libraries/haskell/binary/default.nix38
-rw-r--r--pkgs/development/libraries/haskell/cabal/cabal.nix92
-rw-r--r--pkgs/development/libraries/haskell/vty/default.nix39
-rw-r--r--pkgs/development/libraries/haskell/zlib/default.nix41
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
-  '';
-
 })