Author: andres
Date: Mon Aug  8 14:12:07 2011
New Revision: 28392
URL: https://svn.nixos.org/websvn/nix/?rev=28392&sc=1

Log:
Added more high-level attributes to cabal.nix.

Modified:
   nixpkgs/trunk/pkgs/development/libraries/haskell/cabal/cabal.nix

Modified: nixpkgs/trunk/pkgs/development/libraries/haskell/cabal/cabal.nix
==============================================================================
--- nixpkgs/trunk/pkgs/development/libraries/haskell/cabal/cabal.nix    Mon Aug 
 8 14:08:38 2011        (r28391)
+++ nixpkgs/trunk/pkgs/development/libraries/haskell/cabal/cabal.nix    Mon Aug 
 8 14:12:07 2011        (r28392)
@@ -1,10 +1,17 @@
 # generic builder for Cabal packages
 
-{stdenv, fetchurl, lib, ghc, enableLibraryProfiling ? false} :
+{stdenv, fetchurl, lib, pkgconfig, ghc, enableLibraryProfiling ? false} :
 {
   mkDerivation =
     args : # arguments for the individual package, can modify the defaults
-    let defaults =
+    let # These attributes are removed in the end. This is in order not to 
spoil the build
+        # environment overly, but also to keep hash-backwards-compatible with 
the old cabal.nix.
+        internalAttrs = [
+          "internalAttrs" "buildDepends" "buildTools" "extraLibraries" 
"pkgconfigDepends"
+          "isLibrary" "isExecutable"
+        ];
+
+        defaults =
           self : { # self is the final version of the attribute set
 
             # pname should be defined by the client to be the package basename
@@ -17,10 +24,13 @@
             # all packages with haskell- to avoid name clashes for libraries;
             # if that is not desired (for applications), name can be set to
             # fname.
-            name = if enableLibraryProfiling then
-                     
"haskell-${self.pname}-ghc${ghc.ghc.version}-${self.version}-profiling"
+            name = if self.isLibrary then
+                     if enableLibraryProfiling then
+                       
"haskell-${self.pname}-ghc${ghc.ghc.version}-${self.version}-profiling"
+                     else
+                       
"haskell-${self.pname}-ghc${ghc.ghc.version}-${self.version}"
                    else
-                     
"haskell-${self.pname}-ghc${ghc.ghc.version}-${self.version}";
+                     "${self.pname}-${self.version}";
 
             # the default download location for Cabal packages is Hackage,
             # you still have to specify the checksum
@@ -33,15 +43,32 @@
             # buildInputs can be extended by the client by using 
extraBuildInputs,
             # but often propagatedBuildInputs is preferable anyway
             buildInputs = [ghc] ++ self.extraBuildInputs;
-            extraBuildInputs = [];
+            extraBuildInputs = self.buildTools ++
+                               (if self.pkgconfigDepends == [] then [] else 
[pkgconfig]) ++
+                               (if self.isLibrary then [] else 
self.buildDepends ++ self.extraLibraries ++ self.pkgconfigDepends);
 
             # we make sure that propagatedBuildInputs is defined, so that we 
don't
             # have to check for its existence
-            propagatedBuildInputs = [];
+            propagatedBuildInputs = if self.isLibrary then self.buildDepends 
++ self.extraLibraries ++ self.pkgconfigDepends else [];
 
             # library directories that have to be added to the Cabal files
             extraLibDirs = [];
 
+            # build-depends Cabal field
+            buildDepends = [];
+
+            # build-tools Cabal field
+            buildTools = [];
+
+            # extra-libraries Cabal field
+            extraLibraries = [];
+
+            # pkgconfig-depends Cabal field
+            pkgconfigDepends = [];
+
+            isLibrary = ! self.isExecutable;
+            isExecutable = false;
+
             libraryProfiling =
               if enableLibraryProfiling then ["--enable-library-profiling"]
                                         else ["--disable-library-profiling"];
@@ -115,5 +142,5 @@
             # in Cabal derivations.
             inherit stdenv ghc;
           };
-    in  stdenv.mkDerivation ((rec { f = defaults f // args f; }).f);
+    in  stdenv.mkDerivation (removeAttrs ((rec { f = defaults f // args f; 
}).f) internalAttrs) ;
 }
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits

Reply via email to