Skip to content
Snippets Groups Projects
  1. Sep 01, 2005
  2. Aug 14, 2005
    • Eelco Dolstra's avatar
      * `dependencyClosure' now allows a search path, e.g., · e1a6fb78
      Eelco Dolstra authored
          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".
      e1a6fb78
    • Eelco Dolstra's avatar
      * A primitive operation `dependencyClosure' to do automatic dependency · 08c53923
      Eelco Dolstra authored
        determination (e.g., finding the header files dependencies of a C
        file) in Nix low-level builds automatically.
      
        For instance, in the function `compileC' in make/lib/default.nix, we
        find the header file dependencies of C file `main' as follows:
      
          localIncludes =
            dependencyClosure {
              scanner = file:
                import (findIncludes {
                  inherit file;
                });
              startSet = [main];
            };
      
        The function works by "growing" the set of dependencies, starting
        with the set `startSet', and calling the function `scanner' for each
        file to get its dependencies (which should yield a list of strings
        representing relative paths).  For instance, when `scanner' is
        called on a file `foo.c' that includes the line
      
          #include "../bar/fnord.h"
      
        then `scanner' should yield ["../bar/fnord.h"].  This list of
        dependencies is absolutised relative to the including file and added
        to the set of dependencies.  The process continues until no more
        dependencies are found (hence its a closure).
      
        `dependencyClosure' yields a list that contains in alternation a
        dependency, and its relative path to the directory of the start
        file, e.g.,
      
          [ /bla/bla/foo.c
            "foo.c"
            /bla/bar/fnord.h
            "../bar/fnord.h"
          ]
      
        These relative paths are necessary for the builder that compiles
        foo.c to reconstruct the relative directory structure expected by
        foo.c.
      
        The advantage of `dependencyClosure' over the old approach (using
        the impure `__currentTime') is that it's completely pure, and more
        efficient because it only rescans for dependencies (i.e., by
        building the derivations yielded by `scanner') if sources have
        actually changed.  The old approach rescanned every time.
      08c53923
    • Eelco Dolstra's avatar
      * Cleanup; sync with thesis. · 714b7256
      Eelco Dolstra authored
      714b7256
    • Eelco Dolstra's avatar
      * nix-hash: option `--truncate' to truncate the hash to 160 bits. Hmm, · 03993656
      Eelco Dolstra authored
        kind of ad hoc ;-)
      03993656
  3. Aug 01, 2005
  4. Jul 25, 2005
  5. Jul 22, 2005
  6. Jul 19, 2005
  7. Jul 16, 2005
  8. Jul 13, 2005
  9. Jul 12, 2005
  10. Jun 18, 2005
  11. May 18, 2005
  12. May 10, 2005
  13. May 09, 2005
  14. May 08, 2005
  15. May 07, 2005
    • Eelco Dolstra's avatar
      Commit 3000! · 77557a6f
      Eelco Dolstra authored
      * Make the `derivation' primitive much more lazy.  The expression
        `derivation attrs' now evaluates to (essentially)
      
          attrs // {
            type = "derivation";
            outPath = derivation! attrs;
            drvPath = derivation! attrs;
          }
      
        where `derivation!' is a primop that does the actual derivation
        instantiation (i.e., it does what `derivation' used to do).  The
        advantage is that it allows commands such as `nix-env -qa' and
        `nix-env -i' to be much faster since they no longer need to
        instantiate all derivations, just the `name' attribute.  (However,
        `nix-env' doesn't yet take advantage of this since it still always
        evaluates the `outPath' and `drvPath' attributes).
      
        Also, this allows derivations to cyclically reference each other,
        for example,
      
          webServer = derivation {
            ...
            hostName = "svn.cs.uu.nl";
            services = [svnService];
          };
      
          svnService = derivation {
            ...
            hostName = webServer.hostName;
          };
      
        Previously, this would yield a black hole (infinite recursion).
      77557a6f
    • Eelco Dolstra's avatar
      6057b518
Loading