store, rather than outside (such as /bin/sh).
For instance, the Nix expression for the ATerm library now looks
like this:
{stdenv, fetchurl}:
stdenv.mkDerivation {
name = "aterm-2.0.5";
builder = ./builder.sh;
...
}
where `mkDerivation' is a helper function in `stdenv' that massages
the given attribute set into using the bash shell that is part of
the standard environment:
mkDerivation = attrs: derivation (att s // {
builder = pkgs.bash ~ /bin/sh;
args = ["-e" attrs.builder];
stdenv = (...);
system = (...).system;
});
Note that this makes it unnecessary to set the `stdenv' and `system'
attributes, since `mkDerivation' already does that.
svn path=/nixpkgs/trunk/; revision=866
whether the system header file directory actually exists (when
calling fixinc), so passing a non-existent directory no longer
works. Instead we make a empty dummy directory.
svn path=/nixpkgs/trunk/; revision=858
builders for typical Autoconf-style to be much shorten, e.g.,
. $stdenv/setup
genericBuild
The generic builder does lots of stuff automatically:
- Unpacks source archives specified by $src or $srcs (it knows about
gzip, bzip2, tar, zip, and unpacked source trees).
- Determines the source tree.
- Applies patches specified by $patches.
- Fixes libtool not to search for libraries in /lib etc.
- Runs `configure'.
- Runs `make'.
- Runs `make install'.
- Strips debug information from static libraries.
- Writes nested log information (in the format accepted by
`log2xml').
There are also lots of hooks and variables to customise the generic
builder. See `stdenv/generic/docs.txt'.
* Adapted the base packages (i.e., the ones used by stdenv) to use the
generic builder.
* We now use `curl' instead of `wget' to download files in `fetchurl'.
* Neither `curl' nor `wget' are part of stdenv. We shouldn't
encourage people to download stuff in builders (impure!).
* Updated some packages.
* `buildinputs' is now `buildInputs' (but the old name also works).
* `findInputs' in the setup script now prevents inputs from being
processed multiple times (which could happen, e.g., if an input was
a propagated input of several other inputs; this caused the size
variables like $PATH to blow up exponentially in the worst case).
* Patched GNU Make to write nested log information in the format
accepted by `log2xml'. Also, prior to writing the build command,
Make now writes a line `building X' to indicate what is being
built. This is unfortunately often obscured by the gigantic tool
invocations in many Makefiles. The actual build commands are marked
`unimportant' so that they don't clutter pages generated by
`log2html'.
svn path=/nixpkgs/trunk/; revision=845
checked whether absolute paths passed to gcc/ld refer to the store,
which is wrong: they can also refer to the build tree
(/tmp/nix-...).
* Less static composition in the construction of stdenv-nix-linux:
gcc-wrapper and generic are now passed in as arguments, rather then
referenced by relative path. This makes it easier to hack on a
specific stage of the bootstrap process (before, a change to, e.g.,
generic/setup.sh would cause all bootstrap stages to be redone).
svn path=/nixpkgs/trunk/; revision=833
- gcc/ld-wrappers have been factored out into a separate
derivation. This allows a working gcc to be installed in the user
environment. (Previously the Nix gcc didn't work because it
needed a whole bunch of flags to point to glibc.)
- Better modularity: packages can specify hooks into the setup
scripts. For instance, setup no longer knows about the
PKG_CONFIG_PATH variable; pkgconfig can set it up instead.
- gcc not longer depends on binutils. This simplifies the bootstrap
process.
svn path=/nixpkgs/trunk/; revision=816
/usr/lib/crt1.o, while it should be using $glibc/lib/crt1.o. This
quick hack (prepending $glibc/lib to the GCC search path using "-B")
fixes the problem, but a better solution to prevent this sort of
thing is to remove these static paths from gcc.
Note: this problem was found using the pure UML Nix environment
(where we don't have /usr/lib).
svn path=/nixpkgs/trunk/; revision=810
(stdenv) on Linux. The previous 1-stage bootstrap was insufficient,
because the tools in stdenv where built by native tools. For
instance, the Nix bash had a reference to /lib/libncurses. This
doesn't happen with a 2-stage bootstrap, since the bash built in
stage 2 will be built with the gcc built in stage 1, which doesn't
search in the "standard" locations.
Motto: "Disparaging the boot is a bootable offense."
svn path=/nixpkgs/trunk/; revision=809
stages of the bootstrap process (i.e., stdenvLinuxBoot).
* Add those packages to the distribution. We didn't do that before
because it would cause them to be built twice.
svn path=/nixpkgs/trunk/; revision=753
a big problem, so I decided to require to user to get the
file and put it in some location in the file system. wget
doesn't seem to accept the file scheme however, so I had to
move the copying into the builder itself. The builder checks
the md5 hash of the downloaded file. Maybe having a separate
'fetchfile' would be useful to make a file in the outside
world pure. I tried to add this to build-support, but this
obviously did not work. I still committed it. Just remove it
if you think that it sucks.
svn path=/nixpkgs/trunk/; revision=716
and automake. Copying the files in $libtool/share/aclocal to
$autoconf/share/aclocal does not work (and causes collisions when
installing the tools in the user environment). The solution seems to
be to install the three distributions in one single $out directory,
i.e., consider them as one package.
svn path=/nixpkgs/trunk/; revision=597
aggregation in all-packages-generic: autotools
building strategoxt from svn
not complete yet since autconf cannot find libtool
svn path=/nixpkgs/trunk/; revision=596
thought that it was a good idea to remove support for multi-line
string literals, which Linux uses. Added an older GCC to build
`legacy' software.
svn path=/nixpkgs/trunk/; revision=389
This makes the system package fully nixified in the sense that
for i in $(nix -qn $(fix system/system-template-everything.fix))/bin/*; \
do echo $i; ldd $i; done
shows that the programs in the system package only link against libraries in
the Nix store.
(Some builders still use header files from /usr/X11/include, though.)
svn path=/nixpkgs/trunk/; revision=376
(/usr/include, /usr/local/include, etc.).
* Immediate pay-off: we see that the glibc header files depend on the Linux
kernel header files. So I've added a package that extracts the appropriate
headers from Linux 2.4.22.
svn path=/nixpkgs/trunk/; revision=361
directories for libraries. (Fortunately, the build would still fail because
Perl's idea of "standard" library directories no longer matched that of the
linker.)
* `stdenv-linux/setup.sh' now puts the path of glibc in an environment
variable so that it can be used by other packages (for example, we need to
pass it to Perl's configure, because otherwise it will think that, e.g.,
libm.so doesn't exist).
svn path=/nixpkgs/trunk/; revision=359
(/lib, ...). So unless a directory is explicitly added using `-L' it won't we
searched. This has already revealed that libxml has a hidden dependance on libz.
svn path=/nixpkgs/trunk/; revision=357