On the downside, the build process of stdenvLinux builds gcc 9 times
(3 x 3 bootstrap stages). That's a bit excessive.
svn path=/nixpkgs/trunk/; revision=880
* Make builders unexecutable by removing the hash-bang line and
execute permission.
* Convert calls to `derivation' to `mkDerivation'.
* Remove `system' and `stdenv' attributes from calls to
`mkDerivation'. These transformations were all done automatically,
so it is quite possible I broke stuff.
* Put the `mkDerivation' function in stdenv/generic.
svn path=/nixpkgs/trunk/; revision=874
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
getopt has been added.
As part of the build of sdf2 we patch sdf2table to store the full path of
getopt. This is so that packages that use sdf2 do not have to declare
getopt as an input.
svn path=/nixpkgs/trunk/; revision=347
TODO: clean up the Perl build. Currently it's still using some external
libraries, and it doesn't pass all its unit tests.
svn path=/nixpkgs/trunk/; revision=326
Note that I added bzip2 to stdenv, but not unzip. This raises an interesting
point: what packages should be in stdenv?
svn path=/nixpkgs/trunk/; revision=320
with the standard untar; bootstrap; configure; make; make install
interface. The script is parameterized with arguments for
configure. That is, all arguments are passed verbatim to
configure.
* asfix-tools, gpp, sc, srts, stratego-front, xtc: Fix expressions
and (trivial) build script for basic strategoxt packages. All
packages are abstracted on subversion revision.
svn path=/nixpkgs/trunk/; revision=319
where we don't use any tools from outside the Nix environment. For this we
need the basic POSIX utilities (e.g., GNU coreutils), a shell, GCC, and the
binutils.
Normal packages just need to include stdenv/stdenv.fix, which on Linux will
use the Nixified environment. However, for the tools in the build
environment itself we have a bootstrapping problem. Therefore, these depend
on the external environment (and include stdenv-linux/stdenv-nativetools).
The package `baseenv' provides some generic setup and GCC wrappers used by
both fully Nixified and native environments.
svn path=/nixpkgs/trunk/; revision=305
source from Subversion, runs autoreconf and configure, and does a `make
dist'.
The revision number is currently hard-coded into `nix-dist.fix'.
svn path=/nixpkgs/trunk/; revision=302
against the right dynamic libraries. set-env.sh add the right linker flags to the
NIX_LDFLAGS environment variable, which is passed by gcc-wrapper to the linker.
(In many cases these flags could just be passed through LDFLAGS to configure
scripts; however, in many other cases this doesn't work properly.)
--This line, and those below, will be ignored--
M pkgs/atk/atk-build.sh
M pkgs/glibc/glibc-build.sh
M pkgs/expat/expat-build.sh
M pkgs/freetype/freetype-build.sh
M pkgs/system/populate-linkdirs.pl
M pkgs/sdf2/sdf2-build.sh
M pkgs/pspell/pspell-build.sh
M pkgs/subversion/subversion-build.sh
M pkgs/helpers/set-env.sh
M pkgs/pango/pango-build.sh
M pkgs/strategoxt/strategoxt-build.sh
M pkgs/aterm/aterm-build.sh
M pkgs/libxml2/libxml2-build.sh
M pkgs/glib-1/glib-build.sh
M pkgs/glib/glib-build.sh
M pkgs/pan/pan.fix
M pkgs/pan/pan-build.sh
M pkgs/libxslt/libxslt-build.sh
M pkgs/httpd/httpd-build.sh
M pkgs/openssl/openssl-build.sh
M pkgs/gtkspell/gtkspell-build.sh
M pkgs/fontconfig/fontconfig.fix
M pkgs/fontconfig/fontconfig-build.sh
M pkgs/gnet/gnet-build.sh
M pkgs/gtk+-1/gtk+-build.sh
M pkgs/gtk+/gtk+-build.sh
M pkgs/stdenv/gcc-wrapper.sh
M pkgs/stdenv/stdenv-build.sh
M pkgs/db4/db4-build.sh
M pkgs/db4/db4.fix
M pkgs/MPlayer/MPlayer-build.sh
M pkgs/swig/swig-build.sh
svn path=/nixpkgs/trunk/; revision=213
* Disabled gtkspell support in pan since it (and it alone) has a conflict with the
system glibc.
* Use CPU detection in MPlayer so that it also works on systems with different CPUs
than the build system's.
svn path=/nixpkgs/trunk/; revision=206
the build and execution environment.
This is very useful. For example, it allows packages built on a SuSE
8.2 system to run on a SuSE 8.1 system (this is because 8.2 has a newer
glibc; packages built against it cannot be dynamically linked against
older glibcs).
Of course, Fix packages should not directly import glibc since that is
very system-specific. Rather, they should import stdenv/stdenv.fix and
in their build scripts source in $stdenv/setup, which will setup the
right environment variables. The idea is that stdenv.fix provides the
basic C/Unix build environment (C compiler, POSIX utilities, etc.).
Note that only the ATerm package currently uses this.
svn path=/nixpkgs/trunk/; revision=203
* A solution to the library abstraction problem (i.e., if
package X needs library Y, and library Y needs library Z,
then we do not (generally) want to declare Z as a input to X
since that would break abstraction). This was not possible
under the old Nix.
svn path=/nixpkgs/trunk/; revision=150