~ruther/guix-local

4928e50033615e1d130dd84f131eff4cbc702ccf — Ludovic Courtès 13 years ago 14a3a67 + 3f5a932
Merge branch 'master' into core-updates

Conflicts:
	Makefile.am
	gnu/packages/base.scm
M Makefile.am => Makefile.am +17 -3
@@ 38,6 38,7 @@ MODULES =					\
  guix/gnu-maintenance.scm			\
  guix/licenses.scm				\
  guix/build-system.scm				\
  guix/build-system/cmake.scm			\
  guix/build-system/gnu.scm			\
  guix/build-system/perl.scm			\
  guix/build-system/trivial.scm			\


@@ 45,6 46,7 @@ MODULES =					\
  guix/store.scm				\
  guix/ui.scm					\
  guix/build/download.scm			\
  guix/build/cmake-build-system.scm		\
  guix/build/gnu-build-system.scm		\
  guix/build/perl-build-system.scm		\
  guix/build/utils.scm				\


@@ 58,6 60,7 @@ MODULES =					\
  gnu/packages/aspell.scm			\
  gnu/packages/attr.scm				\
  gnu/packages/autotools.scm			\
  gnu/packages/avahi.scm			\
  gnu/packages/base.scm				\
  gnu/packages/bash.scm				\
  gnu/packages/bdb.scm				\


@@ 65,9 68,12 @@ MODULES =					\
  gnu/packages/bison.scm			\
  gnu/packages/bootstrap.scm			\
  gnu/packages/cdrom.scm			\
  gnu/packages/cflow.scm			\
  gnu/packages/check.scm			\
  gnu/packages/cmake.scm			\
  gnu/packages/compression.scm			\
  gnu/packages/cpio.scm				\
  gnu/packages/cppi.scm				\
  gnu/packages/cross-base.scm			\
  gnu/packages/curl.scm				\
  gnu/packages/cyrus-sasl.scm			\


@@ 75,10 81,12 @@ MODULES =					\
  gnu/packages/ddrescue.scm			\
  gnu/packages/ed.scm				\
  gnu/packages/emacs.scm			\
  gnu/packages/fdisk.scm			\
  gnu/packages/file.scm				\
  gnu/packages/flex.scm				\
  gnu/packages/fontutils.scm			\
  gnu/packages/gawk.scm				\
  gnu/packages/gcc.scm				\
  gnu/packages/gdb.scm				\
  gnu/packages/gdbm.scm				\
  gnu/packages/gettext.scm			\


@@ 116,6 124,8 @@ MODULES =					\
  gnu/packages/linux-initrd.scm			\
  gnu/packages/lout.scm				\
  gnu/packages/lsh.scm				\
  gnu/packages/lsof.scm				\
  gnu/packages/lua.scm				\
  gnu/packages/m4.scm				\
  gnu/packages/mailutils.scm			\
  gnu/packages/make-bootstrap.scm		\


@@ 162,6 172,7 @@ MODULES =					\
  gnu/packages/tor.scm				\
  gnu/packages/vim.scm 				\
  gnu/packages/vpn.scm				\
  gnu/packages/w3m.scm				\
  gnu/packages/wdiff.scm			\
  gnu/packages/wget.scm				\
  gnu/packages/which.scm			\


@@ 183,6 194,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/automake-skip-amhello-tests.patch	\
  gnu/packages/patches/bigloo-gc-shebangs.patch			\
  gnu/packages/patches/binutils-ld-new-dtags.patch		\
  gnu/packages/patches/cmake-fix-tests.patch			\
  gnu/packages/patches/cpio-gets-undeclared.patch		\
  gnu/packages/patches/diffutils-gets-undeclared.patch		\
  gnu/packages/patches/emacs-configure-sh.patch			\


@@ 194,6 206,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/gettext-gets-undeclared.patch		\
  gnu/packages/patches/glib-tests-desktop.patch			\
  gnu/packages/patches/glib-tests-homedir.patch			\
  gnu/packages/patches/glib-tests-prlimit.patch			\
  gnu/packages/patches/glib-tests-timezone.patch		\
  gnu/packages/patches/glibc-bootstrap-system.patch		\
  gnu/packages/patches/glibc-no-ld-so-cache.patch		\


@@ 202,7 215,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/guile-default-utf8.patch			\
  gnu/packages/patches/guile-linux-syscalls.patch		\
  gnu/packages/patches/guile-relocatable.patch			\
  gnu/packages/patches/libapr-skip-getservbyname-test.patch 	\
  gnu/packages/patches/libapr-skip-getservbyname-test.patch	\
  gnu/packages/patches/libevent-dns-tests.patch			\
  gnu/packages/patches/libtool-skip-tests.patch			\
  gnu/packages/patches/lsh-guile-compat.patch			\


@@ 219,9 232,10 @@ dist_patch_DATA =						\
  gnu/packages/patches/readline-link-ncurses.patch		\
  gnu/packages/patches/shishi-gets-undeclared.patch		\
  gnu/packages/patches/tar-gets-undeclared.patch		\
  gnu/packages/patches/tcsh-fix-autotest.patch 			\
  gnu/packages/patches/tcsh-fix-autotest.patch			\
  gnu/packages/patches/teckit-cstdio.patch			\
  gnu/packages/patches/vpnc-script.patch
  gnu/packages/patches/vpnc-script.patch			\
  gnu/packages/patches/w3m-fix-compile.patch

bootstrapdir = $(guilemoduledir)/gnu/packages/bootstrap
bootstrap_x86_64_linuxdir = $(bootstrapdir)/x86_64-linux

M TODO => TODO +0 -15
@@ 8,12 8,6 @@ Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>

* integrate needed Nix code

Guix uses Nix’s daemon (‘nix-worker’, later renamed to ‘nix-daemon’) to
actually perform builds, scheduling, substitution of pre-built binaries,
and GC-related tasks.  The daemon mainly uses ‘libstore’ from Nix.
Integrating it in Guix itself will make Guix self-contained, thereby
simplifying our users’ lives.

** Remove dependency on OpenSSL

The ‘openssl’ command-line tool is used in libstore to sign store paths


@@ 51,14 45,6 @@ For a start, we may use the instance at hydra.nixos.org, generously
provided by TU Delft.  However, in the future, we may want to setup our
own instance at gnu.org.

* add guix pull

A tool that fetches the latest code from [[http://git.savannah.gnu.org/cgit/guix.git/snapshot/guix-master.tar.gz][cgit]], builds a derivation that
unpacks it, copies only .scm files (this excludes guix/config.in) and
compiles it, and then links to it from ~/.local/guix/latest .  Change
guix-build and guix-package to have that directory first in their load
path.

* user interface
** Add a package.el (Emacs) back-end



@@ 167,7 153,6 @@ etc.
See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].

* distro
** choose a name! (Jinn?)
** port to new GNU/Linux platforms, notably ‘mipsel64-linux’
** port to GNU/Hurd, aka. ‘i686-gnu’


M build-aux/download.scm => build-aux/download.scm +5 -0
@@ 34,6 34,11 @@
  ;;"http://www.fdn.fr/~lcourtes/software/guix/packages"
  )

;; XXX: Work around <http://bugs.gnu.org/13095>, present in Guile
;; up to 2.0.7.
(module-define! (resolve-module '(web client))
                'shutdown (const #f))

(define (file-name->uri file)
  "Return the URI for FILE."
  (match (string-tokenize file (char-set-complement (char-set #\/)))

M doc/guix.texi => doc/guix.texi +6 -0
@@ 514,6 514,12 @@ Thus, when installing MPC, the MPFR and GMP libraries also get installed
in the profile; removing MPC also removes MPFR and GMP---unless they had
also been explicitly installed independently.

@c XXX: keep me up-to-date
Besides, when installing a GNU package, the tool reports the
availability of a newer upstream version.  In the future, it may provide
the option of installing directly from the upstream version, even if
that version is not yet in the distribution.

@item --install-from-expression=@var{exp}
@itemx -e @var{exp}
Install the package @var{exp} evaluates to.

A gnu/packages/avahi.scm => gnu/packages/avahi.scm +77 -0
@@ 0,0 1,77 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages avahi)
  #:use-module ((guix licenses) #:select (lgpl2.1+))
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages gdbm)
  #:use-module (gnu packages libdaemon)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages xml))

(define-public avahi
  (package
    (name "avahi")
    (version "0.6.31")
    (home-page "http://avahi.org")
    (source (origin
             (method url-fetch)
             (uri (string-append home-page "/download/avahi-"
                                 version ".tar.gz"))
             (sha256
              (base32
               "0j5b5ld6bjyh3qhd2nw0jb84znq0wqai7fsrdzg7bpg24jdp2wl3"))))
    (build-system gnu-build-system)
    (arguments
     '(#:configure-flags '("--with-distro=none"
                           "--disable-python"
                           "--disable-mono"
                           "--disable-doxygen-doc"
                           "--disable-xmltoman"
                           "--enable-tests"
                           "--disable-qt3" "--disable-qt4"
                           "--disable-gtk" "--disable-gtk3")
       #:phases (alist-cons-before
                 'configure 'set-perl-path
                 (lambda* (#:key inputs #:allow-other-keys)
                   ;; FIXME: Remove this phase when proper support for search
                   ;; paths is available.
                   (let ((xml-parser (assoc-ref inputs
                                                "intltool/perl-xml-parser")))
                     (setenv "PERL5LIB"
                             (string-append xml-parser
                                            "/lib/perl5/site_perl"))
                     #t))
                 %standard-phases)))
    (inputs
     `(("expat" ,expat)
       ("glib" ,glib)
       ("dbus" ,dbus)
       ("libdaemon" ,libdaemon)
       ("intltool" ,intltool)
       ("pkg-config" ,pkg-config)
       ("gdbm" ,gdbm)))
    (synopsis "Avahi, an mDNS/DNS-SD implementation")
    (description
     "Avahi is a system which facilitates service discovery on a local
network.  It is an implementation of the mDNS (for \"Multicast DNS\") and
DNS-SD (for \"DNS-Based Service Discovery\") protocols.")
    (license lgpl2.1+)))

M gnu/packages/base.scm => gnu/packages/base.scm +1 -113
@@ 24,6 24,7 @@
  #:use-module (gnu packages bash)
  #:use-module (gnu packages bootstrap)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages gcc)
  #:use-module (gnu packages gawk)
  #:use-module (gnu packages guile)
  #:use-module (gnu packages multiprecision)


@@ 382,119 383,6 @@ BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc.")
   (license gpl3+)
   (home-page "http://www.gnu.org/software/binutils/")))

(define-public gcc-4.7
  (let ((stripped? #t))                         ; TODO: make this a parameter
    (package
     (name "gcc")
     (version "4.7.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/gcc/gcc-"
                                  version "/gcc-" version ".tar.bz2"))
              (sha256
               (base32
                "115h03hil99ljig8lkrq4qk426awmzh0g99wrrggxf8g07bq74la"))))
     (build-system gnu-build-system)
     (inputs `(("gmp" ,gmp)
               ("mpfr" ,mpfr)
               ("mpc" ,mpc)))           ; TODO: libelf, ppl, cloog, zlib, etc.
     (arguments
      `(#:out-of-source? #t
        #:strip-binaries? ,stripped?
        #:configure-flags
        `("--enable-plugin"
          "--enable-languages=c,c++"
          "--disable-multilib"

          "--with-local-prefix=/no-gcc-local-prefix"

          ,(let ((libc (assoc-ref %build-inputs "libc")))
             (if libc
                 (string-append "--with-native-system-header-dir=" libc
                                "/include")
                 "--without-headers")))
        #:make-flags
        (let ((libc (assoc-ref %build-inputs "libc")))
          `(,@(if libc
                  (list (string-append "LDFLAGS_FOR_TARGET="
                                       "-B" libc "/lib "
                                       "-Wl,-dynamic-linker "
                                       "-Wl," libc
                                       ,(glibc-dynamic-linker)))
                  '())
            ,(string-append "BOOT_CFLAGS=-O2 "
                            ,(if stripped? "-g0" "-g"))))

        #:tests? #f
        #:phases
        (alist-cons-before
         'configure 'pre-configure
         (lambda* (#:key inputs outputs #:allow-other-keys)
           (let ((out  (assoc-ref outputs "out"))
                 (libc (assoc-ref inputs "libc")))
             (when libc
               ;; The following is not performed for `--without-headers'
               ;; cross-compiler builds.

               ;; Fix the dynamic linker's file name.
               (substitute* (find-files "gcc/config"
                                        "^linux(64|-elf)?\\.h$")
                 (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
                  (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
                          suffix
                          (string-append libc ,(glibc-dynamic-linker)))))

               ;; Tell where to find libstdc++, libc, and `?crt*.o', except
               ;; `crt{begin,end}.o', which come with GCC.
               (substitute* (find-files "gcc/config"
                                        "^(gnu-user(64)?|linux-elf)\\.h$")
                 (("#define LIB_SPEC (.*)$" _ suffix)
                  ;; Note that with this "lib" spec, we may still add a
                  ;; RUNPATH to GCC even when `libgcc_s' is not NEEDED.
                  ;; There's not much that can be done to avoid it, though.
                  (format #f "#define LIB_SPEC \"-L~a/lib %{!static:-rpath=~a/lib \
%{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib}} \" ~a"
                          libc libc out out suffix))
                 (("#define STARTFILE_SPEC.*$" line)
                  (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
#define STANDARD_STARTFILE_PREFIX_2 \"\"
~a~%"
                          libc line))))

             ;; Don't retain a dependency on the build-time sed.
             (substitute* "fixincludes/fixincl.x"
               (("static char const sed_cmd_z\\[\\] =.*;")
                "static char const sed_cmd_z[] = \"sed\";"))))

         (alist-cons-after
          'configure 'post-configure
          (lambda _
            ;; Don't store configure flags, to avoid retaining references to
            ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'.
            (substitute* "Makefile"
              (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
               "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))
          (alist-replace 'install
                         (lambda* (#:key outputs #:allow-other-keys)
                           (zero?
                            (system* "make"
                                     ,(if stripped?
                                          "install-strip"
                                          "install"))))
                         %standard-phases)))))

     (properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
     (synopsis "The GNU Compiler Collection")
     (description
      "The GNU Compiler Collection includes compiler front ends for C, C++,
Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well as
libraries for these languages (libstdc++, libgcj, libgomp,...).

GCC development is a part of the GNU Project, aiming to improve the compiler
used in the GNU system including the GNU/Linux variant.")
     (license gpl3+)
     (home-page "http://gcc.gnu.org/"))))

(define-public glibc
  (package
   (name "glibc")

M gnu/packages/bootstrap.scm => gnu/packages/bootstrap.scm +6 -3
@@ 104,7 104,8 @@ check whether everything is alright."
       ("tarball" ,(bootstrap-origin (source* (%current-system))))))
    (synopsis description*)
    (description #f)
    (home-page #f)))
    (home-page #f)
    (license #f)))

(define package-with-bootstrap-guile
  (memoize


@@ 285,7 286,8 @@ $out/bin/guile --version~%"
                          "08hv8i0axwnihrcgbz19x0a7s6zyv3yx38x8r29liwl8h82x9g88")))))))))
    (synopsis "Bootstrap binaries and headers of the GNU C Library")
    (description #f)
    (home-page #f)))
    (home-page #f)
    (license lgpl2.1+)))

(define %bootstrap-gcc
  ;; The initial GCC.  Uses binaries from a tarball typically built by


@@ 352,7 354,8 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                          "06wqs0xxnpw3hn0xjb4c9cs0899p1xwkcysa2rvzhvpra0c5vsg2")))))))))
    (synopsis "Bootstrap binaries of the GNU Compiler Collection")
    (description #f)
    (home-page #f)))
    (home-page #f)
    (license gpl3+)))

(define %bootstrap-inputs
  ;; The initial, pre-built inputs.  From now on, we can start building our

A gnu/packages/cflow.scm => gnu/packages/cflow.scm +51 -0
@@ 0,0 1,51 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages cflow)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (guix licenses)
  #:use-module (gnu packages emacs))

(define-public cflow
  (package
    (name "cflow")
    (version "1.4")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/cflow/cflow-"
                                 version ".tar.bz2"))
             (sha256
              (base32
               "1jkbq97ajcf834z68hbn3xfhiz921zhn39gklml1racf0kb3jzh3"))))
    (build-system gnu-build-system)
    (home-page "http://www.gnu.org/software/cflow/")
    (synopsis "A tool to analyze the control flow of C programs")
    (description
     "GNU cflow analyzes a collection of C source files and prints a
graph, charting control flow within the program.

GNU cflow is able to produce both direct and inverted flowgraphs
for C sources.  Optionally a cross-reference listing can be
generated.  Two output formats are implemented: POSIX and GNU
(extended).

The package also provides Emacs major mode for examining the
produced flowcharts in Emacs.")
   (license gpl3+)))

A gnu/packages/cmake.scm => gnu/packages/cmake.scm +78 -0
@@ 0,0 1,78 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages cmake)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages)
  #:use-module (gnu packages file))

(define-public cmake
  (package
    (name "cmake")
    (version "2.8.10.2")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "http://www.cmake.org/files/v"
                   (substring version 0
                    (string-index version #\. (+ 1 (string-index version #\.))))
                   "/cmake-" version ".tar.gz"))
             (sha256
              (base32 "1c8fj6i2x9sb39wc9av2ighj415mw33cxfrlfpafcvm0knrlylnf"))))
    (build-system gnu-build-system)
    (arguments
     '(#:test-target "test"
       #:patches (list (assoc-ref %build-inputs "fix-tests"))
       #:patch-flags '("-p0")
       #:phases (alist-replace
                 'configure
                 (lambda* (#:key outputs #:allow-other-keys)
                   (let ((out (assoc-ref outputs "out")))
                     ;; Replace "/bin/sh" by the right path in... a lot of
                     ;; files.
                     (substitute*
                       '("Modules/CompilerId/Xcode-3.pbxproj.in"
                         "Modules/CompilerId/Xcode-1.pbxproj.in"
                         "Modules/CompilerId/Xcode-2.pbxproj.in"
                         "Modules/CPack.RuntimeScript.in"
                         "Source/cmakexbuild.cxx"
                         "Source/cmGlobalXCodeGenerator.cxx"
                         "Source/CTest/cmCTestBatchTestHandler.cxx"
                         "Source/cmLocalUnixMakefileGenerator3.cxx"
                         "Utilities/cmbzip2/Makefile-libbz2_so"
                         "Utilities/Release/release_cmake.cmake"
                         "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
                         "Tests/CMakeLists.txt")
                       (("/bin/sh") (which "sh")))
                     (zero? (system* "./configure"
                             (string-append "--prefix=" out)))))
                 %standard-phases)))
    (inputs
     `(("file" ,file)
       ("fix-tests" ,(search-patch "cmake-fix-tests.patch"))))
    (home-page "http://www.cmake.org/")
    (synopsis "A cross-platform, open-source build system")
    (description
     "CMake is a family of tools designed to build, test and package software.
CMake is used to control the software compilation process using simple platform
and compiler independent configuration files. CMake generates native makefiles
and workspaces that can be used in the compiler environment of your choice.")
    (license bsd-3)))

A gnu/packages/cppi.scm => gnu/packages/cppi.scm +45 -0
@@ 0,0 1,45 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages cppi)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (guix licenses))

(define-public cppi
  (package
    (name "cppi")
    (version "1.18")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/cppi/cppi-"
                                 version ".tar.xz"))
             (sha256
              (base32
               "1jk42cjaggk71rimjnx3qpmb6hivps0917vl3z7wbxk3i2whb98j"))))
    (build-system gnu-build-system)
    (home-page "http://www.gnu.org/software/cppi/")
    (synopsis "A cpp directive indenter")
    (description
     "GNU cppi indents C preprocessor directives to reflect their nesting and
ensure that there is exactly one space character between each #if, #elif,
#define directive and the following token.  The number of spaces between the
`#' and the following directive must correspond to the level of nesting of
that directive.")
    (license gpl3+)))

M gnu/packages/emacs.scm => gnu/packages/emacs.scm +3 -3
@@ 31,14 31,14 @@
(define-public emacs
  (package
    (name "emacs")
    (version "24.2")
    (version "24.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/emacs/emacs-"
                                 version ".tar.bz2"))
                                 version ".tar.xz"))
             (sha256
              (base32
               "13wbjfjmz13qpjwssy44nw2230lllmkkgjsy0rqfm6am2cf87n3k"))))
               "1385qzs3bsa52s5rcncbrkxlydkw0ajzrvfxgv8rws5fx512kakh"))))
    (build-system gnu-build-system)
    (arguments
     '(#:configure-flags

A gnu/packages/fdisk.scm => gnu/packages/fdisk.scm +54 -0
@@ 0,0 1,54 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages fdisk)
  #:use-module ((guix licenses) #:select (gpl3+))
  #:use-module ((gnu packages gettext)
                #:renamer (symbol-prefix-proc 'guix:))
  #:use-module (gnu packages guile)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages parted)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu))

(define-public fdisk
  (package
    (name "fdisk")
    (version "2.0.0a")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "mirror://gnu/fdisk/gnufdisk-"
                          version ".tar.gz"))
      (sha256
       (base32
        "04nd7civ561x2lwcmxhsqbprml3178jfc58fy1v7hzqg5k4nbhy3"))))
    (build-system gnu-build-system)
    (inputs
     `(("gettext" ,guix:gettext)
       ("guile" ,guile-1.8)
       ("util-linux" ,util-linux)
       ("parted" ,parted)))
    (home-page "https://www.gnu.org/software/fdisk/")
    (synopsis
     "GNU Fdisk, a command-line disk partitioning tool")
    (description
     "GNU Fdisk provides alternatives to util-linux fdisk and util-linux
cfdisk.  It uses GNU Parted.")
    (license gpl3+)))
\ No newline at end of file

A gnu/packages/gcc.scm => gnu/packages/gcc.scm +241 -0
@@ 0,0 1,241 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages gcc)
  #:use-module (guix licenses)
  #:use-module (gnu packages)
  #:use-module (gnu packages bootstrap)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages multiprecision)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu))

(define %gcc-infrastructure
  ;; Base URL for GCC's infrastructure.
  "ftp://gcc.gnu.org/pub/gcc/infrastructure/")

(define-public gcc-4.7
  (let ((stripped? #t))                         ; TODO: make this a parameter
    (package
     (name "gcc")
     (version "4.7.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/gcc/gcc-"
                                  version "/gcc-" version ".tar.bz2"))
              (sha256
               (base32
                "115h03hil99ljig8lkrq4qk426awmzh0g99wrrggxf8g07bq74la"))))
     (build-system gnu-build-system)
     (inputs `(("gmp" ,gmp)
               ("mpfr" ,mpfr)
               ("mpc" ,mpc)))           ; TODO: libelf, ppl, cloog, zlib, etc.
     (arguments
      `(#:out-of-source? #t
        #:strip-binaries? ,stripped?
        #:configure-flags
        `("--enable-plugin"
          "--enable-languages=c,c++"
          "--disable-multilib"

          "--with-local-prefix=/no-gcc-local-prefix"

          ,(let ((libc (assoc-ref %build-inputs "libc")))
             (if libc
                 (string-append "--with-native-system-header-dir=" libc
                                "/include")
                 "--without-headers")))
        #:make-flags
        (let ((libc (assoc-ref %build-inputs "libc")))
          `(,@(if libc
                  (list (string-append "LDFLAGS_FOR_TARGET="
                                       "-B" libc "/lib "
                                       "-Wl,-dynamic-linker "
                                       "-Wl," libc
                                       ,(glibc-dynamic-linker)))
                  '())
            ,(string-append "BOOT_CFLAGS=-O2 "
                            ,(if stripped? "-g0" "-g"))))

        #:tests? #f
        #:phases
        (alist-cons-before
         'configure 'pre-configure
         (lambda* (#:key inputs outputs #:allow-other-keys)
           (let ((out  (assoc-ref outputs "out"))
                 (libc (assoc-ref inputs "libc")))
             (when libc
               ;; The following is not performed for `--without-headers'
               ;; cross-compiler builds.

               ;; Fix the dynamic linker's file name.
               (substitute* (find-files "gcc/config"
                                        "^linux(64|-elf)?\\.h$")
                 (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
                  (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
                          suffix
                          (string-append libc ,(glibc-dynamic-linker)))))

               ;; Tell where to find libstdc++, libc, and `?crt*.o', except
               ;; `crt{begin,end}.o', which come with GCC.
               (substitute* (find-files "gcc/config"
                                        "^(gnu-user(64)?|linux-elf)\\.h$")
                 (("#define LIB_SPEC (.*)$" _ suffix)
                  ;; Note that with this "lib" spec, we may still add a
                  ;; RUNPATH to GCC even when `libgcc_s' is not NEEDED.
                  ;; There's not much that can be done to avoid it, though.
                  (format #f "#define LIB_SPEC \"-L~a/lib %{!static:-rpath=~a/lib \
%{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib}} \" ~a"
                          libc libc out out suffix))
                 (("#define STARTFILE_SPEC.*$" line)
                  (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
#define STANDARD_STARTFILE_PREFIX_2 \"\"
~a~%"
                          libc line))))

             ;; Don't retain a dependency on the build-time sed.
             (substitute* "fixincludes/fixincl.x"
               (("static char const sed_cmd_z\\[\\] =.*;")
                "static char const sed_cmd_z[] = \"sed\";"))))

         (alist-cons-after
          'configure 'post-configure
          (lambda _
            ;; Don't store configure flags, to avoid retaining references to
            ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'.
            (substitute* "Makefile"
              (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
               "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))
          (alist-replace 'install
                         (lambda* (#:key outputs #:allow-other-keys)
                           (zero?
                            (system* "make"
                                     ,(if stripped?
                                          "install-strip"
                                          "install"))))
                         %standard-phases)))))

     (properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
     (synopsis "The GNU Compiler Collection")
     (description
      "The GNU Compiler Collection includes compiler front ends for C, C++,
Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well as
libraries for these languages (libstdc++, libgcj, libgomp,...).

GCC development is a part of the GNU Project, aiming to improve the compiler
used in the GNU system including the GNU/Linux variant.")
     (license gpl3+)
     (home-page "http://gcc.gnu.org/"))))

(define-public isl
  (package
    (name "isl")
    (version "0.11.1")
    (source (origin
             (method url-fetch)
             (uri (list (string-append
                         "ftp://ftp.linux.student.kuleuven.be/pub/people/skimo/isl/isl-"
                         version
                         ".tar.bz2")
                        (string-append %gcc-infrastructure
                                       name "-" version ".tar.gz")))
             (sha256
              (base32
               "13d9cqa5rzhbjq0xf0b2dyxag7pqa72xj9dhsa03m8ccr1a4npq9"))))
    (build-system gnu-build-system)
    (inputs `(("gmp" ,gmp)))
    (home-page "http://www.kotnet.org/~skimo/isl/")
    (synopsis
     "A library for manipulating sets and relations of integer points bounded
by linear constraints")
    (description
     "isl is a library for manipulating sets and relations of integer points
bounded by linear constraints. Supported operations on sets include
intersection, union, set difference, emptiness check, convex hull, (integer)
affine hull, integer projection, computing the lexicographic minimum using
parametric integer programming, coalescing and parametric vertex
enumeration. It also includes an ILP solver based on generalized basis
reduction, transitive closures on maps (which may encode infinite graphs),
dependence analysis and bounds on piecewise step-polynomials.")
    (license lgpl2.1+)))

(define-public cloog
  (package
    (name "cloog")
    (version "0.18.0")
    (source
     (origin
      (method url-fetch)
      (uri (list (string-append
                  "http://www.bastoul.net/cloog/pages/download/count.php3?url=cloog-"
                  version
                  ".tar.gz")
                 (string-append %gcc-infrastructure
                                name "-" version ".tar.gz")))
      (sha256
       (base32
        "0a12rwfwp22zd0nlld0xyql11cj390rrq1prw35yjsw8wzfshjhw"))
      (file-name (string-append name "-" version ".tar.gz"))))
    (build-system gnu-build-system)
    (inputs `(("gmp" ,gmp)
              ("isl" ,isl)))
    (arguments '(#:configure-flags '("--with-isl=system")))
    (home-page "http://www.cloog.org/")
    (synopsis "A library to generate code for scanning Z-polyhedra")
    (description
     "CLooG is a free software library to generate code for scanning
Z-polyhedra.  That is, it finds a code (e.g., in C, FORTRAN...) that
reaches each integral point of one or more parameterized polyhedra.
CLooG has been originally written to solve the code generation problem
for optimizing compilers based on the polytope model.  Nevertheless it
is used now in various area e.g., to build control automata for
high-level synthesis or to find the best polynomial approximation of a
function.  CLooG may help in any situation where scanning polyhedra
matters.  While the user has full control on generated code quality,
CLooG is designed to avoid control overhead and to produce a very
effective code.")
    (license gpl2+)))

(define-public libelf
  (package
    (name "libelf")
    (version "0.8.13")
    (source (origin
             (method url-fetch)
             (uri (string-append "http://www.mr511.de/software/libelf-"
                                 version ".tar.gz"))
             (sha256
              (base32
               "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr"))))
    (build-system gnu-build-system)
    (arguments '(#:phases (alist-replace
                           'configure
                           (lambda* (#:key outputs #:allow-other-keys)
                             ;; This old `configure' script doesn't support
                             ;; variables passed as arguments.
                             (let ((out (assoc-ref outputs "out")))
                               (setenv "CONFIG_SHELL" (which "bash"))
                               (zero?
                                (system* "./configure"
                                         (string-append "--prefix=" out)))))
                           %standard-phases)))
    (home-page "http://www.mr511.de/software/english.html")
    (synopsis "An ELF object file access library")
    (description "libelf is a C library to access ELF object files.")
    (license lgpl2.0+)))

M gnu/packages/glib.scm => gnu/packages/glib.scm +56 -4
@@ 18,7 18,7 @@
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages glib)
  #:use-module ((guix licenses) #:select (lgpl2.0+ gpl2+))
  #:use-module ((guix licenses) #:select (lgpl2.0+ gpl2+ gpl2))
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)


@@ 76,7 76,7 @@ shared NFS home directories.")
   (version "2.34.3")
   (source (origin
            (method url-fetch)
            (uri (string-append "http://ftp.gnome.org/pub/gnome/sources/"
            (uri (string-append "mirror://gnome/sources/"
                                name "/2.34/"
                                name "-" version ".tar.xz"))
            (sha256


@@ 99,11 99,14 @@ shared NFS home directories.")
      ("patch/tests-homedir"
       ,(search-patch "glib-tests-homedir.patch"))
      ("patch/tests-desktop"
       ,(search-patch "glib-tests-desktop.patch"))))
       ,(search-patch "glib-tests-desktop.patch"))
      ("patch/tests-prlimit"
       ,(search-patch "glib-tests-prlimit.patch"))))
   (arguments
    '(#:patches (list (assoc-ref %build-inputs "patch/tests-tzdata")
                      (assoc-ref %build-inputs "patch/tests-homedir")
                      (assoc-ref %build-inputs "patch/tests-desktop"))
                      (assoc-ref %build-inputs "patch/tests-desktop")
                      (assoc-ref %build-inputs "patch/tests-prlimit"))
      #:phases (alist-cons-before
                'build 'pre-build
                (lambda* (#:key inputs outputs #:allow-other-keys)


@@ 124,3 127,52 @@ and interfaces for such runtime functionality as an event loop, threads,
dynamic loading, and an object system.")
   (home-page "http://developer.gnome.org/glib/")
   (license lgpl2.0+)))                        ; some files are under lgpl2.1+

(define-public intltool
  (package
    (name "intltool")
    (version "0.40.6")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnome/sources/intltool/0.40/intltool-"
                   version
                   ".tar.bz2"))
             (sha256
              (base32
               "0r1vkvy5xzqk01yl6a0xlrry39bra24alkrx6279b77hc62my7jd"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (alist-cons-before
                 'configure 'set-perl-path
                 (lambda* (#:key inputs #:allow-other-keys)
                   ;; FIXME: Remove this phase when proper support for search
                   ;; paths is available.
                   (let ((xml-parser (assoc-ref inputs "perl-xml-parser")))
                     (setenv "PERL5LIB"
                             (string-append xml-parser
                                            "/lib/perl5/site_perl"))
                     #t))
                 %standard-phases)))
    (native-inputs `(("pkg-config" ,pkg-config)))
    (propagated-inputs
     `(("gettext" ,guix:gettext)
       ("perl-xml-parser" ,xml:perl-xml-parser)
       ("perl" ,perl)))
    (home-page "http://freedesktop.org/wiki/Software/intltool")
    (synopsis "Tools to centralize translation of many different file formats")
    (description
     "intltool is a set of tools to centralize translation of many different
file formats using GNU gettext-compatible PO files.

The intltool collection can be used to do these things:

    Extract translatable strings from various source files (.xml.in,
    glade, .desktop.in, .server.in, .oaf.in).

    Collect the extracted strings together with messages from traditional
    source files (.c, .h) in po/$(PACKAGE).pot.

    Merge back the translations from .po files into .xml, .desktop and
    oaf files. This merge step will happen at build resp. installation time.")
    (license gpl2)))

M gnu/packages/gnupg.scm => gnu/packages/gnupg.scm +9 -10
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.


@@ 57,15 57,14 @@ Daemon and possibly more in the future.")
(define-public libgcrypt
  (package
    (name "libgcrypt")
    (version "1.5.0")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                          version ".tar.bz2"))
      (sha256
       (base32
        "1ykkh7dm0gyndz7bbpvn3agijj8xb2h02m02f42hm504c18zqqjb"))))
    (version "1.5.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                                 version ".tar.bz2"))
             (sha256
              (base32
               "09z5zbxhvg6c7n8qcm8h9ygr28qli2n83hfq1f69jsg711cb37md"))))
    (build-system gnu-build-system)
    (propagated-inputs
     `(("libgpg-error" ,libgpg-error)))

M gnu/packages/gnutls.scm => gnu/packages/gnutls.scm +2 -2
@@ 52,7 52,7 @@ portable, and only require an ANSI C89 platform.")
(define-public gnutls
  (package
    (name "gnutls")
    (version "3.1.6")
    (version "3.1.9.1")
    (source (origin
             (method url-fetch)
             (uri


@@ 62,7 62,7 @@ portable, and only require an ANSI C89 platform.")
                             version ".tar.xz"))
             (sha256
              (base32
               "0zsybr9plllk1phh83bx9bg7c5ccik427j4n3k1s9fiy4j69n0w3"))))
               "0gkwhz7sypfy39jfj2yzrngbxq5j9l9smqc89mqlqsh25spc8009"))))
    (build-system gnu-build-system)
    (inputs
     `(("guile" ,guile-2.0)

A gnu/packages/lsof.scm => gnu/packages/lsof.scm +75 -0
@@ 0,0 1,75 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages lsof)
  #:use-module ((guix licenses)
                #:renamer (symbol-prefix-proc 'license:))
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages perl))

(define-public lsof
  (package
   (name "lsof")
   (version "4.87")
   (source (origin
            (method url-fetch)
            (uri (string-append "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_"
                                version ".tar.bz2"))
            (sha256 (base32
                     "0b6si72sml7gr9784ak491cxxbm9mx5bh174yg6rrirbv04kgpfz"))))
   (build-system gnu-build-system)
   (inputs `(("perl" ,perl)))
   (arguments
    `(#:tests? #f ; no test target
      #:phases
      (alist-replace
       'unpack
       (lambda* (#:key source name version #:allow-other-keys)
         (let ((unpack (assoc-ref %standard-phases 'unpack)))
           (apply unpack (list #:source source))
           (apply unpack (list #:source (car (find-files "." "\\.tar$"))))))
      (alist-replace
       'configure
       (lambda* (#:key #:allow-other-keys)
         (setenv "LSOF_CC" "gcc")
         (setenv "LSOF_MAKE" "make")
         (system* "./Configure" "linux"))
      (alist-replace
       'install
       (lambda* (#:key outputs #:allow-other-keys)
         (let ((out (assoc-ref outputs "out")))
           (mkdir out)
           (mkdir (string-append out "/bin"))
           (copy-file "lsof" (string-append out "/bin/lsof"))
           (mkdir (string-append out "/share"))
           (mkdir (string-append out "/share/man"))
           (mkdir (string-append out "/share/man/man8"))
           (copy-file "lsof.8" (string-append out "/share/man/man8/lsof.8"))
         ))
       %standard-phases)))))
   (synopsis "lsof displays information about open files")
   (description
    "Lsof stands for LiSt Open Files, and it does just that.
It lists information about files that are open by the processes running
on the system.")
   (license (license:fsf-free
             "file://00FAQ"
             "License inspired by zlib, see point 1.9 of 00FAQ in the distribution."))
   (home-page "http://people.freebsd.org/~abe/")))

A gnu/packages/lua.scm => gnu/packages/lua.scm +63 -0
@@ 0,0 1,63 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages lua)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages)
  #:use-module (gnu packages readline))

(define-public lua
  (package
    (name "lua")
    (version "5.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "http://www.lua.org/ftp/lua-"
                                 version ".tar.gz"))
             (sha256
              (base32 "1rbv2ysq5fdksz7xg07dnrkl8i0gnx855hg4z6b324vng6l4sc34"))))
    (build-system gnu-build-system)
    (inputs `(("readline", readline)))
    (arguments
     '(#:modules ((guix build gnu-build-system)
                    (guix build utils)
                    (srfi srfi-1))
       #:test-target "test"
       #:phases (alist-replace
                 'build
                 (lambda _ (zero? (system* "make" "linux"))) ; XXX: Other OS.
                 (alist-replace
                  'install
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let ((out (assoc-ref outputs "out")))
                      (zero? (system
                              (string-append "make install INSTALL_TOP=" out)))))
                  (alist-delete 'configure %standard-phases)))))
    (home-page "http://www.lua.org/")
    (synopsis "An embeddable scripting language.")
    (description
     "Lua is a powerful, fast, lightweight, embeddable scripting language.  Lua
combines simple procedural syntax with powerful data description constructs
based on associative arrays and extensible semantics. Lua is dynamically typed,
runs by interpreting bytecode for a register-based virtual machine, and has
automatic memory management with incremental garbage collection, making it ideal
for configuration, scripting, and rapid prototyping.")
    (license x11)))

M gnu/packages/make-bootstrap.scm => gnu/packages/make-bootstrap.scm +1 -0
@@ 27,6 27,7 @@
  #:use-module (gnu packages bash)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages gawk)
  #:use-module (gnu packages gcc)
  #:use-module (gnu packages guile)
  #:use-module (gnu packages bdw-gc)
  #:use-module (gnu packages linux)

A gnu/packages/patches/cmake-fix-tests.patch => gnu/packages/patches/cmake-fix-tests.patch +45 -0
@@ 0,0 1,45 @@
--- Tests/CMakeLists.txt	2013-03-20 22:57:13.000000000 +0100
+++ Tests/CMakeLists.txt	2013-03-20 22:58:02.000000000 +0100
@@ -1706,16 +1706,17 @@
     PASS_REGULAR_EXPRESSION "Could not find executable"
     FAIL_REGULAR_EXPRESSION "SegFault")
 
-  configure_file(
-    "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in"
-    "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake"
-    @ONLY ESCAPE_QUOTES)
-  add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND}
-    -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V
-    --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log"
-    )
-  set_tests_properties(CTestTestUpload PROPERTIES
-    PASS_REGULAR_EXPRESSION "Upload\\.xml")
+# This test requires network connectivity: skip it.
+#  configure_file(
+#    "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in"
+#    "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake"
+#    @ONLY ESCAPE_QUOTES)
+#  add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND}
+#    -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V
+#    --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log"
+#    )
+#  set_tests_properties(CTestTestUpload PROPERTIES
+#    PASS_REGULAR_EXPRESSION "Upload\\.xml")
 
   configure_file(
     "${CMake_SOURCE_DIR}/Tests/CTestTestConfigFileInBuildDir/test1.cmake.in"
--- Utilities/cmcurl/CMakeLists.txt	2013-03-20 22:57:13.000000000 +0100
+++ Utilities/cmcurl/CMakeLists.txt	2013-03-20 23:08:41.000000000 +0100
@@ -729,8 +729,9 @@
 ADD_EXECUTABLE(LIBCURL Testing/curltest.c)
 TARGET_LINK_LIBRARIES(LIBCURL cmcurl ${CMAKE_DL_LIBS})
 
-IF(CMAKE_CURL_TEST_URL)
-  ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL})
-ENDIF(CMAKE_CURL_TEST_URL)
+# This test requires network connectivity: skip it.
+#IF(CMAKE_CURL_TEST_URL)
+#  ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL})
+#ENDIF(CMAKE_CURL_TEST_URL)
 
 INSTALL(FILES COPYING DESTINATION ${CMake_DOC_DEST}/cmcurl)

M gnu/packages/patches/emacs-configure-sh.patch => gnu/packages/patches/emacs-configure-sh.patch +5 -6
@@ 1,14 1,13 @@
Make sure the right shell is used when creating src/epaths.h.

--- emacs-24.2/configure	2013-01-13 17:01:53.000000000 +0100
+++ emacs-24.2/configure	2013-01-13 17:01:57.000000000 +0100
@@ -24135,7 +24135,7 @@ done
--- emacs-24.3/configure	2013-03-14 17:42:26.000000000 +0100
+++ emacs-24.3/configure	2013-03-14 17:42:58.000000000 +0100
@@ -26463,7 +26463,7 @@ done
  ;;
     "epaths":C)
 echo creating src/epaths.h
-${MAKE-make} epaths-force
+${MAKE-make} epaths-force SHELL="$CONFIG_SHELL"
-${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force
+${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force SHELL="$CONFIG_SHELL"
  ;;
     "gdbinit":C)
 if test ! -f src/.gdbinit && test -f $srcdir/src/.gdbinit; then


A gnu/packages/patches/glib-tests-prlimit.patch => gnu/packages/patches/glib-tests-prlimit.patch +14 -0
@@ 0,0 1,14 @@
prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64 as found on
hydra.gnu.org, and strace(1) doesn't recognize it.

--- glib-2.34.3/glib/tests/thread.c	2012-11-20 15:27:12.000000000 +0100
+++ glib-2.34.3/glib/tests/thread.c	2013-03-27 14:48:31.000000000 +0100
@@ -130,7 +130,7 @@ test_thread3 (void)
 static void
 test_thread4 (void)
 {
-#ifdef HAVE_PRLIMIT
+#if 0
   struct rlimit ol, nl;
   GThread *thread;
   GError *error;

A gnu/packages/patches/w3m-fix-compile.patch => gnu/packages/patches/w3m-fix-compile.patch +15 -0
@@ 0,0 1,15 @@
https://bugs.archlinux.org/task/33397

diff -aur old/main.c new/main.c
--- main.c	2013-01-14 18:16:14.216210053 -0600
+++ main.c	2013-01-14 18:17:28.816220559 -0600
@@ -833,7 +833,8 @@
     mySignal(SIGPIPE, SigPipe);
 #endif

-    orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
+    orig_GC_warn_proc = GC_get_warn_proc();
+    GC_set_warn_proc(wrap_GC_warn_proc);
     err_msg = Strnew();
     if (load_argc == 0) {
	/* no URL specified */

M gnu/packages/texinfo.scm => gnu/packages/texinfo.scm +2 -2
@@ 28,14 28,14 @@
(define-public texinfo
  (package
    (name "texinfo")
    (version "5.0")
    (version "5.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/texinfo/texinfo-"
                                 version ".tar.xz"))
             (sha256
              (base32
               "1p34f68h9ggfj6ckgj0p62qlj7pmz3ha3vc91kh4hr44pnwm1pla"))))
               "0864v5i488x3mb3v5p6nhy2kw0mqkzpa3b0453iibj81zlpq078q"))))
    (build-system gnu-build-system)
    (inputs `(("ncurses" ,ncurses)
              ("xz" ,xz)))

M gnu/packages/vpn.scm => gnu/packages/vpn.scm +49 -1
@@ 23,8 23,14 @@
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages)
  #:use-module (gnu packages compression)
  #:use-module ((gnu packages gettext)
                #:renamer (symbol-prefix-proc 'gnu:))
  #:use-module (gnu packages gnupg)
  #:use-module (gnu packages perl))
  #:use-module (gnu packages openssl)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages xml))

(define-public vpnc
  (package


@@ 64,3 70,45 @@ shared-secret IPSec authentication with Xauth, AES (256, 192, 128), 3DES,
Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
   (license license:gpl2+) ; some file are bsd-2, see COPYING
   (home-page "http://www.unix-ag.uni-kl.de/~massar/vpnc/")))


(define-public openconnect
  (package
   (name "openconnect")
   (version "4.99")
   (source (origin
            (method url-fetch)
            (uri (string-append "ftp://ftp.infradead.org/pub/openconnect/openconnect-"
                                version ".tar.gz"))
            (sha256 (base32
                     "1rd8pap455wzkx19i0sy3cqap524b6fwcjvqynxp6lhm01di4bd6"))))
   (build-system gnu-build-system)
   (inputs
    `(("gettext" ,gnu:gettext)
      ("libxml2" ,libxml2)
      ("openssl" ,openssl)
      ("pkg-config" ,pkg-config)
      ("vpnc" ,vpnc)
      ("zlib" ,zlib)))
   (arguments
    `(#:phases
      (alist-replace
       'configure
       (lambda* (#:key inputs #:allow-other-keys #:rest args)
         (let ((vpnc (assoc-ref inputs "vpnc"))
               (configure (assoc-ref %standard-phases 'configure)))
           (apply configure
                  (append args
                          (list '#:configure-flags
                                (list (string-append "--with-vpnc-script="
                                                     vpnc
                                                     "/etc/vpnc/vpnc-script")))))))
       %standard-phases)))
   (synopsis "client for cisco vpn")
   (description
    "OpenConnect is a client for Cisco's AnyConnect SSL VPN, which is
supported by the ASA5500 Series, by IOS 12.4(9)T or later on Cisco SR500,
870, 880, 1800, 2800, 3800, 7200 Series and Cisco 7301 Routers,
and probably others.")
   (license license:lgpl2.1)
   (home-page "http://www.infradead.org/openconnect/")))

A gnu/packages/w3m.scm => gnu/packages/w3m.scm +81 -0
@@ 0,0 1,81 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages w3m)
  #:use-module ((guix licenses) #:select (x11-style))
  #:use-module ((gnu packages gettext)
                #:renamer (symbol-prefix-proc 'guix:))
  #:use-module (gnu packages bdw-gc)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages ncurses)
  #:use-module (gnu packages openssl)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu))

(define-public w3m
  (package
    (name "w3m")
    (version "0.5.3")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "mirror://sourceforge/w3m/w3m-"
                          version ".tar.gz"))
      (sha256
       (base32
        "1qx9f0kprf92r1wxl3sacykla0g04qsi0idypzz24b7xy9ix5579"))))
    (build-system gnu-build-system)
    (arguments `(#:tests? #f  ; no check target
                 #:phases (alist-cons-before
                           'configure 'fix-perl
                           (lambda _
                             ;; https://launchpad.net/bugs/935540
                             ;; 'struct file_handle' is used by 'glibc'
                             (substitute* '("istream.c" "istream.h")
                              (("struct[[:blank:]]+file_handle")
                               "struct w3m_file_handle"))
                             (substitute* '("scripts/w3mmail.cgi.in"
                                            "scripts/dirlist.cgi.in")
                               (("@PERL@") (which "perl"))))
                           %standard-phases)
                 ;; cf. https://bugs.archlinux.org/task/33397
                 #:patches (list (assoc-ref %build-inputs
                                            "patch/fix-compile"))
                 #:patch-flags '("-p0")))
    (inputs
     `(("gettext" ,guix:gettext)
       ("libgc" ,libgc)
       ("ncurses" ,ncurses)
       ("openssl" ,openssl)
       ("perl" ,perl)
       ("pkg-config" ,pkg-config)
       ("zlib" ,zlib)
       ("patch/fix-compile" ,(search-patch "w3m-fix-compile.patch"))))
    (home-page "http://w3m.sourceforge.net/")
    (synopsis "w3m, a text-mode web browser")
    (description
     "w3m is a text-based web browser as well as a pager like 'more' or
'less'.  With w3m you can browse web pages through a terminal emulator
window.  Moreover, w3m can be used as a text formatting tool which
typesets HTML into plain text.")
    (license (x11-style "file://doc/README"
                        "See 'doc/README' in the distribution."))))

A guix/build-system/cmake.scm => guix/build-system/cmake.scm +123 -0
@@ 0,0 1,123 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (guix build-system cmake)
  #:use-module (guix store)
  #:use-module (guix utils)
  #:use-module (guix derivations)
  #:use-module (guix build-system)
  #:use-module (guix build-system gnu)
  #:use-module (guix packages)
  #:use-module (ice-9 match)
  #:export (cmake-build
            cmake-build-system))

;; Commentary:
;;
;; Standard build procedure for packages using CMake. This is implemented as an
;; extension of `gnu-build-system'.
;;
;; Code:

(define* (cmake-build store name source inputs
                     #:key (guile #f)
                     (outputs '("out")) (configure-flags ''())
                     (make-flags ''())
                     (patches ''()) (patch-flags ''("--batch" "-p1"))
                     (cmake (@ (gnu packages cmake) cmake))
                     (out-of-source? #f)
                     (path-exclusions ''())
                     (tests? #t)
                     (test-target "test")
                     (parallel-build? #t) (parallel-tests? #f)
                     (patch-shebangs? #t)
                     (strip-binaries? #t)
                     (strip-flags ''("--strip-debug"))
                     (strip-directories ''("lib" "lib64" "libexec"
                                           "bin" "sbin"))
                     (phases '(@ (guix build cmake-build-system)
                                 %standard-phases))
                     (system (%current-system))
                     (imported-modules '((guix build cmake-build-system)
                                         (guix build gnu-build-system)
                                         (guix build utils)))
                     (modules '((guix build cmake-build-system)
                                (guix build gnu-build-system)
                                (guix build utils))))
  "Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE
provides a 'CMakeLists.txt' file as its build system."
  (define builder
    `(begin
       (use-modules ,@modules)
       (cmake-build #:source ,(if (and source (derivation-path? source))
                                 (derivation-path->output-path source)
                                 source)
                    #:system ,system
                    #:outputs %outputs
                    #:inputs %build-inputs
                    #:patches ,patches
                    #:patch-flags ,patch-flags
                    #:phases ,phases
                    #:configure-flags ,configure-flags
                    #:make-flags ,make-flags
                    #:out-of-source? ,out-of-source?
                    #:path-exclusions ,path-exclusions
                    #:tests? ,tests?
                    #:test-target ,test-target
                    #:parallel-build? ,parallel-build?
                    #:parallel-tests? ,parallel-tests?
                    #:patch-shebangs? ,patch-shebangs?
                    #:strip-binaries? ,strip-binaries?
                    #:strip-flags ,strip-flags
                    #:strip-directories ,strip-directories)))

  (define guile-for-build
    (match guile
      ((? package?)
       (package-derivation store guile system))
      ((and (? string?) (? derivation-path?))
       guile)
      (#f                                         ; the default
       (let* ((distro (resolve-interface '(gnu packages base)))
              (guile  (module-ref distro 'guile-final)))
         (package-derivation store guile system)))))

  (let ((cmake (package-derivation store cmake system)))
    (build-expression->derivation store name system
                                  builder
                                  `(,@(if source
                                          `(("source" ,source))
                                          '())
                                    ("cmake" ,cmake)
                                    ,@inputs

                                    ;; Keep the standard inputs of
                                    ;; `gnu-build-system'.
                                    ,@(standard-inputs system))

                                  #:modules imported-modules
                                  #:outputs outputs
                                  #:guile-for-build guile-for-build)))

(define cmake-build-system
  (build-system (name 'cmake)
                (description "The standard CMake build system")
                (build cmake-build)))

;;; cmake.scm ends here

A guix/build/cmake-build-system.scm => guix/build/cmake-build-system.scm +63 -0
@@ 0,0 1,63 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; 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.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; 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
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (guix build cmake-build-system)
  #:use-module ((guix build gnu-build-system)
                #:renamer (symbol-prefix-proc 'gnu:))
  #:use-module (guix build utils)
  #:use-module (ice-9 match)
  #:export (%standard-phases
            cmake-build))

;; Commentary:
;;
;; Builder-side code of the standard cmake build procedure.
;;
;; Code:

(define* (configure #:key outputs (configure-flags '())
                    #:allow-other-keys)
  "Configure the given package."
  (let ((out (assoc-ref outputs "out")))
    (if (file-exists? "CMakeLists.txt")
        (let ((args `(,(string-append "-DCMAKE_INSTALL_PREFIX=" out)
                      ,@configure-flags)))
          (format #t "running 'cmake' with arguments ~s~%" args)
          (zero? (apply system* "cmake" args)))
        (error "no CMakeLists.txt found"))))

(define* (check #:key (tests? #t) (parallel-tests? #t) (test-target "test")
                #:allow-other-keys)
  (let ((gnu-check (assoc-ref gnu:%standard-phases 'check)))
    (gnu-check #:tests? tests? #:test-target test-target
              #:parallel-tests? parallel-tests?)))

(define %standard-phases
  ;; Everything is as with the GNU Build System except for the `configure'
  ;; and 'check' phases.
  (alist-replace 'configure configure
    (alist-replace 'check check
                   gnu:%standard-phases)))

(define* (cmake-build #:key inputs (phases %standard-phases)
                      #:allow-other-keys #:rest args)
  "Build the given package, applying all of PHASES in order."
  (apply gnu:gnu-build #:inputs inputs #:phases phases args))

;;; cmake-build-system.scm ends here

M guix/derivations.scm => guix/derivations.scm +89 -40
@@ 235,6 235,32 @@ DRV and not already available in STORE, recursively."
              (hash-set! cache file drv)
              drv))))))

(define-inlinable (write-sequence lst write-item port)
  ;; Write each element of LST with WRITE-ITEM to PORT, separating them with a
  ;; comma.
  (match lst
    (()
     #t)
    ((prefix (... ...) last)
     (for-each (lambda (item)
                 (write-item item port)
                 (display "," port))
               prefix)
     (write-item last port))))

(define-inlinable (write-list lst write-item port)
  ;; Write LST as a derivation list to PORT, using WRITE-ITEM to write each
  ;; element.
  (display "[" port)
  (write-sequence lst write-item port)
  (display "]" port))

(define-inlinable (write-tuple lst write-item port)
  ;; Same, but write LST as a tuple.
  (display "(" port)
  (write-sequence lst write-item port)
  (display ")" port))

(define (write-derivation drv port)
  "Write the ATerm-like serialization of DRV to PORT.  See Section 2.4 of
Eelco Dolstra's PhD dissertation for an overview of a previous version of


@@ 243,11 269,8 @@ that form."
  ;; Make sure we're using the faster implementation.
  (define format simple-format)

  (define (list->string lst)
    (string-append "[" (string-join lst ",") "]"))

  (define (write-list lst)
    (display (list->string lst) port))
  (define (write-string-list lst)
    (write-list lst write port))

  (define (coalesce-duplicate-inputs inputs)
    ;; Return a list of inputs, such that when INPUTS contains the same DRV


@@ 272,6 295,34 @@ that form."
          '()
          inputs))

  (define (write-output output port)
    (match output
     ((name . ($ <derivation-output> path hash-algo hash))
      (write-tuple (list name path
                         (or (and=> hash-algo symbol->string) "")
                         (or (and=> hash bytevector->base16-string)
                             ""))
                   write
                   port))))

  (define (write-input input port)
    (match input
      (($ <derivation-input> path sub-drvs)
       (display "(" port)
       (write path port)
       (display "," port)
       (write-string-list (sort sub-drvs string<?))
       (display ")" port))))

  (define (write-env-var env-var port)
    (match env-var
      ((name . value)
       (display "(" port)
       (write name port)
       (display "," port)
       (write value port)
       (display ")" port))))

  ;; Note: lists are sorted alphabetically, to conform with the behavior of
  ;; C++ `std::map' in Nix itself.



@@ 279,37 330,28 @@ that form."
    (($ <derivation> outputs inputs sources
        system builder args env-vars)
     (display "Derive(" port)
     (write-list (map (match-lambda
                       ((name . ($ <derivation-output> path hash-algo hash))
                        (format #f "(~s,~s,~s,~s)"
                                name path
                                (or (and=> hash-algo symbol->string) "")
                                (or (and=> hash bytevector->base16-string)
                                    ""))))
                      (sort outputs
                            (lambda (o1 o2)
                              (string<? (car o1) (car o2))))))
     (write-list (sort outputs
                       (lambda (o1 o2)
                         (string<? (car o1) (car o2))))
                 write-output
                 port)
     (display "," port)
     (write-list (map (match-lambda
                       (($ <derivation-input> path sub-drvs)
                        (format #f "(~s,~a)" path
                                (list->string (map object->string
                                                   (sort sub-drvs string<?))))))
                      (sort (coalesce-duplicate-inputs inputs)
                            (lambda (i1 i2)
                              (string<? (derivation-input-path i1)
                                        (derivation-input-path i2))))))
     (write-list (sort (coalesce-duplicate-inputs inputs)
                       (lambda (i1 i2)
                         (string<? (derivation-input-path i1)
                                   (derivation-input-path i2))))
                 write-input
                 port)
     (display "," port)
     (write-list (map object->string (sort sources string<?)))
     (write-string-list (sort sources string<?))
     (format port ",~s,~s," system builder)
     (write-list (map object->string args))
     (write-string-list args)
     (display "," port)
     (write-list (map (match-lambda
                       ((name . value)
                        (format #f "(~s,~s)" name value)))
                      (sort env-vars
                            (lambda (e1 e2)
                              (string<? (car e1) (car e2))))))
     (write-list (sort env-vars
                       (lambda (e1 e2)
                         (string<? (car e1) (car e2))))
                 write-env-var
                 port)
     (display ")" port))))

(define derivation-path->output-path


@@ 699,14 741,21 @@ omitted or is #f, the value of the `%guile-for-build' fluid is used instead."
                      (unsetenv "LD_LIBRARY_PATH")))
         (builder  (add-text-to-store store
                                      (string-append name "-guile-builder")
                                      (string-append
                                       (object->string prologue)
                                       (object->string
                                        `(exit
                                          ,(match exp
                                             ((_ ...)
                                              (remove module-form? exp))
                                             (_ `(,exp))))))

                                      ;; Explicitly use UTF-8 for determinism,
                                      ;; and also because UTF-8 output is faster.
                                      (with-fluids ((%default-port-encoding
                                                     "UTF-8"))
                                        (call-with-output-string
                                         (lambda (port)
                                           (write prologue port)
                                           (write
                                            `(exit
                                              ,(match exp
                                                 ((_ ...)
                                                  (remove module-form? exp))
                                                 (_ `(,exp))))
                                            port))))

                                      ;; The references don't really matter
                                      ;; since the builder is always used in

M guix/download.scm => guix/download.scm +5 -1
@@ 43,7 43,6 @@
            "http://ftpmirror.gnu.org/"

            "ftp://ftp.cs.tu-berlin.de/pub/gnu/"
            "ftp://ftp.chg.ru/pub/gnu/"
            "ftp://ftp.funet.fi/pub/mirrors/ftp.gnu.org/gnu/"

            ;; This one is the master repository, and thus it's always


@@ 67,6 66,11 @@
       "ftp://trumpetti.atm.tut.fi/gcrypt/"
       "ftp://mirror.cict.fr/gnupg/"
       "ftp://ftp.strasbourg.linuxfr.org/pub/gnupg/")
      (gnome
       "http://ftp.belnet.be/ftp.gnome.org/"
       "http://ftp.linux.org.uk/mirrors/ftp.gnome.org/"
       "http://ftp.gnome.org/pub/GNOME/"
       "http://mirror.yandex.ru/mirrors/ftp.gnome.org/")
      (savannah
       "http://download.savannah.gnu.org/releases/"
       "ftp://ftp.twaren.net/Unix/NonGNU/"

M guix/gnu-maintenance.scm => guix/gnu-maintenance.scm +179 -46
@@ 1,6 1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2010, 2011, 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 22,6 22,7 @@
  #:use-module (web client)
  #:use-module (web response)
  #:use-module (ice-9 regex)
  #:use-module (ice-9 rdelim)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-11)


@@ 29,7 30,23 @@
  #:use-module (system foreign)
  #:use-module (guix ftp-client)
  #:use-module (guix utils)
  #:export (official-gnu-packages
  #:use-module (guix packages)
  #:export (gnu-package-name
            gnu-package-mundane-name
            gnu-package-copyright-holder
            gnu-package-savannah
            gnu-package-fsd
            gnu-package-language
            gnu-package-logo
            gnu-package-doc-category
            gnu-package-doc-summary
            gnu-package-doc-urls
            gnu-package-download-url

            official-gnu-packages
            find-packages
            gnu-package?

            releases
            latest-release
            gnu-package-name->name+version))


@@ 47,16 64,32 @@
;;;

(define (http-fetch uri)
  "Return a string containing the textual data at URI, a string."
  "Return an input port containing the textual data at URI, a string."
  (let*-values (((resp data)
                (http-get (string->uri uri)))
               ((code)
                (response-code resp)))
    (case code
      ((200)
       data)
       (cond ((string<=? (version) "2.0.5")
              (begin
                ;; XXX: Guile 2.0.5 and earlier did not support chunked transfer
                ;; encoding, which is required when fetching %PACKAGE-LIST-URL
                ;; (see <http://lists.gnu.org/archive/html/guile-devel/2011-09/msg00089.html>).
                ;; Since users may still be using these versions, warn them and
                ;; bail out.
                (format (current-error-port)
                        "warning: using Guile ~a, ~a ~s encoding~%"
                        (version)
                        "which does not support HTTP"
                        (response-transfer-encoding resp))
                (error "download failed; use a newer Guile"
                       uri resp)))
             ((string<=? (version) "2.0.7")
              (open-input-string data))
             (else data)))
      (else
       (error "download failed:" uri code
       (error "download failed" uri code
              (response-reason-phrase resp))))))

(define %package-list-url


@@ 64,16 97,114 @@
                 "viewvc/*checkout*/gnumaint/"
                 "gnupackages.txt?root=womb"))

(define-record-type* <gnu-package-descriptor>
  gnu-package-descriptor
  make-gnu-package-descriptor

  gnu-package-descriptor?

  (name             gnu-package-name)
  (mundane-name     gnu-package-mundane-name)
  (copyright-holder gnu-package-copyright-holder)
  (savannah         gnu-package-savannah)
  (fsd              gnu-package-fsd)
  (language         gnu-package-language)
  (logo             gnu-package-logo)
  (doc-category     gnu-package-doc-category)
  (doc-summary      gnu-package-doc-summary)
  (doc-urls         gnu-package-doc-urls)
  (download-url     gnu-package-download-url))

(define (official-gnu-packages)
  "Return a list of GNU packages."
  (define %package-line-rx
    (make-regexp "^package: (.+)$"))

  (let ((lst (string-split (http-fetch %package-list-url) #\nl)))
    (filter-map (lambda (line)
                  (and=> (regexp-exec %package-line-rx line)
                         (cut match:substring <> 1)))
                lst)))
  "Return a list of records, which are GNU packages."
  (define (group-package-fields port state)
    ;; Return a list of alists.  Each alist contains fields of a GNU
    ;; package.
    (let ((line        (read-line port))
          (field-rx    (make-regexp "^([[:graph:]]+): (.*)$"))
          (doc-urls-rx (make-regexp "^doc-url: (.*)$"))
          (end-rx      (make-regexp "^# End. .+Do not remove this line.+")))

      (define (match-field str)
        ;; Packages are separated by empty strings.  If STR is an
        ;; empty string, create a new list to store fields of a
        ;; different package.  Otherwise, match and create a key-value
        ;; pair.
        (match str
          (""
           (group-package-fields port (cons '() state)))
          (str
           (cond ((regexp-exec doc-urls-rx str)
                  =>
                  (lambda (match)
                    (if (equal? (assoc-ref (first state) "doc-urls") #f)
                        (group-package-fields
                         port (cons (cons (cons "doc-urls"
                                                (list
                                                 (match:substring match 1)))
                                          (first state))
                                    (drop state 1)))
                        (group-package-fields
                         port (cons (cons (cons "doc-urls"
                                                (cons (match:substring match 1)
                                                      (assoc-ref (first state)
                                                                 "doc-urls")))
                                          (assoc-remove! (first state)
                                                         "doc-urls"))
                                    (drop state 1))))))
                 ((regexp-exec field-rx str)
                  =>
                  (lambda (match)
                    (group-package-fields
                     port (cons (cons (cons (match:substring match 1)
                                            (match:substring match 2))
                                      (first state))
                                (drop state 1)))))
                 (else (group-package-fields port state))))))

      (if (or (eof-object? line)
              (regexp-exec end-rx line)) ; don't include dummy fields
          (remove null-list? state)
          (match-field line))))

  (define (alist->record alist make keys)
    ;; Apply MAKE, which should be a syntactic constructor, to the
    ;; values associated with KEYS in ALIST.
    (let ((args (map (cut assoc-ref alist <>) keys)))
      (apply make args)))

  (reverse
   (map (lambda (alist)
          (alist->record alist
                         make-gnu-package-descriptor
                         (list "package" "mundane-name" "copyright-holder"
                               "savannah" "fsd" "language" "logo"
                               "doc-category" "doc-summary" "doc-urls"
                               "download-url")))
        (group-package-fields (http-fetch %package-list-url)
                              '(())))))

(define (find-packages regexp)
  "Find GNU packages which satisfy REGEXP."
  (let ((name-rx (make-regexp regexp)))
    (filter (lambda (package)
              (false-if-exception
               (regexp-exec name-rx (gnu-package-name package))))
            (official-gnu-packages))))

(define gnu-package?
  (memoize
   (lambda (package)
     "Return true if PACKAGE is a GNU package.  This procedure may access the
network to check in GNU's database."
     ;; TODO: Find a way to determine that a package is non-GNU without going
     ;; through the network.
     (let ((url  (and=> (package-source package) origin-uri))
           (name (package-name package)))
       (or (and (string? url) (string-prefix? "mirror://gnu" url))
           (and (member name (map gnu-package-name (official-gnu-packages)))
                #t))))))


;;;
;;; Latest release.


@@ 119,43 250,45 @@ pairs.  Example: (\"mit-scheme-9.0.1\" . \"/gnu/mit-scheme/stable.pkg/9.0.1\"). 
    (let ((end (string-contains tarball ".tar")))
      (substring tarball 0 end)))

  (define (release-file file)
    ;; Return #f if FILE is not a release tarball, otherwise return
    ;; PACKAGE-VERSION.
    (and (not (string-suffix? ".sig" file))
         (regexp-exec release-rx file)
         (not (regexp-exec alpha-rx file))
         (let ((s (sans-extension file)))
           (and (regexp-exec %package-name-rx s) s))))

  (let-values (((server directory) (ftp-server/directory project)))
    (define conn (ftp-open server))

    (let loop ((directories (list directory))
               (result      '()))
      (if (null? directories)
          (begin
            (ftp-close conn)
            result)
          (let* ((directory (car directories))
                 (files     (ftp-list conn directory))
                 (subdirs   (filter-map (lambda (file)
                                          (match file
                                            ((name 'directory . _) name)
                                            (_ #f)))
                                        files)))
            (loop (append (map (cut string-append directory "/" <>)
                               subdirs)
                          (cdr directories))
                  (append
                   ;; Filter out signatures, deltas, and files which
                   ;; are potentially not releases of PROJECT--e.g.,
                   ;; in /gnu/guile, filter out guile-oops and
                   ;; guile-www; in mit-scheme, filter out binaries.
                   (filter-map (lambda (file)
                                 (match file
                                   ((file 'file . _)
                                    (and (not (string-suffix? ".sig" file))
                                         (regexp-exec release-rx file)
                                         (not (regexp-exec alpha-rx file))
                                         (let ((s (sans-extension file)))
                                           (and (regexp-exec
                                                 %package-name-rx s)
                                                (cons s directory)))))
                                   (_ #f)))
                               files)
                   result)))))))
      (match directories
        (()
         (ftp-close conn)
         result)
        ((directory rest ...)
         (let* ((files   (ftp-list conn directory))
                (subdirs (filter-map (match-lambda
                                      ((name 'directory . _) name)
                                      (_ #f))
                                     files)))
           (loop (append (map (cut string-append directory "/" <>)
                              subdirs)
                         rest)
                 (append
                  ;; Filter out signatures, deltas, and files which
                  ;; are potentially not releases of PROJECT--e.g.,
                  ;; in /gnu/guile, filter out guile-oops and
                  ;; guile-www; in mit-scheme, filter out binaries.
                  (filter-map (match-lambda
                                ((file 'file . _)
                                 (and=> (release-file file)
                                        (cut cons <> directory)))
                                (_ #f))
                              files)
                  result))))))))

(define (latest-release project)
  "Return (\"FOO-X.Y\" . \"/bar/foo\") or #f."

M guix/licenses.scm => guix/licenses.scm +11 -1
@@ 39,7 39,7 @@
            psfl public-domain
            qpl
            vim
            x11
            x11 x11-style
            zlib
            fsf-free))



@@ 236,6 236,16 @@ which may be a file:// URI pointing the package's tree."
           "http://directory.fsf.org/wiki/License:X11"
           "https://www.gnu.org/licenses/license-list#X11License"))

(define* (x11-style uri #:optional (comment ""))
  "Return an X11-style license, whose full text can be found at URI,
which may be a file:// URI pointing the package's tree."
  (license "X11-style"
           uri
           (string-append
            "This is an X11-style, non-copyleft free software license.  "
            "Check the URI for details.  "
            comment)))

(define zlib
  (license "Zlib"
           "http://www.gzip.org/zlib/zlib_license.html"

M guix/packages.scm => guix/packages.scm +1 -1
@@ 135,7 135,7 @@ representation."

  (synopsis package-synopsis)                    ; one-line description
  (description package-description)              ; one or two paragraphs
  (license package-license (default '()))
  (license package-license)
  (home-page package-home-page)
  (platforms package-platforms (default '()))
  (maintainers package-maintainers (default '()))

M guix/scripts/download.scm => guix/scripts/download.scm +24 -23
@@ 110,26 110,27 @@ and the hash of its contents.\n"))
                 (alist-cons 'argument arg result))
               %default-options))

  (let* ((opts  (parse-options))
         (store (open-connection))
         (arg   (assq-ref opts 'argument))
         (uri   (or (string->uri arg)
                    (leave (_ "guix-download: ~a: failed to parse URI~%")
                           arg)))
         (path  (case (uri-scheme uri)
                  ((file)
                   (add-to-store store (basename (uri-path uri))
                                 #f "sha256" (uri-path uri)))
                  (else
                   (fetch-and-store store
                                    (cut url-fetch arg <>
                                         #:mirrors %mirrors)
                                    (basename (uri-path uri))))))
         (hash  (call-with-input-file
                    (or path
                        (leave (_ "guix-download: ~a: download failed~%")
                               arg))
                  (compose sha256 get-bytevector-all)))
         (fmt   (assq-ref opts 'format)))
    (format #t "~a~%~a~%" path (fmt hash))
    #t))
  (with-error-handling
    (let* ((opts  (parse-options))
           (store (open-connection))
           (arg   (assq-ref opts 'argument))
           (uri   (or (string->uri arg)
                      (leave (_ "guix-download: ~a: failed to parse URI~%")
                             arg)))
           (path  (case (uri-scheme uri)
                    ((file)
                     (add-to-store store (basename (uri-path uri))
                                   #f "sha256" (uri-path uri)))
                    (else
                     (fetch-and-store store
                                      (cut url-fetch arg <>
                                           #:mirrors %mirrors)
                                      (basename (uri-path uri))))))
           (hash  (call-with-input-file
                      (or path
                          (leave (_ "guix-download: ~a: download failed~%")
                                 arg))
                    (compose sha256 get-bytevector-all)))
           (fmt   (assq-ref opts 'format)))
      (format #t "~a~%~a~%" path (fmt hash))
      #t)))

M guix/scripts/package.scm => guix/scripts/package.scm +85 -2
@@ 39,6 39,7 @@
  #:use-module (gnu packages)
  #:use-module ((gnu packages base) #:select (guile-final))
  #:use-module ((gnu packages bootstrap) #:select (%bootstrap-guile))
  #:use-module (guix gnu-maintenance)
  #:export (guix-package))

(define %store


@@ 266,6 267,47 @@ matching packages."
                       (assoc-ref (derivation-outputs drv) sub-drv))))
         `(,name ,out))))))

(define-syntax-rule (waiting exp fmt rest ...)
  "Display the given message while EXP is being evaluated."
  (let* ((message (format #f fmt rest ...))
         (blank   (make-string (string-length message) #\space)))
    (display message (current-error-port))
    (force-output (current-error-port))
    (let ((result exp))
      ;; Clear the line.
      (display #\cr (current-error-port))
      (display blank (current-error-port))
      (display #\cr (current-error-port))
      (force-output (current-error-port))
      exp)))

(define (check-package-freshness package)
  "Check whether PACKAGE has a newer version available upstream, and report
it."
  ;; TODO: Automatically inject the upstream version when desired.

  (catch #t
    (lambda ()
      (when (false-if-exception (gnu-package? package))
        (let ((name      (package-name package))
              (full-name (package-full-name package)))
          (match (waiting (latest-release name)
                          (_ "looking for the latest release of GNU ~a...") name)
            ((latest-version . _)
             (when (version>? latest-version full-name)
               (format (current-error-port)
                       (_ "~a: note: using ~a \
but ~a is available upstream~%")
                       (location->string (package-location package))
                       full-name latest-version)))
            (_ #t)))))
    (lambda (key . args)
      ;; Silently ignore networking errors rather than preventing
      ;; installation.
      (case key
        ((getaddrinfo-error ftp-error) #f)
        (else (apply throw key args))))))


;;;
;;; Command-line options.


@@ 510,6 552,44 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
          ,path
          ,(canonicalize-deps deps))))

    (define (show-what-to-remove/install remove install dry-run?)
      ;; Tell the user what's going to happen in high-level terms.
      ;; TODO: Report upgrades more clearly.
      (match remove
        (((name version _ path _) ..1)
         (let ((len    (length name))
               (remove (map (cut format #f "  ~a-~a\t~a" <> <> <>)
                            name version path)))
           (if dry-run?
               (format (current-error-port)
                       (N_ "The following package would be removed:~% ~{~a~%~}~%"
                           "The following packages would be removed:~% ~{~a~%~}~%"
                           len)
                       remove)
               (format (current-error-port)
                       (N_ "The following package will be removed:~% ~{~a~%~}~%"
                           "The following packages will be removed:~% ~{~a~%~}~%"
                           len)
                       remove))))
        (_ #f))
      (match install
        (((name version _ path _) ..1)
         (let ((len     (length name))
               (install (map (cut format #f "  ~a-~a\t~a" <> <> <>)
                             name version path)))
           (if dry-run?
               (format (current-error-port)
                       (N_ "The following package would be installed:~% ~{~a~%~}~%"
                           "The following packages would be installed:~% ~{~a~%~}~%"
                           len)
                       install)
               (format (current-error-port)
                       (N_ "The following package will be installed:~% ~{~a~%~}~%"
                           "The following packages will be installed:~% ~{~a~%~}~%"
                           len)
                       install))))
        (_ #f)))

    ;; First roll back if asked to.
    (if (and (assoc-ref opts 'roll-back?) (not dry-run?))
        (begin


@@ 547,6 627,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
                                      ((name version sub-drv
                                             (? package? package)
                                             (deps ...))
                                       (check-package-freshness package)
                                       (package-derivation (%store) package))
                                      (_ #f))
                                     install))


@@ 576,6 657,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
                                       package)
                                      (_ #f))
                                     opts))
               (remove*  (filter-map (cut assoc <> installed) remove))
               (packages (append install*
                                 (fold (lambda (package result)
                                         (match package


@@ 587,6 669,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
          (when (equal? profile %current-profile)
            (ensure-default-profile))

          (show-what-to-remove/install remove* install* dry-run?)
          (show-what-to-build (%store) drv dry-run?)

          (or dry-run?


@@ 669,8 752,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))

  (let ((opts (parse-options)))
    (or (process-query opts)
        (parameterize ((%store (open-connection)))
          (with-error-handling
        (with-error-handling
          (parameterize ((%store (open-connection)))
            (parameterize ((%guile-for-build
                            (package-derivation (%store)
                                                (if (assoc-ref opts 'bootstrap?)

M guix/scripts/pull.scm => guix/scripts/pull.scm +3 -3
@@ 194,9 194,9 @@ Download and deploy the latest version of Guix.\n"))
                 (leave (_ "~A: unexpected argument~%") arg))
               %default-options))

  (let ((opts  (parse-options))
        (store (open-connection)))
    (with-error-handling
  (with-error-handling
    (let ((opts  (parse-options))
          (store (open-connection)))
      (let ((tarball (download-and-store store)))
        (unless tarball
          (leave (_ "failed to download up-to-date source, exiting\n")))

M guix/snix.scm => guix/snix.scm +7 -4
@@ 277,7 277,7 @@ ATTRIBUTE is true, only that attribute is considered."
             %nix-instantiate "--strict" "--eval-only" "--xml"

             ;; Pass a dummy `crossSystem' argument so that `buildInputs' and
             ;; `buildNativeInputs' are not coalesced.
             ;; `nativeBuildInputs' are not coalesced.
             ;; XXX: This is hacky and has other problems.
             ;"--arg" "crossSystem" cross-system



@@ 423,12 423,15 @@ location of DERIVATION."
             (build-system gnu-build-system)

             ;; When doing a native Nixpkgs build, `buildInputs' is empty and
             ;; everything is in `buildNativeInputs'.  So we can't distinguish
             ;; everything is in `nativeBuildInputs'.  So we can't distinguish
             ;; between both, here.
             ;;
             ;; Note that `nativeBuildInputs' was renamed from
             ;; `buildNativeInputs' in Nixpkgs sometime around March 2013.
             ,@(maybe-inputs 'inputs
                             (convert-inputs "buildNativeInputs"))
                             (convert-inputs "nativeBuildInputs"))
             ,@(maybe-inputs 'propagated-inputs
                             (convert-inputs "propagatedBuildNativeInputs"))
                             (convert-inputs "propagatedNativeBuildInputs"))

             (home-page ,(and=> (find-attribute-by-name "homepage" meta)
                                attribute-value))

M guix/store.scm => guix/store.scm +39 -11
@@ 39,6 39,9 @@
            nix-server-socket

            &nix-error nix-error?
            &nix-connection-error nix-connection-error?
            nix-connection-error-file
            nix-connection-error-code
            &nix-protocol-error nix-protocol-error?
            nix-protocol-error-message
            nix-protocol-error-status


@@ 231,8 234,19 @@
(define write-store-path-list write-string-list)
(define read-store-path-list read-string-list)

(define (write-contents file p)
  "Write the contents of FILE to output port P."
(define (write-contents file p size)
  "Write SIZE bytes from FILE to output port P."
  (define (call-with-binary-input-file file proc)
    ;; Open FILE as a binary file.  This avoids scan-for-encoding, and thus
    ;; avoids any initial buffering.  Disable file name canonicalization to
    ;; avoid stat'ing like crazy.
    (with-fluids ((%file-port-name-canonicalization #f))
      (let ((port (open-file file "rb")))
        (catch #t (cut proc port)
          (lambda args
            (close-port port)
            (apply throw args))))))

  (define (dump in size)
    (define buf-size 65536)
    (define buf (make-bytevector buf-size))


@@ 247,13 261,14 @@
                  (put-bytevector p buf 0 read)
                  (loop (- left read))))))))

  (let ((size (stat:size (lstat file))))
    (write-string "contents" p)
    (write-long-long size p)
    (call-with-input-file file
      (lambda (p)
        (dump p size)))
    (write-padding size p)))
  (write-string "contents" p)
  (write-long-long size p)
  (call-with-binary-input-file file
    ;; Use `sendfile' when available (Guile 2.0.8+).
    (if (compile-time-value (defined? 'sendfile))
        (cut sendfile p <> size 0)
        (cut dump <> size)))
  (write-padding size p))

(define (write-file f p)
  (define %archive-version-1 "nix-archive-1")


@@ 271,7 286,7 @@
             (begin
               (write-string "executable" p)
               (write-string "" p)))
         (write-contents f p))
         (write-contents f p (stat:size s)))
        ((directory)
         (write-string "type" p)
         (write-string "directory" p)


@@ 373,6 388,11 @@
(define-condition-type &nix-error &error
  nix-error?)

(define-condition-type &nix-connection-error &nix-error
  nix-connection-error?
  (file   nix-connection-error-file)
  (errno  nix-connection-error-code))

(define-condition-type &nix-protocol-error &nix-error
  nix-protocol-error?
  (message nix-protocol-error-message)


@@ 392,7 412,15 @@ operate, should the disk become full.  Return a server object."
    ;; Enlarge the receive buffer.
    (setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024))

    (connect s a)
    (catch 'system-error
      (cut connect s a)
      (lambda args
        ;; Translate the error to something user-friendly.
        (let ((errno (system-error-errno args)))
          (raise (condition (&nix-connection-error
                             (file file)
                             (errno errno)))))))

    (write-int %worker-magic-1 s)
    (let ((r (read-int s)))
      (and (eqv? r %worker-magic-2)

M guix/ui.scm => guix/ui.scm +4 -0
@@ 111,6 111,10 @@ General help using GNU software: <http://www.gnu.org/gethelp/>"))
               (leave (_ "~a:~a:~a: error: package `~a' has an invalid input: ~s~%")
                      file line column
                      (package-full-name package) input)))
            ((nix-connection-error? c)
             (leave (_ "error: failed to connect to `~a': ~a~%")
                    (nix-connection-error-file c)
                    (strerror (nix-connection-error-code c))))
            ((nix-protocol-error? c)
             ;; FIXME: Server-provided error messages aren't i18n'd.
             (leave (_ "error: build failed: ~a~%")

M hydra.scm => hydra.scm +16 -1
@@ 1,5 1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 21,6 21,21 @@
;;; tool.
;;;

;; Attempt to use our very own Guix modules.
(eval-when (compile load eval)

  ;; Ignore any available .go, and force recompilation.  This is because our
  ;; checkout in the store has mtime set to the epoch, and thus .go files look
  ;; newer, even though they may not correspond.
  (set! %fresh-auto-compile #t)

  (and=> (assoc-ref (current-source-location) 'filename)
         (lambda (file)
           (let ((dir (dirname file)))
             (format (current-error-port) "prepending ~s to the load path~%"
                     dir)
             (set! %load-path (cons dir %load-path))))))

(use-modules (guix store)
             (guix packages)
             ((guix utils) #:select (%current-system))

M release.nix => release.nix +20 -9
@@ 42,12 42,23 @@ let
        if builtins.isAttrs drv
        then pkgs.lib.overrideDerivation (pythonKludge drv) (args: {
          __noChroot = true;
          buildNativeInputs = map unchroot args.buildNativeInputs;
          propagatedBuildNativeInputs =
            map unchroot args.propagatedBuildNativeInputs;
          nativeBuildInputs = map unchroot args.nativeBuildInputs;
          propagatedNativeBuildInputs =
            map unchroot args.propagatedNativeBuildInputs;
        })
        else drv;

  # Return a Nixpkgs with some derivations "unchrooted".
  unchrootedNixpkgs = system:
    import nixpkgs {
      # XXX: Hack to make sure these ones also get "unchrooted".
      config.packageOverrides = pkgs: {
        zlib = unchroot pkgs.zlib;
        libunistring = unchroot pkgs.libunistring;
      };
      inherit system;
    };

  # 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.


@@ 67,7 78,7 @@ let
  jobs = {
    tarball =
      unchroot
      (let pkgs = import nixpkgs {}; in
      (let pkgs = unchrootedNixpkgs builtins.currentSystem; in
      pkgs.releaseTools.sourceTarball {
        name = "guix-tarball";
        src = <guix>;


@@ 82,7 93,7 @@ let
          in
            [ git_light ] ++
            (with pkgs; [ guile sqlite bzip2 libgcrypt ]);
        buildNativeInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
        nativeBuildInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
        preAutoconf = ''git config submodule.nix.url "${<nix>}"'';
        configureFlags =
          [ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"


@@ 94,11 105,11 @@ let
      { system ? builtins.currentSystem }:

      unchroot
      (let pkgs = import nixpkgs { inherit system; }; in
      (let pkgs = unchrootedNixpkgs system; in
      pkgs.releaseTools.nixBuild {
        name = "guix";
        buildInputs = with pkgs; [ guile sqlite bzip2 libgcrypt ];
        buildNativeInputs = [ pkgs.pkgconfig ];
        nativeBuildInputs = [ pkgs.pkgconfig ];
        src = jobs.tarball;
        configureFlags =
          [ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"


@@ 125,7 136,7 @@ let

      unchroot
      (let
        pkgs = import nixpkgs { inherit system; };
        pkgs = unchrootedNixpkgs system;
        build = jobs.build { inherit system; };
      in
        pkgs.lib.overrideDerivation build ({ configureFlags, ... }: {


@@ 144,7 155,7 @@ let
        { system ? builtins.currentSystem }:

        let
          pkgs = import nixpkgs { inherit system; };
          pkgs = unchrootedNixpkgs system;
          guix = jobs.build { inherit system; };
        in
          # XXX: We have no way to tell the Nix code to swallow the .drv

M tests/packages.scm => tests/packages.scm +1 -1
@@ 49,7 49,7 @@
  (package (name name*) (version "0") (source #f)
           (build-system gnu-build-system)
           (synopsis #f) (description #f)
           (home-page #f)
           (home-page #f) (license #f)
           extra-fields ...))

(test-assert "package-transitive-inputs"