about summary refs log tree commit diff
path: root/make/lib/default.nix
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2005-08-14T14·00+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2005-08-14T14·00+0000
commite1a6fb787059848c815a8154da23b7da794c6231 (patch)
tree84ca9576a1abbc27c35f26b137628f5b5c000fc2 /make/lib/default.nix
parent08c53923dba9c7fe6c2676be862744dc1f90f660 (diff)
* `dependencyClosure' now allows a search path, e.g.,
    dependencyClosure { ... searchPath = [ ../foo ../bar ]; ... }

* Primop `dirOf' to return the directory part of a path (e.g., dirOf
  /a/b/c == /a/b).

* Primop `relativise' (according to Webster that's a real word!) that
  given paths A and B returns a string representing path B relative
  path to A; e.g., relativise /a/b/c a/b/x/y => "../x/y".

Diffstat (limited to 'make/lib/default.nix')
-rw-r--r--make/lib/default.nix27
1 files changed, 17 insertions, 10 deletions
diff --git a/make/lib/default.nix b/make/lib/default.nix
index b2f26a936785..81440ca6a770 100644
--- a/make/lib/default.nix
+++ b/make/lib/default.nix
@@ -8,10 +8,17 @@ rec {
   stdenv = pkgs.stdenv;
   
 
-  compileC = {main, localIncludes ? "auto", cFlags ? "", sharedLib ? false}:
+  compileC =
+  { main
+  , localIncludes ? "auto"
+  , localIncludePath ? []
+  , cFlags ? ""
+  , sharedLib ? false
+  }:
   stdenv.mkDerivation {
     name = "compile-c";
     builder = ./compile-c.sh;
+    
     localIncludes =
       if localIncludes == "auto" then
         dependencyClosure {
@@ -19,38 +26,37 @@ rec {
             import (findIncludes {
               inherit main;
             });
+          searchPath = localIncludePath;
           startSet = [main];
         }
       else
         localIncludes;
+        
     inherit main;
+    
     cFlags = [
       cFlags
       (if sharedLib then ["-fpic"] else [])
+      (map (p: "-I" + (relativise (dirOf main) p)) localIncludePath)
     ];
   };
 
-  /*
-  runCommand = {command}: {
-    name = "run-command";
-    builder = ./run-command.sh;
-    inherit command;
-  };
-  */
-
+  
   findIncludes = {main}: stdenv.mkDerivation {
     name = "find-includes";
     realBuilder = pkgs.perl ~ "bin/perl";
     args = [ ./find-includes.pl ];
     inherit main;
   };
-  
+
+    
   link = {objects, programName ? "program", libraries ? []}: stdenv.mkDerivation {
     name = "link";
     builder = ./link.sh;
     inherit objects programName libraries;
   };
 
+  
   makeLibrary = {objects, libraryName ? [], sharedLib ? false}:
   # assert sharedLib -> fold (obj: x: assert obj.sharedLib && x) false objects
   stdenv.mkDerivation {
@@ -59,4 +65,5 @@ rec {
     inherit objects libraryName sharedLib;
   };
 
+  
 }