about summary refs log tree commit diff
path: root/src/libexpr
AgeCommit message (Collapse)AuthorFilesLines
2006-05-02 * Some preliminaries towards NIX-45.Eelco Dolstra3-10/+35
2006-05-01 * Disallow unescaped $ in string literals.Eelco Dolstra1-4/+1
2006-05-01 * String interpolation. Expressions likeEelco Dolstra5-13/+78
"--with-freetype2-library=" + freetype + "/lib" can now be written as "--with-freetype2-library=${freetype}/lib" An arbitrary expression can be enclosed within ${...}, not just identifiers. * Escaping in string literals: \n, \r, \t interpreted as in C, any other character following \ is interpreted as-is. * Newlines are now allowed in string literals.
2006-05-01 * Allow string concatenations involving derivations, e.g.,Eelco Dolstra5-14/+125
configureFlags = "--with-freetype2-library=" + freetype + "/lib";
2006-03-24 * Print a more useful stack trace when an error occurs deep in theEelco Dolstra1-4/+10
derivation dependency graph.
2006-03-23 * In `nix-env', look for derivations inside attribute sets that haveEelco Dolstra2-1/+16
the `recurseForDerivations' attribute set to `true'.
2006-03-23 * Hm.Eelco Dolstra1-2/+1
2006-03-10 * `nix-env -qa --description' shows human-readable descriptions ofEelco Dolstra4-23/+62
packages (provided that they have a `meta.description' attribute). E.g., $ ./src/nix-env/nix-env -qa --description gcc gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for sparc-linux) gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for mips-linux) gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for arm-linux) gcc-4.0.2 GNU Compiler Collection, 4.0.x
2006-03-10 * In theory, this should reduce the number of ATermMapEelco Dolstra2-3/+4
re-allocations.
2006-03-09 * Regression: semantics of the result of getDerivation() changed.Eelco Dolstra1-2/+2
2006-03-09 * Big speedup (factor > 2.5) in all nix-env operations that do actualEelco Dolstra2-3/+14
instantiation, e.g. "nix-env -i" and "nix-env -qas" (but not "nix-env -qa"). It turns out that many redundant calls to addToStore(path) were made, which reads and hashes the entire path. For instance, the bash bootstrap binary in Nixpkgs would be read and hashed many times. As a result nix-env would spend around 92% of its time in the function sha256_block (according to callgrind). Some simple memoization fixes this.
2006-03-08 * When obtaining derivations from Nix expressions, ignore allEelco Dolstra2-35/+57
expressions that cause an assertion failure (like `assert system == "i686-linux"'). This allows all-packages.nix in Nixpkgs to be used on all platforms, even if some Nix expressions don't work on all platforms. Not sure if this is a good idea; it's a bit hacky. In particular, due to laziness some derivations might appear in `nix-env -qa' but disappear in `nix-env -qas' or `nix-env -i'. Commit 5000!
2006-03-08 * Some refactoring of the exception handling code so that we can catchEelco Dolstra3-17/+29
Nix expression assertion failures.
2006-03-06 * GCC 4.1 compatibility.Eelco Dolstra1-1/+1
2006-03-06 * `nix-env (-i|-u) --dry-run' now shows exactly which missing pathsEelco Dolstra1-0/+1
will be built or substituted.
2006-02-13 * Override YYMALLOC and YYFREE so that we can call AT[un]protectMemoryEelco Dolstra1-0/+20
on the Bison parse stack. Otherwise, a garbage collect during parsing could lead to a crash.
2006-02-10 * In nix-instantiate, allow us to specify a "path" to theEelco Dolstra2-27/+76
derivation(s) we're interested, e.g., $ nix-instantiate ./all-packages.nix --attr xlibs.libX11 List elements can also be selected: $ nix-instantiate ./build-for-release.nix --attr 0.subversion This allows a non-ambiguous specification of a derivation. Of course, this should also be added to nix-env and nix-build.
2006-02-08 * When querying all derivations, filter out syntactically equal derivations.Eelco Dolstra1-12/+36
2006-02-08 * When evaluating, automatically call functions with default arguments.Eelco Dolstra1-4/+23
2006-02-08 * Refactoring: move derivation evaluation to libexpr.Eelco Dolstra3-1/+133
2005-11-04 * Memoise checkVarDefs since internally produced terms (i.e., not theEelco Dolstra1-9/+24
result of parsing) can have very heavy sharing, causing exponential complexity if we naively recurse into them. ATerms are graphs, not trees!
2005-10-29 * Turn off build hooks in nix-push because of an impurity (NIX-21).Eelco Dolstra1-1/+1
2005-09-14 * List concatenation must be right-associative for efficiency.Eelco Dolstra1-1/+1
2005-09-13 * Missing #include.Eelco Dolstra1-0/+2
2005-08-14 * `dependencyClosure' now allows a search path, e.g.,Eelco Dolstra1-20/+69
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".
2005-08-14 * A primitive operation `dependencyClosure' to do automatic dependencyEelco Dolstra1-0/+112
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.
2005-07-25 * Added a list concatenation operator:Eelco Dolstra6-12/+27
[1 2 3] ++ [4 5 6] => [1 2 3 4 5 6]
2005-07-22 * Build dynamic libraries.Eelco Dolstra1-2/+2
2005-07-19 * Prevent repeated wrapping of closed termsEelco Dolstra1-1/+6
(closed(closed(closed(...)))) since this reduces performance by producing bigger terms and killing caching (which incidentally also prevents useful infinite recursion detection).
2005-07-16 * Wat cleanups.Eelco Dolstra1-10/+5
2005-07-16 * Define paths using regexps, as is done in the Flex definition.Eelco Dolstra1-5/+2
2005-07-16 * Make the rejects a bit more compact.Eelco Dolstra1-7/+2
* Add lexical restrictions for keywords.
2005-07-16 * Fix ambiguity.Eelco Dolstra1-0/+1
2005-07-16 * Revive and update the SDF grammar for Nix expressions.Eelco Dolstra2-0/+149
2005-05-18 * Added a primop `removeAttrs' to remove attributes from a set, e.g.,Eelco Dolstra1-0/+18
`removeAttrs attrs ["x", "y"]' returns the set `attrs' with the attributes named `x' and `y' removed. It is not an error for the named attributes to be missing from the input set.
2005-05-08 * ATermMap needs an assignment operator, otherwise we are screwed.Eelco Dolstra2-6/+36
2005-05-07 Commit 3000!Eelco Dolstra1-7/+23
* 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).
2005-05-02 * Merging from nix-make branch:Eelco Dolstra1-6/+40
- Add __currentTime primitive (dangerous!). - Allow imports of derivations.
2005-04-10 * Primop `__currentSystem' to return the current platform identifier.Eelco Dolstra2-9/+14
2005-04-07 * If store paths are specified as sources in Nix expressions, don'tEelco Dolstra1-8/+18
copy them, but use them directly.
2005-04-07 * `nix-store --add-fixed' to preload the outputs of fixed-outputEelco Dolstra1-11/+1
derivations. This is mostly to simplify the implementation of nix-prefetch-{url, svn}, which now work properly in setuid installations. * Enforce valid store names in `nix-store --add / --add-fixed'.
2005-03-10 * Check for duplicate attributes and formal parameters in NixEelco Dolstra1-0/+61
expressions.
2005-02-22 * Support for fixed-output hashes over directory trees (i.e., over theEelco Dolstra1-0/+7
NAR dump of the path).
2005-02-11 * Refactoring to support different installation sources in nix-env.Eelco Dolstra1-5/+16
* Set the references for the user environment manifest properly. * Don't copy the manifest (this was accidental). * Don't store derivation paths in the manifest (maybe this should be made optional). This cleans up the semantics of nix-env, which were weird. * Hash on the output paths of activated components, not on derivation paths. This is because we don't know the derivation path of already installed components anymore, and it allows the installation of components by store path (skipping Nix expressions entirely). * Query options `--out-path' and `--drv-path' to show the output and derivation paths of components, respectively (the latter replaces the `--expr' query).
2005-01-27 * Missing dependency; only a problem when building from Subversion.Eelco Dolstra1-1/+1
2005-01-20 * Ensure that derivation names and sources don't end in `.drv'.Eelco Dolstra1-16/+8
2005-01-20 * Another change to low-level derivations. The last one this year, IEelco Dolstra1-7/+9
promise :-) This allows derivations to specify on *what* output paths of input derivations they are dependent. This helps to prevent unnecessary downloads. For instance, a build might be dependent on the `devel' and `lib' outputs of some library component, but not the `docs' output.
2005-01-19 * Renamed `normalise.cc' -> `build.cc', `storeexprs.cc' ->Eelco Dolstra2-2/+2
`derivations.cc', etc. * Store the SHA-256 content hash of store paths in the database after they have been built/added. This is so that we can check whether the store has been messed with (a la `rpm --verify'). * When registering path validity, verify that the closure property holds.
2005-01-19 * Change extension `.store' to `.drv'.Eelco Dolstra1-1/+4
* Re-enable `nix-store --query --requisites'.
2005-01-19 * Started removing closure store expressions, i.e., the explicitEelco Dolstra1-93/+56
representation of closures as ATerms in the Nix store. Instead, the file system pointer graph is now stored in the Nix database. This has many advantages: - It greatly simplifies the implementation (we can drop the notion of `successors', and so on). - It makes registering roots for the garbage collector much easier. Instead of specifying the closure expression as a root, you can simply specify the store path that must be retained as a root. This could not be done previously, since there was no way to find the closure store expression containing a given store path. - Better traceability: it is now possible to query what paths are referenced by a path, and what paths refer to a path.