diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-08-14 14:00:39 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-08-14 14:00:39 +0000 |
commit | e1a6fb787059848c815a8154da23b7da794c6231 (patch) | |
tree | 84ca9576a1abbc27c35f26b137628f5b5c000fc2 /make/lib/default.nix | |
parent | 08c53923dba9c7fe6c2676be862744dc1f90f660 (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.nix | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/make/lib/default.nix b/make/lib/default.nix index b2f26a936..81440ca6a 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; }; + } |