2013-01-05 23:47:50 +00:00
|
|
|
/* GNU Guix --- Functional package management for GNU
|
2013-03-02 14:14:22 +00:00
|
|
|
Copyright (C) 2012, 2013 Ludovic Courtès <ludo@gnu.org>
|
2012-08-14 15:37:48 +00:00
|
|
|
|
2013-01-05 23:47:50 +00:00
|
|
|
This file is part of GNU Guix.
|
2012-08-14 15:37:48 +00:00
|
|
|
|
2013-01-05 23:47:50 +00:00
|
|
|
GNU Guix is free software; you can redistribute it and/or modify it
|
2012-08-14 15:37:48 +00:00
|
|
|
under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 3 of the License, or (at
|
|
|
|
your option) any later version.
|
|
|
|
|
2013-01-05 23:47:50 +00:00
|
|
|
GNU Guix is distributed in the hope that it will be useful, but
|
2012-08-14 15:37:48 +00:00
|
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2013-01-05 23:47:50 +00:00
|
|
|
along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. */
|
2012-08-14 15:37:48 +00:00
|
|
|
|
|
|
|
/* Release file to build Guix with Nix. Useful to bootstrap Guix on
|
|
|
|
Guix-enabled Hydra instances. */
|
|
|
|
|
|
|
|
let
|
|
|
|
nixpkgs = <nixpkgs>;
|
|
|
|
|
2012-10-27 13:31:48 +00:00
|
|
|
buildOutOfSourceTree = true;
|
|
|
|
succeedOnFailure = true;
|
|
|
|
keepBuildDirectory = true;
|
|
|
|
|
2013-03-02 14:14:22 +00:00
|
|
|
# Run the given derivation in outside of a chroot. This hack is used on
|
|
|
|
# hydra.gnu.org where we want Guix derivations to run in a chroot that lacks
|
|
|
|
# /bin, whereas Nixpkgs relies on /bin/sh.
|
|
|
|
unchroot =
|
2013-03-02 14:25:04 +00:00
|
|
|
let
|
|
|
|
pkgs = import nixpkgs {};
|
|
|
|
|
|
|
|
# XXX: The `python' derivation contains a `modules' attribute that makes
|
|
|
|
# `overrideDerivation' fail with "cannot coerce an attribute set (except
|
|
|
|
# a derivation) to a string", so just remove it.
|
|
|
|
pythonKludge = drv: removeAttrs drv [ "modules" ];
|
|
|
|
in
|
|
|
|
drv:
|
|
|
|
if builtins.isAttrs drv
|
|
|
|
then pkgs.lib.overrideDerivation (pythonKludge drv) (args: {
|
|
|
|
__noChroot = true;
|
2013-03-18 22:07:42 +00:00
|
|
|
nativeBuildInputs = map unchroot args.nativeBuildInputs;
|
|
|
|
propagatedNativeBuildInputs =
|
|
|
|
map unchroot args.propagatedNativeBuildInputs;
|
2013-03-02 14:25:04 +00:00
|
|
|
})
|
|
|
|
else drv;
|
2013-03-02 14:14:22 +00:00
|
|
|
|
2012-10-27 20:45:18 +00:00
|
|
|
# The Guile used to bootstrap the whole thing. It's normally
|
|
|
|
# downloaded by the build system, but here we download it via a
|
|
|
|
# fixed-output derivation and stuff it into the build tree.
|
|
|
|
bootstrap_guile =
|
|
|
|
let pkgs = import nixpkgs {}; in {
|
|
|
|
i686 = pkgs.fetchurl {
|
2013-01-02 11:42:54 +00:00
|
|
|
url = http://www.fdn.fr/~lcourtes/software/guix/packages/i686-linux/20121219/guile-2.0.7.tar.xz;
|
|
|
|
sha256 = "45d1f9bfb9e4531a8f1c5a105f7ab094cd481b8a179ccc63cbabb73ce6b8437f";
|
2012-10-27 20:45:18 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
x86_64 = pkgs.fetchurl {
|
2013-01-02 11:42:54 +00:00
|
|
|
url = http://www.fdn.fr/~lcourtes/software/guix/packages/x86_64-linux/20121219/guile-2.0.7.tar.xz;
|
|
|
|
sha256 = "953fbcc8db6e310626be79b67319cf4141dc23b296447952a99d95425b3a4dc1";
|
2012-10-27 20:45:18 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2012-08-14 15:37:48 +00:00
|
|
|
jobs = {
|
|
|
|
tarball =
|
2013-03-02 14:14:22 +00:00
|
|
|
unchroot
|
|
|
|
(let pkgs = import nixpkgs {}; in
|
2012-08-14 15:37:48 +00:00
|
|
|
pkgs.releaseTools.sourceTarball {
|
|
|
|
name = "guix-tarball";
|
|
|
|
src = <guix>;
|
2013-03-02 21:56:30 +00:00
|
|
|
buildInputs =
|
|
|
|
let git_light = pkgs.git.override {
|
|
|
|
# Minimal Git to avoid building too many dependencies.
|
|
|
|
withManual = false;
|
|
|
|
pythonSupport = false;
|
|
|
|
svnSupport = false;
|
|
|
|
guiSupport = false;
|
|
|
|
};
|
|
|
|
in
|
|
|
|
[ git_light ] ++
|
|
|
|
(with pkgs; [ guile sqlite bzip2 libgcrypt ]);
|
2013-03-18 22:07:42 +00:00
|
|
|
nativeBuildInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
|
2012-12-13 21:53:45 +00:00
|
|
|
preAutoconf = ''git config submodule.nix.url "${<nix>}"'';
|
2012-08-14 15:37:48 +00:00
|
|
|
configureFlags =
|
2012-12-12 23:28:51 +00:00
|
|
|
[ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
|
2012-12-14 09:44:22 +00:00
|
|
|
"--localstatedir=/nix/var"
|
2012-11-04 12:03:15 +00:00
|
|
|
];
|
2013-03-02 14:14:22 +00:00
|
|
|
});
|
2012-08-14 15:37:48 +00:00
|
|
|
|
|
|
|
build =
|
|
|
|
{ system ? builtins.currentSystem }:
|
|
|
|
|
2013-03-02 14:14:22 +00:00
|
|
|
unchroot
|
|
|
|
(let pkgs = import nixpkgs { inherit system; }; in
|
2012-08-14 15:37:48 +00:00
|
|
|
pkgs.releaseTools.nixBuild {
|
|
|
|
name = "guix";
|
2012-12-12 23:28:51 +00:00
|
|
|
buildInputs = with pkgs; [ guile sqlite bzip2 libgcrypt ];
|
2013-03-18 22:07:42 +00:00
|
|
|
nativeBuildInputs = [ pkgs.pkgconfig ];
|
2012-08-14 15:37:48 +00:00
|
|
|
src = jobs.tarball;
|
|
|
|
configureFlags =
|
2012-12-12 23:28:51 +00:00
|
|
|
[ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
|
2012-12-14 09:44:22 +00:00
|
|
|
"--localstatedir=/nix/var"
|
2012-08-17 08:45:49 +00:00
|
|
|
];
|
2012-08-14 15:37:48 +00:00
|
|
|
|
2012-10-27 20:45:18 +00:00
|
|
|
preBuild =
|
|
|
|
# Use our pre-downloaded bootstrap tarballs instead of letting
|
|
|
|
# the build system download it over and over again.
|
|
|
|
'' mkdir -p distro/packages/bootstrap/{i686,x86_64}-linux
|
|
|
|
cp -v "${bootstrap_guile.i686}" \
|
2013-01-02 11:42:54 +00:00
|
|
|
distro/packages/bootstrap/i686-linux/guile-2.0.7.tar.xz
|
2012-10-27 20:45:18 +00:00
|
|
|
cp -v "${bootstrap_guile.x86_64}" \
|
2013-01-02 11:42:54 +00:00
|
|
|
distro/packages/bootstrap/x86_64-linux/guile-2.0.7.tar.xz
|
2012-10-27 20:45:18 +00:00
|
|
|
'';
|
|
|
|
|
2012-10-27 13:31:48 +00:00
|
|
|
inherit succeedOnFailure keepBuildDirectory
|
|
|
|
buildOutOfSourceTree;
|
2013-03-02 14:14:22 +00:00
|
|
|
});
|
2012-10-27 21:19:46 +00:00
|
|
|
|
|
|
|
|
2012-12-13 21:08:33 +00:00
|
|
|
build_disable_daemon =
|
|
|
|
{ system ? builtins.currentSystem }:
|
|
|
|
|
2013-03-02 14:14:22 +00:00
|
|
|
unchroot
|
|
|
|
(let
|
2012-12-13 21:08:33 +00:00
|
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
build = jobs.build { inherit system; };
|
|
|
|
in
|
|
|
|
pkgs.lib.overrideDerivation build ({ configureFlags, ... }: {
|
|
|
|
configureFlags = configureFlags ++ [ "--disable-daemon" ];
|
|
|
|
buildInputs = with pkgs; [ guile nixUnstable pkgconfig ];
|
|
|
|
|
|
|
|
# Since we need to talk to a running daemon, we need to escape
|
|
|
|
# the chroot.
|
|
|
|
preConfigure = "export NIX_REMOTE=daemon";
|
|
|
|
__noChroot = true;
|
2013-03-02 14:14:22 +00:00
|
|
|
}));
|
2012-12-13 21:08:33 +00:00
|
|
|
|
2012-10-27 21:19:46 +00:00
|
|
|
# Jobs to test the distro.
|
|
|
|
distro = {
|
|
|
|
hello =
|
|
|
|
{ system ? builtins.currentSystem }:
|
|
|
|
|
|
|
|
let
|
|
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
guix = jobs.build { inherit system; };
|
|
|
|
in
|
2012-10-30 23:22:39 +00:00
|
|
|
# XXX: We have no way to tell the Nix code to swallow the .drv
|
2012-10-27 21:19:46 +00:00
|
|
|
# produced by `guix-build', so we have a pointless indirection
|
|
|
|
# here. This could be worked around by generating Nix code
|
|
|
|
# from the .drv, and importing that.
|
|
|
|
pkgs.releaseTools.nixBuild {
|
|
|
|
src = null;
|
2012-10-28 00:02:04 +00:00
|
|
|
name = "guix-hello";
|
2012-10-27 21:19:46 +00:00
|
|
|
phases = "buildPhase";
|
2012-10-30 23:22:39 +00:00
|
|
|
buildPhase = "${guix}/bin/guix-build --no-substitutes hello | tee $out";
|
2012-10-27 21:19:46 +00:00
|
|
|
__noChroot = true;
|
|
|
|
};
|
|
|
|
};
|
2012-08-14 15:37:48 +00:00
|
|
|
};
|
|
|
|
in
|
|
|
|
jobs
|