summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-01-18 01:06:24 +0100
committerLudovic Courtès <ludo@gnu.org>2013-01-18 01:07:31 +0100
commit1ffa7090b99dfd2f54fa883929c5e78d7852657a (patch)
tree1c8bd191e31212e172b3e9158408cccd571a5020 /gnu/packages
parent08ba7ff318720d926215de83daed0da628908ca3 (diff)
downloadguix-1ffa7090b99dfd2f54fa883929c5e78d7852657a.tar.gz
distro: Change the module name space to (gnu ...).
* distro: Rename to...
* gnu: ... this.  Update module names accordingly.
* Makefile.am: Adjust accordingly.
* po/POTFILES.in: Likewise.
* distro.scm: Search for files under /gnu/packages instead of
  /distro/packages.
* gnu/packages/base.scm (ld-wrapper-boot3): Likewise.
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/acl.scm66
-rw-r--r--gnu/packages/algebra.scm193
-rw-r--r--gnu/packages/aspell.scm54
-rw-r--r--gnu/packages/attr.scm77
-rw-r--r--gnu/packages/autotools.scm144
-rw-r--r--gnu/packages/base.scm1082
-rw-r--r--gnu/packages/bash.scm110
-rw-r--r--gnu/packages/bdb.scm57
-rw-r--r--gnu/packages/bdw-gc.scm60
-rw-r--r--gnu/packages/bison.scm57
-rw-r--r--gnu/packages/bootstrap.scm378
-rwxr-xr-xgnu/packages/bootstrap/i686-linux/bashbin0 -> 1331220 bytes
-rwxr-xr-xgnu/packages/bootstrap/i686-linux/mkdirbin0 -> 725756 bytes
-rwxr-xr-xgnu/packages/bootstrap/i686-linux/tarbin0 -> 1140196 bytes
-rwxr-xr-xgnu/packages/bootstrap/i686-linux/xzbin0 -> 865372 bytes
-rwxr-xr-xgnu/packages/bootstrap/x86_64-linux/bashbin0 -> 1419928 bytes
-rwxr-xr-xgnu/packages/bootstrap/x86_64-linux/mkdirbin0 -> 799312 bytes
-rwxr-xr-xgnu/packages/bootstrap/x86_64-linux/tarbin0 -> 1229888 bytes
-rwxr-xr-xgnu/packages/bootstrap/x86_64-linux/xzbin0 -> 926000 bytes
-rw-r--r--gnu/packages/check.scm48
-rw-r--r--gnu/packages/compression.scm200
-rw-r--r--gnu/packages/cpio.scm58
-rw-r--r--gnu/packages/cyrus-sasl.scm57
-rw-r--r--gnu/packages/ddrescue.scm60
-rw-r--r--gnu/packages/dejagnu.scm88
-rw-r--r--gnu/packages/ed.scm53
-rw-r--r--gnu/packages/emacs.scm93
-rw-r--r--gnu/packages/file.scm44
-rw-r--r--gnu/packages/flex.scm63
-rw-r--r--gnu/packages/gawk.scm71
-rw-r--r--gnu/packages/gdb.scm65
-rw-r--r--gnu/packages/gdbm.scm56
-rw-r--r--gnu/packages/gettext.scm78
-rw-r--r--gnu/packages/global.scm58
-rw-r--r--gnu/packages/gnupg.scm168
-rw-r--r--gnu/packages/gnutls.scm98
-rw-r--r--gnu/packages/gperf.scm55
-rw-r--r--gnu/packages/gsasl.scm113
-rw-r--r--gnu/packages/guile.scm197
-rw-r--r--gnu/packages/help2man.scm52
-rw-r--r--gnu/packages/icu4c.scm66
-rw-r--r--gnu/packages/idutils.scm65
-rw-r--r--gnu/packages/indent.scm44
-rw-r--r--gnu/packages/ld-wrapper.scm147
-rw-r--r--gnu/packages/less.scm51
-rw-r--r--gnu/packages/libffi.scm73
-rw-r--r--gnu/packages/libidn.scm51
-rw-r--r--gnu/packages/libjpeg.scm57
-rw-r--r--gnu/packages/libsigsegv.scm47
-rw-r--r--gnu/packages/libtiff.scm65
-rw-r--r--gnu/packages/libunistring.scm58
-rw-r--r--gnu/packages/libusb.scm44
-rw-r--r--gnu/packages/linux.scm259
-rw-r--r--gnu/packages/lout.scm132
-rw-r--r--gnu/packages/lsh.scm126
-rw-r--r--gnu/packages/m4.scm87
-rw-r--r--gnu/packages/mailutils.scm106
-rw-r--r--gnu/packages/make-bootstrap.scm562
-rw-r--r--gnu/packages/mit-krb5.scm69
-rw-r--r--gnu/packages/multiprecision.scm124
-rw-r--r--gnu/packages/mysql.scm87
-rw-r--r--gnu/packages/nano.scm52
-rw-r--r--gnu/packages/ncurses.scm128
-rw-r--r--gnu/packages/nettle.scm60
-rw-r--r--gnu/packages/openssl.scm68
-rw-r--r--gnu/packages/patches/bigloo-gc-shebangs.patch17
-rw-r--r--gnu/packages/patches/binutils-ld-new-dtags.patch16
-rw-r--r--gnu/packages/patches/cpio-gets-undeclared.patch45
-rw-r--r--gnu/packages/patches/diffutils-gets-undeclared.patch71
-rw-r--r--gnu/packages/patches/emacs-configure-sh.patch14
-rw-r--r--gnu/packages/patches/findutils-absolute-paths.patch29
-rw-r--r--gnu/packages/patches/flex-bison-tests.patch24
-rw-r--r--gnu/packages/patches/gawk-shell.patch34
-rw-r--r--gnu/packages/patches/gettext-gets-undeclared.patch77
-rw-r--r--gnu/packages/patches/glibc-bootstrap-system.patch28
-rw-r--r--gnu/packages/patches/glibc-no-ld-so-cache.patch53
-rw-r--r--gnu/packages/patches/guile-1.8-cpp-4.5.patch24
-rw-r--r--gnu/packages/patches/guile-default-utf8.patch111
-rw-r--r--gnu/packages/patches/guile-relocatable.patch70
-rw-r--r--gnu/packages/patches/libtool-skip-tests.patch37
-rw-r--r--gnu/packages/patches/lsh-guile-compat.patch9
-rw-r--r--gnu/packages/patches/lsh-no-root-login.patch16
-rw-r--r--gnu/packages/patches/lsh-pam-service-name.patch14
-rw-r--r--gnu/packages/patches/m4-gets-undeclared.patch45
-rw-r--r--gnu/packages/patches/m4-readlink-EINVAL.patch18
-rw-r--r--gnu/packages/patches/m4-s_isdir.patch14
-rw-r--r--gnu/packages/patches/make-impure-dirs.patch40
-rw-r--r--gnu/packages/patches/perl-no-sys-dirs.patch156
-rw-r--r--gnu/packages/patches/procps-make-3.82.patch14
-rw-r--r--gnu/packages/patches/readline-link-ncurses.patch18
-rw-r--r--gnu/packages/patches/shishi-gets-undeclared.patch71
-rw-r--r--gnu/packages/patches/tar-gets-undeclared.patch26
-rw-r--r--gnu/packages/perl.scm73
-rw-r--r--gnu/packages/pkg-config.scm51
-rw-r--r--gnu/packages/pth.scm61
-rw-r--r--gnu/packages/python.scm58
-rw-r--r--gnu/packages/readline.scm79
-rw-r--r--gnu/packages/recutils.scm57
-rw-r--r--gnu/packages/rsync.scm51
-rw-r--r--gnu/packages/scheme.scm168
-rw-r--r--gnu/packages/shishi.scm71
-rw-r--r--gnu/packages/system.scm91
-rw-r--r--gnu/packages/tcl.scm109
-rw-r--r--gnu/packages/texinfo.scm61
-rw-r--r--gnu/packages/time.scm66
-rw-r--r--gnu/packages/wget.scm61
-rw-r--r--gnu/packages/which.scm48
-rw-r--r--gnu/packages/xml.scm44
-rw-r--r--gnu/packages/zile.scm66
109 files changed, 8987 insertions, 0 deletions
diff --git a/gnu/packages/acl.scm b/gnu/packages/acl.scm
new file mode 100644
index 0000000000..1cba608c8c
--- /dev/null
+++ b/gnu/packages/acl.scm
@@ -0,0 +1,66 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 acl)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages attr)
+  #:use-module (gnu packages perl)
+  #:use-module ((gnu packages gettext)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public acl
+  (package
+    (name "acl")
+    (version "2.2.51")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://savannah/acl/acl-"
+                          version ".src.tar.gz"))
+      (sha256
+       (base32
+        "09aj30m49ivycl3irram8c3givc0crivjm3ymw0nhfaxrwhlb186"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (alist-cons-after
+        'configure 'patch-makefile-SHELL
+        (lambda _
+          (patch-makefile-SHELL "include/buildmacros"))
+        (alist-replace
+         'check
+         (lambda _
+           (system* "make" "tests" "-C" "test")
+
+           ;; XXX: Ignore the test result since this is
+           ;; dependent on the underlying file system.
+           #t)
+         %standard-phases))))
+    (inputs `(("attr" ,attr)
+              ("gettext" ,guix:gettext)
+              ("perl" ,perl)))
+    (home-page
+     "http://savannah.nongnu.org/projects/acl")
+    (synopsis
+     "Library and tools for manipulating access control lists")
+    (description
+     "Library and tools for manipulating access control lists.")
+    (license '(gpl2+ lgpl2.1+))))
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
new file mode 100644
index 0000000000..088e32bc0c
--- /dev/null
+++ b/gnu/packages/algebra.scm
@@ -0,0 +1,193 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013 Andreas Enge <andreas@enge.fr>
+;;; 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 algebra)
+  #:use-module (distro)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages flex)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+
+(define-public mpfrcx
+  (package
+   (name "mpfrcx")
+   (version "0.4.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "http://www.multiprecision.org/mpfrcx/download/mpfrcx-"
+                  version ".tar.gz"))
+            (sha256
+             (base32
+              "1rrc75chxyicqjgg5mfhgbz7p9mx1fgh0qlx14a82m25vfhifnd1"))))
+   (build-system gnu-build-system)
+   (inputs `(("gmp" ,gmp)
+             ("mpfr" ,mpfr)
+             ("mpc"  ,mpc)))
+   (synopsis "mpfrcx, a library for the arithmetic of univariate polynomials
+over arbitrary precision real or complex numbers")
+   (description
+    "mpfrcx is a library for the arithmetic of univariate polynomials over
+arbitrary precision real (mpfr) or complex (mpc) numbers, without control
+on the rounding. For the time being, only the few functions needed to
+implement the floating point approach to complex multiplication are
+implemented. On the other hand, these comprise asymptotically fast
+multiplication routines such as Toom–Cook and the FFT. ")
+   (license lgpl2.1+)
+   (home-page "http://mpfrcx.multiprecision.org/")))
+
+(define-public fplll
+  (package
+   (name "fplll")
+   (version "4.0.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "http://perso.ens-lyon.fr/damien.stehle/fplll/libfplll-"
+                  version ".tar.gz"))
+            (sha256 (base32
+                     "122bpqdlikshhd7nmq0l5qfc0agyk7x21gvplv1l9hb77l8cy9rw"))))
+   (build-system gnu-build-system)
+   (inputs `(("gmp" ,gmp)
+             ("mpfr" ,mpfr)))
+   (synopsis "fplll, a library for LLL-reduction of euclidean lattices")
+   (description
+    "fplll LLL-reduces euclidean lattices. Since version 3, it can also
+solve the shortest vector problem.")
+   (license lgpl2.1+)
+   (home-page "http://perso.ens-lyon.fr/damien.stehle/fplll/")))
+
+(define-public gsl
+  (package
+    (name "gsl")
+    (version "1.15")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/gsl/gsl-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "18qf6jzz1r3mzb5qynywv4xx3z9g61hgkbpkdrhbgqh2g7jhgfc5"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.gnu.org/software/gsl/")
+    (synopsis "The GNU Scientific Library, a large numerical library")
+    (description
+     "The GNU Scientific Library (GSL) is a numerical library for C
+and C++ programmers.  It is free software under the GNU General
+Public License.
+
+The library provides a wide range of mathematical routines such
+as random number generators, special functions and least-squares
+fitting.  There are over 1000 functions in total with an
+extensive test suite.")
+    (license gpl3+)))
+
+(define-public pari-gp
+  (package
+   (name "pari-gp")
+   (version "2.5.3")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-"
+                  version ".tar.gz"))
+            (sha256 (base32
+                     "0zsjccnnv00kwj2gk3ww2v530kjin1rgj8p8hbl4pwcnwc7m68gl"))))
+   (build-system gnu-build-system)
+   (inputs `(("gmp" ,gmp)
+             ("perl" ,perl)
+             ("readline" ,readline)))
+   (arguments
+    (lambda (system)
+      `(#:make-flags '("gp")
+;; FIXME: building the documentation requires tex; once this is available,
+;; replace "gp" by "all"
+        #:test-target "dobench"
+        #:phases
+        (alist-replace
+         'configure
+         (lambda* (#:key inputs outputs #:allow-other-keys)
+           (let ((out (assoc-ref outputs "out"))
+                 (readline (assoc-ref inputs "readline"))
+                 (gmp (assoc-ref inputs "gmp")))
+             (zero?
+              (system* "./Configure"
+                       (string-append "--prefix=" out)
+                       (string-append "--with-readline=" readline)
+                       (string-append "--with-gmp=" gmp)))))
+;; FIXME: readline and gmp will be detected automatically in the next
+;; stable release
+         %standard-phases))))
+   (synopsis "PARI/GP, a computer algebra system for number theory")
+   (description
+    "PARI/GP is a widely used computer algebra system designed for fast
+computations in number theory (factorisations, algebraic number theory,
+elliptic curves...), but it also contains a large number of other useful
+functions to compute with mathematical entities such as matrices,
+polynomials, power series, algebraic numbers, etc., and a lot of
+transcendental functions.
+PARI is also available as a C library to allow for faster computations.")
+   (license gpl2+)
+   (home-page "http://pari.math.u-bordeaux.fr/")))
+
+(define-public bc
+  (package
+    (name "bc")
+    (version "1.06")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/bc/bc-" version ".tar.gz"))
+             (sha256
+              (base32
+               "0cqf5jkwx6awgd2xc2a0mkpxilzcfmhncdcfg7c9439wgkqxkxjf"))))
+    (build-system gnu-build-system)
+    (inputs `(("readline" ,readline)
+              ("flex" ,flex)))
+    (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.gnu.org/software/bc/")
+    (synopsis "GNU software calculator")
+    (description
+     "bc is an arbitrary precision numeric processing language. Syntax
+is similar to C, but differs in many substantial areas. It supports
+interactive execution of statements.  bc is a utility included in the
+POSIX P1003.2/D11 draft standard.
+
+Since the POSIX document does not specify how bc must be implemented,
+this version does not use the historical method of having bc be a
+compiler for the dc calculator.  This version has a single executable
+that both compiles the language and runs the resulting `byte code'. The
+byte code is not the dc language.")
+    (license gpl2+)))
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
new file mode 100644
index 0000000000..ca0218d814
--- /dev/null
+++ b/gnu/packages/aspell.scm
@@ -0,0 +1,54 @@
+;;; 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 aspell)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages perl))
+
+(define-public aspell
+  (package
+    (name "aspell")
+    (version "0.60.6.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/aspell/aspell-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "1qgn5psfyhbrnap275xjfrzppf5a83fb67gpql0kfqv37al869gm"))))
+    (build-system gnu-build-system)
+    (inputs `(("perl" ,perl)))
+    (home-page "http://aspell.net/")
+    (synopsis
+     "GNU Aspell, A spell checker for many languages")
+    (description
+     "GNU Aspell is a free spell checker designed to eventually replace
+Ispell.  It can either be used as a library or as an independent spell
+checker.  Its main feature is that it does a superior job of suggesting
+possible replacements for a misspelled word than just about any other
+spell checker out there for the English language.  Unlike Ispell, Aspell
+can also easily check documents in UTF-8 without having to use a special
+dictionary.  Aspell will also do its best to respect the current locale
+setting.  Other advantages over Ispell include support for using
+multiple dictionaries at once and intelligently handling personal
+dictionaries when more than one Aspell process is open at once.")
+    (license lgpl2.1+)))
diff --git a/gnu/packages/attr.scm b/gnu/packages/attr.scm
new file mode 100644
index 0000000000..2f8a0e0e65
--- /dev/null
+++ b/gnu/packages/attr.scm
@@ -0,0 +1,77 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2012 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 attr)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages perl)
+  #:use-module ((gnu packages gettext)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public attr
+  (package
+    (name "attr")
+    (version "2.4.46")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://savannah/attr/attr-"
+                          version ".src.tar.gz"))
+      (sha256
+       (base32
+        "07qf6kb2zk512az481bbnsk9jycn477xpva1a726n5pzlzf9pmnw"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (alist-cons-after
+        'configure 'patch-makefile-SHELL
+        (lambda _
+          (patch-makefile-SHELL "include/buildmacros"))
+        (alist-replace
+         'install
+         (lambda _
+           (zero? (system* "make"
+                           "install"
+                           "install-lib"
+                           "install-dev")))
+         (alist-replace
+          'check
+          (lambda _
+            ;; Use the right shell.
+            (substitute* "test/run"
+              (("/bin/sh")
+               (which "bash")))
+
+            (system* "make" "tests" "-C" "test")
+
+            ;; XXX: Ignore the test result since this is dependent on the
+            ;; underlying file system.
+            #t)
+          %standard-phases)))))
+    (inputs `(("perl" ,perl)
+              ("gettext" ,guix:gettext)))
+    (home-page
+     "http://savannah.nongnu.org/projects/attr/")
+    (synopsis
+     "Library and tools for manipulating extended attributes")
+    (description
+     "Portable library and tools for manipulating extended attributes.")
+    (license '(gpl2+ lgpl2.1+))))
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
new file mode 100644
index 0000000000..b5c8b6ec87
--- /dev/null
+++ b/gnu/packages/autotools.scm
@@ -0,0 +1,144 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
+;;; 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 autotools)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages m4)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public autoconf
+  (package
+    (name "autoconf")
+    (version "2.69")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/autoconf/autoconf-"
+                          version ".tar.xz"))
+      (sha256
+       (base32
+        "113nlmidxy9kjr45kg9x3ngar4951mvag1js2a3j8nxcz34wxsv4"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("perl" ,perl)
+       ("m4" ,m4)))
+    ;; XXX: testsuite: 209 and 279 failed. The latter is an impurity. It
+    ;; should use our own "cpp" instead of "/lib/cpp".
+    (arguments `(#:tests? #f))
+    (home-page
+     "http://www.gnu.org/software/autoconf/")
+    (synopsis
+     "GNU Autoconf, a part of the GNU Build System")
+    (description
+     "GNU Autoconf is an extensible package of M4 macros that produce
+shell scripts to automatically configure software source code
+packages.  These scripts can adapt the packages to many kinds of
+UNIX-like systems without manual user intervention.  Autoconf
+creates a configuration script for a package from a template
+file that lists the operating system features that the package
+can use, in the form of M4 macro calls.")
+    (license gpl3+))) ; some files are under GPLv2+
+
+(define-public automake
+  (package
+    (name "automake")
+    (version "1.12.6")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/automake/automake-"
+                          version ".tar.xz"))
+      (sha256
+       (base32
+        "1ynvca8z4aqcwr94rf7j1bfiid2w9w250y9qhnyj9vmi8lhsnd7q"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("autoconf" ,autoconf)
+       ("perl" ,perl)))
+    (home-page
+     "http://www.gnu.org/software/automake/")
+    (synopsis
+     "GNU Automake, a GNU standard-compliant makefile generator")
+    (description
+     "GNU Automake is a tool for automatically generating
+`Makefile.in' files compliant with the GNU Coding
+Standards.  Automake requires the use of Autoconf.")
+    (license gpl2+))) ; some files are under GPLv3+
+
+(define-public libtool
+  (package
+    (name "libtool")
+    (version "2.4.2")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/libtool/libtool-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "0649qfpzkswgcj9vqkkr9rn4nlcx80faxpyqscy2k1x9c94f93dk"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("m4" ,m4)
+                     ("perl" ,perl)))
+
+    ;; Separate binaries from the rest.  During bootstrap, only ltdl is
+    ;; used; not depending on the binaries allows us to avoid retaining
+    ;; a reference to the bootstrap bash.
+    (outputs '("bin"                         ; libtoolize, libtool, etc.
+               "out"))                       ; libltdl.so, ltdl.h, etc.
+
+    (arguments
+     `(#:patches (list (assoc-ref %build-inputs "patch/skip-tests"))
+       #:phases (alist-cons-before
+                 'check 'pre-check
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   ;; Run the test suite in parallel, if possible.
+                   (let ((ncores
+                          (cond
+                           ((getenv "NIX_BUILD_CORES")
+                            =>
+                            (lambda (n)
+                              (if (zero? (string->number n))
+                                  (number->string (current-processor-count))
+                                  n)))
+                           (else "1"))))
+                    (setenv "TESTSUITEFLAGS"
+                            (string-append "-j" ncores)))
+
+                   ;; Path references to /bin/sh.
+                   (let ((bash (assoc-ref inputs "bash")))
+                     (substitute* "tests/testsuite"
+                       (("/bin/sh")
+                        (string-append bash "/bin/bash")))))
+                 %standard-phases)))
+    (inputs `(("patch/skip-tests"
+               ,(search-patch "libtool-skip-tests.patch"))))
+    (synopsis "GNU Libtool, a generic library support script")
+    (description
+     "GNU libtool is a generic library support script.  Libtool hides the
+complexity of using shared libraries behind a consistent, portable interface.
+
+To use libtool, add the new generic library building commands to your
+Makefile, Makefile.in, or Makefile.am.  See the documentation for
+details.")
+    (license gpl3+)
+    (home-page "http://www.gnu.org/software/libtool/")))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
new file mode 100644
index 0000000000..b5a5856609
--- /dev/null
+++ b/gnu/packages/base.scm
@@ -0,0 +1,1082 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012 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 base)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (gnu packages acl)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages bootstrap)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages linux)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (guix utils)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match))
+
+;;; Commentary:
+;;;
+;;; Base packages of the Guix-based GNU user-land software distribution.
+;;;
+;;; Code:
+
+(define-public hello
+  (package
+   (name "hello")
+   (version "2.8")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/hello/hello-" version
+                                ".tar.gz"))
+            (sha256
+             (base32 "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))))
+   (build-system gnu-build-system)
+   (arguments '(#:configure-flags
+                `("--disable-dependency-tracking"
+                  ,(string-append "--with-gawk="  ; for illustration purposes
+                                 (assoc-ref %build-inputs "gawk")))))
+   (inputs `(("gawk" ,gawk)))
+   (synopsis "GNU Hello")
+   (description "Yeah...")
+   (home-page "http://www.gnu.org/software/hello/")
+   (license gpl3+)))
+
+(define-public grep
+  (package
+   (name "grep")
+   (version "2.14")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/grep/grep-"
+                                version ".tar.xz"))
+            (sha256
+             (base32
+              "1qbjb1l7f9blckc5pqy8jlf6482hpx4awn2acmhyf5mv9wfq03p7"))))
+   (build-system gnu-build-system)
+   (synopsis "GNU implementation of the Unix grep command")
+   (description
+    "The grep command searches one or more input files for lines containing a
+match to a specified pattern.  By default, grep prints the matching
+lines.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/grep/")))
+
+(define-public sed
+  (package
+   (name "sed")
+   (version "4.2.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/sed/sed-" version
+                                ".tar.bz2"))
+            (sha256
+             (base32
+              "13wlsb4sf5d5a82xjhxqmdvrrn36rmw5f0pl9qyb9zkvldnb7hra"))))
+   (build-system gnu-build-system)
+   (synopsis "GNU sed, a batch stream editor")
+   (arguments
+    `(#:phases (alist-cons-before
+                'patch-source-shebangs 'patch-test-suite
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((bash (assoc-ref inputs "bash")))
+                    (patch-makefile-SHELL "testsuite/Makefile.tests")
+                    (substitute* '("testsuite/bsd.sh"
+                                   "testsuite/bug-regex9.c")
+                      (("/bin/sh")
+                       (string-append bash "/bin/bash")))))
+                %standard-phases)))
+   (description
+    "Sed (stream editor) isn't really a true text editor or text processor.
+Instead, it is used to filter text, i.e., it takes text input and performs
+some operation (or set of operations) on it and outputs the modified text.
+Sed is typically used for extracting part of a file using pattern matching or
+substituting multiple occurrences of a string within a file.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/sed/")))
+
+(define-public tar
+  (package
+   (name "tar")
+   (version "1.26")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/tar/tar-"
+                                version ".tar.bz2"))
+            (sha256
+             (base32
+              "0hbdkzmchq9ycr2x1pxqdcgdbaxksh8c6ac0jf75jajhcks6jlss"))))
+   (build-system gnu-build-system)
+   (inputs `(("patch/gets" ,(search-patch "tar-gets-undeclared.patch"))))
+   (arguments
+    `(#:patches (list (assoc-ref %build-inputs "patch/gets"))))
+   (synopsis "GNU implementation of the `tar' archiver")
+   (description
+    "The Tar program provides the ability to create tar archives, as well as
+various other kinds of manipulation.  For example, you can use Tar on
+previously created archives to extract files, to store additional files, or
+to update or list files which were already stored.
+
+Initially, tar archives were used to store files conveniently on magnetic
+tape.  The name \"Tar\" comes from this use; it stands for tape archiver.
+Despite the utility's name, Tar can direct its output to available devices,
+files, or other programs (using pipes), it can even access remote devices or
+files (as archives).")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/tar/")))
+
+(define-public patch
+  (package
+   (name "patch")
+   (version "2.6.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/patch/patch-"
+                                version ".tar.xz"))
+            (sha256
+             (base32
+              "18012gxs9wc96izskp1q7bclrwns6rdmkn4jj31c8jbyfz6l5npq"))))
+   (build-system gnu-build-system)
+   (native-inputs '())                      ; FIXME: needs `ed' for the tests
+   (arguments
+    (case-lambda
+      ((system) '(#:tests? #f))
+      ((system cross-system)
+       '(#:configure-flags '("ac_cv_func_strnlen_working=yes")))))
+   (synopsis "GNU Patch, a program to apply differences to files")
+   (description
+    "GNU Patch takes a patch file containing a difference listing produced by
+the diff program and applies those differences to one or more original files,
+producing patched versions.")
+   (license gpl3+)
+   (home-page "http://savannah.gnu.org/projects/patch/")))
+
+(define-public diffutils
+  (package
+   (name "diffutils")
+   (version "3.2")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/diffutils/diffutils-"
+                                version ".tar.xz"))
+            (sha256
+             (base32
+              "0jci0wv68025xd0s0rq4s5qxpx56dd9d730lka63qpzk1rfvfkxb"))))
+   (build-system gnu-build-system)
+   (inputs `(("patch/gets"
+              ,(search-patch "diffutils-gets-undeclared.patch"))))
+   (arguments `(#:patches (list (assoc-ref %build-inputs "patch/gets"))))
+   (synopsis "Programs to find differences among text files")
+   (description
+    "GNU Diffutils is a package of several programs related to finding
+differences between files.
+
+Computer users often find occasion to ask how two files differ. Perhaps one
+file is a newer version of the other file. Or maybe the two files started out
+as identical copies but were changed by different people.
+
+You can use the diff command to show differences between two files, or each
+corresponding file in two directories. diff outputs differences between files
+line by line in any of several formats, selectable by command line
+options. This set of differences is often called a ‘diff’ or ‘patch’. For
+files that are identical, diff normally produces no output; for
+binary (non-text) files, diff normally reports only that they are different.
+
+You can use the cmp command to show the offsets and line numbers where two
+files differ. cmp can also show all the characters that differ between the
+two files, side by side.
+
+You can use the diff3 command to show differences among three files. When two
+people have made independent changes to a common original, diff3 can report
+the differences between the original and the two changed versions, and can
+produce a merged file that contains both persons' changes together with
+warnings about conflicts.
+
+You can use the sdiff command to merge two files interactively.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/diffutils/")))
+
+(define-public findutils
+  (package
+   (name "findutils")
+   (version "4.4.2")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/findutils/findutils-"
+                                version ".tar.gz"))
+            (sha256
+             (base32
+              "0amn0bbwqvsvvsh6drfwz20ydc2czk374lzw5kksbh6bf78k4ks3"))))
+   (build-system gnu-build-system)
+   (native-inputs
+    `(("patch/absolute-paths"
+       ,(search-patch "findutils-absolute-paths.patch"))))
+   (arguments
+    (case-lambda
+      ((system)
+       `(#:patches (list (assoc-ref %build-inputs "patch/absolute-paths"))))
+      ((system cross-system)
+       ;; Work around cross-compilation failure.
+       ;; See <http://savannah.gnu.org/bugs/?27299#comment1>.
+       `(#:configure-flags '("gl_cv_func_wcwidth_works=yes")
+         ,@(arguments cross-system)))))
+   (synopsis "Basic directory searching utilities of the GNU operating
+system")
+   (description
+    "The GNU Find Utilities are the basic directory searching utilities of
+the GNU operating system.  These programs are typically used in conjunction
+with other programs to provide modular and powerful directory search and file
+locating capabilities to other commands.
+
+The tools supplied with this package are:
+
+  * find - search for files in a directory hierarchy;
+  * locate - list files in databases that match a pattern;
+  * updatedb - update a file name database;
+  * xargs - build and execute command lines from standard input.
+")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/findutils/")))
+
+(define-public coreutils
+  (package
+   (name "coreutils")
+   (version "8.20")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/coreutils/coreutils-"
+                                version ".tar.xz"))
+            (sha256
+             (base32
+              "1cly97xdy3v4nbbx631k43smqw0nnpn651kkprs0yyl2cj3pkjyv"))))
+   (build-system gnu-build-system)
+   (inputs `(("acl"  ,acl)
+             ("gmp"  ,gmp)
+             ("perl" ,perl)))                     ; TODO: add SELinux
+   (arguments
+    `(#:parallel-build? #f            ; help2man may be called too early
+      #:phases (alist-cons-before
+                'build 'patch-shell-references
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((bash (assoc-ref inputs "bash")))
+                    (substitute* (cons "src/split.c"
+                                       (find-files "gnulib-tests"
+                                                   "\\.c$"))
+                      (("/bin/sh")
+                       (format #f "~a/bin/sh" bash)))
+                    (substitute* (find-files "tests" "\\.sh$")
+                      (("#!/bin/sh")
+                       (format #f "#!~a/bin/bash" bash)))))
+                %standard-phases)))
+   (synopsis
+    "The basic file, shell and text manipulation utilities of the GNU
+operating system")
+   (description
+    "The GNU Core Utilities are the basic file, shell and text manipulation
+utilities of the GNU operating system.  These are the core utilities which
+are expected to exist on every operating system.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/coreutils/")))
+
+(define-public gnu-make
+  (package
+   (name "make")
+   (version "3.82")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/make/make-" version
+                                ".tar.bz2"))
+            (sha256
+             (base32
+              "0ri98385hsd7li6rh4l5afcq92v8l2lgiaz85wgcfh4w2wzsghg2"))))
+   (build-system gnu-build-system)
+   (native-inputs
+    `(("patch/impure-dirs" ,(search-patch "make-impure-dirs.patch"))))
+   (arguments
+    '(#:patches (list (assoc-ref %build-inputs "patch/impure-dirs"))
+      #:phases (alist-cons-before
+                'build 'set-default-shell
+                (lambda* (#:key inputs #:allow-other-keys)
+                  ;; Change the default shell from /bin/sh.
+                  (let ((bash (assoc-ref inputs "bash")))
+                    (substitute* "job.c"
+                      (("default_shell\\[\\] =.*$")
+                       (format #f "default_shell[] = \"~a/bin/bash\";\n"
+                               bash)))))
+                %standard-phases)))
+   (synopsis "GNU Make, a program controlling the generation of non-source
+files from sources")
+   (description
+    "Make is a tool which controls the generation of executables and other
+non-source files of a program from the program's source files.
+
+Make gets its knowledge of how to build your program from a file called the
+makefile, which lists each of the non-source files and how to compute it from
+other files. When you write a program, you should write a makefile for it, so
+that it is possible to use Make to build and install the program.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/make/")))
+
+(define-public binutils
+  (package
+   (name "binutils")
+   (version "2.22")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/binutils/binutils-"
+                                version ".tar.bz2"))
+            (sha256
+             (base32
+              "1a9w66v5dwvbnawshjwqcgz7km6kw6ihkzp6sswv9ycc3knzhykc"))))
+   (build-system gnu-build-system)
+
+   ;; Split Binutils in several outputs, mostly to avoid collisions in
+   ;; user profiles with GCC---e.g., libiberty.a.
+   (outputs '("out"                        ; ar, ld, binutils.info, etc.
+              "lib"))                      ; libbfd.a, bfd.h, etc.
+
+   ;; TODO: Add dependency on zlib + those for Gold.
+   (native-inputs
+    `(("patch/new-dtags" ,(search-patch "binutils-ld-new-dtags.patch"))))
+   (arguments
+    `(#:patches (list (assoc-ref %build-inputs "patch/new-dtags"))
+      #:configure-flags '(;; Add `-static-libgcc' to not retain a dependency
+                          ;; on GCC when bootstrapping.
+                          "LDFLAGS=-static-libgcc"
+
+                          ;; Don't search under /usr/lib & co.
+                          "--with-lib-path=/no-ld-lib-path")))
+
+   (synopsis "GNU Binutils, tools for manipulating binaries (linker,
+assembler, etc.)")
+   (description
+    "The GNU Binutils are a collection of binary tools.  The main ones are
+`ld' (the GNU linker) and `as' (the GNU assembler).  They also include the
+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
+      (lambda (system)
+        `(#: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_BUILD="
+                                         "-L" libc "/lib "
+                                         "-Wl,-dynamic-linker "
+                                         "-Wl," libc
+                                         ,(glibc-dynamic-linker system)))
+                    '())
+              ,(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 system)))))
+
+                 ;; 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")
+   (version "2.17")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/glibc/glibc-"
+                                version ".tar.xz"))
+            (sha256
+             (base32
+              "0gmjnn4kma9vgizccw1jv979xw55a8n1nkk94gg0l3hy80vy6539"))))
+   (build-system gnu-build-system)
+
+   ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc
+   ;; users should automatically pull Linux headers as well.
+   (propagated-inputs `(("linux-headers" ,linux-libre-headers)))
+
+   (arguments
+    `(#:out-of-source? #t
+      #:patches (list (assoc-ref %build-inputs "patch/ld.so.cache"))
+      #:configure-flags
+      (list "--enable-add-ons"
+            "--sysconfdir=/etc"
+            "--localedir=/var/run/current-system/sw/lib/locale" ; XXX
+            (string-append "--with-headers="
+                           (assoc-ref %build-inputs "linux-headers")
+                           "/include")
+
+            ;; The default is to assume a 2.4 Linux interface, but we'll
+            ;; always use something newer.  See "kernel-features.h" in the
+            ;; GNU libc for details.
+            "--enable-kernel=2.6.30"
+
+            ;; Use our Bash instead of /bin/sh.
+            (string-append "BASH_SHELL="
+                           (assoc-ref %build-inputs "bash")
+                           "/bin/bash")
+
+            ;; XXX: Work around "undefined reference to `__stack_chk_guard'".
+            "libc_cv_ssp=no")
+
+      #:tests? #f                                 ; XXX
+      #:phases (alist-cons-before
+                'configure 'pre-configure
+                (lambda* (#:key inputs outputs #:allow-other-keys)
+                  (let* ((out  (assoc-ref outputs "out"))
+                         (bin  (string-append out "/bin")))
+                    ;; Use `pwd', not `/bin/pwd'.
+                    (substitute* "configure"
+                      (("/bin/pwd") "pwd"))
+
+                    ;; Install the rpc data base file under `$out/etc/rpc'.
+                    ;; FIXME: Use installFlags = [ "sysconfdir=$(out)/etc" ];
+                    (substitute* "sunrpc/Makefile"
+                      (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix)
+                       (string-append out "/etc/rpc" suffix "\n"))
+                      (("^install-others =.*$")
+                       (string-append "install-others = " out "/etc/rpc\n")))
+
+                    (substitute* "Makeconfig"
+                      ;; According to
+                      ;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/glibc.html>,
+                      ;; linking against libgcc_s is not needed with GCC
+                      ;; 4.7.1.
+                      ((" -lgcc_s") ""))
+
+                    ;; Copy a statically-linked Bash in the output, with
+                    ;; no references to other store paths.
+                    (mkdir-p bin)
+                    (copy-file (string-append (assoc-ref inputs "static-bash")
+                                              "/bin/bash")
+                               (string-append bin "/bash"))
+                    (remove-store-references (string-append bin "/bash"))
+                    (chmod (string-append bin "/bash") #o555)
+
+                    ;; Keep a symlink, for `patch-shebang' resolution.
+                    (with-directory-excursion bin
+                      (symlink "bash" "sh"))
+
+                    ;; Have `system' use that Bash.
+                    (substitute* "sysdeps/posix/system.c"
+                      (("#define[[:blank:]]+SHELL_PATH.*$")
+                       (format #f "#define SHELL_PATH \"~a/bin/bash\"\n"
+                               out)))
+
+                    ;; Same for `popen'.
+                    (substitute* "libio/iopopen.c"
+                      (("/bin/sh")
+                       (string-append out "/bin/bash")))))
+                %standard-phases)))
+   (inputs `(("patch/ld.so.cache"
+              ,(search-patch "glibc-no-ld-so-cache.patch"))
+             ("static-bash" ,(static-package bash-light))))
+   (synopsis "The GNU C Library")
+   (description
+    "Any Unix-like operating system needs a C library: the library which
+defines the \"system calls\" and other basic facilities such as open, malloc,
+printf, exit...
+
+The GNU C library is used as the C library in the GNU system and most systems
+with the Linux kernel.")
+   (license lgpl2.0+)
+   (home-page "http://www.gnu.org/software/libc/")))
+
+
+;;;
+;;; Bootstrap packages.
+;;;
+
+(define gnu-make-boot0
+  (package-with-bootstrap-guile
+   (package (inherit gnu-make)
+     (name "make-boot0")
+     (location (source-properties->location (current-source-location)))
+     (arguments
+      `(#:guile ,%bootstrap-guile
+        #:implicit-inputs? #f
+        #:tests? #f                  ; cannot run "make check"
+        ,@(substitute-keyword-arguments (package-arguments gnu-make)
+            ((#:phases phases)
+             `(alist-replace
+               'build (lambda _
+                        (zero? (system* "./build.sh")))
+               (alist-replace
+                'install (lambda* (#:key outputs #:allow-other-keys)
+                           (let* ((out (assoc-ref outputs "out"))
+                                  (bin (string-append out "/bin")))
+                             (mkdir-p bin)
+                             (copy-file "make"
+                                        (string-append bin "/make"))))
+                ,phases))))))
+     (inputs %bootstrap-inputs))))
+
+(define diffutils-boot0
+  (package-with-bootstrap-guile
+   (let ((p (package-with-explicit-inputs diffutils
+                                          `(("make" ,gnu-make-boot0)
+                                            ,@%bootstrap-inputs)
+                                          #:guile %bootstrap-guile)))
+     (package (inherit p)
+       (location (source-properties->location (current-source-location)))
+       (arguments `(#:tests? #f         ; the test suite needs diffutils
+                    ,@(package-arguments p)))))))
+
+(define findutils-boot0
+  (package-with-bootstrap-guile
+   (package-with-explicit-inputs findutils
+                                 `(("make" ,gnu-make-boot0)
+                                   ("diffutils" ,diffutils-boot0) ; for tests
+                                   ,@%bootstrap-inputs)
+                                 (current-source-location)
+                                 #:guile %bootstrap-guile)))
+
+
+(define %boot0-inputs
+  `(("make" ,gnu-make-boot0)
+    ("diffutils" ,diffutils-boot0)
+    ("findutils" ,findutils-boot0)
+    ,@%bootstrap-inputs))
+
+(define* (nix-system->gnu-triplet system #:optional (vendor "unknown"))
+  "Return an a guess of the GNU triplet corresponding to Nix system
+identifier SYSTEM."
+  (let* ((dash (string-index system #\-))
+         (arch (substring system 0 dash))
+         (os   (substring system (+ 1 dash))))
+    (string-append arch
+                   "-" vendor "-"
+                   (if (string=? os "linux")
+                       "linux-gnu"
+                       os))))
+
+(define boot-triplet
+  ;; Return the triplet used to create the cross toolchain needed in the
+  ;; first bootstrapping stage.
+  (cut nix-system->gnu-triplet <> "guix"))
+
+;; Following Linux From Scratch, build a cross-toolchain in stage 0.  That
+;; toolchain actually targets the same OS and arch, but it has the advantage
+;; of being independent of the libc and tools in %BOOTSTRAP-INPUTS, since
+;; GCC-BOOT0 (below) is built without any reference to the target libc.
+
+(define binutils-boot0
+  (package-with-bootstrap-guile
+   (package (inherit binutils)
+     (name "binutils-cross-boot0")
+     (arguments
+      (lambda (system)
+        `(#:guile ,%bootstrap-guile
+          #:implicit-inputs? #f
+          ,@(substitute-keyword-arguments (package-arguments binutils)
+              ((#:configure-flags cf)
+               `(list ,(string-append "--target=" (boot-triplet system))))))))
+     (inputs %boot0-inputs))))
+
+(define gcc-boot0
+  (package-with-bootstrap-guile
+   (package (inherit gcc-4.7)
+     (name "gcc-cross-boot0")
+     (arguments
+      (lambda (system)
+        `(#:guile ,%bootstrap-guile
+          #:implicit-inputs? #f
+          #:modules ((guix build gnu-build-system)
+                     (guix build utils)
+                     (ice-9 regex)
+                     (srfi srfi-1)
+                     (srfi srfi-26))
+          ,@(substitute-keyword-arguments ((package-arguments gcc-4.7) system)
+              ((#:configure-flags flags)
+               `(append (list ,(string-append "--target="
+                                              (boot-triplet system))
+
+                              ;; No libc yet.
+                              "--without-headers"
+
+                              ;; Disable features not needed at this stage.
+                              "--disable-shared"
+                              "--enable-languages=c"
+                              "--disable-libmudflap"
+                              "--disable-libgomp"
+                              "--disable-libssp"
+                              "--disable-libquadmath"
+                              "--disable-decimal-float")
+                        (remove (cut string-match "--enable-languages.*" <>)
+                                ,flags)))
+              ((#:phases phases)
+               `(alist-cons-after
+                 'unpack 'unpack-gmp&co
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                         (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                         (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                     ;; To reduce the set of pre-built bootstrap inputs, build
+                     ;; GMP & co. from GCC.
+                     (for-each (lambda (source)
+                                 (or (zero? (system* "tar" "xvf" source))
+                                     (error "failed to unpack tarball"
+                                            source)))
+                               (list gmp mpfr mpc))
+
+                     ;; Create symlinks like `gmp' -> `gmp-5.0.5'.
+                     ,@(map (lambda (lib)
+                              `(symlink ,(package-full-name lib)
+                                        ,(package-name lib)))
+                            (list gmp mpfr mpc))
+
+                     ;; MPFR headers/lib are found under $(MPFR)/src, but
+                     ;; `configure' wrongfully tells MPC too look under
+                     ;; $(MPFR), so fix that.
+                     (substitute* "configure"
+                       (("extra_mpc_mpfr_configure_flags(.+)--with-mpfr-include=([^/]+)/mpfr(.*)--with-mpfr-lib=([^ ]+)/mpfr"
+                         _ equals include middle lib)
+                        (string-append "extra_mpc_mpfr_configure_flags" equals
+                                       "--with-mpfr-include=" include
+                                       "/mpfr/src" middle
+                                       "--with-mpfr-lib=" lib
+                                       "/mpfr/src"))
+                       (("gmpinc='-I([^ ]+)/mpfr -I([^ ]+)/mpfr" _ a b)
+                        (string-append "gmpinc='-I" a "/mpfr/src "
+                                       "-I" b "/mpfr/src"))
+                       (("gmplibs='-L([^ ]+)/mpfr" _ a)
+                        (string-append "gmplibs='-L" a "/mpfr/src")))))
+                 (alist-cons-after
+                  'install 'symlink-libgcc_eh
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (let ((out (assoc-ref outputs "out")))
+                      ;; Glibc wants to link against libgcc_eh, so provide
+                      ;; it.
+                      (with-directory-excursion
+                          (string-append out "/lib/gcc/"
+                                         ,(boot-triplet system)
+                                         "/" ,(package-version gcc-4.7))
+                        (symlink "libgcc.a" "libgcc_eh.a"))))
+                  ,phases)))))))
+
+     (inputs `(("gmp-source" ,(package-source gmp))
+               ("mpfr-source" ,(package-source mpfr))
+               ("mpc-source" ,(package-source mpc))
+               ("binutils-cross" ,binutils-boot0)
+
+               ;; Call it differently so that the builder can check whether
+               ;; the "libc" input is #f.
+               ("libc-native" ,@(assoc-ref %boot0-inputs "libc"))
+               ,@(alist-delete "libc" %boot0-inputs))))))
+
+(define linux-libre-headers-boot0
+  (package-with-bootstrap-guile
+   (package (inherit linux-libre-headers)
+     (arguments `(#:guile ,%bootstrap-guile
+                  #:implicit-inputs? #f
+                  ,@(package-arguments linux-libre-headers)))
+     (native-inputs
+      (let ((perl (package-with-explicit-inputs perl
+                                                %boot0-inputs
+                                                (current-source-location)
+                                                #:guile %bootstrap-guile)))
+        `(("perl" ,perl)
+          ,@%boot0-inputs))))))
+
+(define %boot1-inputs
+  ;; 2nd stage inputs.
+  `(("gcc" ,gcc-boot0)
+    ("binutils-cross" ,binutils-boot0)
+
+    ;; Keep "binutils" here because the cross-gcc invokes `as', not the
+    ;; cross-`as'.
+    ,@%boot0-inputs))
+
+(define glibc-final-with-bootstrap-bash
+  ;; The final libc, "cross-built".  If everything went well, the resulting
+  ;; store path has no dependencies.  Actually, the really-final libc is
+  ;; built just below; the only difference is that this one uses the
+  ;; bootstrap Bash.
+  (package-with-bootstrap-guile
+   (package (inherit glibc)
+     (name "glibc-intermediate")
+     (arguments
+      (lambda (system)
+        `(#:guile ,%bootstrap-guile
+          #:implicit-inputs? #f
+
+          ,@(substitute-keyword-arguments (package-arguments glibc)
+              ((#:configure-flags flags)
+               `(append (list ,(string-append "--host=" (boot-triplet system))
+                              ,(string-append "--build="
+                                              (nix-system->gnu-triplet system))
+
+                              ;; Build Sun/ONC RPC support.  In particular,
+                              ;; install rpc/*.h.
+                              "--enable-obsolete-rpc")
+                        ,flags))))))
+     (propagated-inputs `(("linux-headers" ,linux-libre-headers-boot0)))
+     (inputs
+      `( ;; A native GCC is needed to build `cross-rpcgen'.
+        ("native-gcc" ,@(assoc-ref %boot0-inputs "gcc"))
+
+        ;; Here, we use the bootstrap Bash, which is not satisfactory
+        ;; because we don't want to depend on bootstrap tools.
+        ("static-bash" ,@(assoc-ref %boot0-inputs "bash"))
+
+        ,@%boot1-inputs
+        ,@(alist-delete "static-bash"
+                        (package-inputs glibc))))))) ; patches
+
+(define (cross-gcc-wrapper gcc binutils glibc bash)
+  "Return a wrapper for the pseudo-cross toolchain GCC/BINUTILS/GLIBC
+that makes it available under the native tool names."
+  (package (inherit gcc-4.7)
+    (name (string-append (package-name gcc) "-wrapped"))
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     (lambda (system)
+       `(#:guile ,%bootstrap-guile
+         #:modules ((guix build utils))
+         #:builder (begin
+                     (use-modules (guix build utils))
+
+                     (let* ((binutils (assoc-ref %build-inputs "binutils"))
+                            (gcc      (assoc-ref %build-inputs "gcc"))
+                            (libc     (assoc-ref %build-inputs "libc"))
+                            (bash     (assoc-ref %build-inputs "bash"))
+                            (out      (assoc-ref %outputs "out"))
+                            (bindir   (string-append out "/bin"))
+                            (triplet  ,(boot-triplet system)))
+                       (mkdir-p bindir)
+                       (with-directory-excursion bindir
+                         (for-each (lambda (tool)
+                                     (symlink (string-append binutils "/bin/"
+                                                             triplet "-" tool)
+                                              tool))
+                                   '("ar" "ranlib"))
+
+                         ;; GCC-BOOT0 is a libc-less cross-compiler, so it
+                         ;; needs to be told where to find the crt files and
+                         ;; the dynamic linker.
+                         (call-with-output-file "gcc"
+                           (lambda (p)
+                             (format p "#!~a/bin/bash
+exec ~a/bin/~a-gcc -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
+                                     bash
+                                     gcc triplet
+                                     libc libc
+                                     ,(glibc-dynamic-linker system))))
+
+                         (chmod "gcc" #o555)))))))
+    (native-inputs
+     `(("binutils" ,binutils)
+       ("gcc" ,gcc)
+       ("libc" ,glibc)
+       ("bash" ,bash)))
+    (inputs '())))
+
+(define static-bash-for-glibc
+  ;; A statically-linked Bash to be embedded in GLIBC-FINAL, for use by
+  ;; system(3) & co.
+  (let* ((gcc  (cross-gcc-wrapper gcc-boot0 binutils-boot0
+                                  glibc-final-with-bootstrap-bash
+                                  (car (assoc-ref %boot1-inputs "bash"))))
+         (bash (package (inherit bash-light)
+                 (arguments
+                  (lambda (system)
+                    `(#:guile ,%bootstrap-guile
+                      ,@(package-arguments bash-light)))))))
+    (package-with-bootstrap-guile
+     (package-with-explicit-inputs (static-package bash)
+                                   `(("gcc" ,gcc)
+                                     ("libc" ,glibc-final-with-bootstrap-bash)
+                                     ,@(fold alist-delete %boot1-inputs
+                                             '("gcc" "libc")))
+                                   (current-source-location)))))
+
+(define-public glibc-final
+  ;; The final glibc, which embeds the statically-linked Bash built above.
+  (package (inherit glibc-final-with-bootstrap-bash)
+    (name "glibc")
+    (inputs `(("static-bash" ,static-bash-for-glibc)
+              ,@(alist-delete
+                 "static-bash"
+                 (package-inputs glibc-final-with-bootstrap-bash))))))
+
+(define gcc-boot0-wrapped
+  ;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
+  ;; non-cross names.
+  (cross-gcc-wrapper gcc-boot0 binutils-boot0 glibc-final
+                     (car (assoc-ref %boot1-inputs "bash"))))
+
+(define %boot2-inputs
+  ;; 3rd stage inputs.
+  `(("libc" ,glibc-final)
+    ("gcc" ,gcc-boot0-wrapped)
+    ,@(fold alist-delete %boot1-inputs '("libc" "gcc"))))
+
+(define-public binutils-final
+  (package-with-bootstrap-guile
+   (package (inherit binutils)
+     (arguments
+      (lambda (system)
+        `(#:guile ,%bootstrap-guile
+                  #:implicit-inputs? #f
+                  ,@(package-arguments binutils))))
+     (inputs %boot2-inputs))))
+
+(define-public gcc-final
+  ;; The final GCC.
+  (package (inherit gcc-boot0)
+    (name "gcc")
+    (arguments
+     (lambda (system)
+       `(#:guile ,%bootstrap-guile
+         #:implicit-inputs? #f
+
+         ;; Build again GMP & co. within GCC's build process, because it's hard
+         ;; to do outside (because GCC-BOOT0 is a cross-compiler, and thus
+         ;; doesn't honor $LIBRARY_PATH, which breaks `gnu-build-system'.)
+         ,@(substitute-keyword-arguments ((package-arguments gcc-boot0) system)
+             ((#:configure-flags boot-flags)
+              (let loop ((args ((package-arguments gcc-4.7) system)))
+                (match args
+                  ((#:configure-flags normal-flags _ ...)
+                   normal-flags)
+                  ((_ rest ...)
+                   (loop rest)))))
+             ((#:phases phases)
+              `(alist-delete 'symlink-libgcc_eh ,phases))))))
+
+    (inputs `(("gmp-source" ,(package-source gmp))
+              ("mpfr-source" ,(package-source mpfr))
+              ("mpc-source" ,(package-source mpc))
+              ("binutils" ,binutils-final)
+              ,@%boot2-inputs))))
+
+(define ld-wrapper-boot3
+  ;; A linker wrapper that uses the bootstrap Guile.
+  (package
+    (name "ld-wrapper-boot3")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (inputs `(("binutils" ,binutils-final)
+              ("guile"    ,%bootstrap-guile)
+              ("bash"     ,@(assoc-ref %boot2-inputs "bash"))
+              ("wrapper"  ,(search-path %load-path
+                                        "gnu/packages/ld-wrapper.scm"))))
+    (arguments
+     `(#:guile ,%bootstrap-guile
+       #:modules ((guix build utils))
+       #:builder (begin
+                   (use-modules (guix build utils)
+                                (system base compile))
+
+                   (let* ((out (assoc-ref %outputs "out"))
+                          (bin (string-append out "/bin"))
+                          (ld  (string-append bin "/ld"))
+                          (go  (string-append bin "/ld.go")))
+
+                     (setvbuf (current-output-port) _IOLBF)
+                     (format #t "building ~s/bin/ld wrapper in ~s~%"
+                             (assoc-ref %build-inputs "binutils")
+                             out)
+
+                     (mkdir-p bin)
+                     (copy-file (assoc-ref %build-inputs "wrapper") ld)
+                     (substitute* ld
+                       (("@GUILE@")
+                        (string-append (assoc-ref %build-inputs "guile")
+                                       "/bin/guile"))
+                       (("@BASH@")
+                        (string-append (assoc-ref %build-inputs "bash")
+                                       "/bin/bash"))
+                       (("@LD@")
+                        (string-append (assoc-ref %build-inputs "binutils")
+                                       "/bin/ld")))
+                     (chmod ld #o555)
+                     (compile-file ld #:output-file go)))))
+    (synopsis "The linker wrapper")
+    (description
+     "The linker wrapper (or `ld-wrapper') wraps the linker to add any
+missing `-rpath' flags, and to detect any misuse of libraries outside of the
+store.")
+    (home-page #f)
+    (license gpl3+)))
+
+(define %boot3-inputs
+  ;; 4th stage inputs.
+  `(("gcc" ,gcc-final)
+    ("ld-wrapper" ,ld-wrapper-boot3)
+    ,@(alist-delete "gcc" %boot2-inputs)))
+
+(define-public bash-final
+  ;; Link with `-static-libgcc' to make sure we don't retain a reference
+  ;; to the bootstrap GCC.
+  (package-with-bootstrap-guile
+   (package-with-explicit-inputs (static-libgcc-package bash)
+                                 %boot3-inputs
+                                 (current-source-location)
+                                 #:guile %bootstrap-guile)))
+
+(define %boot4-inputs
+  ;; Now use the final Bash.
+  `(("bash" ,bash-final)
+    ,@(alist-delete "bash" %boot3-inputs)))
+
+(define-public guile-final
+  (package-with-bootstrap-guile
+   (package-with-explicit-inputs guile-2.0/fixed
+                                 %boot4-inputs
+                                 (current-source-location)
+                                 #:guile %bootstrap-guile)))
+
+(define-public ld-wrapper
+  ;; The final `ld' wrapper, which uses the final Guile.
+  (package (inherit ld-wrapper-boot3)
+    (name "ld-wrapper")
+    (inputs `(("guile" ,guile-final)
+              ("bash"  ,bash-final)
+              ,@(fold alist-delete (package-inputs ld-wrapper-boot3)
+                      '("guile" "bash"))))))
+
+(define-public %final-inputs
+  ;; Final derivations used as implicit inputs by `gnu-build-system'.
+  (let ((finalize (cut package-with-explicit-inputs <> %boot4-inputs
+                       (current-source-location))))
+    `(,@(map (match-lambda
+              ((name package)
+               (list name (finalize package))))
+             `(("tar" ,tar)
+               ("gzip" ,gzip)
+               ("bzip2" ,bzip2)
+               ("xz" ,xz)
+               ("diffutils" ,diffutils)
+               ("patch" ,patch)
+               ("coreutils" ,coreutils)
+               ("sed" ,sed)
+               ("grep" ,grep)
+               ("findutils" ,findutils)
+               ("gawk" ,gawk)
+               ("make" ,gnu-make)))
+      ("bash" ,bash-final)
+      ("ld-wrapper" ,ld-wrapper)
+      ("binutils" ,binutils-final)
+      ("gcc" ,gcc-final)
+      ("libc" ,glibc-final))))
+
+;;; base.scm ends here
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
new file mode 100644
index 0000000000..d74315ad18
--- /dev/null
+++ b/gnu/packages/bash.scm
@@ -0,0 +1,110 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 bash)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages readline)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public bash
+  (let ((cppflags (string-join '("-DSYS_BASHRC='\"/etc/bashrc\"'"
+                                 "-DSYS_BASH_LOGOUT='\"/etc/bash_logout\"'"
+                                 "-DDEFAULT_PATH_VALUE='\"/no-such-path\"'"
+                                 "-DSTANDARD_UTILS_PATH='\"/no-such-path\"'"
+                                 "-DNON_INTERACTIVE_LOGIN_SHELLS"
+                                 "-DSSH_SOURCE_BASHRC")
+                               " "))
+        (post-install-phase
+         '(lambda* (#:key outputs #:allow-other-keys)
+            ;; Add a `bash' -> `sh' link.
+            (let ((out (assoc-ref outputs "out")))
+              (with-directory-excursion (string-append out "/bin")
+                (symlink "bash" "sh"))))))
+    (package
+     (name "bash")
+     (version "4.2")
+     (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://gnu/bash/bash-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1n5kbblp5ykbz5q8aq88lsif2z0gnvddg9babk33024wxiwi2ym2"))))
+     (build-system gnu-build-system)
+     (inputs `(("readline" ,readline)
+               ("ncurses" ,ncurses)))             ; TODO: add texinfo
+     (arguments
+      `(#:configure-flags `("--with-installed-readline"
+                            ,,(string-append "CPPFLAGS=" cppflags)
+                            ,(string-append
+                              "LDFLAGS=-Wl,-rpath -Wl,"
+                              (assoc-ref %build-inputs "readline")
+                              "/lib"
+                              " -Wl,-rpath -Wl,"
+                              (assoc-ref %build-inputs "ncurses")
+                              "/lib"))
+
+        ;; Bash is reportedly not parallel-safe.  See, for instance,
+        ;; <http://patches.openembedded.org/patch/32745/> and
+        ;; <http://git.buildroot.net/buildroot/commit/?h=79e2d802ae7e376a413c02097790493e1f65c3a4>.
+        #:parallel-build? #f
+        #:parallel-tests? #f
+
+        ;; XXX: The tests have a lot of hard-coded paths, so disable them
+        ;; for now.
+        #:tests? #f
+
+        #:phases (alist-cons-after 'install 'post-install
+                                   ,post-install-phase
+                                   %standard-phases)))
+     (synopsis "GNU Bourne-Again Shell")
+     (description
+      "Bash is the shell, or command language interpreter, that will appear in
+the GNU operating system.  Bash is an sh-compatible shell that incorporates
+useful features from the Korn shell (ksh) and C shell (csh).  It is intended
+to conform to the IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools standard.  It
+offers functional improvements over sh for both programming and interactive
+use.  In addition, most sh scripts can be run by Bash without
+modification.")
+     (license gpl3+)
+     (home-page "http://www.gnu.org/software/bash/"))))
+
+(define-public bash-light
+  ;; A stripped-down Bash for non-interactive use.
+  (package (inherit bash)
+    (name "bash-light")
+    (inputs '())                                ; no readline, no curses
+    (arguments
+     (let ((args `(#:modules ((guix build gnu-build-system)
+                              (guix build utils)
+                              (srfi srfi-1)
+                              (srfi srfi-26))
+                             ,@(package-arguments bash))))
+       (substitute-keyword-arguments args
+         ((#:configure-flags flags)
+          `(list "--without-bash-malloc"
+                 "--disable-readline"
+                 "--disable-history"
+                 "--disable-help-builtin"
+                 "--disable-progcomp"
+                 "--disable-net-redirections"
+                 "--disable-nls")))))))
diff --git a/gnu/packages/bdb.scm b/gnu/packages/bdb.scm
new file mode 100644
index 0000000000..1be57b302a
--- /dev/null
+++ b/gnu/packages/bdb.scm
@@ -0,0 +1,57 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 bdb)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public bdb
+  (package
+   (name "bdb")
+   (version "5.3.21")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://download.oracle.com/berkeley-db/db-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "1f2g2612lf8djbwbwhxsvmffmf9d7693kh2l20195pqp0f9jmnfx"))))
+   (build-system gnu-build-system)
+   (arguments
+    (lambda (system)
+      `(#:tests? #f ; no check target available
+        #:phases
+        (alist-replace
+         'configure
+         (lambda* (#:key outputs #:allow-other-keys)
+           (let ((out (assoc-ref outputs "out")))
+             (zero?
+              (system* "./dist/configure"
+                       (string-append "--prefix=" out)
+                       (string-append "CONFIG_SHELL=" (which "bash"))
+                       (string-append "SHELL=" (which "bash"))))))
+         %standard-phases))))
+   (synopsis "db, the Berkeley database")
+   (description
+    "Berkeley DB is an embeddable database allowing developers the choice of
+SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
+   (license (bsd-style "file://LICENSE"
+                       "See LICENSE in the distribution."))
+   (home-page "http://www.oracle.com/us/products/database/berkeley-db/overview/index.html")))
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
new file mode 100644
index 0000000000..65c2fd99ce
--- /dev/null
+++ b/gnu/packages/bdw-gc.scm
@@ -0,0 +1,60 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 bdw-gc)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public libgc
+  (package
+   (name "libgc")
+   (version "7.2alpha6")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-"
+                  version ".tar.gz"))
+            (sha256
+             (base32
+              "05jwadjbrv8pr7z9cb4miskicxqpxm0pca4h2rg5cgbpajr2bx7b"))))
+   (build-system gnu-build-system)
+   (synopsis "The Boehm-Demers-Weiser conservative garbage collector
+for C and C++")
+   (description
+    "The Boehm-Demers-Weiser conservative garbage collector can be used
+as a garbage collecting replacement for C malloc or C++ new.  It allows
+you to allocate memory basically as you normally would, without
+explicitly deallocating memory that is no longer useful.  The collector
+automatically recycles memory when it determines that it can no longer
+be otherwise accessed.
+
+The collector is also used by a number of programming language
+implementations that either use C as intermediate code, want to
+facilitate easier interoperation with C libraries, or just prefer the
+simple collector interface.
+
+Alternatively, the garbage collector may be used as a leak detector for
+C or C++ programs, though that is not its primary goal.")
+   (home-page "http://www.hpl.hp.com/personal/Hans_Boehm/gc/")
+
+   ;; permissive X11-style license:
+   ;; http://www.hpl.hp.com/personal/Hans_Boehm/gc/license.txt
+   (license x11)))
diff --git a/gnu/packages/bison.scm b/gnu/packages/bison.scm
new file mode 100644
index 0000000000..95ffb17522
--- /dev/null
+++ b/gnu/packages/bison.scm
@@ -0,0 +1,57 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 bison)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages perl))
+
+(define-public bison
+  (package
+    (name "bison")
+    (version "2.6.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/bison/bison-"
+                          version ".tar.xz"))
+      (sha256
+       (base32
+        "0y9svfkbw8jc8yv280hqzilpvlwg60gayck83jj98djmzaxr1w86"))))
+    (build-system gnu-build-system)
+    (inputs `(("perl" ,perl)))
+    (propagated-inputs `(("m4" ,m4)))
+    (home-page "http://www.gnu.org/software/bison/")
+    (synopsis
+     "GNU Bison, a Yacc-compatible parser generator")
+    (description
+     "Bison is a general-purpose parser generator that converts an
+annotated context-free grammar into an LALR(1) or GLR parser for
+that grammar.  Once you are proficient with Bison, you can use
+it to develop a wide range of language parsers, from those used
+in simple desk calculators to complex programming languages.
+
+Bison is upward compatible with Yacc: all properly-written Yacc
+grammars ought to work with Bison with no change.  Anyone
+familiar with Yacc should be able to use Bison with little
+trouble.  You need to be fluent in C or C++ programming in order
+to use Bison.")
+    (license gpl3+)))
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
new file mode 100644
index 0000000000..6cad933644
--- /dev/null
+++ b/gnu/packages/bootstrap.scm
@@ -0,0 +1,378 @@
+;;; 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 bootstrap)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module ((guix store) #:select (add-to-store add-text-to-store))
+  #:use-module ((guix derivations) #:select (derivation))
+  #:use-module (guix utils)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
+  #:export (bootstrap-origin
+            package-with-bootstrap-guile
+            glibc-dynamic-linker
+
+            %bootstrap-guile
+            %bootstrap-coreutils&co
+            %bootstrap-binutils
+            %bootstrap-gcc
+            %bootstrap-glibc
+            %bootstrap-inputs))
+
+;;; Commentary:
+;;;
+;;; Pre-built packages that are used to bootstrap the
+;;; distribution--i.e., to build all the core packages from scratch.
+;;;
+;;; Code:
+
+
+
+;;;
+;;; Helper procedures.
+;;;
+
+(define (bootstrap-origin source)
+  "Return a variant of SOURCE, an <origin> instance, whose method uses
+%BOOTSTRAP-GUILE to do its job."
+  (define (boot fetch)
+    (lambda* (store url hash-algo hash
+              #:optional name #:key system)
+      (fetch store url hash-algo hash
+             #:guile %bootstrap-guile
+             #:system system)))
+
+  (let ((orig-method (origin-method source)))
+    (origin (inherit source)
+      (method (cond ((eq? orig-method url-fetch)
+                     (boot url-fetch))
+                    (else orig-method))))))
+
+(define (package-from-tarball name* source* program-to-test description*)
+  "Return a package that correspond to the extraction of SOURCE*.
+PROGRAM-TO-TEST is a program to run after extraction of SOURCE*, to
+check whether everything is alright."
+  (package
+    (name name*)
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     `(#:guile ,%bootstrap-guile
+       #:modules ((guix build utils))
+       #:builder
+       (let ((out     (assoc-ref %outputs "out"))
+             (tar     (assoc-ref %build-inputs "tar"))
+             (xz      (assoc-ref %build-inputs "xz"))
+             (tarball (assoc-ref %build-inputs "tarball")))
+         (use-modules (guix build utils))
+
+         (mkdir out)
+         (copy-file tarball "binaries.tar.xz")
+         (system* xz "-d" "binaries.tar.xz")
+         (let ((builddir (getcwd)))
+           (with-directory-excursion out
+             (and (zero? (system* tar "xvf"
+                                  (string-append builddir "/binaries.tar")))
+                  (zero? (system* (string-append "bin/" ,program-to-test)
+                                  "--version"))))))))
+    (inputs
+     `(("tar" ,(lambda (system)
+                 (search-bootstrap-binary "tar" system)))
+       ("xz"  ,(lambda (system)
+                 (search-bootstrap-binary "xz" system)))
+       ("tarball" ,(lambda (system)
+                     (bootstrap-origin (source* system))))))
+    (synopsis description*)
+    (description #f)
+    (home-page #f)))
+
+(define package-with-bootstrap-guile
+  (memoize
+   (lambda (p)
+    "Return a variant of P such that all its origins are fetched with
+%BOOTSTRAP-GUILE."
+    (define rewritten-input
+      (match-lambda
+       ((name (? origin? o))
+        `(,name ,(bootstrap-origin o)))
+       ((name (? package? p) sub-drvs ...)
+        `(,name ,(package-with-bootstrap-guile p) ,@sub-drvs))
+       (x x)))
+
+    (package (inherit p)
+      (source (match (package-source p)
+                ((? origin? o) (bootstrap-origin o))
+                (s s)))
+      (inputs (map rewritten-input
+                   (package-inputs p)))
+      (native-inputs (map rewritten-input
+                          (package-native-inputs p)))
+      (propagated-inputs (map rewritten-input
+                              (package-propagated-inputs p)))))))
+
+(define (glibc-dynamic-linker system)
+  "Return the name of Glibc's dynamic linker for SYSTEM."
+  (cond ((string=? system "x86_64-linux") "/lib/ld-linux-x86-64.so.2")
+        ((string=? system "i686-linux") "/lib/ld-linux.so.2")
+        (else (error "dynamic linker name not known for this system"
+                     system))))
+
+
+;;;
+;;; Bootstrap packages.
+;;;
+
+(define %bootstrap-guile
+  ;; The Guile used to run the build scripts of the initial derivations.
+  ;; It is just unpacked from a tarball containing a pre-built binary.
+  ;; This is typically built using %GUILE-BOOTSTRAP-TARBALL below.
+  ;;
+  ;; XXX: Would need libc's `libnss_files2.so' for proper `getaddrinfo'
+  ;; support (for /etc/services).
+  (let ((raw (build-system
+              (name "raw")
+              (description "Raw build system with direct store access")
+              (build (lambda* (store name source inputs #:key outputs system)
+                       (define (->store file)
+                         (add-to-store store file #t #t "sha256"
+                                       (or (search-bootstrap-binary file
+                                                                    system)
+                                           (error "bootstrap binary not found"
+                                                  file system))))
+
+                       (let* ((tar   (->store "tar"))
+                              (xz    (->store "xz"))
+                              (mkdir (->store "mkdir"))
+                              (bash  (->store "bash"))
+                              (guile (->store "guile-2.0.7.tar.xz"))
+                              (builder
+                               (add-text-to-store store
+                                                  "build-bootstrap-guile.sh"
+                                                  (format #f "
+echo \"unpacking bootstrap Guile to '$out'...\"
+~a $out
+cd $out
+~a -dc < ~a | ~a xv
+
+# Sanity check.
+$out/bin/guile --version~%"
+                                                          mkdir xz guile tar)
+                                                  (list mkdir xz guile tar))))
+                         (derivation store name system
+                                     bash `(,builder) '()
+                                     `((,bash) (,builder)))))))))
+   (package
+     (name "guile-bootstrap")
+     (version "2.0")
+     (source #f)
+     (build-system raw)
+     (synopsis "Bootstrap Guile")
+     (description "Pre-built Guile for bootstrapping purposes.")
+     (home-page #f)
+     (license lgpl3+))))
+
+(define %bootstrap-base-urls
+  ;; This is where the initial binaries come from.
+  '("http://alpha.gnu.org/gnu/guix/bootstrap"
+    "http://www.fdn.fr/~lcourtes/software/guix/packages"))
+
+(define %bootstrap-coreutils&co
+  (package-from-tarball "bootstrap-binaries"
+                        (lambda (system)
+                          (origin
+                           (method url-fetch)
+                           (uri (map (cut string-append <> "/" system
+                                          "/20130105/static-binaries.tar.xz")
+                                     %bootstrap-base-urls))
+                           (sha256
+                            (match system
+                              ("x86_64-linux"
+                               (base32
+                                "0md23alzy6nc5f16pric7mkagczdzr8xbh074sb3rjzrls06j1ls"))
+                              ("i686-linux"
+                               (base32
+                                "0nzj1lmm9b94g7k737cr4w1dv282w5nmhb53238ikax9r6pkc0yb"))))))
+                        "true"                    ; the program to test
+                        "Bootstrap binaries of Coreutils, Awk, etc."))
+
+(define %bootstrap-binutils
+  (package-from-tarball "binutils-bootstrap"
+                        (lambda (system)
+                          (origin
+                           (method url-fetch)
+                           (uri (map (cut string-append <> "/" system
+                                          "/20130105/binutils-2.22.tar.xz")
+                                     %bootstrap-base-urls))
+                           (sha256
+                            (match system
+                              ("x86_64-linux"
+                               (base32
+                                "1ffmk2yy2pxvkqgzrkzp3s4jpn4qaaksyk3b5nsc5cjwfm7qkgzh"))
+                              ("i686-linux"
+                               (base32
+                                "1rafk6aq4sayvv3r3d2khn93nkyzf002xzh0xadlyci4mznr6b0a"))))))
+                        "ld"                      ; the program to test
+                        "Bootstrap binaries of the GNU Binutils"))
+
+(define %bootstrap-glibc
+  ;; The initial libc.
+  (package
+    (name "glibc-bootstrap")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     `(#:guile ,%bootstrap-guile
+       #:modules ((guix build utils))
+       #:builder
+       (let ((out     (assoc-ref %outputs "out"))
+             (tar     (assoc-ref %build-inputs "tar"))
+             (xz      (assoc-ref %build-inputs "xz"))
+             (tarball (assoc-ref %build-inputs "tarball")))
+         (use-modules (guix build utils))
+
+         (mkdir out)
+         (copy-file tarball "binaries.tar.xz")
+         (system* xz "-d" "binaries.tar.xz")
+         (let ((builddir (getcwd)))
+           (with-directory-excursion out
+             (system* tar "xvf"
+                      (string-append builddir
+                                     "/binaries.tar"))
+             (chmod "lib" #o755)
+
+             ;; Patch libc.so so it refers to the right path.
+             (substitute* "lib/libc.so"
+               (("/[^ ]+/lib/(libc|ld)" _ prefix)
+                (string-append out "/lib/" prefix))))))))
+    (inputs
+     `(("tar" ,(lambda (system)
+                 (search-bootstrap-binary "tar" system)))
+       ("xz"  ,(lambda (system)
+                 (search-bootstrap-binary "xz" system)))
+       ("tarball" ,(lambda (system)
+                     (bootstrap-origin
+                      (origin
+                       (method url-fetch)
+                       (uri (map (cut string-append <> "/" system
+                                      "/20130105/glibc-2.17.tar.xz")
+                                 %bootstrap-base-urls))
+                       (sha256
+                        (match system
+                          ("x86_64-linux"
+                           (base32
+                            "18kv1z9d8dr1j3hm9w7663kchqw9p6rsx11n1m143jgba2jz6jy3"))
+                          ("i686-linux"
+                           (base32
+                            "08hv8i0axwnihrcgbz19x0a7s6zyv3yx38x8r29liwl8h82x9g88"))))))))))
+    (synopsis "Bootstrap binaries and headers of the GNU C Library")
+    (description #f)
+    (home-page #f)))
+
+(define %bootstrap-gcc
+  ;; The initial GCC.  Uses binaries from a tarball typically built by
+  ;; %GCC-BOOTSTRAP-TARBALL.
+  (package
+    (name "gcc-bootstrap")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     (lambda (system)
+       `(#:guile ,%bootstrap-guile
+         #:modules ((guix build utils))
+         #:builder
+         (let ((out     (assoc-ref %outputs "out"))
+               (tar     (assoc-ref %build-inputs "tar"))
+               (xz      (assoc-ref %build-inputs "xz"))
+               (bash    (assoc-ref %build-inputs "bash"))
+               (libc    (assoc-ref %build-inputs "libc"))
+               (tarball (assoc-ref %build-inputs "tarball")))
+           (use-modules (guix build utils)
+                        (ice-9 popen))
+
+           (mkdir out)
+           (copy-file tarball "binaries.tar.xz")
+           (system* xz "-d" "binaries.tar.xz")
+           (let ((builddir (getcwd))
+                 (bindir   (string-append out "/bin")))
+             (with-directory-excursion out
+               (system* tar "xvf"
+                        (string-append builddir "/binaries.tar")))
+
+             (with-directory-excursion bindir
+               (chmod "." #o755)
+               (rename-file "gcc" ".gcc-wrapped")
+               (call-with-output-file "gcc"
+                 (lambda (p)
+                   (format p "#!~a
+exec ~a/bin/.gcc-wrapped -B~a/lib \
+     -Wl,-rpath -Wl,~a/lib \
+     -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
+                           bash
+                           out libc libc libc
+                           ,(glibc-dynamic-linker system))))
+
+               (chmod "gcc" #o555)))))))
+    (inputs
+     `(("tar" ,(lambda (system)
+                 (search-bootstrap-binary "tar" system)))
+       ("xz"  ,(lambda (system)
+                 (search-bootstrap-binary "xz" system)))
+       ("bash" ,(lambda (system)
+                  (search-bootstrap-binary "bash" system)))
+       ("libc" ,%bootstrap-glibc)
+       ("tarball" ,(lambda (system)
+                     (bootstrap-origin
+                      (origin
+                       (method url-fetch)
+                       (uri (map (cut string-append <> "/" system
+                                      "/20130105/gcc-4.7.2.tar.xz")
+                                 %bootstrap-base-urls))
+                       (sha256
+                        (match system
+                          ("x86_64-linux"
+                           (base32
+                            "1x1p7han5crnbw906iwdifykr6grzm0w27dy9gz75j0q1b32i4px"))
+                          ("i686-linux"
+                           (base32
+                            "06wqs0xxnpw3hn0xjb4c9cs0899p1xwkcysa2rvzhvpra0c5vsg2"))))))))))
+    (synopsis "Bootstrap binaries of the GNU Compiler Collection")
+    (description #f)
+    (home-page #f)))
+
+(define %bootstrap-inputs
+  ;; The initial, pre-built inputs.  From now on, we can start building our
+  ;; own packages.
+  `(("libc" ,%bootstrap-glibc)
+    ("gcc" ,%bootstrap-gcc)
+    ("binutils" ,%bootstrap-binutils)
+    ("coreutils&co" ,%bootstrap-coreutils&co)
+
+    ;; In gnu-build-system.scm, we rely on the availability of Bash.
+    ("bash" ,%bootstrap-coreutils&co)))
+
+;;; bootstrap.scm ends here
diff --git a/gnu/packages/bootstrap/i686-linux/bash b/gnu/packages/bootstrap/i686-linux/bash
new file mode 100755
index 0000000000..9882d4adc7
--- /dev/null
+++ b/gnu/packages/bootstrap/i686-linux/bash
Binary files differdiff --git a/gnu/packages/bootstrap/i686-linux/mkdir b/gnu/packages/bootstrap/i686-linux/mkdir
new file mode 100755
index 0000000000..0ddab232b7
--- /dev/null
+++ b/gnu/packages/bootstrap/i686-linux/mkdir
Binary files differdiff --git a/gnu/packages/bootstrap/i686-linux/tar b/gnu/packages/bootstrap/i686-linux/tar
new file mode 100755
index 0000000000..6bee702cf5
--- /dev/null
+++ b/gnu/packages/bootstrap/i686-linux/tar
Binary files differdiff --git a/gnu/packages/bootstrap/i686-linux/xz b/gnu/packages/bootstrap/i686-linux/xz
new file mode 100755
index 0000000000..5a126e4fc5
--- /dev/null
+++ b/gnu/packages/bootstrap/i686-linux/xz
Binary files differdiff --git a/gnu/packages/bootstrap/x86_64-linux/bash b/gnu/packages/bootstrap/x86_64-linux/bash
new file mode 100755
index 0000000000..3b0227fbb1
--- /dev/null
+++ b/gnu/packages/bootstrap/x86_64-linux/bash
Binary files differdiff --git a/gnu/packages/bootstrap/x86_64-linux/mkdir b/gnu/packages/bootstrap/x86_64-linux/mkdir
new file mode 100755
index 0000000000..7207ad8a46
--- /dev/null
+++ b/gnu/packages/bootstrap/x86_64-linux/mkdir
Binary files differdiff --git a/gnu/packages/bootstrap/x86_64-linux/tar b/gnu/packages/bootstrap/x86_64-linux/tar
new file mode 100755
index 0000000000..9104da7b53
--- /dev/null
+++ b/gnu/packages/bootstrap/x86_64-linux/tar
Binary files differdiff --git a/gnu/packages/bootstrap/x86_64-linux/xz b/gnu/packages/bootstrap/x86_64-linux/xz
new file mode 100755
index 0000000000..488e319b37
--- /dev/null
+++ b/gnu/packages/bootstrap/x86_64-linux/xz
Binary files differdiff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
new file mode 100644
index 0000000000..ec2997cbe6
--- /dev/null
+++ b/gnu/packages/check.scm
@@ -0,0 +1,48 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 check)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public check
+  (package
+    (name "check")
+    (version "0.9.9")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://sourceforge/check/check/"
+                          version "/check-" version ".tar.gz"))
+      (sha256
+       (base32
+        "1jcahzrvxcnp5chdn2x46l0y4aba8d8yd70lljfin7h5knxrlyhs"))))
+    (build-system gnu-build-system)
+    (home-page "http://check.sourceforge.net/")
+    (synopsis "Check, a unit testing framework for C")
+    (description
+     "Check is a unit testing framework for C. It features a simple
+interface for defining unit tests, putting little in the way of the
+developer.  Tests are run in a separate address space, so Check can
+catch both assertion failures and code errors that cause segmentation
+faults or other signals. The output from unit tests can be used within
+source code editors and IDEs.")
+    (license lgpl2.1+)))
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
new file mode 100644
index 0000000000..dc00f323ce
--- /dev/null
+++ b/gnu/packages/compression.scm
@@ -0,0 +1,200 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 compression)
+  #:use-module ((guix licenses)
+                #:renamer (symbol-prefix-proc 'license:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public zlib
+  (package
+    (name "zlib")
+    (version "1.2.7")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "http://zlib.net/zlib-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "1i96gsdvxqb6skp9a58bacf1wxamwi9m9pg4yn7cpf7g7239r77s"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (alist-replace
+                 'configure
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Zlib's home-made `configure' doesn't fails when passed
+                   ;; extra flags like `--enable-fast-install', so we need to
+                   ;; invoke it with just what it understand.
+                   (let ((out (assoc-ref outputs "out")))
+                     (zero? (system* "./configure"
+                                     (string-append "--prefix=" out)))))
+                 %standard-phases)))
+    (home-page "http://zlib.net/")
+    (synopsis "The zlib compression library")
+    (description
+     "zlib is designed to be a free, general-purpose, legally unencumbered --
+that is, not covered by any patents -- lossless data-compression library for
+use on virtually any computer hardware and operating system.  The zlib data
+format is itself portable across platforms. Unlike the LZW compression method
+used in Unix compress(1) and in the GIF image format, the compression method
+currently used in zlib essentially never expands the data. (LZW can double or
+triple the file size in extreme cases.)  zlib's memory footprint is also
+independent of the input data and can be reduced, if necessary, at some cost
+in compression.")
+    (license license:zlib)))
+
+(define-public gzip
+  (package
+   (name "gzip")
+   (version "1.5")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/gzip/gzip-"
+                                version ".tar.gz"))
+            (sha256
+             (base32
+              "18rm80kar7n016g8bsyy1a3zk50i2826xdgs874yh64rzj7nxmdm"))))
+   (build-system gnu-build-system)
+   (synopsis "Gzip, the GNU zip compression program")
+   (arguments
+    ;; FIXME: The test suite wants `less', and optionally Perl.
+    '(#:tests? #f))
+   (description
+    "gzip (GNU zip) is a popular data compression program written by Jean-loup
+Gailly for the GNU project.  Mark Adler wrote the decompression part.
+
+We developed this program as a replacement for compress because of the Unisys
+and IBM patents covering the LZW algorithm used by compress.  These patents
+made it impossible for us to use compress, and we needed a replacement.  The
+superior compression ratio of gzip is just a bonus.")
+   (license license:gpl3+)
+   (home-page "http://www.gnu.org/software/gzip/")))
+
+(define-public bzip2
+  (let ((fix-man-dir
+         ;; Move man pages to $out/share/.
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (with-directory-excursion (assoc-ref outputs "out")
+              (mkdir "share")
+              (rename-file "man" "share"))))
+        (build-shared-lib
+         ;; Build a shared library.
+         '(lambda* (#:key inputs #:allow-other-keys)
+            (patch-makefile-SHELL "Makefile-libbz2_so")
+            (zero? (system* "make" "-f" "Makefile-libbz2_so"))))
+        (install-shared-lib
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (let* ((out    (assoc-ref outputs "out"))
+                   (libdir (string-append out "/lib")))
+              (for-each (lambda (file)
+                          (let ((base (basename file)))
+                            (format #t "installing `~a' to `~a'~%"
+                                    base libdir)
+                            (copy-file file
+                                       (string-append libdir "/" base))))
+                        (find-files "." "^libbz2\\.so"))))))
+    (package
+      (name "bzip2")
+      (version "1.0.6")
+      (source (origin
+               (method url-fetch)
+               (uri (string-append "http://www.bzip.org/" version "/bzip2-"
+                                   version ".tar.gz"))
+               (sha256
+                (base32
+                 "1kfrc7f0ja9fdn6j1y6yir6li818npy6217hvr3wzmnmzhs8z152"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:modules ((guix build gnu-build-system)
+                    (guix build utils)
+                    (srfi srfi-1))
+         #:phases
+         (alist-cons-before
+          'build 'build-shared-lib ,build-shared-lib
+          (alist-cons-after
+           'install 'fix-man-dir ,fix-man-dir
+           (alist-cons-after
+            'install 'install-shared-lib ,install-shared-lib
+            (alist-delete 'configure %standard-phases))))
+         #:make-flags (list (string-append "PREFIX="
+                                           (assoc-ref %outputs "out")))))
+      (synopsis "high-quality data compression program")
+      (description
+       "bzip2 is a freely available, patent free (see below), high-quality data
+compressor.  It typically compresses files to within 10% to 15% of the best
+available techniques (the PPM family of statistical compressors), whilst
+being around twice as fast at compression and six times faster at
+decompression.")
+      (license (license:bsd-style "file://LICENSE"
+                                  "See LICENSE in the distribution."))
+      (home-page "http://www.bzip.org/"))))
+
+(define-public xz
+  (package
+   (name "xz")
+   (version "5.0.4")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://tukaani.org/xz/xz-" version
+                                ".tar.gz"))
+            (sha256
+             (base32
+              "1dl35ca8fdss9z2d6y234gxh24ixq904xksizrjmjr5dimwhax6n"))))
+   (build-system gnu-build-system)
+   (synopsis
+    "XZ, general-purpose data compression software, successor of LZMA")
+   (description
+    "XZ Utils is free general-purpose data compression software with high
+compression ratio.  XZ Utils were written for POSIX-like systems, but also
+work on some not-so-POSIX systems.  XZ Utils are the successor to LZMA Utils.
+
+The core of the XZ Utils compression code is based on LZMA SDK, but it has
+been modified quite a lot to be suitable for XZ Utils.  The primary
+compression algorithm is currently LZMA2, which is used inside the .xz
+container format.  With typical files, XZ Utils create 30 % smaller output
+than gzip and 15 % smaller output than bzip2.")
+   (license '(license:gpl2+ license:lgpl2.1+))              ; bits of both
+   (home-page "http://tukaani.org/xz/")))
+
+(define-public lzo
+  (package
+    (name "lzo")
+    (version "2.06")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "http://www.oberhumer.com/opensource/lzo/download/lzo-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0wryshs446s7cclrbjykyj766znhcpnr7s3cxy33ybfn6vwfcygz"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.oberhumer.com/opensource/lzo")
+    (synopsis
+     "A data compresion library suitable for real-time data de-/compression")
+    (description
+     "LZO is a data compression library which is suitable for data
+de-/compression in real-time.  This means it favours speed over
+compression ratio.
+
+LZO is written in ANSI C.  Both the source code and the compressed data
+format are designed to be portable across platforms.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/cpio.scm b/gnu/packages/cpio.scm
new file mode 100644
index 0000000000..6fddc3f768
--- /dev/null
+++ b/gnu/packages/cpio.scm
@@ -0,0 +1,58 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 cpio)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public cpio
+  (package
+    (name "cpio")
+    (version "2.11")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/cpio/cpio-"
+                          version ".tar.bz2"))
+      (sha256
+       (base32
+        "1gavgpzqwgkpagjxw72xgxz52y1ifgz0ckqh8g7cckz7jvyhp0mv"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:patches (list (assoc-ref %build-inputs
+                                  "patch/gets"))))
+    (inputs
+     `(("patch/gets" ,(search-patch "cpio-gets-undeclared.patch"))))
+    (home-page "https://www.gnu.org/software/cpio/")
+    (synopsis
+     "A program to create or extract from cpio archives")
+    (description
+     "GNU Cpio copies files into or out of a cpio or tar archive. The
+archive can be another file on the disk, a magnetic tape, or a pipe.
+
+GNU Cpio supports the following archive formats: binary, old ASCII, new
+ASCII, crc, HPUX binary, HPUX old ASCII, old tar, and POSIX.1 tar. The
+tar format is provided for compatability with the tar program. By
+default, cpio creates binary format archives, for compatibility with
+older cpio programs. When extracting from archives, cpio automatically
+recognizes which kind of archive it is reading and can read archives
+created on machines with a different byte-order.")
+    (license gpl3+)))
\ No newline at end of file
diff --git a/gnu/packages/cyrus-sasl.scm b/gnu/packages/cyrus-sasl.scm
new file mode 100644
index 0000000000..fe8ea4ef7c
--- /dev/null
+++ b/gnu/packages/cyrus-sasl.scm
@@ -0,0 +1,57 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; 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 cyrus-sasl)
+  #:use-module (distro)
+  #:use-module (gnu packages gdbm)
+  #:use-module (gnu packages mit-krb5)
+  #:use-module (gnu packages openssl)
+  #:use-module ((guix licenses)
+                #:renamer (symbol-prefix-proc 'license:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public cyrus-sasl
+  (package
+   (name "cyrus-sasl")
+   (version "2.1.26")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "1hvvbcsg21nlncbgs0cgn3iwlnb3vannzwsp6rwvnn9ba4v53g4g"))))
+   (build-system gnu-build-system)
+   (inputs `(("gdbm" ,gdbm)
+             ("mit-krb5" ,mit-krb5)
+             ("openssl" ,openssl)))
+   (arguments
+    '(#:configure-flags (list (string-append "--with-plugindir="
+                                             (assoc-ref %outputs "out")
+                                             "/lib/sasl2"))))
+   (synopsis "Cyrus SASL, an implementation of the Simple Authentication Security Layer framework")
+   (description
+    "SASL (Simple Authentication Security Layer) is an Internet
+standards-track method for remote computers to authenticate. The Cyrus SASL
+library makes supporting various SASL mechanisms easy for both client and
+server writers.")
+   (license (license:bsd-style "file://COPYING"
+                       "See COPYING in the distribution."))
+   (home-page "http://cyrusimap.web.cmu.edu/index.php")))
diff --git a/gnu/packages/ddrescue.scm b/gnu/packages/ddrescue.scm
new file mode 100644
index 0000000000..e9c7856af3
--- /dev/null
+++ b/gnu/packages/ddrescue.scm
@@ -0,0 +1,60 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 ddrescue)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public ddrescue
+  (package
+    (name "ddrescue")
+    (version "1.16")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/ddrescue/ddrescue-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "1rixya7p8c4jrn4p0flf6h5dqwybrilf3hrj4r7x41h3zgjz5cvn"))))
+    (build-system gnu-build-system)
+    (home-page
+     "http://www.gnu.org/software/ddrescue/ddrescue.html")
+    (synopsis "GNU ddrescue, a data recovery tool")
+    (description
+     "GNU ddrescue is a data recovery tool.  It copies data from one
+file or block device (hard disc, cdrom, etc) to another, trying hard to
+rescue data in case of read errors.
+
+The basic operation of ddrescue is fully automatic.  That is, you don't
+have to wait for an error, stop the program, read the log, run it in
+reverse mode, etc.
+
+If you use the logfile feature of ddrescue, the data is rescued very
+efficiently (only the needed blocks are read).  Also you can interrupt
+the rescue at any time and resume it later at the same point.
+
+Automatic merging of backups: If you have two or more damaged copies of
+a file, cdrom, etc, and run ddrescue on all of them, one at a time, with
+the same output file, you will probably obtain a complete and error-free
+file.  This is so because the probability of having damaged areas at the
+same places on different input files is very low.  Using the logfile,
+only the needed blocks are read from the second and successive copies.")
+    (license gpl3+)))
diff --git a/gnu/packages/dejagnu.scm b/gnu/packages/dejagnu.scm
new file mode 100644
index 0000000000..1efc7c78e7
--- /dev/null
+++ b/gnu/packages/dejagnu.scm
@@ -0,0 +1,88 @@
+;;; 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 dejagnu)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages tcl))
+
+(define-public dejagnu
+  (package
+    (name "dejagnu")
+    (version "1.5")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/dejagnu/dejagnu-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "1nx3x3h96a82q92q108q71giv2nz9xmbbn2nrlr3wvvs6l45id68"))))
+    (build-system gnu-build-system)
+    (inputs `(("expect" ,expect)))
+    (arguments
+     '(#:phases (alist-replace
+                 'check
+                 (lambda _
+                   ;; Note: The test-suite *requires* /dev/pts among the
+                   ;; `build-chroot-dirs' of the build daemon when
+                   ;; building in a chroot.  See
+                   ;; <http://thread.gmane.org/gmane.linux.distributions.nixos/1036>
+                   ;; for details.
+                   (if (and (directory-exists? "/dev/pts")
+                            (directory-exists? "/proc"))
+                       (begin
+                        ;; Provide `runtest' with a log name, otherwise
+                        ;; it tries to run `whoami', which fails when in
+                        ;; a chroot.
+                        (setenv "LOGNAME" "guix-builder")
+
+                        ;; The test-suite needs to have a non-empty stdin:
+                        ;; <http://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html>.
+                        (zero?
+                         (system "make check < /dev/zero")))
+                       (begin
+                         (display "test suite cannot be run, skipping\n")
+                         #t)))
+                 (alist-cons-after
+                  'install 'post-install
+                  (lambda* (#:key inputs outputs #:allow-other-keys)
+                    ;; Use the right `expect' binary.
+                    (let ((out    (assoc-ref outputs "out"))
+                          (expect (assoc-ref inputs "expect")))
+                      (substitute* (string-append out "/bin/runtest")
+                        (("^mypath.*$" all)
+                         (string-append all
+                                        "export PATH="
+                                        expect "/bin:$PATH\n")))))
+                  %standard-phases))))
+    (home-page
+     "http://www.gnu.org/software/dejagnu/")
+    (synopsis "The DejaGNU testing framework")
+    (description
+     "DejaGnu is a framework for testing other programs.  Its purpose
+is to provide a single front end for all tests.  Think of it as a
+custom library of Tcl procedures crafted to support writing a
+test harness.  A test harness is the testing infrastructure that
+is created to support a specific program or tool.  Each program
+can have multiple testsuites, all supported by a single test
+harness.  DejaGnu is written in Expect, which in turn uses Tcl --
+Tool command language.")
+    (license gpl2+)))
diff --git a/gnu/packages/ed.scm b/gnu/packages/ed.scm
new file mode 100644
index 0000000000..83d8b21bfb
--- /dev/null
+++ b/gnu/packages/ed.scm
@@ -0,0 +1,53 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 ed)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public ed
+  (package
+    (name "ed")
+    (version "1.5")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append
+            "mirror://gnu/ed/ed-"
+            version
+            ".tar.gz"))
+      (sha256
+       (base32
+        "18gvhyhwpabmgv4lh21lg8vl3z7acdyhh2mr2kj9g75wksj39pcp"))))
+    (build-system gnu-build-system)
+    (arguments '(#:configure-flags '("CC=gcc")))
+    (home-page "http://www.gnu.org/software/ed/")
+    (synopsis
+     "GNU ed, an implementation of the standard Unix editor")
+    (description
+     "GNU ed is a line-oriented text editor.  It is used to create,
+display, modify and otherwise manipulate text files, both
+interactively and via shell scripts.  A restricted version of ed,
+red, can only edit files in the current directory and cannot
+execute shell commands.  Ed is the \"standard\" text editor in the
+sense that it is the original editor for Unix, and thus widely
+available.  For most purposes, however, it is superseded by
+full-screen editors such as GNU Emacs or GNU Moe.")
+    (license gpl3+)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
new file mode 100644
index 0000000000..c9d0822a80
--- /dev/null
+++ b/gnu/packages/emacs.scm
@@ -0,0 +1,93 @@
+;;; 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 emacs)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (distro)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages gnutls)
+  #:use-module (gnu packages pkg-config))
+
+(define-public emacs
+  (package
+    (name "emacs")
+    (version "24.2")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/emacs/emacs-"
+                                 version ".tar.bz2"))
+             (sha256
+              (base32
+               "13wbjfjmz13qpjwssy44nw2230lllmkkgjsy0rqfm6am2cf87n3k"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       (list (string-append "--with-crt-dir=" (assoc-ref %build-inputs "libc")
+                            "/lib"))
+       #:patches (list (assoc-ref %build-inputs "patch/epaths"))
+       #:phases (alist-cons-before
+                 'configure 'fix-/bin/pwd
+                 (lambda _
+                   ;; Use `pwd', not `/bin/pwd'.
+                   (substitute* (find-files "." "^Makefile\\.in$")
+                     (("/bin/pwd")
+                      "pwd")))
+                 %standard-phases)))
+    (inputs
+     `(("pkg-config" ,pkg-config)
+       ("gnutls" ,gnutls)
+       ("texinfo" ,texinfo)
+       ("ncurses" ,ncurses)
+
+       ;; TODO: Add the optional dependencies.
+       ;; ("xlibs" ,xlibs)
+       ;; ("gtk+" ,gtk+)
+       ;; ("libXft" ,libXft)
+       ;; ("libtiff" ,libtiff)
+       ;; ("libungif" ,libungif)
+       ;; ("libjpeg" ,libjpeg)
+       ;; ("libpng" ,libpng)
+       ;; ("libXpm" ,libXpm)
+       ;; ("libxml2" ,libxml2)
+       ;; ("dbus-library" ,dbus-library)
+
+       ("patch/epaths" ,(search-patch "emacs-configure-sh.patch"))
+       ))
+    (home-page "http://www.gnu.org/software/emacs/")
+    (synopsis
+     "GNU Emacs 24, the extensible, customizable text editor")
+    (description
+     "GNU Emacs is an extensible, customizable text editor—and more.  At its
+core is an interpreter for Emacs Lisp, a dialect of the Lisp
+programming language with extensions to support text editing.
+
+The features of GNU Emacs include: content-sensitive editing modes,
+including syntax coloring, for a wide variety of file types including
+plain text, source code, and HTML; complete built-in documentation,
+including a tutorial for new users; full Unicode support for nearly all
+human languages and their scripts; highly customizable, using Emacs
+Lisp code or a graphical interface; a large number of extensions that
+add other functionality, including a project planner, mail and news
+reader, debugger interface, calendar, and more.  Many of these
+extensions are distributed with GNU Emacs; others are available
+separately.")
+    (license gpl3+)))
diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm
new file mode 100644
index 0000000000..5a2cc2ad80
--- /dev/null
+++ b/gnu/packages/file.scm
@@ -0,0 +1,44 @@
+;;; 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 file)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public file
+  (package
+   (name "file")
+   (version "5.12")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "ftp://ftp.astron.com/pub/file/file-"
+                   version ".tar.gz"))
+            (sha256 (base32
+                     "08ix4xrvan0k80n0l5lqfmc4azjv5lyhvhwdxny4r09j5smhv78r"))))
+   (build-system gnu-build-system)
+   (synopsis "file, a file type guesser")
+   (description
+    "The file command is a file type guesser, a command-line tool that tells
+you in words what kind of data a file contains. It does not rely on filename
+extentions to tell you the type of a file, but looks at the actual contents
+of the file.")
+   (license bsd-2)
+   (home-page "http://www.darwinsys.com/file/")))
diff --git a/gnu/packages/flex.scm b/gnu/packages/flex.scm
new file mode 100644
index 0000000000..7a6d5f507d
--- /dev/null
+++ b/gnu/packages/flex.scm
@@ -0,0 +1,63 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 flex)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (distro)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages indent))
+
+(define-public flex
+  (package
+    (name "flex")
+    (version "2.5.37")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://sourceforge/flex/flex-"
+                                 version ".tar.bz2"))
+             (sha256
+              (base32
+               "0ah5mi4j62b85a9rllv1004mzjb5cd0mn4glvz13p88rpx77pahp"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:patches (list (assoc-ref %build-inputs "patch/bison-tests"))))
+    (inputs `(("patch/bison-tests" ,(search-patch "flex-bison-tests.patch"))
+              ("bison" ,bison)
+              ("indent" ,indent)))
+    (propagated-inputs `(("m4" ,m4)))
+    (home-page "http://flex.sourceforge.net/")
+    (synopsis "A fast lexical analyser generator")
+    (description
+     "Flex is a tool for generating scanners. A scanner, sometimes
+called a tokenizer, is a program which recognizes lexical patterns in
+text. The flex program reads user-specified input files, or its standard
+input if no file names are given, for a description of a scanner to
+generate. The description is in the form of pairs of regular expressions
+and C code, called rules. Flex generates a C source file named,
+\"lex.yy.c\", which defines the function yylex(). The file \"lex.yy.c\"
+can be compiled and linked to produce an executable. When the executable
+is run, it analyzes its input for occurrences of text matching the
+regular expressions for each rule. Whenever it finds a match, it
+executes the corresponding C code.")
+    (license (bsd-style "file://COPYING"
+                        "See COPYING in the distribution."))))
+
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
new file mode 100644
index 0000000000..802042665a
--- /dev/null
+++ b/gnu/packages/gawk.scm
@@ -0,0 +1,71 @@
+;;; 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 gawk)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages libsigsegv)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public gawk
+  (package
+   (name "gawk")
+   (version "4.0.0")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/gawk/gawk-" version
+                                ".tar.bz2"))
+            (sha256
+             (base32 "0sss7rhpvizi2a88h6giv0i7w5h07s2fxkw3s6n1hqvcnhrfgbb0"))))
+   (build-system gnu-build-system)
+   (arguments
+    (case-lambda
+      ((system)
+       `(#:parallel-tests? #f             ; test suite fails in parallel
+
+         ;; Work around test failure on Cygwin.
+         #:tests? ,(not (string=? system "i686-cygwin"))
+
+         #:phases (alist-cons-before
+                   'configure 'set-shell-file-name
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     ;; Refer to the right shell.
+                     (let ((bash (assoc-ref inputs "bash")))
+                       (substitute* "io.c"
+                         (("/bin/sh")
+                          (string-append bash "/bin/bash")))))
+                   %standard-phases)))
+      ((system cross-system)
+       '(#:parallel-tests? #f))))
+   (inputs `(("libsigsegv" ,libsigsegv)))
+   (home-page "http://www.gnu.org/software/gawk/")
+   (synopsis "GNU implementation of the Awk programming language")
+   (description
+    "Many computer users need to manipulate text files: extract and then
+operate on data from parts of certain lines while discarding the rest, make
+changes in various text files wherever certain patterns appear, and so on.
+To write a program to do these things in a language such as C or Pascal is a
+time-consuming inconvenience that may take many lines of code.  The job is
+easy with awk, especially the GNU implementation: Gawk.
+
+The awk utility interprets a special-purpose programming language that makes
+it possible to handle many data-reformatting jobs with just a few lines of
+code.")
+   (license gpl3+)))
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
new file mode 100644
index 0000000000..c8c771bfd5
--- /dev/null
+++ b/gnu/packages/gdb.scm
@@ -0,0 +1,65 @@
+;;; 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 gdb)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages dejagnu)
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages python)
+  #:use-module ((guix licenses) #:select (gpl3+))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public gdb
+  (package
+    (name "gdb")
+    (version "7.5")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/gdb/gdb-"
+                                 version ".tar.bz2"))
+             (sha256
+              (base32
+               "0chrws5ga90b50kp06yll6zy42fhnx9yr87r4i7swsc369fc8y6i"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases (alist-cons-after
+                 'configure 'post-configure
+                 (lambda _
+                   (patch-makefile-SHELL "gdb/gdbserver/Makefile.in"))
+                 %standard-phases)))
+    (inputs
+     `(("expat" ,expat)
+       ("mpfr" ,mpfr)
+       ("gmp" ,gmp)
+       ("readline" ,readline)
+       ("ncurses" ,ncurses)
+       ("python" ,python)
+       ("texinfo" ,texinfo)
+       ("dejagnu" ,dejagnu)))
+    (home-page "http://www.gnu.org/software/gdb/")
+    (synopsis "GDB, the GNU Project debugger")
+    (description
+     "GDB, the GNU Project debugger, allows you to see what is going
+on `inside' another program while it executes -- or what another
+program was doing at the moment it crashed.")
+    (license gpl3+)))
diff --git a/gnu/packages/gdbm.scm b/gnu/packages/gdbm.scm
new file mode 100644
index 0000000000..588b732b02
--- /dev/null
+++ b/gnu/packages/gdbm.scm
@@ -0,0 +1,56 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 gdbm)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public gdbm
+  (package
+    (name "gdbm")
+    (version "1.10")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/gdbm/gdbm-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0h9lfzdjc2yl849y0byg51h6xfjg0y7vg9jnsw3gpfwlbd617y13"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.gnu.org/software/gdbm/")
+    (synopsis "GNU dbm key/value database library")
+    (description
+     "GNU dbm (or GDBM, for short) is a library of database functions
+that use extensible hashing and work similar to the standard UNIX dbm.
+These routines are provided to a programmer needing to create and
+manipulate a hashed database.
+
+The basic use of GDBM is to store key/data pairs in a data file.  Each
+key must be unique and each key is paired with only one data item.
+
+The library provides primitives for storing key/data pairs, searching
+and retrieving the data by its key and deleting a key along with its
+data.  It also support sequential iteration over all key/data pairs in a
+database.
+
+For compatibility with programs using old UNIX dbm function, the package
+also provides traditional dbm and ndbm interfaces.")
+    (license gpl3+)))
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
new file mode 100644
index 0000000000..c45a488dca
--- /dev/null
+++ b/gnu/packages/gettext.scm
@@ -0,0 +1,78 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 gettext)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public gettext
+  (package
+    (name "gettext")
+    (version "0.18.1.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/gettext/gettext-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "1sa3ch12qxa4h3ya6hkz119yclcccmincl9j20dhrdx5mykp3b4k"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:patches (list (assoc-ref %build-inputs "patch/gets"))
+       #:phases (alist-cons-before
+                 'check 'patch-tests
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((bash (assoc-ref inputs "bash")))
+                     (substitute* (find-files "gettext-tools/tests"
+                                              "^msgexec-[0-9]")
+                       (("#![[:blank:]]/bin/sh")
+                        (format #f "#!~a/bin/sh" bash)))
+                     (substitute* (find-files "gettext-tools/gnulib-tests"
+                                              "posix_spawn")
+                       (("/bin/sh")
+                        (format #f "~a/bin/bash" bash)))))
+                 %standard-phases)))
+    (inputs
+     `(("patch/gets"
+        ,(search-patch "gettext-gets-undeclared.patch"))))
+    (home-page
+     "http://www.gnu.org/software/gettext/")
+    (synopsis
+     "GNU gettext, a well integrated set of translation tools and documentation")
+    (description
+     "Usually, programs are written and documented in English, and use
+English at execution time for interacting with users.  Using a common
+language is quite handy for communication between developers,
+maintainers and users from all countries.  On the other hand, most
+people are less comfortable with English than with their own native
+language, and would rather be using their mother tongue for day to
+day's work, as far as possible.  Many would simply love seeing their
+computer screen showing a lot less of English, and far more of their
+own language.
+
+GNU `gettext' is an important step for the GNU Translation Project, as
+bit is an asset on which we may build many other steps. This package
+offers to programmers, translators, and even users, a well integrated
+set of tools and documentation. Specifically, the GNU `gettext'
+utilities are a set of tools that provides a framework to help other
+GNU packages produce multi-lingual messages.")
+    (license gpl3))) ; some files are under GPLv2+
diff --git a/gnu/packages/global.scm b/gnu/packages/global.scm
new file mode 100644
index 0000000000..705efbbbed
--- /dev/null
+++ b/gnu/packages/global.scm
@@ -0,0 +1,58 @@
+;;; 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 global)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages autotools)
+  #:use-module (distro))
+
+(define-public global                             ; a global variable
+  (package
+    (name "global")
+    (version "6.2.7")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/global/global-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "1dr250kz65wqpbms4lhz857mzmvmpmiaxgyqxvxkb4b0s840i14i"))))
+    (build-system gnu-build-system)
+    (inputs `(("ncurses" ,ncurses)
+              ("libtool" ,libtool)))
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--with-ncurses="
+                            (assoc-ref %build-inputs "ncurses")))))
+    (home-page "http://www.gnu.org/software/global/")
+    (synopsis "GNU GLOBAL source code tag system")
+    (description
+     "GNU GLOBAL is a source code tagging system that works the same way
+across diverse environments (Emacs, vi, less, Bash, web browser, etc).
+You can locate specified objects in source files and move there easily.
+It is useful for hacking a large project containing many
+subdirectories, many #ifdef and many main() functions.  It is similar
+to ctags or etags but is different from them at the point of
+independence of any editor.  It runs on a UNIX (POSIX) compatible
+operating system like GNU and BSD.")
+    (license "GPLv3+")))
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
new file mode 100644
index 0000000000..82f8d26a65
--- /dev/null
+++ b/gnu/packages/gnupg.scm
@@ -0,0 +1,168 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 gnupg)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages pth)
+  #:use-module (gnu packages readline)
+  #:use-module ((gnu packages compression)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public libgpg-error
+  (package
+    (name "libgpg-error")
+    (version "1.10")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnupg/libgpg-error/libgpg-error-"
+                          version ".tar.bz2"))
+      (sha256
+       (base32
+        "0cal3jdnzdailr13qcy74grfbplbghkgr3qwk6qjjp4bass2j1jj"))))
+    (build-system gnu-build-system)
+    (home-page "http://gnupg.org")
+    (synopsis
+     "Libgpg-error, a small library that defines common error values for all GnuPG components")
+    (description
+     "Libgpg-error is a small library that defines common error values
+for all GnuPG components.  Among these are GPG, GPGSM, GPGME,
+GPG-Agent, libgcrypt, Libksba, DirMngr, Pinentry, SmartCard
+Daemon and possibly more in the future.")
+    (license lgpl2.0+)))
+
+(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"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     `(("libgpg-error" ,libgpg-error)))
+    (home-page "http://gnupg.org/")
+    (synopsis
+     "GNU Libgcrypt, a general-pupose cryptographic library")
+    (description
+     "GNU Libgcrypt is a general purpose cryptographic library based on
+the code from GnuPG.  It provides functions for all
+cryptographic building blocks: symmetric ciphers, hash
+algorithms, MACs, public key algorithms, large integer
+functions, random numbers and a lot of supporting functions.")
+    (license lgpl2.0+)))
+
+(define-public libassuan
+  (package
+    (name "libassuan")
+    (version "2.0.3")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnupg/libassuan/libassuan-"
+                          version ".tar.bz2"))
+      (sha256
+       (base32
+        "06xckkvxxlx7cj77803m8x58gxksap4k8yhspc5cqsy7fhinimds"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     `(("libgpg-error" ,libgpg-error) ("pth" ,pth)))
+    (home-page "http://gnupg.org")
+    (synopsis
+     "Libassuan, the IPC library used by GnuPG and related software")
+    (description
+     "Libassuan is a small library implementing the so-called Assuan
+protocol.  This protocol is used for IPC between most newer
+GnuPG components.  Both, server and client side functions are
+provided.")
+    (license lgpl2.0+)))
+
+(define-public libksba
+  (package
+    (name "libksba")
+    (version "1.2.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append
+            "mirror://gnupg/libksba/libksba-"
+            version ".tar.bz2"))
+      (sha256
+       (base32
+        "0jwk7hm3x3g4hd7l12z3d79dy7359x7lc88dq6z7q0ixn1jwxbq9"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     `(("libgpg-error" ,libgpg-error)))
+    (home-page "http://www.gnupg.org")
+    (synopsis
+     "Libksba is a CMS and X.509 access library under development")
+    (description
+     "KSBA (pronounced Kasbah) is a library to make X.509 certificates
+as well as the CMS easily accessible by other applications.  Both
+specifications are building blocks of S/MIME and TLS.")
+    (license gpl3+)))
+
+(define-public gnupg
+  (package
+    (name "gnupg")
+    (version "2.0.19")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
+                          ".tar.bz2"))
+      (sha256
+       (base32
+        "08n636sfffs5qvg9ppiprvsh00q0dmdw425psg3m3nssja53m8pg"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(;; TODO: Add missing optional deps.
+       ;; ("curl" ,curl)
+       ;; ("libusb" ,libusb)
+       ;; ("openldap" ,openldap)
+
+       ("bzip2" ,guix:bzip2)
+       ("libassuan" ,libassuan)
+       ("libgcrypt" ,libgcrypt)
+       ("libksba" ,libksba)
+       ("pth" ,pth)
+       ("libgpg-error" ,libgpg-error)
+       ("zlib" ,guix:zlib)
+       ("readline" ,readline)))
+    (home-page "http://gnupg.org/")
+    (synopsis
+     "GNU Privacy Guard (GnuPG), GNU Project's implementation of the OpenPGP standard")
+    (description
+     "GnuPG is the GNU project's complete and free implementation of
+the OpenPGP standard as defined by RFC4880.  GnuPG allows to
+encrypt and sign your data and communication, features a
+versatile key managment system as well as access modules for all
+kind of public key directories.  GnuPG, also known as GPG, is a
+command line tool with features for easy integration with other
+applications.  A wealth of frontend applications and libraries
+are available.  Version 2 of GnuPG also provides support for
+S/MIME.")
+    (license gpl3+)))
diff --git a/gnu/packages/gnutls.scm b/gnu/packages/gnutls.scm
new file mode 100644
index 0000000000..4bda9a9ac5
--- /dev/null
+++ b/gnu/packages/gnutls.scm
@@ -0,0 +1,98 @@
+;;; 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 gnutls)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages base)
+  #:use-module ((gnu packages compression)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages nettle)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages which))
+
+(define-public libtasn1
+  (package
+    (name "libtasn1")
+    (version "3.2")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/libtasn1/libtasn1-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0gvgndypwicchf7m660zh7jdgmkfj9g9xavpcc08pyd0120y0bk7"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.gnu.org/software/libtasn1/")
+    (synopsis "GNU Libtasn1, an ASN.1 library")
+    (description
+     "Libtasn1 is the ASN.1 library used by GnuTLS, GNU Shishi and some
+other packages.  The goal of this implementation is to be highly
+portable, and only require an ANSI C89 platform.")
+    (license lgpl2.0+)))
+
+(define-public gnutls
+  (package
+    (name "gnutls")
+    (version "3.1.6")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append
+            "mirror://gnu/gnutls/gnutls-"
+            version
+            ".tar.xz"))
+      (sha256
+       (base32
+        "0zsybr9plllk1phh83bx9bg7c5ccik427j4n3k1s9fiy4j69n0w3"))))
+    (build-system gnu-build-system)
+
+    ;; Build of the Guile bindings is not parallel-safe.  See
+    ;; <http://git.savannah.gnu.org/cgit/gnutls.git/commit/?id=330995a920037b6030ec0282b51dde3f8b493cad>
+    ;; for the actual fix.
+    (arguments '(#:parallel-build? #f))
+
+    (inputs
+     `(("guile" ,guile-2.0)
+       ;; ("lzo" ,lzo)
+       ("zlib" ,guix:zlib)
+       ("perl" ,perl)))
+    (propagated-inputs
+     `(("libtasn1" ,libtasn1)
+       ("nettle" ,nettle)
+       ("which" ,which)))
+    (home-page "http://www.gnu.org/software/gnutls/")
+    (synopsis
+     "The GNU Transport Layer Security Library")
+    (description
+     "GnuTLS is a project that aims to develop a library which provides
+a secure layer, over a reliable transport layer. Currently the GnuTLS
+library implements the proposed standards by the IETF's TLS working
+group.
+
+Quoting from the TLS protocol specification:
+
+\"The TLS protocol provides communications privacy over the
+Internet. The protocol allows client/server applications to communicate
+in a way that is designed to prevent eavesdropping, tampering, or
+message forgery.\"")
+    (license lgpl2.1+)))
diff --git a/gnu/packages/gperf.scm b/gnu/packages/gperf.scm
new file mode 100644
index 0000000000..94fa62b652
--- /dev/null
+++ b/gnu/packages/gperf.scm
@@ -0,0 +1,55 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 gperf)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public gperf
+  (package
+    (name "gperf")
+    (version "3.0.4")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/gperf/gperf-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0gnnm8iqcl52m8iha3sxrzrl9mcyhg7lfrhhqgdn4zj00ji14wbn"))))
+    (build-system gnu-build-system)
+    (arguments '(#:parallel-tests? #f))
+    (home-page "http://www.gnu.org/software/gperf/")
+    (synopsis
+     "GNU gperf, a perfect hash function generator")
+    (description
+     "GNU gperf is a perfect hash function generator.  For a given
+list of strings, it produces a hash function and hash table, in
+form of C or C++ code, for looking up a value depending on the
+input string.  The hash function is perfect, which means that
+the hash table has no collisions, and the hash table lookup
+needs a single string comparison only.
+
+GNU gperf is highly customizable.  There are options for
+generating C or C++ code, for emitting switch statements or
+nested ifs instead of a hash table, and for tuning the algorithm
+employed by gperf.")
+    (license gpl3+)))
diff --git a/gnu/packages/gsasl.scm b/gnu/packages/gsasl.scm
new file mode 100644
index 0000000000..dc75b18455
--- /dev/null
+++ b/gnu/packages/gsasl.scm
@@ -0,0 +1,113 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 gsasl)
+  #:use-module (distro)
+  #:use-module ((gnu packages compression)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages gnutls)
+  #:use-module (gnu packages libidn)
+  #:use-module (gnu packages nettle)
+  #:use-module (gnu packages shishi)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public libntlm
+  (package
+   (name "libntlm")
+   (version "1.3")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://www.nongnu.org/libntlm/releases/libntlm-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "101pr110ardcj2di940g6vaqifsaxc44h6hjn81l63dvmkj5a6ga"))))
+   (build-system gnu-build-system)
+   (synopsis "Libntlm, a library that implements NTLM authentication")
+   (description
+    "Libntlm is a library that implements NTLM authentication")
+   (license lgpl2.1+)
+   (home-page "http://www.nongnu.org/libntlm/")))
+
+(define-public gss
+  (package
+   (name "gss")
+   (version "1.0.2")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/gss/gss-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "1qa8lbkzi6ilfggx7mchfzjnchvhwi68rck3jf9j4425ncz7zsd9"))))
+   (build-system gnu-build-system)
+   (inputs `(("nettle" ,nettle)
+             ("shishi" ,shishi)
+             ("zlib" ,guix:zlib)
+            ))
+   (synopsis "GNU GSS (Generic Security Service), a free implementatio of RFC 2743/2744")
+   (description
+    "GNU GSS is an implementation of the Generic Security Service Application
+Program Interface (GSS-API). GSS-API is used by network servers to provide
+security services, e.g., to authenticate SMTP/IMAP clients against
+SMTP/IMAP servers. GSS consists of a library and a manual.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/gss/")))
+
+(define-public gsasl
+  (package
+   (name "gsasl")
+   (version "1.8.0")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/gsasl/gsasl-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "1rci64cxvcfr8xcjpqc4inpfq7aw4snnsbf5xz7d30nhvv8n40ii"))))
+   (build-system gnu-build-system)
+   (inputs `(("libidn" ,libidn)
+             ("libntlm" ,libntlm)
+             ("gnutls" ,gnutls)
+             ("gss" ,gss)
+             ("zlib" ,guix:zlib)
+             ))
+   (synopsis "GNU SASL, an implementation of the Simple Authentication and Security Layer framework")
+   (description
+    "GNU SASL is an implementation of the Simple Authentication and Security
+Layer framework and a few common SASL mechanisms. SASL is used by network
+servers (e.g., IMAP, SMTP) to request authentication from clients, and in
+clients to authenticate against servers.
+
+GNU SASL consists of a library (libgsasl), a command line utility (gsasl)
+to access the library from the shell, and a manual. The library includes
+support for the framework (with authentication functions and application
+data privacy and integrity functions) and at least partial support for the
+CRAM-MD5, EXTERNAL, GSSAPI, ANONYMOUS, PLAIN, SECURID, DIGEST-MD5,
+SCRAM-SHA-1, SCRAM-SHA-1-PLUS, LOGIN, and NTLM mechanisms.
+
+The library is portable because it does not do network communication by
+itself, but rather leaves it up to the calling application. The library is
+flexible with regards to the authorization infrastructure used, as it
+utilises callbacks into the application to decide whether an user is
+authorised or not.
+
+The gsasl package distribution includes the library part as well,
+so there is no need to install two packages.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/gsasl/")))
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
new file mode 100644
index 0000000000..5034ae914a
--- /dev/null
+++ b/gnu/packages/guile.scm
@@ -0,0 +1,197 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 guile)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gperf)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages libunistring)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages readline)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+;;; Commentary:
+;;;
+;;; GNU Guile, and modules and extensions.
+;;;
+;;; Code:
+
+(define-public guile-1.8
+  (package
+   (name "guile")
+   (version "1.8.8")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/guile/guile-" version
+                                ".tar.gz"))
+            (sha256
+             (base32
+              "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3"))))
+   (build-system gnu-build-system)
+   (arguments '(#:configure-flags '("--disable-error-on-warning")
+                #:patches (list (assoc-ref %build-inputs "patch/snarf"))
+
+                ;; Insert a phase before `configure' to patch things up.
+                #:phases (alist-cons-before
+                           'configure
+                           'patch-loader-search-path
+                           (lambda* (#:key outputs #:allow-other-keys)
+                             ;; Add a call to `lt_dladdsearchdir' so that
+                             ;; `libguile-readline.so' & co. are in the
+                             ;; loader's search path.
+                             (substitute* "libguile/dynl.c"
+                                          (("lt_dlinit.*$" match)
+                                           (format #f
+                                                   "  ~a~%  lt_dladdsearchdir(\"~a/lib\");~%"
+                                                   match
+                                                   (assoc-ref outputs "out")))))
+                           %standard-phases)))
+   (inputs `(("patch/snarf" ,(search-patch "guile-1.8-cpp-4.5.patch"))
+             ("gawk" ,gawk)
+             ("readline" ,readline)))
+
+   ;; Since `guile-1.8.pc' has "Libs: ... -lgmp -lltdl", these must be
+   ;; propagated.
+   (propagated-inputs `(("gmp" ,gmp)
+                        ("libtool" ,libtool)))
+
+   ;; When cross-compiling, a native version of Guile itself is needed.
+   (self-native-input? #t)
+
+   (synopsis "GNU Guile 1.8, an embeddable Scheme interpreter")
+   (description
+"GNU Guile 1.8 is an interpreter for the Scheme programming language,
+packaged as a library that can be embedded into programs to make them
+extensible.  It supports many SRFIs.")
+   (home-page "http://www.gnu.org/software/guile/")
+   (license lgpl2.0+)))
+
+(define-public guile-2.0
+  (package
+   (name "guile")
+   (version "2.0.7")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/guile/guile-" version
+                                ".tar.xz"))
+            (sha256
+             (base32
+              "0f53pxkia4v17n0avwqlcjpy0n89hkazm2xsa6p84lv8k6k8y9vg"))))
+   (build-system gnu-build-system)
+   (native-inputs `(("pkgconfig" ,pkg-config)))
+   (inputs `(("libffi" ,libffi)
+             ("readline" ,readline)))
+
+   (propagated-inputs
+    `( ;; These ones aren't normally needed here, but since `libguile-2.0.la'
+       ;; reads `-lltdl -lunistring', adding them here will add the needed
+       ;; `-L' flags.  As for why the `.la' file lacks the `-L' flags, see
+       ;; <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903>.
+      ("libunistring" ,libunistring)
+      ("libtool" ,libtool)
+
+      ;; The headers and/or `guile-2.0.pc' refer to these packages, so they
+      ;; must be propagated.
+      ("bdw-gc" ,libgc)
+      ("gmp" ,gmp)))
+
+   (self-native-input? #t)
+
+   (arguments
+    '(#:phases (alist-cons-before
+                'configure 'pre-configure
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((bash (assoc-ref inputs "bash")))
+                    (substitute* "module/ice-9/popen.scm"
+                      (("/bin/sh")
+                       (string-append bash "/bin/bash")))))
+                %standard-phases)))
+
+   (synopsis "GNU Guile 2.0, an embeddable Scheme implementation")
+   (description
+"GNU Guile is an implementation of the Scheme programming language, with
+support for many SRFIs, packaged for use in a wide variety of environments.
+In addition to implementing the R5RS Scheme standard and a large subset of
+R6RS, Guile includes a module system, full access to POSIX system calls,
+networking support, multiple threads, dynamic linking, a foreign function
+call interface, and powerful string processing.")
+   (home-page "http://www.gnu.org/software/guile/")
+   (license lgpl3+)))
+
+(define-public guile-2.0/fixed
+  ;; A package of Guile 2.0 that's rarely changed.  It is the one used
+  ;; in the `base' module, and thus changing it entails a full rebuild.
+  guile-2.0)
+
+
+;;;
+;;; Extensions.
+;;;
+
+(define (guile-reader guile)
+  "Build Guile-Reader against GUILE, a package of some version of Guile 1.8
+or 2.0."
+  (package
+   (name (string-append "guile-reader-for-guile-" (package-version guile)))
+   (version "0.6")
+   (source  (origin
+             (method url-fetch)
+             (uri (string-append
+                   "http://download-mirror.savannah.gnu.org/releases/guile-reader/guile-reader-"
+                   version ".tar.gz"))
+             (sha256
+              (base32
+               "1svlyk5pm4fsdp2g7n6qffdl6fdggxnlicj0jn9s4lxd63gzxy1n"))))
+   (build-system gnu-build-system)
+   (native-inputs `(("pkgconfig" ,pkg-config)
+                    ("gperf" ,gperf)))
+   (inputs `(("guile" ,guile)))
+   (synopsis "Guile-Reader, a simple framework for building readers for
+GNU Guile")
+   (description
+"Guile-Reader is a simple framework for building readers for GNU Guile.
+
+The idea is to make it easy to build procedures that extend Guile’s read
+procedure. Readers supporting various syntax variants can easily be written,
+possibly by re-using existing “token readers” of a standard Scheme
+readers. For example, it is used to implement Skribilo’s R5RS-derived
+document syntax.
+
+Guile-Reader’s approach is similar to Common Lisp’s “read table”, but
+hopefully more powerful and flexible (for instance, one may instantiate as
+many readers as needed).")
+   (home-page "http://www.nongnu.org/guile-reader/")
+   (license gpl3+)))
+
+(define-public guile-reader/guile-1.8
+  ;; Guile-Reader built against Guile 1.8.
+  (guile-reader guile-1.8))
+
+(define-public guile-reader/guile-2.0
+  ;; Guile-Reader built against Guile 2.0.
+  (guile-reader guile-2.0))
+
+;;; guile.scm ends here
diff --git a/gnu/packages/help2man.scm b/gnu/packages/help2man.scm
new file mode 100644
index 0000000000..0acd39a524
--- /dev/null
+++ b/gnu/packages/help2man.scm
@@ -0,0 +1,52 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 help2man)
+  #:use-module (guix licenses)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages perl))
+
+(define-public help2man
+  (package
+    (name "help2man")
+    (version "1.40.8")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/help2man/help2man-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0s6phazn8jgvpbsby8kj2m58rj1zjghi1aipvamh8af226ssqfzj"))))
+    (build-system gnu-build-system)
+    (arguments `(;; There's no `check' target.
+                 #:tests? #f))
+    (inputs
+     `(("perl" ,perl)
+       ;; TODO: Add these optional dependencies.
+       ;; ("perl-LocaleGettext" ,perl-LocaleGettext)
+       ;; ("gettext" ,gettext)
+       ))
+    (home-page "http://www.gnu.org/software/help2man/")
+    (synopsis "GNU help2man generates man pages from `--help' output")
+    (description
+     "help2man produces simple manual pages from the ‘--help’ and
+‘--version’ output of other commands.")
+    (license gpl3+)))
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
new file mode 100644
index 0000000000..e0aa3bcd88
--- /dev/null
+++ b/gnu/packages/icu4c.scm
@@ -0,0 +1,66 @@
+;;; 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 icu4c)
+  #:use-module (distro)
+  #:use-module (gnu packages perl)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public icu4c
+  (package
+   (name "icu4c")
+   (version "50.1.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://download.icu-project.org/files/icu4c/"
+                   version
+                   "/icu4c-"
+                   (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
+                   "-src.tgz"))
+            (sha256 (base32
+                     "13yz0kk6zsgj94idnlr3vbg8iph5z4ly4b4xrd5wfja7q3ijdx56"))))
+   (build-system gnu-build-system)
+   (inputs `(("perl" ,perl)))
+   (arguments
+    `(#:phases
+      (alist-replace
+       'unpack
+       (lambda* (#:key source #:allow-other-keys)
+        (and (zero? (system* "tar" "xvf" source))
+             (chdir "icu/source")))
+       (alist-replace
+        'configure
+        (lambda* (#:key #:allow-other-keys #:rest args)
+         (let ((configure (assoc-ref %standard-phases 'configure)))
+           ;; patch out two occurrences of /bin/sh from configure script
+           ;; that might have disappeared in a release later than 50.1.1
+           (substitute* "configure"
+             (("`/bin/sh")
+             (string-append "`" (which "bash"))))
+           (apply configure args)))
+       %standard-phases))))
+   (synopsis "ICU, International Components for Unicode")
+   (description
+    "ICU is a set of C/C++ and Java libraries providing Unicode and
+globalisation support for software applications. This package contains the
+C/C++ part.")
+   (license x11)
+   (home-page "http://site.icu-project.org/")))
diff --git a/gnu/packages/idutils.scm b/gnu/packages/idutils.scm
new file mode 100644
index 0000000000..34b6dfcff9
--- /dev/null
+++ b/gnu/packages/idutils.scm
@@ -0,0 +1,65 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 idutils)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix licenses)
+  #:use-module (distro))
+
+(define-public idutils
+  (package
+    (name "idutils")
+    (version "4.6")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/idutils/idutils-"
+                          version ".tar.xz"))
+      (sha256
+       (base32
+        "1hmai3422iaqnp34kkzxdnywl7n7pvlxp11vrw66ybxn9wxg90c1"))))
+    (build-system gnu-build-system)
+    (inputs `(;; TODO: Add Emacs as an input for byte-compilation.
+              ;; ("emacs" ,emacs)
+              ("patch/gets"
+               ,(search-patch "diffutils-gets-undeclared.patch"))))
+    (arguments `(#:patches (list (assoc-ref %build-inputs "patch/gets"))))
+    (home-page "http://www.gnu.org/software/idutils/")
+    (synopsis "GNU Idutils, a text searching utility")
+    (description
+     "An \"ID database\" is a binary file containing a list of file
+names, a list of tokens, and a sparse matrix indicating which
+tokens appear in which files.
+
+With this database and some tools to query it, many
+text-searching tasks become simpler and faster.  For example,
+you can list all files that reference a particular `\\#include'
+file throughout a huge source hierarchy, search for all the
+memos containing references to a project, or automatically
+invoke an editor on all files containing references to some
+function or variable.  Anyone with a large software project to
+maintain, or a large set of text files to organize, can benefit
+from the ID utilities.
+
+Although the name `ID' is short for `identifier', the ID
+utilities handle more than just identifiers; they also treat
+other kinds of tokens, most notably numeric constants, and the
+contents of certain character strings.")
+    (license gpl3+)))
diff --git a/gnu/packages/indent.scm b/gnu/packages/indent.scm
new file mode 100644
index 0000000000..eb42e6a7b4
--- /dev/null
+++ b/gnu/packages/indent.scm
@@ -0,0 +1,44 @@
+;;; 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 indent)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public indent
+  (package
+   (name "indent")
+   (version "2.2.10")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/indent/indent-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "0f9655vqdvfwbxvs1gpa7py8k1z71aqh8hp73f65vazwbfz436wa"))))
+   (build-system gnu-build-system)
+   (synopsis "GNU Indent, a program for code indentation and formatting")
+   (description
+    "GNU Indent can be used to make code easier to read. It can also convert
+from one style of writing C to another. Indent understands a substantial
+amount about the syntax of C, but it also attempts to cope with incomplete
+and misformed syntax. The GNU style of indenting is the default.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/indent/")))
diff --git a/gnu/packages/ld-wrapper.scm b/gnu/packages/ld-wrapper.scm
new file mode 100644
index 0000000000..fd5a4cbd0c
--- /dev/null
+++ b/gnu/packages/ld-wrapper.scm
@@ -0,0 +1,147 @@
+#!@BASH@
+# -*- mode: scheme; coding: utf-8; -*-
+
+# XXX: We have to go through Bash because there's no command-line switch to
+# augment %load-compiled-path, and because of the silly 127-byte limit for
+# the shebang line in Linux.
+# Use `load-compiled' because `load' (and `-l') doesn't otherwise load our
+# .go file (see <http://bugs.gnu.org/12519>).
+
+main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
+exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "$@"
+!#
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 build-support ld-wrapper)
+  #:use-module (srfi srfi-1)
+  #:export (ld-wrapper))
+
+;;; Commentary:
+;;;
+;;; This is a wrapper for the linker.  Its purpose is to inspect the -L and
+;;; -l switches passed to the linker, add corresponding -rpath arguments, and
+;;; invoke the actual linker with this new set of arguments.
+;;;
+;;; The alternatives to this hack would be:
+;;;
+;;;   1. Using $LD_RUN_PATH.  However, that would tend to include more than
+;;;      needed in the RPATH; for instance, given a package with `libfoo' as
+;;;      an input, all its binaries would have libfoo in their RPATH,
+;;;      regardless of whether they actually NEED it.
+;;;
+;;;   2. Use a GCC "lib" spec string such as `%{L*:-rpath %*}', which adds a
+;;;      `-rpath LIBDIR' argument for each occurrence of `-L LIBDIR'.
+;;;      However, this doesn't work when $LIBRARY_PATH is used, because the
+;;;      additional `-L' switches are not matched by the above rule, because
+;;;      the rule only matches explicit user-provided switches.  See
+;;;      <http://gcc.gnu.org/ml/gcc-help/2012-09/msg00110.html> for details.
+;;;
+;;; As a bonus, this wrapper checks for "impurities"--i.e., references to
+;;; libraries outside the store.
+;;;
+;;; Code:
+
+(define %real-ld
+  ;; Name of the linker that we wrap.
+  "@LD@")
+
+(define %store-directory
+  ;; File name of the store.
+  (or (getenv "NIX_STORE") "/nix/store"))
+
+(define %temporary-directory
+  ;; Temporary directory.
+  (or (getenv "TMPDIR") "/tmp"))
+
+(define %build-directory
+  ;; Top build directory when run from a builder.
+  (getenv "NIX_BUILD_TOP"))
+
+(define %allow-impurities?
+  ;; Whether to allow references to libraries outside the store.
+  (getenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES"))
+
+(define %debug?
+  ;; Whether to emit debugging output.
+  (getenv "GUIX_LD_WRAPPER_DEBUG"))
+
+(define (pure-file-name? file)
+  ;; Return #t when FILE is the name of a file either within the store or
+  ;; within the build directory.
+  (or (not (string-prefix? "/" file))
+      (string-prefix? %store-directory file)
+      (string-prefix? %temporary-directory file)
+      (and %build-directory
+           (string-prefix? %build-directory file))))
+
+(define (switch-arguments switch args)
+  ;; Return the arguments passed for the occurrences of SWITCH--e.g.,
+  ;; "-L"--in ARGS.
+  (let ((prefix-len (string-length switch)))
+    (fold-right (lambda (arg path)
+                  (if (string-prefix? switch arg)
+                      (cons (substring arg prefix-len) path)
+                      path))
+                '()
+                args)))
+
+(define (library-path args)
+  ;; Return the library search path extracted from `-L' switches in ARGS.
+  ;; Note: allow references to out-of-store directories.  When this leads to
+  ;; actual impurities, this is caught later.
+  (switch-arguments "-L" args))
+
+(define (library-files-linked args)
+  ;; Return the file names of shared libraries explicitly linked against via
+  ;; `-l' in ARGS.
+  (map (lambda (lib)
+         (string-append "lib" lib ".so"))
+       (switch-arguments "-l" args)))
+
+(define (rpath-arguments lib-path library-files)
+  ;; Return the `-rpath' argument list for each of LIBRARY-FILES found in
+  ;; LIB-PATH.
+  (fold-right (lambda (file args)
+                (let ((absolute (search-path lib-path file)))
+                  (if absolute
+                      (if (or %allow-impurities?
+                              (pure-file-name? absolute))
+                          (cons* "-rpath" (dirname absolute)
+                                 args)
+                          (begin
+                            (format (current-error-port)
+                                    "ld-wrapper: error: attempt to use impure library ~s~%"
+                                    absolute)
+                            (exit 1)))
+                      args)))
+              '()
+              library-files))
+
+(define (ld-wrapper . args)
+  ;; Invoke the real `ld' with ARGS, augmented with `-rpath' switches.
+  (let* ((lib-path (library-path args))
+         (libs     (library-files-linked args))
+         (args     (append args (rpath-arguments lib-path libs))))
+    (if %debug?
+        (format (current-error-port)
+                "ld-wrapper: invoking `~a' with ~s~%"
+                %real-ld args))
+    (apply execl %real-ld (basename %real-ld) args)))
+
+;;; ld-wrapper.scm ends here
diff --git a/gnu/packages/less.scm b/gnu/packages/less.scm
new file mode 100644
index 0000000000..63a3d98a9b
--- /dev/null
+++ b/gnu/packages/less.scm
@@ -0,0 +1,51 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 less)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages ncurses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public less
+  (package
+    (name "less")
+    (version "451")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/less/less-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0mszdd9m1dsbg59pav62swg9f87xmjpfspcw2jsazzksciy2is4z"))))
+    (build-system gnu-build-system)
+    (inputs `(("ncurses" ,ncurses)))
+    (home-page "https://www.gnu.org/software/less/")
+    (synopsis
+     "GNU less is a program similar to more, but which allows backward
+movement in the file as well as forward movement")
+    (description
+     "GNU less is a program similar to more, but which allows backward
+movement in the file as well as forward movement. Also, less does not
+have to read the entire input file before starting, so with large input
+files it starts up faster than text editors like vi. Less uses
+termcap (or terminfo on some systems), so it can run on a variety of
+terminals. There is even limited support for hardcopy terminals.")
+    (license gpl3+))) ; some files are under GPLv2+
\ No newline at end of file
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
new file mode 100644
index 0000000000..87c849e564
--- /dev/null
+++ b/gnu/packages/libffi.scm
@@ -0,0 +1,73 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 libffi)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public libffi
+  (let ((post-install-phase
+         ;; Install headers in the right place.
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (define out (assoc-ref outputs "out"))
+            (mkdir (string-append out "/include"))
+            (with-directory-excursion
+                (string-append out "/lib/libffi-3.0.9/include")
+              (for-each (lambda (h)
+                          (format #t "moving `~a' to includedir~%" h)
+                          (rename-file h (string-append out "/include/" h)))
+                        (scandir "."
+                                 (lambda (x)
+                                   (not (member x '("." ".."))))))))))
+   (package
+    (name "libffi")
+    (version "3.0.9")
+    (source (origin
+             (method url-fetch)
+             (uri
+              (string-append "ftp://sourceware.org/pub/libffi/"
+                             name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "0ln4jbpb6clcsdpb9niqk0frgx4k0xki96wiv067ig0q4cajb7aq"))))
+    (build-system gnu-build-system)
+    (arguments `(#:modules ((guix build utils) (guix build gnu-build-system)
+                            (ice-9 ftw) (srfi srfi-26))
+                 #:phases (alist-cons-after 'install 'post-install
+                                            ,post-install-phase
+                                            %standard-phases)))
+    (synopsis "libffi, a foreign function call interface library")
+    (description
+     "The libffi library provides a portable, high level programming interface
+to various calling conventions.  This allows a programmer to call any
+function specified by a call interface description at run-time.
+
+FFI stands for Foreign Function Interface.  A foreign function interface is
+the popular name for the interface that allows code written in one language
+to call code written in another language.  The libffi library really only
+provides the lowest, machine dependent layer of a fully featured foreign
+function interface.  A layer must exist above libffi that handles type
+conversions for values passed between the two languages.")
+    (home-page "http://sources.redhat.com/libffi/")
+
+    ;; See <http://github.com/atgreen/libffi/blob/master/LICENSE>.
+    (license expat))))
+
diff --git a/gnu/packages/libidn.scm b/gnu/packages/libidn.scm
new file mode 100644
index 0000000000..dd246ef3e1
--- /dev/null
+++ b/gnu/packages/libidn.scm
@@ -0,0 +1,51 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 libidn)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public libidn
+  (package
+   (name "libidn")
+   (version "1.26")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/libidn/libidn-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "0g657kv60rh486m7bwyp5k24ljmym4wnb8nmk6d3i3qgr1qlqbqa"))))
+   (build-system gnu-build-system)
+;; FIXME: No Java and C# libraries are currently built.
+   (synopsis "GNU Libidn, a library to encode and decode internationalised domain names")
+   (description
+    "GNU Libidn is a fully documented implementation of the Stringprep,
+Punycode and IDNA specifications. Libidn's purpose is to encode and decode
+internationalised domain names.
+
+The library contains a generic Stringprep implementation. Profiles for
+Nameprep, iSCSI, SASL, XMPP and Kerberos V5 are included. Punycode and
+ASCII Compatible Encoding (ACE) via IDNA are supported. A mechanism to
+define Top-Level Domain (TLD) specific validation tables, and to compare
+strings against those tables, is included.
+Default tables for some TLDs are also included.")
+   (license lgpl2.1+)
+   (home-page "http://www.gnu.org/software/libidn/")))
diff --git a/gnu/packages/libjpeg.scm b/gnu/packages/libjpeg.scm
new file mode 100644
index 0000000000..22d5a6b1c1
--- /dev/null
+++ b/gnu/packages/libjpeg.scm
@@ -0,0 +1,57 @@
+;;; 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 libjpeg)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public libjpeg
+  (package
+   (name "libjpeg")
+   (version "9")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://www.ijg.org/files/jpegsrc.v"
+                   version ".tar.gz"))
+            (sha256 (base32
+                     "0dg5wxcx3cw0hal9gvivj97vid9z0s5sb1yvg55hpxmafn9rxqn4"))))
+   (build-system gnu-build-system)
+   (synopsis "Libjpeg, a library for handling JPEG files")
+   (description
+    "Libjpeg implements JPEG image encoding, decoding, and transcoding.
+JPEG is a standardized compression method for full-color and gray-scale
+images.
+The included programs provide conversion between the JPEG format and
+image files in PBMPLUS PPM/PGM, GIF, BMP, and Targa file formats.")
+   (license ijg)
+   (home-page "http://www.ijg.org/")))
+
+(define-public libjpeg-8
+  (package (inherit libjpeg)
+   (name "libjpeg-8")
+   (version "8d")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://www.ijg.org/files/jpegsrc.v"
+                   version ".tar.gz"))
+            (sha256 (base32
+                     "1cz0dy05mgxqdgjf52p54yxpyy95rgl30cnazdrfmw7hfca9n0h0"))))))
+
diff --git a/gnu/packages/libsigsegv.scm b/gnu/packages/libsigsegv.scm
new file mode 100644
index 0000000000..de896e4e8b
--- /dev/null
+++ b/gnu/packages/libsigsegv.scm
@@ -0,0 +1,47 @@
+;;; 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 libsigsegv)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public libsigsegv
+  (package
+   (name "libsigsegv")
+   (version "2.10")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "mirror://gnu/libsigsegv/libsigsegv-"
+                  version ".tar.gz"))
+            (sha256
+             (base32 "16hrs8k3nmc7a8jam5j1fpspd6sdpkamskvsdpcw6m29vnis8q44"))))
+   (build-system gnu-build-system)
+   (home-page "http://www.gnu.org/software/libsigsegv/")
+   (synopsis "GNU libsigsegv, a library to handle page faults in user mode")
+   (description
+"GNU libsigsegv is a library for handling page faults in user mode. A page
+fault occurs when a program tries to access to a region of memory that is
+currently not available. Catching and handling a page fault is a useful
+technique for implementing pageable virtual memory, memory-mapped access to
+persistent databases, generational garbage collectors, stack overflow
+handlers, distributed shared memory, and more.")
+   (license gpl2+)))
diff --git a/gnu/packages/libtiff.scm b/gnu/packages/libtiff.scm
new file mode 100644
index 0000000000..0e785a622b
--- /dev/null
+++ b/gnu/packages/libtiff.scm
@@ -0,0 +1,65 @@
+;;; 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 libtiff)
+  #:use-module (distro)
+  #:use-module (gnu packages file)
+  #:use-module (gnu packages libjpeg)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public libtiff
+  (package
+   (name "libtiff")
+   (version "4.0.3")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "ftp://ftp.remotesensing.org/pub/libtiff/tiff-"
+                   version ".tar.gz"))
+            (sha256 (base32
+                     "0wj8d1iwk9vnpax2h29xqc2hwknxg3s0ay2d5pxkg59ihbifn6pa"))))
+   (build-system gnu-build-system)
+   (inputs `(("file" ,file)
+             ("libjpeg-8" ,libjpeg-8)))
+             ;; currently does not compile with libjpeg version 9
+   (arguments
+    `(#:configure-flags
+      (list (string-append "--with-jpeg-include-dir="
+                           (assoc-ref %build-inputs "libjpeg-8")
+                           "/include"))
+      #:phases
+      (alist-replace
+       'configure
+       (lambda* (#:key #:allow-other-keys #:rest args)
+        (let ((configure (assoc-ref %standard-phases 'configure)))
+          (substitute* "configure"
+            (("`/usr/bin/file")
+            (string-append "`" (which "file"))))
+          (apply configure args)))
+      %standard-phases)))
+   (synopsis "Libtiff, a library for handling TIFF files")
+   (description
+    "Libtiff provides support for the Tag Image File Format (TIFF), a format
+used for storing image data.
+Included are a library, libtiff, for reading and writing TIFF and a small
+collection of tools for doing simple manipulations of TIFF images.")
+   (license (bsd-style "file://COPYRIGHT"
+                       "See COPYRIGHT in the distribution."))
+   (home-page "http://www.libtiff.org/")))
diff --git a/gnu/packages/libunistring.scm b/gnu/packages/libunistring.scm
new file mode 100644
index 0000000000..62ade5e378
--- /dev/null
+++ b/gnu/packages/libunistring.scm
@@ -0,0 +1,58 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 libunistring)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public libunistring
+  (package
+   (name "libunistring")
+   (version "0.9.3")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "mirror://gnu/libunistring/libunistring-"
+                  version ".tar.gz"))
+            (sha256
+             (base32
+              "18q620269xzpw39dwvr9zpilnl2dkw5z5kz3mxaadnpv4k3kw3b1"))))
+   (propagated-inputs '())                  ; FIXME: add libiconv when !glibc
+   (build-system gnu-build-system)
+   (synopsis "GNU Libunistring, a Unicode string library")
+   (description
+    "This library provides functions for manipulating Unicode strings and for
+manipulating C strings according to the Unicode standard.
+
+GNU libunistring is for you if your application involves non-trivial text
+processing, such as upper/lower case conversions, line breaking, operations
+on words, or more advanced analysis of text.  Text provided by the user can,
+in general, contain characters of all kinds of scripts.  The text processing
+functions provided by this library handle all scripts and all languages.
+
+libunistring is for you if your application already uses the ISO C / POSIX
+<ctype.h>, <wctype.h> functions and the text it operates on is provided by
+the user and can be in any language.
+
+libunistring is also for you if your application uses Unicode strings as
+internal in-memory representation.")
+   (home-page "http://www.gnu.org/software/libunistring/")
+   (license lgpl3+)))
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
new file mode 100644
index 0000000000..1813f0cd04
--- /dev/null
+++ b/gnu/packages/libusb.scm
@@ -0,0 +1,44 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 libusb)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public libusb
+  (package
+    (name "libusb")
+    (version "1.0.9")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://sourceforge/libusb/libusb-1.0/"
+                          "libusb-" version "/libusb-" version ".tar.bz2"))
+      (sha256
+       (base32
+        "16sz34ix6hw2wwl3kqx6rf26fg210iryr68wc439dc065pffw879"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.libusb.org")
+    (synopsis "Libusb, a user-space USB library")
+    (description
+     "Libusb is a library that gives applications easy access to USB
+devices on various operating systems.")
+    (license lgpl2.1+)))
\ No newline at end of file
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
new file mode 100644
index 0000000000..ded36c5eec
--- /dev/null
+++ b/gnu/packages/linux.scm
@@ -0,0 +1,259 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012 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 linux)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module ((gnu packages compression)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public linux-libre-headers
+  (let* ((version* "3.3.8")
+         (build-phase
+          '(lambda* (#:key system #:allow-other-keys)
+             (let ((arch (car (string-split system #\-))))
+               (setenv "ARCH"
+                       (cond ((string=? arch "i686") "i386")
+                             (else arch)))
+               (format #t "`ARCH' set to `~a'~%" (getenv "ARCH")))
+
+             (and (zero? (system* "make" "defconfig"))
+                  (zero? (system* "make" "mrproper" "headers_check")))))
+         (install-phase
+          `(lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (and (zero? (system* "make"
+                                    (string-append "INSTALL_HDR_PATH=" out)
+                                    "headers_install"))
+                    (mkdir (string-append out "/include/config"))
+                    (call-with-output-file
+                        (string-append out
+                                       "/include/config/kernel.release")
+                      (lambda (p)
+                        (format p "~a-default~%" ,version*))))))))
+   (package
+    (name "linux-libre-headers")
+    (version version*)
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "http://linux-libre.fsfla.org/pub/linux-libre/releases/3.3.8-gnu/linux-libre-"
+                   version "-gnu.tar.xz"))
+             (sha256
+              (base32
+               "0jkfh0z1s6izvdnc3njm39dhzp1cg8i06jv06izwqz9w9qsprvnl"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("perl" ,perl)))
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
+       #:phases (alist-replace
+                 'build ,build-phase
+                 (alist-replace
+                  'install ,install-phase
+                  (alist-delete 'configure %standard-phases)))
+       #:tests? #f))
+    (synopsis "GNU Linux-Libre kernel headers")
+    (description "Headers of the Linux-Libre kernel.")
+    (license "GPLv2")
+    (home-page "http://www.gnu.org/software/linux-libre/"))))
+
+(define-public linux-pam
+  (package
+    (name "linux-pam")
+    (version "1.1.6")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (list (string-append "http://www.linux-pam.org/library/Linux-PAM-"
+                                version ".tar.bz2")
+                 (string-append "mirror://kernel.org/linux/libs/pam/library/Linux-PAM-"
+                                version ".tar.bz2")))
+      (sha256
+       (base32
+        "1hlz2kqvbjisvwyicdincq7nz897b9rrafyzccwzqiqg53b8gf5s"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("flex" ,flex)
+
+       ;; TODO: optional dependencies
+       ;; ("libxcrypt" ,libxcrypt)
+       ;; ("cracklib" ,cracklib)
+       ))
+    (arguments
+     ;; XXX: Tests won't run in chroot, presumably because /etc/pam.d
+     ;; isn't available.
+     '(#:tests? #f))
+    (home-page "http://www.linux-pam.org/")
+    (synopsis "Pluggable authentication modules for Linux")
+    (description
+     "A *Free* project to implement OSF's RFC 86.0.
+Pluggable authentication modules are small shared object files that can
+be used through the PAM API to perform tasks, like authenticating a user
+at login.  Local and dynamic reconfiguration are its key features")
+    (license bsd-3)))
+
+(define-public psmisc
+  (package
+    (name "psmisc")
+    (version "22.20")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://sourceforge/psmisc/psmisc/psmisc-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "052mfraykmxnavpi8s78aljx8w87hyvpx8mvzsgpjsjz73i28wmi"))))
+    (build-system gnu-build-system)
+    (inputs `(("ncurses" ,ncurses)))
+    (home-page "http://psmisc.sourceforge.net/")
+    (synopsis
+     "set of utilities that use the proc filesystem, such as fuser, killall, and pstree")
+    (description
+     "This PSmisc package is a set of some small useful utilities that
+use the proc filesystem. We're not about changing the world, but
+providing the system administrator with some help in common tasks.")
+    (license gpl2+)))
+
+(define-public util-linux
+  (package
+    (name "util-linux")
+    (version "2.21")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://kernel.org/linux/utils/"
+                          name "/v" version "/"
+                          name "-" version ".2" ".tar.xz"))
+      (sha256
+       (base32
+        "1rpgghf7n0zx0cdy8hibr41wvkm2qp1yvd8ab1rxr193l1jmgcir"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--disable-use-tty-group")
+       #:phases (alist-cons-after
+                 'install 'patch-chkdupexe
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((out (assoc-ref outputs "out")))
+                     (substitute* (string-append out "/bin/chkdupexe")
+                       ;; Allow 'patch-shebang' to do its work.
+                       (("@PERL@") "/bin/perl"))))
+                 %standard-phases)))
+    (inputs `(("zlib" ,guix:zlib)
+              ("ncurses" ,ncurses)
+              ("perl" ,perl)))
+    (home-page "https://www.kernel.org/pub/linux/utils/util-linux/")
+    (synopsis
+     "util-linux is a random collection of utilities for the Linux kernel")
+    (description
+     "util-linux is a random collection of utilities for the Linux kernel.")
+
+    ;; Note that util-linux doesn't use the same license for all the
+    ;; code.  GPLv2+ is the default license for a code without an
+    ;; explicitly defined license.
+    (license (list gpl3+ gpl2+ gpl2 lgpl2.0+
+                   bsd-4 public-domain))))
+
+(define-public procps
+  (package
+    (name "procps")
+    (version "3.2.8")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://procps.sourceforge.net/procps-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "0d8mki0q4yamnkk4533kx8mc0jd879573srxhg6r2fs3lkc6iv8i"))))
+    (build-system gnu-build-system)
+    (inputs `(("ncurses" ,ncurses)
+              ("patch/make-3.82" ,(search-patch "procps-make-3.82.patch"))))
+    (arguments
+     '(#:patches (list (assoc-ref %build-inputs "patch/make-3.82"))
+       #:phases (alist-replace
+                 'configure
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; No `configure', just a single Makefile.
+                   (let ((out (assoc-ref outputs "out")))
+                     (substitute* "Makefile"
+                       (("/usr/") "/")
+                       (("--(owner|group) 0") "")
+                       (("ldconfig") "true")
+                       (("^LDFLAGS[[:blank:]]*:=(.*)$" _ value)
+                        ;; Add libproc to the RPATH.
+                        (string-append "LDFLAGS := -Wl,-rpath="
+                                       out "/lib" value))))
+                   (setenv "CC" "gcc"))
+                 (alist-replace
+                  'install
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (let ((out (assoc-ref outputs "out")))
+                      (and (zero?
+                            (system* "make" "install"
+                                     (string-append "DESTDIR=" out)))
+
+                           ;; Sanity check.
+                           (zero?
+                            (system* (string-append out "/bin/ps")
+                                     "--version")))))
+                  %standard-phases))
+
+       ;; What did you expect?  Tests?
+       #:tests? #f))
+    (home-page "http://procps.sourceforge.net/")
+    (synopsis
+     "Utilities that give information about processes using the /proc filesystem")
+    (description
+     "procps is the package that has a bunch of small useful utilities
+that give information about processes using the Linux /proc file system.
+The package includes the programs ps, top, vmstat, w, kill, free,
+slabtop, and skill.")
+    (license gpl2)))
+
+(define-public usbutils
+  (package
+    (name "usbutils")
+    (version "006")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://kernel.org/linux/utils/usb/usbutils/"
+                          "usbutils-" version ".tar.xz"))
+      (sha256
+       (base32
+        "03pd57vv8c6x0hgjqcbrxnzi14h8hcghmapg89p8k5zpwpkvbdfr"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libusb" ,libusb) ("pkg-config" ,pkg-config)))
+    (home-page "http://www.linux-usb.org/")
+    (synopsis
+     "Tools for working with USB devices, such as lsusb")
+    (description
+     "Tools for working with USB devices, such as lsusb.")
+    (license gpl2+)))
diff --git a/gnu/packages/lout.scm b/gnu/packages/lout.scm
new file mode 100644
index 0000000000..b95b694ab4
--- /dev/null
+++ b/gnu/packages/lout.scm
@@ -0,0 +1,132 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 lout)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public lout
+  ;; This one is a bit tricky, because it doesn't follow the GNU Build System
+  ;; rules.  Instead, it has a makefile that has to be patched to set the
+  ;; prefix, etc., and it has no makefile rules to build its doc.
+  (let ((configure-phase
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (let ((out (assoc-ref outputs "out"))
+                  (doc (assoc-ref outputs "doc")))
+              (substitute* "makefile"
+                (("^PREFIX[[:blank:]]*=.*$")
+                 (string-append "PREFIX = " out "\n"))
+                (("^LOUTLIBDIR[[:blank:]]*=.*$")
+                 (string-append "LOUTLIBDIR = " out "/lib/lout\n"))
+                (("^LOUTDOCDIR[[:blank:]]*=.*$")
+                 (string-append "LOUTDOCDIR = " doc "/doc/lout\n"))
+                (("^MANDIR[[:blank:]]*=.*$")
+                 (string-append "MANDIR = " out "/man\n")))
+              (mkdir out)
+              (mkdir (string-append out "/bin"))
+              (mkdir (string-append out "/lib"))
+              (mkdir (string-append out "/man"))
+              (mkdir-p (string-append doc "/doc/lout")))))
+        (install-man-phase
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (zero? (system* "make" "installman"))))
+        (doc-phase
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (define out
+              (assoc-ref outputs "doc"))
+
+            (setenv "PATH"
+                    (string-append (assoc-ref outputs "out")
+                                   "/bin:" (getenv "PATH")))
+            (chdir "doc")
+            (every (lambda (doc)
+                     (format #t "doc: building `~a'...~%" doc)
+                     (with-directory-excursion doc
+                       (let ((file (string-append out "/doc/lout/"
+                                                  doc ".ps")))
+                         (and (or (file-exists? "outfile.ps")
+                                  (zero? (system* "lout" "-r4" "-o"
+                                                  "outfile.ps" "all")))
+                              (begin
+                                (copy-file "outfile.ps" file)
+                                #t)
+                              (zero? (system* "ps2pdf"
+                                              "-dPDFSETTINGS=/prepress"
+                                              "-sPAPERSIZE=a4"
+                                              file
+                                              (string-append out "/doc/lout/"
+                                                             doc ".pdf")))))))
+                   '("design" "expert" "slides" "user")))))
+   (package
+    (name "lout")
+    (version "3.39")
+    (source (origin
+             (method url-fetch)
+             ;; FIXME: `http-get' doesn't follow redirects, hence the URL.
+             (uri (string-append
+                   "http://download-mirror.savannah.gnu.org/releases/lout/lout-"
+                   version ".tar.gz"))
+             (sha256
+              (base32
+               "12gkyqrn0kaa8xq7sc7v3wm407pz2fxg9ngc75aybhi5z825b9vq"))))
+    (build-system gnu-build-system)               ; actually, just a makefile
+    (outputs '("out" "doc"))
+    (inputs
+     `(;; FIXME: Add dependency on Ghostscript.
+       ;; ("ghostscript" ,(lambda _
+       ;;                   (nixpkgs-derivation "ghostscript")))
+       ))
+    (arguments `(#:modules ((guix build utils)
+                            (guix build gnu-build-system)
+                            (srfi srfi-1))        ; we need SRFI-1
+                 #:tests? #f                      ; no "check" target
+
+                 ;; Customize the build phases.
+                 #:phases (alist-replace
+                           'configure ,configure-phase
+
+                           (alist-cons-after
+                            'install 'install-man-pages
+                            ,install-man-phase
+
+                            (alist-cons-after
+                             'install 'install-doc
+                             ,doc-phase
+                             %standard-phases)))))
+    (synopsis "Lout, a document layout system similar in style to LaTeX")
+    (description
+"The Lout document formatting system is now reads a high-level description of
+a document similar in style to LaTeX and produces a PostScript or plain text
+output file.
+
+Lout offers an unprecedented range of advanced features, including optimal
+paragraph and page breaking, automatic hyphenation, PostScript EPS file
+inclusion and generation, equation formatting, tables, diagrams, rotation and
+scaling, sorted indexes, bibliographic databases, running headers and
+odd-even pages, automatic cross referencing, multilingual documents including
+hyphenation (most European languages are supported), formatting of computer
+programs, and much more, all ready to use.  Furthermore, Lout is easily
+extended with definitions which are very much easier to write than troff of
+TeX macros because Lout is a high-level, purely functional language, the
+outcome of an eight-year research project that went back to the
+beginning.")
+    (license gpl3+)
+    (home-page "http://savannah.nongnu.org/projects/lout/"))))
diff --git a/gnu/packages/lsh.scm b/gnu/packages/lsh.scm
new file mode 100644
index 0000000000..b42eb24639
--- /dev/null
+++ b/gnu/packages/lsh.scm
@@ -0,0 +1,126 @@
+;;; 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 lsh)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (distro)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages linux)
+  #:use-module ((gnu packages compression)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages gperf)
+  #:use-module (gnu packages base))
+
+(define-public liboop
+  (package
+    (name "liboop")
+    (version "1.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "http://download.ofb.net/liboop/liboop-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0z6rlalhvfca64jpvksppc9bdhs7jwhiw4y35g5ibvh91xp3rn1l"))))
+    (build-system gnu-build-system)
+    (home-page "http://liboop.ofb.net/")
+    (synopsis "`liboop', an event loop library")
+    (description "liboop is an event loop library.")
+    (license lgpl2.1+)))
+
+(define-public lsh
+  (package
+    (name "lsh")
+    (version "2.0.4")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/lsh/lsh-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "149hf49xcj99wwvi7hcb59igq4vpyv8har1br1if3lrsw5irsjv1"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("linux-pam" ,linux-pam)
+       ("m4" ,m4)
+       ("readline" ,readline)
+       ("liboop" ,liboop)
+       ("zlib" ,guix:zlib)
+       ("gmp" ,gmp)
+       ("guile" ,guile-final)
+       ("gperf" ,gperf)
+       ("psmisc" ,psmisc)                         ; for `killall'
+
+       ("patch/no-root-login" ,(search-patch "lsh-no-root-login.patch"))
+       ("patch/guile-compat" ,(search-patch "lsh-guile-compat.patch"))
+       ("patch/pam-service-name"
+        ,(search-patch "lsh-pam-service-name.patch"))))
+    (arguments
+     '(#:patches (list (assoc-ref %build-inputs "patch/no-root-login")
+                       (assoc-ref %build-inputs "patch/pam-service-name")
+                       (assoc-ref %build-inputs "patch/guile-compat"))
+
+       ;; Skip the `configure' test that checks whether /dev/ptmx &
+       ;; co. work as expected, because it relies on impurities (for
+       ;; instance, /dev/pts may be unavailable in chroots.)
+       #:configure-flags '("lsh_cv_sys_unix98_ptys=yes")
+
+       ;; FIXME: Tests won't run in a chroot, presumably because
+       ;; /etc/profile is missing, and thus clients get an empty $PATH
+       ;; and nothing works.
+       #:tests? #f
+
+       #:phases
+       (alist-cons-before
+        'configure 'fix-test-suite
+        (lambda _
+          ;; Tests rely on $USER being set.
+          (setenv "USER" "guix")
+
+          (substitute* "src/testsuite/functions.sh"
+            (("localhost")
+             ;; Avoid host name lookups since they don't work in chroot
+             ;; builds.
+             "127.0.0.1")
+            (("set -e")
+             ;; Make tests more verbose.
+             "set -e\nset -x"))
+
+          (substitute* (find-files "src/testsuite" "-test$")
+            (("localhost") "127.0.0.1"))
+
+          (substitute* "src/testsuite/login-auth-test"
+            (("/bin/cat")
+             ;; Use the right path to `cat'.
+             (which "cat"))))
+        %standard-phases)))
+    (home-page "http://www.lysator.liu.se/~nisse/lsh/")
+    (synopsis
+     "GNU lsh, a GPL'd implementation of the SSH protocol")
+    (description
+     "lsh is a free implementation (in the GNU sense) of the ssh
+version 2 protocol, currently being standardised by the IETF
+SECSH working group.")
+    (license gpl2+)))
diff --git a/gnu/packages/m4.scm b/gnu/packages/m4.scm
new file mode 100644
index 0000000000..bac8d02c85
--- /dev/null
+++ b/gnu/packages/m4.scm
@@ -0,0 +1,87 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 m4)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public m4
+  (package
+   (name "m4")
+   (version "1.4.16")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/m4/m4-"
+                                version ".tar.bz2"))
+            (sha256
+             (base32
+              "035r7ma272j2cwni2961jp22k6bn3n9xwn3b3qbcn2yrvlghql22"))))
+   (build-system gnu-build-system)
+   (arguments (case-lambda
+                ((system)
+                 ;; XXX: Disable tests on those platforms with know issues.
+                 `(#:tests? ,(not (member system
+                                          '("x86_64-darwin"
+                                            "i686-cygwin"
+                                            "i686-sunos")))
+                   #:patches (list (assoc-ref %build-inputs "patch/s_isdir")
+                                   (assoc-ref %build-inputs
+                                              "patch/readlink-EINVAL")
+                                   (assoc-ref %build-inputs "patch/gets"))
+                   #:phases (alist-cons-before
+                             'check 'pre-check
+                             (lambda* (#:key inputs #:allow-other-keys)
+                               ;; Fix references to /bin/sh.
+                               (let ((bash (assoc-ref inputs "bash")))
+                                 (for-each patch-shebang
+                                           (find-files "tests" "\\.sh$"))
+                                 (substitute* (find-files "tests"
+                                                          "posix_spawn")
+                                   (("/bin/sh")
+                                    (format #f "~a/bin/bash" bash)))))
+                             %standard-phases)))
+                ((system cross-system)
+                 `(#:patches (list (assoc-ref %build-inputs "patch/s_isdir")
+                                   (assoc-ref %build-inputs
+                                              "patch/readlink-EINVAL")
+                                   (assoc-ref %build-inputs "patch/gets"))))))
+   (inputs `(("patch/s_isdir" ,(search-patch "m4-s_isdir.patch"))
+             ("patch/readlink-EINVAL"
+              ,(search-patch "m4-readlink-EINVAL.patch"))
+             ("patch/gets" ,(search-patch "m4-gets-undeclared.patch"))))
+   (synopsis "GNU M4, a macro processor")
+   (description
+    "GNU M4 is an implementation of the traditional Unix macro processor.  It
+is mostly SVR4 compatible although it has some extensions (for example,
+handling more than 9 positional parameters to macros).  GNU M4 also has
+built-in functions for including files, running shell commands, doing
+arithmetic, etc.
+
+GNU M4 is a macro processor in the sense that it copies its input to the
+output expanding macros as it goes.  Macros are either builtin or
+user-defined and can take any number of arguments.  Besides just doing macro
+expansion, m4 has builtin functions for including named files, running UNIX
+commands, doing integer arithmetic, manipulating text in various ways,
+recursion etc...  m4 can be used either as a front-end to a compiler or as a
+macro processor in its own right.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/m4/")))
diff --git a/gnu/packages/mailutils.scm b/gnu/packages/mailutils.scm
new file mode 100644
index 0000000000..f6d46aaf34
--- /dev/null
+++ b/gnu/packages/mailutils.scm
@@ -0,0 +1,106 @@
+;;; 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 mailutils)
+  #:use-module (distro)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages gnutls)
+  #:use-module (gnu packages gdbm)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages dejagnu)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages mysql)
+  #:use-module (gnu packages autotools)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public mailutils
+  (package
+    (name "mailutils")
+    (version "2.2")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/mailutils/mailutils-"
+                                 version ".tar.bz2"))
+             (sha256
+              (base32
+               "0szbqa12zqzldqyw97lxqax3ja2adis83i7brdfsxmrfw68iaf65"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(;; TODO: Add `--with-sql'.
+       #:patches (list (assoc-ref %build-inputs
+                                  "patch/gets-undeclared"))
+       #:phases (alist-cons-before
+                 'build 'pre-build
+                 (lambda _
+                   ;; Use Guile 2.0's public API.
+                   (substitute* "libmu_scm/mu_message.c"
+                     (("scm_i_string_length")
+                      "scm_c_string_length"))
+
+                   ;; This file should be generated to use the right
+                   ;; value of $(libdir) et al.
+                   (delete-file "libmu_scm/mailutils.scm")
+
+                   ;; Use the right file name for `cat'.
+                   (substitute* "testsuite/lib/mailutils.exp"
+                     (("/bin/cat")
+                      (which "cat"))))
+                 %standard-phases)
+       #:parallel-tests? #f))
+    (inputs
+     `(("dejagnu" ,dejagnu)
+       ("m4" ,m4)
+       ("texinfo" ,texinfo)
+       ("guile" ,guile-2.0)
+       ("gnutls" ,gnutls)
+       ("ncurses" ,ncurses)
+       ("readline" ,readline)
+       ("linux-pam" ,linux-pam)
+       ("libtool" ,libtool)
+       ("gdbm" ,gdbm)
+       ("patch/gets-undeclared"
+        ,(search-patch "m4-gets-undeclared.patch"))))
+    (home-page "http://www.gnu.org/software/mailutils/")
+    (synopsis "A rich and powerful protocol-independent mail framework")
+    (description
+     "GNU Mailutils is a rich and powerful protocol-independent mail
+framework.  It contains a series of useful mail libraries, clients, and
+servers.  These are the primary mail utilities for the GNU system.  The
+central library is capable of handling electronic mail in various
+mailbox formats and protocols, both local and remote.  Specifically,
+this project contains a POP3 server, an IMAP4 server, and a Sieve mail
+filter.  It also provides a POSIX `mailx' client, and a collection of
+other handy tools.
+
+The GNU Mailutils libraries supply an ample set of primitives for
+handling electronic mail in programs written in C, C++, Python or
+Scheme.
+
+The utilities provided by Mailutils include imap4d and pop3d mail
+servers, mail reporting utility comsatd, general-purpose mail delivery
+agent maidag, mail filtering program sieve, and an implementation of MH
+message handling system.")
+    (license
+     ;; Libraries are under LGPLv3+, and programs under GPLv3+.
+     (list gpl3+ lgpl3+))))
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
new file mode 100644
index 0000000000..20679d2244
--- /dev/null
+++ b/gnu/packages/make-bootstrap.scm
@@ -0,0 +1,562 @@
+;;; 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 make-bootstrap)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix licenses)
+  #:use-module (guix build-system trivial)
+  #:use-module (guix build-system gnu)
+  #:use-module ((distro) #:select (search-patch))
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1)
+  #:export (%bootstrap-binaries-tarball
+            %binutils-bootstrap-tarball
+            %glibc-bootstrap-tarball
+            %gcc-bootstrap-tarball
+            %guile-bootstrap-tarball
+            %bootstrap-tarballs))
+
+;;; Commentary:
+;;;
+;;; This modules provides tools to build tarballs of the "bootstrap binaries"
+;;; used in (gnu packages bootstrap).  These statically-linked binaries are
+;;; taken for granted and used as the root of the whole bootstrap procedure.
+;;;
+;;; Code:
+
+(define %glibc-for-bootstrap
+  ;; A libc whose `system' and `popen' functions looks for `sh' in $PATH,
+  ;; without nscd, and with static NSS modules.
+  (package (inherit glibc-final)
+    (arguments
+     (lambda (system)
+       (substitute-keyword-arguments ((package-arguments glibc-final) system)
+         ((#:patches patches)
+          `(cons (assoc-ref %build-inputs "patch/system")
+                 ,patches))
+         ((#:configure-flags flags)
+          ;; Arrange so that getaddrinfo & co. do not contact the nscd,
+          ;; and can use statically-linked NSS modules.
+          `(cons* "--disable-nscd" "--disable-build-nscd"
+                  "--enable-static-nss"
+                  ,flags)))))
+    (inputs
+     `(("patch/system" ,(search-patch "glibc-bootstrap-system.patch"))
+       ,@(package-inputs glibc-final)))))
+
+(define %standard-inputs-with-relocatable-glibc
+  ;; Standard inputs with the above libc and corresponding GCC.
+  `(("libc", %glibc-for-bootstrap)
+    ("gcc" ,(package-with-explicit-inputs
+             gcc-4.7
+             `(("libc",%glibc-for-bootstrap)
+               ,@(alist-delete "libc" %final-inputs))
+             (current-source-location)))
+    ,@(fold alist-delete %final-inputs '("libc" "gcc"))))
+
+(define %bash-static
+  (static-package bash-light))
+
+(define %static-inputs
+  ;; Packages that are to be used as %BOOTSTRAP-INPUTS.
+  (let ((coreutils (package (inherit coreutils)
+                     (arguments
+                      `(#:configure-flags
+                        '("--disable-nls"
+                          "--disable-silent-rules"
+                          "--enable-no-install-program=stdbuf,libstdbuf.so"
+                          "CFLAGS=-Os -g0"        ; smaller, please
+                          "LDFLAGS=-static -pthread")
+                        #:tests? #f   ; signal-related Gnulib tests fail
+                        ,@(package-arguments coreutils)))
+
+                     ;; Remove optional dependencies such as GMP.
+                     (inputs `(,(assoc "perl" (package-inputs coreutils))))))
+        (bzip2 (package (inherit bzip2)
+                 (arguments
+                  (substitute-keyword-arguments (package-arguments bzip2)
+                    ((#:phases phases)
+                     `(alist-cons-before
+                       'build 'dash-static
+                       (lambda _
+                         (substitute* "Makefile"
+                           (("^LDFLAGS[[:blank:]]*=.*$")
+                            "LDFLAGS = -static")))
+                       ,phases))))))
+        (xz (package (inherit xz)
+              (arguments
+               `(#:strip-flags '("--strip-all")
+                 #:phases (alist-cons-before
+                           'configure 'static-executable
+                           (lambda _
+                             ;; Ask Libtool for a static executable.
+                             (substitute* "src/xz/Makefile.in"
+                               (("^xz_LDADD =")
+                                "xz_LDADD = -all-static")))
+                           %standard-phases)))))
+        (gawk (package (inherit gawk)
+                (arguments
+                 (lambda (system)
+                   `(#:patches (list (assoc-ref %build-inputs "patch/sh"))
+                     ,@(substitute-keyword-arguments
+                           ((package-arguments gawk) system)
+                         ((#:phases phases)
+                          `(alist-cons-before
+                            'configure 'no-export-dynamic
+                            (lambda _
+                              ;; Since we use `-static', remove
+                              ;; `-export-dynamic'.
+                              (substitute* "configure"
+                                (("-export-dynamic") "")))
+                            ,phases))))))
+                (inputs `(("patch/sh" ,(search-patch "gawk-shell.patch"))))))
+        (finalize (lambda (p)
+                    (static-package (package-with-explicit-inputs
+                                     p
+                                     %standard-inputs-with-relocatable-glibc)
+                                    (current-source-location)))))
+    `(,@(map (match-lambda
+              ((name package)
+               (list name (finalize package))))
+             `(("tar" ,tar)
+               ("gzip" ,gzip)
+               ("bzip2" ,bzip2)
+               ("xz" ,xz)
+               ("patch" ,patch)
+               ("coreutils" ,coreutils)
+               ("sed" ,sed)
+               ("grep" ,grep)
+               ("gawk" ,gawk)))
+      ("bash" ,%bash-static)
+      ;; ("ld-wrapper" ,ld-wrapper)
+      ;; ("binutils" ,binutils-final)
+      ;; ("gcc" ,gcc-final)
+      ;; ("libc" ,glibc-final)
+      )))
+
+(define %static-binaries
+  (package
+    (name "static-binaries")
+    (version "0")
+    (build-system trivial-build-system)
+    (source #f)
+    (inputs %static-inputs)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (ice-9 ftw)
+                      (ice-9 match)
+                      (srfi srfi-1)
+                      (srfi srfi-26)
+                      (guix build utils))
+
+         (let ()
+          (define (directory-contents dir)
+            (map (cut string-append dir "/" <>)
+                 (scandir dir (negate (cut member <> '("." ".."))))))
+
+          (define (copy-directory source destination)
+            (for-each (lambda (file)
+                        (format #t "copying ~s...~%" file)
+                        (copy-file file
+                                   (string-append destination "/"
+                                                  (basename file))))
+                      (directory-contents source)))
+
+          (let* ((out (assoc-ref %outputs "out"))
+                 (bin (string-append out "/bin")))
+            (mkdir-p bin)
+
+            ;; Copy Coreutils binaries.
+            (let* ((coreutils (assoc-ref %build-inputs "coreutils"))
+                   (source    (string-append coreutils "/bin")))
+              (copy-directory source bin))
+
+            ;; For the other inputs, copy just one binary, which has the
+            ;; same name as the input.
+            (for-each (match-lambda
+                       ((name . dir)
+                        (let ((source (string-append dir "/bin/" name)))
+                          (format #t "copying ~s...~%" source)
+                          (copy-file source
+                                     (string-append bin "/" name)))))
+                      (alist-delete "coreutils" %build-inputs))
+
+            ;; But of course, there are exceptions to this rule.
+            (let ((grep (assoc-ref %build-inputs "grep")))
+              (copy-file (string-append grep "/bin/fgrep")
+                         (string-append bin "/fgrep"))
+              (copy-file (string-append grep "/bin/egrep")
+                         (string-append bin "/egrep")))
+
+            ;; Clear references to the store path.
+            (for-each remove-store-references
+                      (directory-contents bin))
+
+            (with-directory-excursion bin
+              ;; Programs such as Perl's build system want these aliases.
+              (symlink "bash" "sh")
+              (symlink "gawk" "awk"))
+
+            #t)))))
+    (synopsis "Statically-linked bootstrap binaries")
+    (description
+     "Binaries used to bootstrap the distribution.")
+    (license #f)
+    (home-page #f)))
+
+(define %binutils-static
+  ;; Statically-linked Binutils.
+  (package (inherit binutils)
+    (name "binutils-static")
+    (arguments
+     `(#:configure-flags '("--disable-gold" "--with-lib-path=/no-ld-lib-path")
+       #:strip-flags '("--strip-all")
+       #:phases (alist-cons-before
+                 'configure 'all-static
+                 (lambda _
+                   ;; The `-all-static' libtool flag can only be passed
+                   ;; after `configure', since configure tests don't use
+                   ;; libtool, and only for executables built with libtool.
+                   (substitute* '("binutils/Makefile.in"
+                                  "gas/Makefile.in"
+                                  "ld/Makefile.in")
+                     (("^LDFLAGS =(.*)$" line)
+                      (string-append line
+                                     "\nAM_LDFLAGS = -static -all-static\n"))))
+                 %standard-phases)))))
+
+(define %binutils-static-stripped
+  ;; The subset of Binutils that we need.
+  (package (inherit %binutils-static)
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+
+         (setvbuf (current-output-port) _IOLBF)
+         (let* ((in  (assoc-ref %build-inputs "binutils"))
+                (out (assoc-ref %outputs "out"))
+                (bin (string-append out "/bin")))
+           (mkdir-p bin)
+           (for-each (lambda (file)
+                       (let ((target (string-append bin "/" file)))
+                         (format #t "copying `~a'...~%" file)
+                         (copy-file (string-append in "/bin/" file)
+                                    target)
+                         (remove-store-references target)))
+                     '("ar" "as" "ld" "nm"  "objcopy" "objdump"
+                       "ranlib" "readelf" "size" "strings" "strip"))
+           #t))))
+    (inputs `(("binutils" ,%binutils-static)))))
+
+(define %glibc-stripped
+  ;; GNU libc's essential shared libraries, dynamic linker, and headers,
+  ;; with all references to store directories stripped.  As a result,
+  ;; libc.so is unusable and need to be patched for proper relocation.
+  (let ((glibc %glibc-for-bootstrap))
+    (package (inherit glibc)
+      (name "glibc-stripped")
+      (build-system trivial-build-system)
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils))
+
+           (setvbuf (current-output-port) _IOLBF)
+           (let* ((out    (assoc-ref %outputs "out"))
+                  (libdir (string-append out "/lib"))
+                  (incdir (string-append out "/include"))
+                  (libc   (assoc-ref %build-inputs "libc"))
+                  (linux  (assoc-ref %build-inputs "linux-headers")))
+             (mkdir-p libdir)
+             (for-each (lambda (file)
+                         (let ((target (string-append libdir "/"
+                                                      (basename file))))
+                           (copy-file file target)
+                           (remove-store-references target)))
+                       (find-files (string-append libc "/lib")
+                                   "^(crt.*|ld.*|lib(c|m|dl|rt|pthread|nsl|util).*\\.so(\\..*)?|libc_nonshared\\.a)$"))
+
+             (copy-recursively (string-append libc "/include") incdir)
+
+             ;; Copy some of the Linux-Libre headers that glibc headers
+             ;; refer to.
+             (mkdir (string-append incdir "/linux"))
+             (for-each (lambda (file)
+                         (copy-file (string-append linux "/include/linux/" file)
+                                    (string-append incdir "/linux/"
+                                                   (basename file))))
+                       '("limits.h" "errno.h" "socket.h" "kernel.h"
+                         "sysctl.h" "param.h" "ioctl.h" "types.h"
+                         "posix_types.h" "stddef.h"))
+
+             (copy-recursively (string-append linux "/include/asm")
+                               (string-append incdir "/asm"))
+             (copy-recursively (string-append linux "/include/asm-generic")
+                               (string-append incdir "/asm-generic"))
+             #t))))
+      (inputs `(("libc" ,glibc)
+                ("linux-headers" ,linux-libre-headers))))))
+
+(define %gcc-static
+  ;; A statically-linked GCC, with stripped-down functionality.
+  (package-with-explicit-inputs
+   (package (inherit gcc-final)
+     (name "gcc-static")
+     (arguments
+      (lambda (system)
+        `(#:modules ((guix build utils)
+                     (guix build gnu-build-system)
+                     (srfi srfi-1)
+                     (srfi srfi-26)
+                     (ice-9 regex))
+          ,@(substitute-keyword-arguments ((package-arguments gcc-final) system)
+              ((#:guile _) #f)
+              ((#:implicit-inputs? _) #t)
+              ((#:configure-flags flags)
+               `(append (list
+                         "--disable-shared"
+                         "--disable-plugin"
+                         "--enable-languages=c"
+                         "--disable-libmudflap"
+                         "--disable-libgomp"
+                         "--disable-libssp"
+                         "--disable-libquadmath"
+                         "--disable-decimal-float")
+                        (remove (cut string-match "--(.*plugin|enable-languages)" <>)
+                                ,flags)))
+              ((#:make-flags flags)
+               `(cons "BOOT_LDFLAGS=-static" ,flags))))))
+     (inputs `(("gmp-source" ,(package-source gmp))
+               ("mpfr-source" ,(package-source mpfr))
+               ("mpc-source" ,(package-source mpc))
+               ("binutils" ,binutils-final)
+               ,@(package-inputs gcc-4.7))))
+   %standard-inputs-with-relocatable-glibc))
+
+(define %gcc-stripped
+  ;; The subset of GCC files needed for bootstrap.
+  (package (inherit gcc-4.7)
+    (name "gcc-stripped")
+    (build-system trivial-build-system)
+    (source #f)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (srfi srfi-1)
+                      (srfi srfi-26)
+                      (guix build utils))
+
+         (setvbuf (current-output-port) _IOLBF)
+         (let* ((out        (assoc-ref %outputs "out"))
+                (bindir     (string-append out "/bin"))
+                (libdir     (string-append out "/lib"))
+                (libexecdir (string-append out "/libexec"))
+                (gcc        (assoc-ref %build-inputs "gcc")))
+           (copy-recursively (string-append gcc "/bin") bindir)
+           (for-each remove-store-references
+                     (find-files bindir ".*"))
+
+           (copy-recursively (string-append gcc "/lib") libdir)
+           (for-each remove-store-references
+                     (remove (cut string-suffix? ".h" <>)
+                             (find-files libdir ".*")))
+
+           (copy-recursively (string-append gcc "/libexec")
+                             libexecdir)
+           (for-each remove-store-references
+                     (find-files libexecdir ".*"))
+           #t))))
+    (inputs `(("gcc" ,%gcc-static)))))
+
+(define %guile-static
+  ;; A statically-linked Guile that is relocatable--i.e., it can search
+  ;; .scm and .go files relative to its installation directory, rather
+  ;; than in hard-coded configure-time paths.
+  (let ((guile (package (inherit guile-2.0)
+                 (inputs
+                  `(("patch/relocatable"
+                     ,(search-patch "guile-relocatable.patch"))
+                    ("patch/utf8"
+                     ,(search-patch "guile-default-utf8.patch"))
+                    ,@(package-inputs guile-2.0)))
+                 (arguments
+                  `(;; When `configure' checks for ltdl availability, it
+                    ;; doesn't try to link using libtool, and thus fails
+                    ;; because of a missing -ldl.  Work around that.
+                    #:configure-flags '("LDFLAGS=-ldl")
+
+                    #:phases (alist-cons-before
+                              'configure 'static-guile
+                              (lambda _
+                                (substitute* "libguile/Makefile.in"
+                                  ;; Create a statically-linked `guile'
+                                  ;; executable.
+                                  (("^guile_LDFLAGS =")
+                                   "guile_LDFLAGS = -all-static")
+
+                                  ;; Add `-ldl' *after* libguile-2.0.la.
+                                  (("^guile_LDADD =(.*)$" _ ldadd)
+                                   (string-append "guile_LDADD = "
+                                                  (string-trim-right ldadd)
+                                                  " -ldl\n"))))
+                              %standard-phases)
+
+                    ;; Allow Guile to be relocated, as is needed during
+                    ;; bootstrap.
+                    #:patches
+                    (list (assoc-ref %build-inputs "patch/relocatable")
+                          (assoc-ref %build-inputs "patch/utf8"))
+
+                    ;; There are uses of `dynamic-link' in
+                    ;; {foreign,coverage}.test that don't fly here.
+                    #:tests? #f)))))
+    (package-with-explicit-inputs (static-package guile)
+                                  %standard-inputs-with-relocatable-glibc
+                                  (current-source-location))))
+
+(define %guile-static-stripped
+  ;; A stripped static Guile binary, for use during bootstrap.
+  (package (inherit %guile-static)
+    (name "guile-static-stripped")
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (let ()
+         (use-modules (guix build utils))
+
+         (let ((in  (assoc-ref %build-inputs "guile"))
+               (out (assoc-ref %outputs "out")))
+           (mkdir-p (string-append out "/share/guile/2.0"))
+           (copy-recursively (string-append in "/share/guile/2.0")
+                             (string-append out "/share/guile/2.0"))
+
+           (mkdir-p (string-append out "/lib/guile/2.0/ccache"))
+           (copy-recursively (string-append in "/lib/guile/2.0/ccache")
+                             (string-append out "/lib/guile/2.0/ccache"))
+
+           (mkdir (string-append out "/bin"))
+           (copy-file (string-append in "/bin/guile")
+                      (string-append out "/bin/guile"))
+           (remove-store-references (string-append out "/bin/guile"))
+           #t))))
+    (inputs `(("guile" ,%guile-static)))))
+
+(define (tarball-package pkg)
+  "Return a package containing a tarball of PKG."
+  (package (inherit pkg)
+    (location (source-properties->location (current-source-location)))
+    (name (string-append (package-name pkg) "-tarball"))
+    (build-system trivial-build-system)
+    (inputs `(("tar" ,tar)
+              ("xz" ,xz)
+              ("input" ,pkg)))
+    (arguments
+     (lambda (system)
+       (let ((name    (package-name pkg))
+             (version (package-version pkg)))
+         `(#:modules ((guix build utils))
+           #:builder
+           (begin
+             (use-modules (guix build utils))
+             (let ((out   (assoc-ref %outputs "out"))
+                   (input (assoc-ref %build-inputs "input"))
+                   (tar   (assoc-ref %build-inputs "tar"))
+                   (xz    (assoc-ref %build-inputs "xz")))
+               (mkdir out)
+               (set-path-environment-variable "PATH" '("bin") (list tar xz))
+               (with-directory-excursion input
+                 (zero? (system* "tar" "cJvf"
+                                 (string-append out "/"
+                                                ,name "-" ,version
+                                                "-" ,system ".tar.xz")
+                                 ".")))))))))))
+
+(define %bootstrap-binaries-tarball
+  ;; A tarball with the statically-linked bootstrap binaries.
+  (tarball-package %static-binaries))
+
+(define %binutils-bootstrap-tarball
+  ;; A tarball with the statically-linked Binutils programs.
+  (tarball-package %binutils-static-stripped))
+
+(define %glibc-bootstrap-tarball
+  ;; A tarball with GNU libc's shared libraries, dynamic linker, and headers.
+  (tarball-package %glibc-stripped))
+
+(define %gcc-bootstrap-tarball
+  ;; A tarball with a dynamic-linked GCC and its headers.
+  (tarball-package %gcc-stripped))
+
+(define %guile-bootstrap-tarball
+  ;; A tarball with the statically-linked, relocatable Guile.
+  (tarball-package %guile-static-stripped))
+
+(define %bootstrap-tarballs
+  ;; A single derivation containing all the bootstrap tarballs, for
+  ;; convenience.
+  (package
+    (name "bootstrap-tarballs")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (let ((out (assoc-ref %outputs "out")))
+         (use-modules (guix build utils)
+                      (ice-9 match)
+                      (srfi srfi-26))
+
+         (setvbuf (current-output-port) _IOLBF)
+         (mkdir out)
+         (chdir out)
+         (for-each (match-lambda
+                    ((name . directory)
+                     (for-each (lambda (file)
+                                 (format #t "~a -> ~a~%" file out)
+                                 (symlink file (basename file)))
+                               (find-files directory "\\.tar\\."))))
+                   %build-inputs)
+         #t)))
+    (inputs `(("guile-tarball" ,%guile-bootstrap-tarball)
+              ("gcc-tarball" ,%gcc-bootstrap-tarball)
+              ("binutils-tarball" ,%binutils-bootstrap-tarball)
+              ("glibc-tarball" ,%glibc-bootstrap-tarball)
+              ("coreutils&co-tarball" ,%bootstrap-binaries-tarball)))
+    (synopsis #f)
+    (description #f)
+    (home-page #f)
+    (license gpl3+)))
+
+;;; make-bootstrap.scm ends here
diff --git a/gnu/packages/mit-krb5.scm b/gnu/packages/mit-krb5.scm
new file mode 100644
index 0000000000..4b30a7ca17
--- /dev/null
+++ b/gnu/packages/mit-krb5.scm
@@ -0,0 +1,69 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 mit-krb5)
+  #:use-module (distro)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages perl)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public mit-krb5
+  (package
+   (name "mit-krb5")
+   (version "1.11")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://web.mit.edu/kerberos/www/dist/krb5/"
+                                version
+                                "/krb5-" version
+                                "-signed.tar"))
+            (sha256 (base32
+                     "0lc6lxb98qzg4x01lppq700vkr1ax9rld09znahrinwqnf9zndzy"))))
+   (build-system gnu-build-system)
+   (inputs `(("bison" ,bison)
+             ("perl" ,perl)
+             ))
+   (arguments
+    (lambda (system)
+      `(#:tests? #f
+        #:phases
+        (alist-replace
+         'unpack
+         (lambda* (#:key source #:allow-other-keys)
+          (system* "echo" source)
+          (let ((inner
+                 (substring source
+                            (string-index-right source #\k)
+                            (string-index-right source #\-))))
+           (system* "echo" inner)
+           (and (zero? (system* "tar" "xvf" source))
+                (zero? (system* "tar" "xvf" (string-append inner ".tar.gz")))
+                (chdir inner)
+                (chdir "src"))))
+          %standard-phases))))
+   (synopsis "MIT Kerberos 5")
+   (description
+    "Massachusetts Institute of Technology implementation of Kerberos.
+Kerberos is a network authentication protocol designed to provide strong
+authentication for client/server applications by using secret-key cryptography.")
+   (license (bsd-style "file://NOTICE"
+                       "See NOTICE in the distribution."))
+   (home-page "http://web.mit.edu/kerberos/")))
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
new file mode 100644
index 0000000000..f05fe1994e
--- /dev/null
+++ b/gnu/packages/multiprecision.scm
@@ -0,0 +1,124 @@
+;;; 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 multiprecision)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (gnu packages m4)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public gmp
+  (package
+   (name "gmp")
+   (version "5.1.0")
+   (source (origin
+            (method url-fetch)
+            (uri
+             ;; Note: this version is not available from GNU mirrors
+             ;; because it was made with an Automake affected by
+             ;; CVE-2012-3386.
+             (string-append "ftp://ftp.gmplib.org/pub/gmp-"
+                            version "/gmp-" version ".tar.bz2"))
+            (sha256
+             (base32
+              "15n7xxgasbxdch8ii8z9ic6fxc2ysk3q8iavf55abjp5iylspnfz"))))
+   (build-system gnu-build-system)
+   (native-inputs `(("m4" ,m4)))
+   (arguments `(#:configure-flags
+                '(;; Build a "fat binary", with routines for several
+                  ;; sub-architectures.
+                  "--enable-fat"
+                  "--enable-cxx")))
+   (synopsis "GMP, the GNU multiple precision arithmetic library")
+   (description
+    "GMP is a free library for arbitrary precision arithmetic, operating on
+signed integers, rational numbers, and floating point numbers.  There is no
+practical limit to the precision except the ones implied by the available
+memory in the machine GMP runs on.  GMP has a rich set of functions, and the
+functions have a regular interface.
+
+The main target applications for GMP are cryptography applications and
+research, Internet security applications, algebra systems, computational
+algebra research, etc.
+
+GMP is carefully designed to be as fast as possible, both for small operands
+and for huge operands.  The speed is achieved by using fullwords as the basic
+arithmetic type, by using fast algorithms, with highly optimised assembly
+code for the most common inner loops for a lot of CPUs, and by a general
+emphasis on speed.
+
+GMP is faster than any other bignum library.  The advantage for GMP increases
+with the operand sizes for many operations, since GMP uses asymptotically
+faster algorithms.")
+   (license lgpl3+)
+   (home-page "http://gmplib.org/")))
+
+(define-public mpfr
+  (package
+   (name "mpfr")
+   (version "3.1.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/mpfr/mpfr-" version
+                                ".tar.xz"))
+            (sha256 (base32
+                     "0ym1ylcq803n52qrggxqmkz66gbn8ncc3ybawal31v5y5p1srma9"))))
+   (build-system gnu-build-system)
+   (inputs `(("gmp" ,gmp)))
+   (synopsis "GNU MPFR, a library for multiple-precision floating-point
+arithmetic")
+   (description
+    "The GNU MPFR library is a C library for multiple-precision
+floating-point computations with correct rounding.  MPFR is based on the GMP
+multiple-precision library.
+
+The main goal of MPFR is to provide a library for multiple-precision
+floating-point computation which is both efficient and has a well-defined
+semantics.  It copies the good ideas from the ANSI/IEEE-754 standard for
+double-precision floating-point arithmetic (53-bit mantissa).")
+   (license lgpl3+)
+   (home-page "http://www.mpfr.org/")))
+
+(define-public mpc
+  (package
+   (name "mpc")
+   (version "1.0.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "mirror://gnu/mpc/mpc-" version ".tar.gz"))
+            (sha256 (base32
+                     "1zq0fidp1jii2j5k5n9hmx55a6wwid33gjzhimvxq9d5zrf82npd"))))
+   (build-system gnu-build-system)
+   (inputs `(("gmp" ,gmp)
+             ("mpfr" ,mpfr)))
+   (synopsis "GNU MPC, a library for multiprecision complex arithmetic
+with exact rounding")
+   (description
+    "GNU MPC is a C library for the arithmetic of complex numbers with
+arbitrarily high precision and correct rounding of the result. It extends
+the principles of the IEEE-754 standard for fixed precision real floating
+point numbers to complex numbers, providing well-defined semantics for
+every operation. At the same time, speed of operation at high precision
+is a major design goal. The library is built upon and follows the same
+principles as GNU MPFR.")
+   (license lgpl3+)
+   (home-page "http://mpc.multiprecision.org/")))
diff --git a/gnu/packages/mysql.scm b/gnu/packages/mysql.scm
new file mode 100644
index 0000000000..517f65610e
--- /dev/null
+++ b/gnu/packages/mysql.scm
@@ -0,0 +1,87 @@
+;;; 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 mysql)
+  #:use-module (distro)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages openssl)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages ncurses)
+  #:use-module ((guix licenses) #:select (gpl2))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public mysql
+  (package
+    (name "mysql")
+    (version "5.1.54")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "http://downloads.mysql.com/archives/mysql-5.1/mysql-"
+                   version ".tar.gz"))
+             (sha256
+              (base32
+               "07xbnwk7h1xya8s6dw34nrv7ampzag8l0l1szd2pc9zyqkzhydw4"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("procps" ,procps)
+       ("openssl" ,openssl)
+       ("perl" ,perl)
+       ("zlib" ,zlib)
+       ("ncurses" ,ncurses)))
+    (arguments
+     '(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 ftw))                    ; for "rm -rf"
+       #:phases (alist-cons-after
+                 'install 'clean-up
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Remove the 112 MiB of tests that get installed.
+                   (let ((out (assoc-ref outputs "out")))
+                     (define (rm-rf dir)
+                       (file-system-fold (const #t) ; enter?
+                                         (lambda (file stat result) ; leaf
+                                           (delete-file file))
+                                         (const #t)               ; down
+                                         (lambda (dir stat result) ; up
+                                           (rmdir dir))
+                                         (const #t)
+                                         (lambda (file stat errno result)
+                                           (format (current-error-port)
+                                                   "error: ~a: ~a~%"
+                                                   file (strerror errno)))
+                                         #t
+                                         (string-append out "/" dir)))
+                     (rm-rf "mysql-test")
+                     (rm-rf "sql-bench")
+
+                     ;; Compress the 14 MiB Info file.
+                     (zero?
+                      (system* "gzip" "--best"
+                               (string-append out "/share/info/mysql.info")))))
+                 %standard-phases)))
+    (home-page "http://www.mysql.com/")
+    (synopsis "A fast, easy to use, and popular database")
+    (description
+     "MySQL is a fast, reliable, and easy to use relational database
+management system that supports the standardized Structured Query
+Language.")
+    (license gpl2)))
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
new file mode 100644
index 0000000000..09fbe7f168
--- /dev/null
+++ b/gnu/packages/nano.scm
@@ -0,0 +1,52 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 nano)
+  #:use-module (guix licenses)
+  #:use-module ((gnu packages gettext)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages ncurses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public nano
+  (package
+    (name "nano")
+    (version "2.2.6")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/nano/nano-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0yp6pid67k8h7394spzw0067fl2r7rxm2b6kfccg87g8nlry2s5y"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("gettext" ,guix:gettext)
+       ("ncurses" ,ncurses)))
+    (home-page "http://www.nano-editor.org/")
+    (synopsis
+     "A small, user-friendly console text editor")
+    (description
+     "GNU nano is designed to be a free replacement for the Pico text
+editor, part of the Pine email suite from The University of
+Washington. It aims to emulate Pico as closely as possible and perhaps
+include extra functionality.")
+    (license gpl3+))) ; some files are under GPLv2+
\ No newline at end of file
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
new file mode 100644
index 0000000000..1be2551a63
--- /dev/null
+++ b/gnu/packages/ncurses.scm
@@ -0,0 +1,128 @@
+;;; 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 ncurses)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public ncurses
+  (let ((patch-makefile-phase
+         '(lambda _
+            (for-each patch-makefile-SHELL
+                      (find-files "." "Makefile.in"))))
+        (configure-phase
+         '(lambda* (#:key inputs outputs configure-flags
+                    #:allow-other-keys)
+            ;; The `ncursesw5-config' has a #!/bin/sh.  We want to patch
+            ;; it to point to libc's embedded Bash, to avoid retaining a
+            ;; reference to the bootstrap Bash.
+            (let* ((libc (assoc-ref inputs "libc"))
+                   (bash (string-append libc "/bin/bash"))
+                   (out  (assoc-ref outputs "out")))
+              (format #t "configure flags: ~s~%" configure-flags)
+              (zero? (apply system* bash "./configure"
+                            (string-append "SHELL=" bash)
+                            (string-append "CONFIG_SHELL=" bash)
+                            (string-append "--prefix=" out)
+                            configure-flags)))))
+        (post-install-phase
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (let ((out (assoc-ref outputs "out")))
+              ;; When building a wide-character (Unicode) build, create backward
+              ;; compatibility links from the the "normal" libraries to the
+              ;; wide-character libraries (e.g. libncurses.so to libncursesw.so).
+              (with-directory-excursion (string-append out "/lib")
+                (for-each (lambda (lib)
+                            (define libw.a
+                              (string-append "lib" lib "w.a"))
+                            (define lib.a
+                              (string-append "lib" lib ".a"))
+                            (define libw.so.x
+                              (string-append "lib" lib "w.so.5"))
+                            (define lib.so.x
+                              (string-append "lib" lib ".so.5"))
+                            (define lib.so
+                              (string-append "lib" lib ".so"))
+
+                            (when (file-exists? libw.a)
+                              (format #t "creating symlinks for `lib~a'~%" lib)
+                              (symlink libw.a lib.a)
+                              (symlink libw.so.x lib.so.x)
+                              (false-if-exception (delete-file lib.so))
+                              (call-with-output-file lib.so
+                                (lambda (p)
+                                  (format p "INPUT (-l~aw)~%" lib)))))
+                          '("curses" "ncurses" "form" "panel" "menu")))))))
+    (package
+     (name "ncurses")
+     (version "5.9")
+     (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/ncurses/ncurses-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0fsn7xis81za62afan0vvm38bvgzg5wfmv1m86flqcj0nj7jjilh"))))
+     (build-system gnu-build-system)
+     (arguments
+      (case-lambda
+        ((system)
+         `(#:configure-flags
+           `("--with-shared" "--without-debug" "--enable-widec"
+
+             ;; By default headers land in an `ncursesw' subdir, which is not
+             ;; what users expect.
+             ,(string-append "--includedir=" (assoc-ref %outputs "out")
+                             "/include")
+
+             ;; C++ bindings fail to build on
+             ;; `i386-pc-solaris2.11' with GCC 3.4.3:
+             ;; <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6395191>.
+             ,,@(if (string=? system "i686-solaris")
+                    '("--without-cxx-binding")
+                    '()))
+           #:tests? #f                            ; no "check" target
+           #:phases (alist-cons-after
+                     'install 'post-install ,post-install-phase
+                     (alist-cons-before
+                      'configure 'patch-makefile-SHELL
+                      ,patch-makefile-phase
+                      (alist-replace
+                       'configure
+                       ,configure-phase
+                       %standard-phases)))))
+        ((system cross-system)
+         (arguments cross-system))))
+     (self-native-input? #t)
+     (synopsis
+      "GNU Ncurses, a free software emulation of curses in SVR4 and more")
+     (description
+      "The Ncurses (new curses) library is a free software emulation of curses
+in System V Release 4.0, and more.  It uses Terminfo format, supports pads
+and color and multiple highlights and forms characters and function-key
+mapping, and has all the other SYSV-curses enhancements over BSD Curses.
+
+The ncurses code was developed under GNU/Linux.  It has been in use for some
+time with OpenBSD as the system curses library, and on FreeBSD and NetBSD as
+an external package.  It should port easily to any ANSI/POSIX-conforming
+UNIX.  It has even been ported to OS/2 Warp!")
+     (license x11)
+     (home-page "http://www.gnu.org/software/ncurses/"))))
diff --git a/gnu/packages/nettle.scm b/gnu/packages/nettle.scm
new file mode 100644
index 0000000000..6a0b6ef40a
--- /dev/null
+++ b/gnu/packages/nettle.scm
@@ -0,0 +1,60 @@
+;;; 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 nettle)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages m4))
+
+(define-public nettle
+  (package
+    (name "nettle")
+    (version "2.6")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/nettle/nettle-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "0mminj3fg0vba8qx4q6dbf0xz6fskamli7z2r8rci5xrcd7n5pv0"))))
+    (build-system gnu-build-system)
+    (inputs `(("m4" ,m4)))
+    (propagated-inputs `(("gmp" ,gmp)))
+    (home-page "http://www.lysator.liu.se/~nisse/nettle/")
+    (synopsis "GNU Nettle, a cryptographic library")
+    (description
+     "Nettle is a cryptographic library that is designed to fit easily
+in more or less any context: In crypto toolkits for object-oriented
+languages (C++, Python, Pike, ...), in applications like LSH or GNUPG,
+or even in kernel space.  In most contexts, you need more than the basic
+cryptographic algorithms, you also need some way to keep track of
+available algorithms, their properties and variants.  You often have
+some algorithm selection process, often dictated by a protocol you want
+to implement.
+
+And as the requirements of applications differ in subtle and not so
+subtle ways, an API that fits one application well can be a pain to use
+in a different context.  And that is why there are so many different
+cryptographic libraries around.  \nNettle tries to avoid this problem by
+doing one thing, the low-level crypto stuff, and providing a simple but
+general interface to it.  In particular, Nettle doesn't do algorithm
+selection.  It doesn't do memory allocation. It doesn't do any I/O.")
+    (license gpl2+)))
diff --git a/gnu/packages/openssl.scm b/gnu/packages/openssl.scm
new file mode 100644
index 0000000000..8c8ba4c668
--- /dev/null
+++ b/gnu/packages/openssl.scm
@@ -0,0 +1,68 @@
+;;; 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 openssl)
+  #:use-module (distro)
+  #:use-module (gnu packages perl)
+  #:use-module ((guix licenses) #:renamer (symbol-prefix-proc 'license:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public openssl
+  (package
+   (name "openssl")
+   (version "1.0.1c")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "ftp://ftp.openssl.org/source/openssl-" version
+                                ".tar.gz"))
+            (sha256 (base32
+                     "1gjy6a7d8nszi9wq8jdzx3cffn0nss23h3cw2ywlw4cb9v6v77ia"))))
+   (build-system gnu-build-system)
+   (inputs `(("perl" ,perl)))
+   (arguments
+    (lambda (system)
+      `(#:parallel-build? #f
+        #:parallel-tests? #f
+        #:test-target "test"
+        #:phases
+        (alist-replace
+         'configure
+         (lambda* (#:key outputs #:allow-other-keys)
+           (let ((out (assoc-ref outputs "out")))
+             (zero?
+              (system* "./config"
+                       "shared"                 ; build shared libraries
+                       "--libdir=lib"
+                       (string-append "--prefix=" out)))))
+         (alist-cons-before
+          'patch-source-shebangs 'patch-tests
+          (lambda* (#:key inputs #:allow-other-keys)
+            (let ((bash (assoc-ref inputs "bash")))
+             (substitute* (find-files "test" ".*")
+               (("/bin/sh")
+                (string-append bash "/bin/bash"))
+               (("/bin/rm")
+                "rm"))))
+          %standard-phases)))))
+   (synopsis "OpenSSL, an SSL/TLS implementation")
+   (description
+    "OpenSSL is an implementation of SSL/TLS")
+   (license license:openssl)
+   (home-page "http://www.openssl.org/")))
diff --git a/gnu/packages/patches/bigloo-gc-shebangs.patch b/gnu/packages/patches/bigloo-gc-shebangs.patch
new file mode 100644
index 0000000000..07af261887
--- /dev/null
+++ b/gnu/packages/patches/bigloo-gc-shebangs.patch
@@ -0,0 +1,17 @@
+Patch shebangs in source that gets unpacked by `configure'.
+
+--- bigloo3.9a/gc/install-gc-7.2d	2013-01-14 15:24:01.000000000 +0100
++++ bigloo3.9a/gc/install-gc-7.2d	2013-01-14 15:23:51.000000000 +0100
+@@ -29,9 +29,11 @@ fi
+ # untar the two versions of the GC
+ $tar xfz $src -C ../gc || (echo "$tar xfz $src failed"; exit 1)
+ /bin/rm -rf "../gc/$gc"_fth
++find ../gc/gc-7.2 -perm /111 -type f | xargs sed -i -e"s|/bin/sh|`type -P bash`|g"
+ mv ../gc/gc-7.2 "../gc/$gc"_fth || (echo "mv gc-7.2 failed"; exit 1)
+ 
+ $tar xfz $src  -C ../gc || (echo "$tar xfz $src failed"; exit 1)
++find ../gc/gc-7.2 -perm /111 -type f | xargs sed -i -e"s|/bin/sh|`type -P bash`|g"
+ mv ../gc/gc-7.2 "../gc/$gc"
+ 
+ # general Bigloo patch
+
diff --git a/gnu/packages/patches/binutils-ld-new-dtags.patch b/gnu/packages/patches/binutils-ld-new-dtags.patch
new file mode 100644
index 0000000000..5f7a03fc38
--- /dev/null
+++ b/gnu/packages/patches/binutils-ld-new-dtags.patch
@@ -0,0 +1,16 @@
+Turn on --enable-new-dtags by default to make the linker set RUNPATH
+instead of RPATH on binaries.  This is important because RUNPATH can
+be overriden using LD_LIBRARY_PATH at runtime.
+
+Patch from Nixpkgs by Eelco Dolstra <eelco.dolstra@logicblox.com>.
+
+--- binutils/ld/ldmain.c
++++ binutils/ld/ldmain.c
+@@ -296,6 +296,7 @@ main (int argc, char **argv)
+
+   link_info.allow_undefined_version = TRUE;
+   link_info.keep_memory = TRUE;
++  link_info.new_dtags = TRUE;
+   link_info.combreloc = TRUE;
+   link_info.strip_discarded = TRUE;
+   link_info.callbacks = &link_callbacks;
diff --git a/gnu/packages/patches/cpio-gets-undeclared.patch b/gnu/packages/patches/cpio-gets-undeclared.patch
new file mode 100644
index 0000000000..bc34de6455
--- /dev/null
+++ b/gnu/packages/patches/cpio-gets-undeclared.patch
@@ -0,0 +1,45 @@
+This patch is needed to allow builds with newer versions of
+the GNU libc (2.16+).
+
+The upstream fix was:
+
+  commit 66712c23388e93e5c518ebc8515140fa0c807348
+  Author: Eric Blake <eblake@redhat.com>
+  Date:   Thu Mar 29 13:30:41 2012 -0600
+
+      stdio: don't assume gets any more
+
+      Gnulib intentionally does not have a gets module, and now that C11
+      and glibc have dropped it, we should be more proactive about warning
+      any user on a platform that still has a declaration of this dangerous
+      interface.
+
+      * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets
+      support.
+      * modules/stdio (Makefile.am): Likewise.
+      * lib/stdio-read.c (gets): Likewise.
+      * tests/test-stdio-c++.cc: Likewise.
+      * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment.
+      * lib/stdio.in.h (gets): Make warning occur in more places.
+      * doc/posix-functions/gets.texi (gets): Update documentation.
+      Reported by Christer Solskogen.
+
+      Signed-off-by: Eric Blake <eblake@redhat.com>
+
+This patch just gets rid of the offending part.
+
+--- cpio-2.11/gnu/stdio.in.h-orig	2012-11-25 22:17:06.000000000 +0400
++++ cpio-2.11/gnu/stdio.in.h		2012-11-25 22:18:36.000000000 +0400
+@@ -135,12 +135,6 @@
+                  "use gnulib module fflush for portable POSIX compliance");
+ #endif
+ 
+-/* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
+-#undef gets
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+-
+ #if @GNULIB_FOPEN@
+ # if @REPLACE_FOPEN@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/gnu/packages/patches/diffutils-gets-undeclared.patch b/gnu/packages/patches/diffutils-gets-undeclared.patch
new file mode 100644
index 0000000000..b6cdc77caa
--- /dev/null
+++ b/gnu/packages/patches/diffutils-gets-undeclared.patch
@@ -0,0 +1,71 @@
+This patch is needed to allow builds with newer versions of
+the GNU libc (2.16+).
+
+
+commit 66712c23388e93e5c518ebc8515140fa0c807348
+Author: Eric Blake <eblake@redhat.com>
+Date:   Thu Mar 29 13:30:41 2012 -0600
+
+    stdio: don't assume gets any more
+    
+    Gnulib intentionally does not have a gets module, and now that C11
+    and glibc have dropped it, we should be more proactive about warning
+    any user on a platform that still has a declaration of this dangerous
+    interface.
+    
+    * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets
+    support.
+    * modules/stdio (Makefile.am): Likewise.
+    * lib/stdio-read.c (gets): Likewise.
+    * tests/test-stdio-c++.cc: Likewise.
+    * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment.
+    * lib/stdio.in.h (gets): Make warning occur in more places.
+    * doc/posix-functions/gets.texi (gets): Update documentation.
+    Reported by Christer Solskogen.
+    
+    Signed-off-by: Eric Blake <eblake@redhat.com>
+
+diff --git a/lib/stdio.in.h b/lib/stdio.in.h
+index aa7b599..c377b6e 100644
+--- a/lib/stdio.in.h
++++ b/lib/stdio.in.h
+@@ -698,22 +698,11 @@ _GL_WARN_ON_USE (getline, "getline is unportable - "
+ # endif
+ #endif
+ 
+-#if @GNULIB_GETS@
+-# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-#   undef gets
+-#   define gets rpl_gets
+-#  endif
+-_GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1)));
+-_GL_CXXALIAS_RPL (gets, char *, (char *s));
+-# else
+-_GL_CXXALIAS_SYS (gets, char *, (char *s));
+-#  undef gets
+-# endif
+-_GL_CXXALIASWARN (gets);
+ /* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
++   so any use of gets warrants an unconditional warning; besides, C11
++   removed it.  */
++#undef gets
++#if HAVE_RAW_DECL_GETS
+ _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+ #endif
+ 
+@@ -1053,9 +1042,9 @@ _GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+ # endif
+ #endif
+ 
+-/* Some people would argue that sprintf should be handled like gets
+-   (for example, OpenBSD issues a link warning for both functions),
+-   since both can cause security holes due to buffer overruns.
++/* Some people would argue that all sprintf uses should be warned about
++   (for example, OpenBSD issues a link warning for it),
++   since it can cause security holes due to buffer overruns.
+    However, we believe that sprintf can be used safely, and is more
+    efficient than snprintf in those safe cases; and as proof of our
+    belief, we use sprintf in several gnulib modules.  So this header
diff --git a/gnu/packages/patches/emacs-configure-sh.patch b/gnu/packages/patches/emacs-configure-sh.patch
new file mode 100644
index 0000000000..fd34d06ced
--- /dev/null
+++ b/gnu/packages/patches/emacs-configure-sh.patch
@@ -0,0 +1,14 @@
+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
+  ;;
+     "epaths":C)
+ echo creating src/epaths.h
+-${MAKE-make} epaths-force
++${MAKE-make} epaths-force SHELL="$CONFIG_SHELL"
+  ;;
+     "gdbinit":C)
+ if test ! -f src/.gdbinit && test -f $srcdir/src/.gdbinit; then
+
diff --git a/gnu/packages/patches/findutils-absolute-paths.patch b/gnu/packages/patches/findutils-absolute-paths.patch
new file mode 100644
index 0000000000..96341e281f
--- /dev/null
+++ b/gnu/packages/patches/findutils-absolute-paths.patch
@@ -0,0 +1,29 @@
+Fix use of LFS-style absolute paths.
+
+Patches from Nixpkgs by Armijn Hemel <armijn@gpl-violations.org>
+and Wouter den Breejen <uu@denbreejen.net>.
+
+diff -ruN findutils-4.2.20/locate/updatedb.sh findutils-4.2.20.new/locate/updatedb.sh
+--- findutils-4.2.20/locate/updatedb.sh	2005-01-24 17:12:35.000000000 +0100
++++ findutils-4.2.20.new/locate/updatedb.sh	2005-08-23 14:37:10.000000000 +0200
+@@ -141,7 +141,7 @@
+ : ${code:=${LIBEXECDIR}/@code@}
+ 
+ 
+-PATH=/bin:/usr/bin:${BINDIR}; export PATH
++PATH=/bin:/usr/bin:${BINDIR}:${PATH}; export PATH
+ 
+ : ${PRUNEFS="nfs NFS proc afs proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs sysfs shfs"}
+ 
+diff -Naur findutils-4.2.30/xargs/xargs.c findutils-4.2.30_new/xargs/xargs.c
+--- findutils-4.2.30/xargs/xargs.c	2007-02-27 11:21:08.000000000 +0100
++++ findutils-4.2.30_new/xargs/xargs.c	2007-07-17 19:02:05.000000000 +0200
+@@ -402,7 +402,7 @@
+   int show_limits = 0;			/* --show-limits */
+   int always_run_command = 1;
+   char *input_file = "-"; /* "-" is stdin */
+-  char *default_cmd = "/bin/echo";
++  char *default_cmd = "echo";
+   int (*read_args) PARAMS ((void)) = read_line;
+   void (*act_on_init_result)(void) = noop;
+   int env_too_big = 0;
diff --git a/gnu/packages/patches/flex-bison-tests.patch b/gnu/packages/patches/flex-bison-tests.patch
new file mode 100644
index 0000000000..0f372f83bf
--- /dev/null
+++ b/gnu/packages/patches/flex-bison-tests.patch
@@ -0,0 +1,24 @@
+The `test-bison-yyl{loc,val}' tests fail with "conflicting types for
+'testparse'" because `YYPARSE_PARAM' is undefined; work around that.
+
+--- flex-2.5.37/tests/test-bison-yylloc/main.c	2012-11-22 18:17:01.000000000 +0100
++++ flex-2.5.37/tests/test-bison-yylloc/main.c	2012-11-22 18:17:07.000000000 +0100
+@@ -21,6 +21,7 @@
+  * PURPOSE.
+  */
+ 
++#define YYPARSE_PARAM scanner
+ #include "parser.h"
+ #include "scanner.h"
+ 
+
+--- flex-2.5.37/tests/test-bison-yylval/main.c	2012-11-22 18:17:42.000000000 +0100
++++ flex-2.5.37/tests/test-bison-yylval/main.c	2012-11-22 18:17:49.000000000 +0100
+@@ -21,6 +21,7 @@
+  * PURPOSE.
+  */
+ 
++#define YYPARSE_PARAM scanner
+ #include "parser.h"
+ #include "scanner.h"
+ 
diff --git a/gnu/packages/patches/gawk-shell.patch b/gnu/packages/patches/gawk-shell.patch
new file mode 100644
index 0000000000..89b8540a8d
--- /dev/null
+++ b/gnu/packages/patches/gawk-shell.patch
@@ -0,0 +1,34 @@
+As for libc's `system', change Awk to look for `sh' in $PATH.  This patch is
+only meant to be used during bootstrapping, where we don't know in advance the
+absolute file name of `sh'.
+
+--- gawk-4.0.0/io.c	2011-05-18 20:47:29.000000000 +0200
++++ gawk-4.0.0/io.c	2012-12-18 15:56:06.000000000 +0100
+@@ -1759,7 +1759,7 @@ two_way_open(const char *str, struct red
+ 
+ 			signal(SIGPIPE, SIG_DFL);
+ 
+-			execl("/bin/sh", "sh", "-c", str, NULL);
++			execlp("sh", "sh", "-c", str, NULL);
+ 			_exit(errno == ENOENT ? 127 : 126);
+ 
+ 		case -1:
+@@ -1924,7 +1924,7 @@ use_pipes:
+ 		    || close(ctop[0]) == -1 || close(ctop[1]) == -1)
+ 			fatal(_("close of pipe failed (%s)"), strerror(errno));
+ 		/* stderr does NOT get dup'ed onto child's stdout */
+-		execl("/bin/sh", "sh", "-c", str, NULL);
++		execlp("sh", "sh", "-c", str, NULL);
+ 		_exit(errno == ENOENT ? 127 : 126);
+ 	}
+ #endif /* NOT __EMX__ */
+@@ -2074,7 +2074,7 @@ gawk_popen(const char *cmd, struct redir
+ 			fatal(_("moving pipe to stdout in child failed (dup: %s)"), strerror(errno));
+ 		if (close(p[0]) == -1 || close(p[1]) == -1)
+ 			fatal(_("close of pipe failed (%s)"), strerror(errno));
+-		execl("/bin/sh", "sh", "-c", cmd, NULL);
++		execlp("sh", "sh", "-c", cmd, NULL);
+ 		_exit(errno == ENOENT ? 127 : 126);
+ 	}
+ #endif /* NOT __EMX__ */
+
diff --git a/gnu/packages/patches/gettext-gets-undeclared.patch b/gnu/packages/patches/gettext-gets-undeclared.patch
new file mode 100644
index 0000000000..072a8d94ab
--- /dev/null
+++ b/gnu/packages/patches/gettext-gets-undeclared.patch
@@ -0,0 +1,77 @@
+This patch is needed to allow builds with newer versions of
+the GNU libc (2.16+).
+
+The upstream fix was:
+
+  commit 66712c23388e93e5c518ebc8515140fa0c807348
+  Author: Eric Blake <eblake@redhat.com>
+  Date:   Thu Mar 29 13:30:41 2012 -0600
+
+      stdio: don't assume gets any more
+
+      Gnulib intentionally does not have a gets module, and now that C11
+      and glibc have dropped it, we should be more proactive about warning
+      any user on a platform that still has a declaration of this dangerous
+      interface.
+
+      * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets
+      support.
+      * modules/stdio (Makefile.am): Likewise.
+      * lib/stdio-read.c (gets): Likewise.
+      * tests/test-stdio-c++.cc: Likewise.
+      * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment.
+      * lib/stdio.in.h (gets): Make warning occur in more places.
+      * doc/posix-functions/gets.texi (gets): Update documentation.
+      Reported by Christer Solskogen.
+
+      Signed-off-by: Eric Blake <eblake@redhat.com>
+
+This patch just gets rid of the offending part.
+
+--- gettext-0.18.1.1/gettext-tools/libgettextpo/stdio.in.h-orig	2012-11-24 01:13:14.000000000 +0400
++++ gettext-0.18.1.1/gettext-tools/libgettextpo/stdio.in.h		2012-11-24 01:13:46.000000000 +0400
+@@ -137,12 +137,6 @@
+                  "use gnulib module fflush for portable POSIX compliance");
+ #endif
+ 
+-/* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
+-#undef gets
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+-
+ #if @GNULIB_FOPEN@
+ # if @REPLACE_FOPEN@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+
+--- gettext-0.18.1.1/gettext-runtime/gnulib-lib/stdio.in.h-orig	2012-11-24 00:26:49.000000000 +0400
++++ gettext-0.18.1.1/gettext-runtime/gnulib-lib/stdio.in.h		2012-11-24 00:45:54.000000000 +0400
+@@ -137,12 +137,6 @@
+                  "use gnulib module fflush for portable POSIX compliance");
+ #endif
+ 
+-/* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
+-#undef gets
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+-
+ #if @GNULIB_FOPEN@
+ # if @REPLACE_FOPEN@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+
+--- gettext-0.18.1.1/gettext-tools/gnulib-lib/stdio.in.h-orig	2012-11-24 01:00:26.000000000 +0400
++++ gettext-0.18.1.1/gettext-tools/gnulib-lib/stdio.in.h		2012-11-24 01:00:53.000000000 +0400
+@@ -137,12 +137,6 @@
+                  "use gnulib module fflush for portable POSIX compliance");
+ #endif
+ 
+-/* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
+-#undef gets
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+-
+ #if @GNULIB_FOPEN@
+ # if @REPLACE_FOPEN@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/gnu/packages/patches/glibc-bootstrap-system.patch b/gnu/packages/patches/glibc-bootstrap-system.patch
new file mode 100644
index 0000000000..7208cce3f4
--- /dev/null
+++ b/gnu/packages/patches/glibc-bootstrap-system.patch
@@ -0,0 +1,28 @@
+We want to allow builds in chroots that lack /bin/sh.  Thus, system(3)
+and popen(3) need to be tweaked to use the right shell.  For the bootstrap
+glibc, we just use whatever `sh' can be found in $PATH.  The final glibc
+instead uses the hard-coded absolute file name of `bash'.
+
+--- a/sysdeps/posix/system.c
++++ b/sysdeps/posix/system.c
+@@ -134,7 +134,7 @@ do_system (const char *line)
+       INIT_LOCK ();
+ 
+       /* Exec the shell.  */
+-      (void) __execve (SHELL_PATH, (char *const *) new_argv, __environ);
++      (void) __execvpe (SHELL_NAME, (char *const *) new_argv, __environ);
+       _exit (127);
+     }
+   else if (pid < (pid_t) 0)
+
+--- b/libio/iopopen.c	2012-06-30 21:12:34.000000000 +0200
++++ b/libio/iopopen.c	2012-12-19 12:52:29.000000000 +0100
+@@ -226,7 +226,7 @@ _IO_new_proc_open (fp, command, mode)
+ 	    _IO_close (fd);
+ 	}
+ 
+-      _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0);
++      execlp ("sh", "sh", "-c", command, (char *) 0);
+       _IO__exit (127);
+     }
+   _IO_close (child_end);
diff --git a/gnu/packages/patches/glibc-no-ld-so-cache.patch b/gnu/packages/patches/glibc-no-ld-so-cache.patch
new file mode 100644
index 0000000000..75fff50b47
--- /dev/null
+++ b/gnu/packages/patches/glibc-no-ld-so-cache.patch
@@ -0,0 +1,53 @@
+Disable attempts to use the system-wide /etc/ld.so.cache.  This is
+required on LFS distros to avoid loading the distro's libc.so instead
+of ours.
+
+Patch from Nixpkgs.  Idea by Eelco Dolstra, initial patch by Jack
+Cummings, minor fixups by Shea Levy.
+
+diff -Naur glibc-2.13-orig/elf/ldconfig.c glibc-2.13/elf/ldconfig.c
+--- glibc-2.13-orig/elf/ldconfig.c	2011-01-17 23:34:07.000000000 -0500
++++ glibc-2.13/elf/ldconfig.c	2012-04-10 23:28:45.957492340 -0400
+@@ -51,7 +51,7 @@
+ #endif
+ 
+ #ifndef LD_SO_CONF
+-# define LD_SO_CONF SYSCONFDIR "/ld.so.conf"
++# define LD_SO_CONF PREFIX "/etc/ld.so.conf"
+ #endif
+ 
+ /* Get libc version number.  */
+
+--- glibc-2.16.0/elf/Makefile	2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/elf/Makefile	2012-11-12 23:52:21.000000000 +0100
+@@ -415,12 +415,12 @@ $(objpfx)ldconfig: $(ldconfig-modules:%=
+ 
+ $(objpfx)pldd: $(pldd-modules:%=$(objpfx)%.o)
+ 
+-SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
+-CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
++PREFIX-FLAGS := -D'PREFIX="$(sysconfdir)"'
++CFLAGS-ldconfig.c = $(PREFIX-FLAGS) -D'LIBDIR="$(libdir)"' \
+ 		    -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1
+-CFLAGS-dl-cache.c = $(SYSCONF-FLAGS)
+-CFLAGS-cache.c = $(SYSCONF-FLAGS)
+-CFLAGS-rtld.c = $(SYSCONF-FLAGS)
++CFLAGS-dl-cache.c = $(PREFIX-FLAGS)
++CFLAGS-cache.c = $(PREFIX-FLAGS)
++CFLAGS-rtld.c = $(PREFIX-FLAGS)
+ 
+ CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
+ 		     -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld)
+
+diff -Naur glibc-2.13-orig/sysdeps/generic/dl-cache.h glibc-2.13/sysdeps/generic/dl-cache.h
+--- glibc-2.13-orig/sysdeps/generic/dl-cache.h	2011-01-17 23:34:07.000000000 -0500
++++ glibc-2.13/sysdeps/generic/dl-cache.h	2012-04-10 23:28:20.077488815 -0400
+@@ -29,7 +29,7 @@
+ #endif
+ 
+ #ifndef LD_SO_CACHE
+-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
++# define LD_SO_CACHE PREFIX "/etc/ld.so.cache"
+ #endif
+ 
+ #ifndef add_system_dir
diff --git a/gnu/packages/patches/guile-1.8-cpp-4.5.patch b/gnu/packages/patches/guile-1.8-cpp-4.5.patch
new file mode 100644
index 0000000000..638d071baf
--- /dev/null
+++ b/gnu/packages/patches/guile-1.8-cpp-4.5.patch
@@ -0,0 +1,24 @@
+Fix doc snarfing with GCC 4.5+.
+From <http://git.savannah.gnu.org/cgit/guile.git/commit/?h=branch_release-1-8&id=aac41d28358cea594bb30f6e547afb82bb6004a6>.
+
+diff --git a/scripts/snarf-check-and-output-texi b/scripts/snarf-check-and-output-texi
+index ea33e17..8cd42e8 100755
+--- a/scripts/snarf-check-and-output-texi
++++ b/scripts/snarf-check-and-output-texi
+@@ -267,6 +267,17 @@ exec ${GUILE-guile} -l $0 -c "(apply $main (cdr (command-line)))" "$@"
+       (set! *file* file)
+       (set! *line* line))
+ 
++     ;; newer gccs like to throw around more location markers into the
++     ;; preprocessed source; these (hash . hash) bits are what they translate to
++     ;; in snarfy terms.
++     (('location ('string . file) ('int . line) ('hash . 'hash))
++      (set! *file* file)
++      (set! *line* line))
++
++     (('location ('hash . 'hash) ('string . file) ('int . line) ('hash . 'hash))
++      (set! *file* file)
++      (set! *line* line))
++
+      (('arglist rest ...)
+       (set! *args* (do-arglist rest)))
diff --git a/gnu/packages/patches/guile-default-utf8.patch b/gnu/packages/patches/guile-default-utf8.patch
new file mode 100644
index 0000000000..409f435161
--- /dev/null
+++ b/gnu/packages/patches/guile-default-utf8.patch
@@ -0,0 +1,111 @@
+This hack makes Guile default to UTF-8.  This avoids calls to
+`iconv_open'; `iconv_open' tries to open shared objects that aren't
+available during bootstrap, so using UTF-8 avoids that (and UTF-8 has
+built-in conversions in glibc, too.)
+
+diff --git a/libguile/bytevectors.c b/libguile/bytevectors.c
+index cf41f2f..facfb91 100644
+--- a/libguile/bytevectors.c
++++ b/libguile/bytevectors.c
+@@ -1887,7 +1887,7 @@ utf_encoding_name (char *name, size_t utf_width, SCM endianness)
+   if (scm_i_is_narrow_string (str))                                     \
+     {                                                                   \
+       err = mem_iconveh (scm_i_string_chars (str), c_strlen,            \
+-                         "ISO-8859-1", c_utf_name,                      \
++                         "UTF-8", c_utf_name,                      \
+                          iconveh_question_mark, NULL,                   \
+                          &c_utf, &c_utf_len);                           \
+       if (SCM_UNLIKELY (err))                                           \
+diff --git a/libguile/ports.c b/libguile/ports.c
+index 301bc44..b0ea2e6 100644
+--- a/libguile/ports.c
++++ b/libguile/ports.c
+@@ -1750,7 +1750,7 @@ scm_ungetc (scm_t_wchar c, SCM port)
+   if (pt->encoding != NULL)
+     encoding = pt->encoding;
+   else
+-    encoding = "ISO-8859-1";
++    encoding = "UTF-8";
+ 
+   len = sizeof (result_buf);
+   result = u32_conv_to_encoding (encoding,
+@@ -2212,7 +2212,7 @@ scm_i_set_port_encoding_x (SCM port, const char *encoding)
+   pt = SCM_PTAB_ENTRY (port);
+ 
+   if (encoding == NULL)
+-    encoding = "ISO-8859-1";
++    encoding = "UTF-8";
+ 
+   if (pt->encoding != encoding)
+     pt->encoding = scm_gc_strdup (encoding, "port");
+diff --git a/libguile/posix.c b/libguile/posix.c
+index 4f8b8ac..fea7f74 100644
+--- a/libguile/posix.c
++++ b/libguile/posix.c
+@@ -1740,7 +1740,7 @@ SCM_DEFINE (scm_setlocale, "setlocale", 1, 1, 0,
+       SCM_SYSERROR;
+     }
+ 
+-  enc = locale_charset ();
++  enc = "UTF-8";
+ 
+   /* Set the default encoding for new ports.  */
+   scm_i_set_default_port_encoding (enc);
+diff --git a/libguile/script.c b/libguile/script.c
+index 83daf8a..083891e 100644
+--- a/libguile/script.c
++++ b/libguile/script.c
+@@ -387,7 +387,7 @@ locale_arguments_to_string_list (int argc, char **const argv)
+   SCM lst;
+   const char *encoding;
+ 
+-  encoding = environ_locale_charset ();
++  encoding = "UTF-8";
+   for (i = argc - 1, lst = SCM_EOL;
+        i >= 0;
+        i--)
+diff --git a/libguile/strings.c b/libguile/strings.c
+index 5d0db23..8266247 100644
+--- a/libguile/strings.c
++++ b/libguile/strings.c
+@@ -1576,7 +1576,7 @@ scm_from_locale_string (const char *str)
+ SCM
+ scm_from_locale_stringn (const char *str, size_t len)
+ {
+-  return scm_from_stringn (str, len, locale_charset (),
++  return scm_from_stringn (str, len, "UTF-8",
+                            scm_i_default_port_conversion_handler ());
+ }
+ 
+@@ -1803,7 +1803,7 @@ char *
+ scm_to_locale_stringn (SCM str, size_t *lenp)
+ {
+   return scm_to_stringn (str, lenp,
+-                         locale_charset (),
++                         "UTF-8",
+                          scm_i_default_port_conversion_handler ());
+ }
+ 
+@@ -2054,7 +2054,7 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding,
+                         "string contains #\\nul character: ~S",
+                         scm_list_1 (str));
+ 
+-  if (scm_i_is_narrow_string (str) && (encoding == NULL))
++  if (scm_i_is_narrow_string (str))
+     {
+       /* If using native Latin-1 encoding, just copy the string
+          contents.  */
+@@ -2079,11 +2079,11 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding,
+   len = 0;
+   enc = encoding;
+   if (enc == NULL)
+-    enc = "ISO-8859-1";
++    enc = "UTF-8";
+   if (scm_i_is_narrow_string (str))
+     {
+       ret = mem_iconveh (scm_i_string_chars (str), ilen,
+-                         "ISO-8859-1", enc,
++                         "UTF-8", enc,
+                          (enum iconv_ilseq_handler) handler, NULL,
+                          &buf, &len);
+ 
diff --git a/gnu/packages/patches/guile-relocatable.patch b/gnu/packages/patches/guile-relocatable.patch
new file mode 100644
index 0000000000..077394cdde
--- /dev/null
+++ b/gnu/packages/patches/guile-relocatable.patch
@@ -0,0 +1,70 @@
+This patch changes Guile to use a default search path relative to the
+location of the `guile' binary, allowing it to be relocated.
+
+diff --git a/libguile/load.c b/libguile/load.c
+index af2ca45..19dd338 100644
+--- a/libguile/load.c
++++ b/libguile/load.c
+@@ -26,6 +26,7 @@
+ 
+ #include <string.h>
+ #include <stdio.h>
++#include <libgen.h>
+ 
+ #include "libguile/_scm.h"
+ #include "libguile/private-gc.h" /* scm_getenv_int */
+@@ -255,6 +256,32 @@ scm_init_load_path ()
+   SCM cpath = SCM_EOL;
+ 
+ #ifdef SCM_LIBRARY_DIR
++  char *program, *bin_dir, *prefix, *module_dir, *ccache_dir;
++
++  /* Determine the source and compiled module directories at run-time,
++     relative to the executable's location.
++
++     Note: Use /proc/self/exe instead of argv[0] because the latter is
++     not necessarily an absolute, nor a valid file name.  */
++
++  program = scm_gc_malloc_pointerless (256, "string");
++  readlink ("/proc/self/exe", program, 256);
++
++  bin_dir = dirname (strdupa (program));
++
++  prefix = scm_gc_malloc_pointerless (strlen (bin_dir) + 4, "string");
++  strcpy (prefix, bin_dir);
++  strcat (prefix, "/..");
++  prefix = canonicalize_file_name (prefix);
++
++  module_dir = scm_gc_malloc_pointerless (strlen (prefix) + 50, "string");
++  strcpy (module_dir, prefix);
++  strcat (module_dir, "/share/guile/2.0");
++
++  ccache_dir = scm_gc_malloc_pointerless (strlen (prefix) + 50, "string");
++  strcpy (ccache_dir, prefix);
++  strcat (ccache_dir, "/lib/guile/2.0/ccache");
++
+   env = getenv ("GUILE_SYSTEM_PATH");
+   if (env && strcmp (env, "") == 0)
+     /* special-case interpret system-path=="" as meaning no system path instead
+@@ -263,10 +290,7 @@ scm_init_load_path ()
+   else if (env)
+     path = scm_parse_path (scm_from_locale_string (env), path);
+   else
+-    path = scm_list_4 (scm_from_locale_string (SCM_LIBRARY_DIR),
+-                       scm_from_locale_string (SCM_SITE_DIR),
+-                       scm_from_locale_string (SCM_GLOBAL_SITE_DIR),
+-                       scm_from_locale_string (SCM_PKGDATA_DIR));
++    path = scm_list_1 (scm_from_locale_string (module_dir));
+ 
+   env = getenv ("GUILE_SYSTEM_COMPILED_PATH");
+   if (env && strcmp (env, "") == 0)
+@@ -276,8 +300,7 @@ scm_init_load_path ()
+     cpath = scm_parse_path (scm_from_locale_string (env), cpath);
+   else
+     {
+-      cpath = scm_list_2 (scm_from_locale_string (SCM_CCACHE_DIR),
+-                          scm_from_locale_string (SCM_SITE_CCACHE_DIR));
++      cpath = scm_list_1 (scm_from_locale_string (ccache_dir));
+     }
+ 
+ #endif /* SCM_LIBRARY_DIR */
diff --git a/gnu/packages/patches/libtool-skip-tests.patch b/gnu/packages/patches/libtool-skip-tests.patch
new file mode 100644
index 0000000000..6e12615d51
--- /dev/null
+++ b/gnu/packages/patches/libtool-skip-tests.patch
@@ -0,0 +1,37 @@
+Because our GCC `lib' spec automatically adds `-rpath' for each `-L'
+and a couple more `-rpath, there are two test failures:
+demo-hardcode.test, and destdir.at.  Disable these.
+
+--- libtool-2.4.2/Makefile.in	2011-10-17 12:18:55.000000000 +0200
++++ libtool-2.4.2/Makefile.in	2012-09-13 23:50:37.000000000 +0200
+@@ -909,7 +908,7 @@ COMMON_TESTS = \
+ # but they depend on the other tests being run beforehand.
+ INTERACTIVE_TESTS = tests/demo-shared.test tests/demo-shared-make.test \
+ 	tests/demo-shared-exec.test tests/demo-shared-inst.test \
+-	tests/demo-hardcode.test tests/demo-relink.test \
++	tests/demo-relink.test \
+ 	tests/demo-noinst-link.test tests/demo-shared-unst.test \
+ 	tests/depdemo-shared.test tests/depdemo-shared-make.test \
+ 	tests/depdemo-shared-exec.test tests/depdemo-shared-inst.test \
+@@ -2580,8 +2579,7 @@ tests/cdemo-static-make.log:	tests/cdemo
+ 
+ tests/demo-shared-unst.log:	tests/demo-noinst-link.log
+ tests/demo-noinst-link.log:	tests/demo-relink.log
+-tests/demo-relink.log:		tests/demo-hardcode.log
+-tests/demo-hardcode.log:	tests/demo-shared-inst.log
++tests/demo-relink.log:		tests/demo-shared-inst.log
+ tests/demo-shared-inst.log:	tests/demo-shared-exec.log
+ tests/demo-shared-exec.log:	tests/demo-shared-make.log
+ tests/demo-shared-make.log:	tests/demo-shared.log
+
+--- libtool-2.4.2/tests/testsuite	2011-10-17 12:19:52.000000000 +0200
++++ libtool-2.4.2/tests/testsuite	2012-09-14 00:28:45.000000000 +0200
+@@ -14443,6 +14443,6 @@ read at_status <"$at_status_file"
+ #AT_START_69
+ at_fn_group_banner 69 'destdir.at:75' \
+   "DESTDIR with in-package deplibs" "                " 4
+-at_xfail=no
++at_xfail=yes
+       eval `$LIBTOOL --config | grep '^fast_install='`
+            case $fast_install in no) :;; *) false;; esac && at_xfail=yes
+
diff --git a/gnu/packages/patches/lsh-guile-compat.patch b/gnu/packages/patches/lsh-guile-compat.patch
new file mode 100644
index 0000000000..0fe0484580
--- /dev/null
+++ b/gnu/packages/patches/lsh-guile-compat.patch
@@ -0,0 +1,9 @@
+Use (ice-9 rdelim) for `read-line'.
+
+--- lsh-2.0.4/src/scm/guile-compat.scm	2012-12-03 23:28:01.000000000 +0100
++++ lsh-2.0.4/src/scm/guile-compat.scm	2012-12-03 23:28:04.000000000 +0100
+@@ -21,3 +21,4 @@
+ ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ 
+ (use-syntax (ice-9 syncase))
++(use-modules (ice-9 rdelim))
diff --git a/gnu/packages/patches/lsh-no-root-login.patch b/gnu/packages/patches/lsh-no-root-login.patch
new file mode 100644
index 0000000000..9dd81de3fb
--- /dev/null
+++ b/gnu/packages/patches/lsh-no-root-login.patch
@@ -0,0 +1,16 @@
+Correctly handle the `--no-root-login' option.
+
+--- lsh-2.0.4/src/lshd.c	2006-05-01 13:47:44.000000000 +0200
++++ lsh-2.0.4/src/lshd.c	2009-09-08 12:20:36.000000000 +0200
+@@ -758,6 +758,10 @@ main_argp_parser(int key, char *arg, str
+       self->allow_root = 1;
+       break;
+ 
++    case OPT_NO_ROOT_LOGIN:
++      self->allow_root = 0;
++      break;
++
+     case OPT_KERBEROS_PASSWD:
+       self->pw_helper = PATH_KERBEROS_HELPER;
+       break;
+
diff --git a/gnu/packages/patches/lsh-pam-service-name.patch b/gnu/packages/patches/lsh-pam-service-name.patch
new file mode 100644
index 0000000000..6a6156855c
--- /dev/null
+++ b/gnu/packages/patches/lsh-pam-service-name.patch
@@ -0,0 +1,14 @@
+Tell `lsh-pam-checkpw', the PAM password helper program, to use a more
+descriptive service name.
+
+--- lsh-2.0.4/src/lsh-pam-checkpw.c	2003-02-16 22:30:10.000000000 +0100
++++ lsh-2.0.4/src/lsh-pam-checkpw.c	2008-11-28 16:16:58.000000000 +0100
+@@ -38,7 +38,7 @@
+ #include <security/pam_appl.h>
+ 
+ #define PWD_MAXLEN 1024
+-#define SERVICE_NAME "other"
++#define SERVICE_NAME "lshd"
+ #define TIMEOUT 600 
+ 
+ static int
diff --git a/gnu/packages/patches/m4-gets-undeclared.patch b/gnu/packages/patches/m4-gets-undeclared.patch
new file mode 100644
index 0000000000..d28f0cdcc4
--- /dev/null
+++ b/gnu/packages/patches/m4-gets-undeclared.patch
@@ -0,0 +1,45 @@
+This patch is needed to allow builds with newer versions of
+the GNU libc (2.16+).
+
+The upstream fix was:
+
+  commit 66712c23388e93e5c518ebc8515140fa0c807348
+  Author: Eric Blake <eblake@redhat.com>
+  Date:   Thu Mar 29 13:30:41 2012 -0600
+
+      stdio: don't assume gets any more
+
+      Gnulib intentionally does not have a gets module, and now that C11
+      and glibc have dropped it, we should be more proactive about warning
+      any user on a platform that still has a declaration of this dangerous
+      interface.
+
+      * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets
+      support.
+      * modules/stdio (Makefile.am): Likewise.
+      * lib/stdio-read.c (gets): Likewise.
+      * tests/test-stdio-c++.cc: Likewise.
+      * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment.
+      * lib/stdio.in.h (gets): Make warning occur in more places.
+      * doc/posix-functions/gets.texi (gets): Update documentation.
+      Reported by Christer Solskogen.
+
+      Signed-off-by: Eric Blake <eblake@redhat.com>
+
+This patch just gets rid of the offending part.
+
+--- m4-1.4.16/lib/stdio.in.h.orig	2012-09-01 01:05:36.000000000 +0200
++++ m4-1.4.16/lib/stdio.in.h	2012-09-01 01:05:42.000000000 +0200
+@@ -158,12 +158,6 @@ _GL_WARN_ON_USE (fflush, "fflush is not
+                  "use gnulib module fflush for portable POSIX compliance");
+ #endif
+ 
+-/* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
+-#undef gets
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+-
+ #if @GNULIB_FOPEN@
+ # if @REPLACE_FOPEN@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/gnu/packages/patches/m4-readlink-EINVAL.patch b/gnu/packages/patches/m4-readlink-EINVAL.patch
new file mode 100644
index 0000000000..dd371584a7
--- /dev/null
+++ b/gnu/packages/patches/m4-readlink-EINVAL.patch
@@ -0,0 +1,18 @@
+Newer Linux kernels would return EINVAL instead of ENOENT.
+The patch below, taken from Gnulib, allows the test to pass when
+these Linux versions are in use:
+https://lists.gnu.org/archive/html/bug-gnulib/2011-03/msg00308.html .
+
+diff --git a/tests/test-readlink.h b/tests/test-readlink.h
+index 08d5662..7247fc4 100644
+--- a/tests/test-readlink.h
++++ b/tests/test-readlink.h
+@@ -38,7 +38,7 @@ test_readlink (ssize_t (*func) (char const *, char *, size_t), bool print)
+   ASSERT (errno == ENOENT);
+   errno = 0;
+   ASSERT (func ("", buf, sizeof buf) == -1);
+-  ASSERT (errno == ENOENT);
++  ASSERT (errno == ENOENT || errno == EINVAL);
+   errno = 0;
+   ASSERT (func (".", buf, sizeof buf) == -1);
+   ASSERT (errno == EINVAL);
diff --git a/gnu/packages/patches/m4-s_isdir.patch b/gnu/packages/patches/m4-s_isdir.patch
new file mode 100644
index 0000000000..a009a4ba44
--- /dev/null
+++ b/gnu/packages/patches/m4-s_isdir.patch
@@ -0,0 +1,14 @@
+Fails to build with glibc 2.12.1 without this patch.
+
+http://lists.gnu.org/archive/html/bug-m4/2010-05/msg00002.html
+
+--- a/src/path.c
++++ b/src/path.c
+@@ -22,6 +22,7 @@
+ /* Handling of path search of included files via the builtins "include"
+    and "sinclude".  */
+ 
+ #include "m4.h"
++#include "sys/stat.h"
+ 
+ struct includes
diff --git a/gnu/packages/patches/make-impure-dirs.patch b/gnu/packages/patches/make-impure-dirs.patch
new file mode 100644
index 0000000000..83a5fbe3a5
--- /dev/null
+++ b/gnu/packages/patches/make-impure-dirs.patch
@@ -0,0 +1,40 @@
+Purity: don't look for library dependencies (of the form `-lfoo') in
+/lib and /usr/lib.  Likewise, when searching for included Makefiles,
+don't look in /usr/include and friends.
+
+Patch from Nixpkgs, by Eelco Dolstra.
+
+diff -rc make-3.81-orig/read.c make-3.81/read.c
+*** make-3.81-orig/read.c	2006-03-17 15:24:20.000000000 +0100
+--- make-3.81/read.c	2007-05-24 17:16:31.000000000 +0200
+***************
+*** 99,107 ****
+--- 99,109 ----
+  #endif
+      INCLUDEDIR,
+  #ifndef _AMIGA
++ #if 0    
+      "/usr/gnu/include",
+      "/usr/local/include",
+      "/usr/include",
++ #endif    
+  #endif
+      0
+    };
+diff -rc make-3.81-orig/remake.c make-3.81/remake.c
+*** make-3.81-orig/remake.c	2006-03-20 03:36:37.000000000 +0100
+--- make-3.81/remake.c	2007-05-24 17:06:54.000000000 +0200
+***************
+*** 1452,1460 ****
+--- 1452,1462 ----
+    static char *dirs[] =
+      {
+  #ifndef _AMIGA
++ #if 0
+        "/lib",
+        "/usr/lib",
+  #endif
++ #endif
+  #if defined(WINDOWS32) && !defined(LIBDIR)
+  /*
+   * This is completely up to the user at product install time. Just define
diff --git a/gnu/packages/patches/perl-no-sys-dirs.patch b/gnu/packages/patches/perl-no-sys-dirs.patch
new file mode 100644
index 0000000000..3aba4d7529
--- /dev/null
+++ b/gnu/packages/patches/perl-no-sys-dirs.patch
@@ -0,0 +1,156 @@
+Don't long for headers and libraries in "traditional" locations.
+
+Patch from Nixpkgs by Eelco Dolstra <eelco.dolstra@logicblox.com>.
+
+diff -ru -x '*~' perl-5.14.2-orig/Configure perl-5.14.2/Configure
+--- perl-5.14.2-orig/Configure	2011-09-26 11:44:34.000000000 +0200
++++ perl-5.14.2/Configure	2012-01-20 17:05:23.089223129 +0100
+@@ -106,15 +106,7 @@
+ fi
+ 
+ : Proper PATH setting
+-paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
+-paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
+-paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
+-paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
+-paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
+-paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /opt/ansic/bin /usr/ccs/bin"
+-paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
+-paths="$paths /sbin /usr/sbin /usr/libexec"
+-paths="$paths /system/gnu_library/bin"
++paths=''
+ 
+ for p in $paths
+ do
+@@ -1311,8 +1303,7 @@
+ archname=''
+ : Possible local include directories to search.
+ : Set locincpth to "" in a hint file to defeat local include searches.
+-locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
+-locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
++locincpth=""
+ :
+ : no include file wanted by default
+ inclwanted=''
+@@ -1328,17 +1319,12 @@
+ archobjs=''
+ libnames=''
+ : change the next line if compiling for Xenix/286 on Xenix/386
+-xlibpth='/usr/lib/386 /lib/386'
++xlibpth=''
+ : Possible local library directories to search.
+-loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
+-loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
++loclibpth=""
+ 
+ : general looking path for locating libraries
+-glibpth="/lib /usr/lib $xlibpth"
+-glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
+-test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
+-test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
+-test -d /usr/lib64         && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64"
++glibpth=""
+ 
+ : Private path used by Configure to find libraries.  Its value
+ : is prepended to libpth. This variable takes care of special
+@@ -1371,8 +1357,6 @@
+ libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD"
+ : We probably want to search /usr/shlib before most other libraries.
+ : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
+-glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
+-glibpth="/usr/shlib $glibpth"
+ : Do not use vfork unless overridden by a hint file.
+ usevfork=false
+ 
+@@ -2380,7 +2364,6 @@
+ zip
+ "
+ pth=`echo $PATH | sed -e "s/$p_/ /g"`
+-pth="$pth /lib /usr/lib"
+ for file in $loclist; do
+ 	eval xxx=\$$file
+ 	case "$xxx" in
+@@ -4785,7 +4768,7 @@
+ : Set private lib path
+ case "$plibpth" in
+ '') if ./mips; then
+-		plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
++		plibpth="$incpath/usr/lib"
+ 	fi;;
+ esac
+ case "$libpth" in
+@@ -8390,13 +8373,8 @@
+ echo " "
+ case "$sysman" in
+ '') 
+-	syspath='/usr/share/man/man1 /usr/man/man1'
+-	syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
+-	syspath="$syspath /usr/man/u_man/man1"
+-	syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
+-	syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+-	syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
+-	sysman=`./loc . /usr/man/man1 $syspath`
++	syspath=''
++	sysman=''
+ 	;;
+ esac
+ if $test -d "$sysman"; then
+@@ -19721,9 +19699,10 @@
+ case "$full_ar" in
+ '') full_ar=$ar ;;
+ esac
++full_ar=ar
+ 
+ : Store the full pathname to the sed program for use in the C program
+-full_sed=$sed
++full_sed=sed
+ 
+ : see what type gids are declared as in the kernel
+ echo " "
+diff -ru -x '*~' perl-5.14.2-orig/ext/Errno/Errno_pm.PL perl-5.14.2/ext/Errno/Errno_pm.PL
+--- perl-5.14.2-orig/ext/Errno/Errno_pm.PL	2011-09-26 11:44:34.000000000 +0200
++++ perl-5.14.2/ext/Errno/Errno_pm.PL	2012-01-20 17:02:07.938138311 +0100
+@@ -137,11 +137,7 @@
+ 	if ($dep =~ /(\S+errno\.h)/) {
+ 	     $file{$1} = 1;
+ 	}
+-    } elsif ($^O eq 'linux' &&
+-	      $Config{gccversion} ne '' && 
+-	      $Config{gccversion} !~ /intel/i
+-	      # might be using, say, Intel's icc
+-	     ) {
++    } elsif (0) {
+ 	# Some Linuxes have weird errno.hs which generate
+ 	# no #file or #line directives
+ 	my $linux_errno_h = -e '/usr/include/errno.h' ?
+diff -ru -x '*~' perl-5.14.2-orig/hints/freebsd.sh perl-5.14.2/hints/freebsd.sh
+--- perl-5.14.2-orig/hints/freebsd.sh	2011-09-19 15:18:22.000000000 +0200
++++ perl-5.14.2/hints/freebsd.sh	2012-01-20 17:10:37.267924044 +0100
+@@ -118,21 +118,21 @@
+         objformat=`/usr/bin/objformat`
+         if [ x$objformat = xaout ]; then
+             if [ -e /usr/lib/aout ]; then
+-                libpth="/usr/lib/aout /usr/local/lib /usr/lib"
+-                glibpth="/usr/lib/aout /usr/local/lib /usr/lib"
++                libpth=""
++                glibpth=""
+             fi
+             lddlflags='-Bshareable'
+         else
+-            libpth="/usr/lib /usr/local/lib"
+-            glibpth="/usr/lib /usr/local/lib"
++            libpth=""
++            glibpth=""
+             ldflags="-Wl,-E "
+             lddlflags="-shared "
+         fi
+         cccdlflags='-DPIC -fPIC'
+         ;;
+ *)
+-       libpth="/usr/lib /usr/local/lib"
+-       glibpth="/usr/lib /usr/local/lib"
++       libpth=""
++       glibpth=""
+        ldflags="-Wl,-E "
+         lddlflags="-shared "
+         cccdlflags='-DPIC -fPIC'
diff --git a/gnu/packages/patches/procps-make-3.82.patch b/gnu/packages/patches/procps-make-3.82.patch
new file mode 100644
index 0000000000..7bf53e2ccc
--- /dev/null
+++ b/gnu/packages/patches/procps-make-3.82.patch
@@ -0,0 +1,14 @@
+Fix compilation with GNU Make 3.82 (patch from Nixpkgs).
+
+diff --git a/Makefile b/Makefile
+index 09fb3ed..59eba16 100644
+--- a/Makefile
++++ b/Makefile
+@@ -174,7 +174,7 @@ INSTALL := $(BINFILES) $(MANFILES)
+ # want this rule first, use := on ALL, and ALL not filled in yet
+ all: do_all
+ 
+--include */module.mk
++-include proc/module.mk ps/module.mk
+ 
+ do_all:    $(ALL)
diff --git a/gnu/packages/patches/readline-link-ncurses.patch b/gnu/packages/patches/readline-link-ncurses.patch
new file mode 100644
index 0000000000..0fd0598f46
--- /dev/null
+++ b/gnu/packages/patches/readline-link-ncurses.patch
@@ -0,0 +1,18 @@
+This patch is to make sure that `libncurses' is among the `NEEDED'
+dependencies of `libreadline.so' and `libhistory.so'.
+
+Failing to do that, applications linking against Readline are
+forced to explicitly link against libncurses as well; in addition,
+this trick doesn't work when using GNU ld's `--as-needed'.
+
+--- shlib/Makefile.in	2009-01-06 18:03:22.000000000 +0100
++++ shlib/Makefile.in	2009-07-27 14:43:25.000000000 +0200
+@@ -84,7 +84,7 @@ SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@
+ SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@
+ SHOBJ_LIBS = @SHOBJ_LIBS@
+ 
+-SHLIB_XLDFLAGS = @LDFLAGS@ @SHLIB_XLDFLAGS@
++SHLIB_XLDFLAGS = @LDFLAGS@ @SHLIB_XLDFLAGS@ -lncurses
+ SHLIB_LIBS = @SHLIB_LIBS@
+ 
+ SHLIB_DOT = @SHLIB_DOT@
diff --git a/gnu/packages/patches/shishi-gets-undeclared.patch b/gnu/packages/patches/shishi-gets-undeclared.patch
new file mode 100644
index 0000000000..a3d6d0cca2
--- /dev/null
+++ b/gnu/packages/patches/shishi-gets-undeclared.patch
@@ -0,0 +1,71 @@
+This patch is needed to allow builds with newer versions of
+the GNU libc (2.16+).
+
+
+commit 66712c23388e93e5c518ebc8515140fa0c807348
+Author: Eric Blake <eblake@redhat.com>
+Date:   Thu Mar 29 13:30:41 2012 -0600
+
+    stdio: don't assume gets any more
+    
+    Gnulib intentionally does not have a gets module, and now that C11
+    and glibc have dropped it, we should be more proactive about warning
+    any user on a platform that still has a declaration of this dangerous
+    interface.
+    
+    * m4/stdio_h.m4 (gl_STDIO_H, gl_STDIO_H_DEFAULTS): Drop gets
+    support.
+    * modules/stdio (Makefile.am): Likewise.
+    * lib/stdio-read.c (gets): Likewise.
+    * tests/test-stdio-c++.cc: Likewise.
+    * m4/warn-on-use.m4 (gl_WARN_ON_USE_PREPARE): Fix comment.
+    * lib/stdio.in.h (gets): Make warning occur in more places.
+    * doc/posix-functions/gets.texi (gets): Update documentation.
+    Reported by Christer Solskogen.
+    
+    Signed-off-by: Eric Blake <eblake@redhat.com>
+
+diff --git a/gl/stdio.in.h b/gl/stdio.in.h
+index aa7b599..c377b6e 100644
+--- a/gl/stdio.in.h
++++ b/gl/stdio.in.h
+@@ -698,22 +698,11 @@ _GL_WARN_ON_USE (getline, "getline is unportable - "
+ # endif
+ #endif
+ 
+-#if @GNULIB_GETS@
+-# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+-#   undef gets
+-#   define gets rpl_gets
+-#  endif
+-_GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1)));
+-_GL_CXXALIAS_RPL (gets, char *, (char *s));
+-# else
+-_GL_CXXALIAS_SYS (gets, char *, (char *s));
+-#  undef gets
+-# endif
+-_GL_CXXALIASWARN (gets);
+ /* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
++   so any use of gets warrants an unconditional warning; besides, C11
++   removed it.  */
++#undef gets
++#if HAVE_RAW_DECL_GETS
+ _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+ #endif
+ 
+@@ -1053,9 +1042,9 @@ _GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+ # endif
+ #endif
+ 
+-/* Some people would argue that sprintf should be handled like gets
+-   (for example, OpenBSD issues a link warning for both functions),
+-   since both can cause security holes due to buffer overruns.
++/* Some people would argue that all sprintf uses should be warned about
++   (for example, OpenBSD issues a link warning for it),
++   since it can cause security holes due to buffer overruns.
+    However, we believe that sprintf can be used safely, and is more
+    efficient than snprintf in those safe cases; and as proof of our
+    belief, we use sprintf in several gnulib modules.  So this header
diff --git a/gnu/packages/patches/tar-gets-undeclared.patch b/gnu/packages/patches/tar-gets-undeclared.patch
new file mode 100644
index 0000000000..301a09dde1
--- /dev/null
+++ b/gnu/packages/patches/tar-gets-undeclared.patch
@@ -0,0 +1,26 @@
+This patch is needed to allow builds with newer versions of
+the GNU libc (2.16+).
+
+This is a backport of this patch:
+
+commit 66712c23388e93e5c518ebc8515140fa0c807348
+Author: Eric Blake <eblake@redhat.com>
+Date:   Thu Mar 29 13:30:41 2012 -0600
+
+    stdio: don't assume gets any more
+    
+--- tar-1.26/gnu/stdio.in.h	2012-07-02 14:28:45.000000000 +0200
++++ tar-1.26/gnu/stdio.in.h	2012-07-02 14:28:50.000000000 +0200
+@@ -160,12 +160,6 @@ _GL_WARN_ON_USE (fflush, "fflush is not
+                  "use gnulib module fflush for portable POSIX compliance");
+ #endif
+ 
+-/* It is very rare that the developer ever has full control of stdin,
+-   so any use of gets warrants an unconditional warning.  Assume it is
+-   always declared, since it is required by C89.  */
+-#undef gets
+-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+-
+ #if @GNULIB_FOPEN@
+ # if @REPLACE_FOPEN@
+ #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
new file mode 100644
index 0000000000..719aa4db5c
--- /dev/null
+++ b/gnu/packages/perl.scm
@@ -0,0 +1,73 @@
+;;; 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 perl)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public perl
+  ;; Yeah, Perl...  It is required early in the bootstrap process by Linux.
+  (package
+    (name "perl")
+    (version "5.16.1")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://www.cpan.org/src/5.0/perl-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "15qxzba3a50c9nik5ydgyfp62x7h9vxxn12yd1jgl93hb1wj96km"))))
+    (build-system gnu-build-system)
+    (arguments
+     (lambda (system)
+       `(#:tests? #f
+         #:patches (list (assoc-ref %build-inputs "patch/no-sys-dirs"))
+         #:phases
+         (alist-replace
+          'configure
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            (let ((out  (assoc-ref outputs "out"))
+                  (libc (assoc-ref inputs "libc")))
+              ;; Use the right path for `pwd'.
+              (substitute* "dist/Cwd/Cwd.pm"
+                (("/bin/pwd")
+                 (which "pwd")))
+
+              (zero?
+               (system* "./Configure"
+                        (string-append "-Dprefix=" out)
+                        (string-append "-Dman1dir=" out "/share/man/man1")
+                        (string-append "-Dman3dir=" out "/share/man/man3")
+                        "-de" "-Dcc=gcc"
+                        "-Uinstallusrbinperl"
+                        "-Dinstallstyle=lib/perl5"
+                        "-Duseshrplib"
+                        (string-append "-Dlocincpth=" libc "/include")
+                        (string-append "-Dloclibpth=" libc "/lib")))))
+          %standard-phases))))
+    (inputs `(("patch/no-sys-dirs" ,(search-patch "perl-no-sys-dirs.patch"))))
+    (synopsis "Implementation of the Perl programming language")
+    (description
+     "Perl 5 is a highly capable, feature-rich programming language with over
+24 years of development.")
+    (home-page "http://www.perl.org/")
+    (license gpl1+)))                          ; or "Artistic"
diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm
new file mode 100644
index 0000000000..f9bcf18728
--- /dev/null
+++ b/gnu/packages/pkg-config.scm
@@ -0,0 +1,51 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 pkg-config)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public pkg-config
+  (package
+   (name "pkg-config")
+   (version "0.27.1")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                  "http://pkgconfig.freedesktop.org/releases/pkg-config-"
+                  version ".tar.gz"))
+            (sha256
+             (base32
+              "05wc5nwkqz7saj2v33ydmz1y6jdg659dll4jjh91n41m63gx0qsg"))))
+   (build-system gnu-build-system)
+   (arguments `(#:configure-flags '("--with-internal-glib")))
+   (home-page "http://www.freedesktop.org/wiki/Software/pkg-config")
+   (license gpl2+)
+   (synopsis "a helper tool used when compiling applications and
+libraries")
+   (description
+    "pkg-config is a helper tool used when compiling applications and
+libraries.  It helps you insert the correct compiler options on the
+command line so an application can use gcc -o test test.c `pkg-config
+--libs --cflags glib-2.0` for instance, rather than hard-coding values
+on where to find glib (or other libraries). It is language-agnostic, so
+it can be used for defining the location of documentation tools, for
+instance.")))
diff --git a/gnu/packages/pth.scm b/gnu/packages/pth.scm
new file mode 100644
index 0000000000..b0d5092cb0
--- /dev/null
+++ b/gnu/packages/pth.scm
@@ -0,0 +1,61 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 pth)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public pth
+  (package
+    (name "pth")
+    (version "2.0.7")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/pth/pth-" version
+                          ".tar.gz"))
+      (sha256
+       (base32
+        "0ckjqw5kz5m30srqi87idj7xhpw6bpki43mj07bazjm2qmh3cdbj"))))
+    (build-system gnu-build-system)
+    (arguments '(#:parallel-build? #f))
+    (home-page "http://www.gnu.org/software/pth")
+    (synopsis "The GNU Portable Threads library")
+    (description
+     "Pth is a very portable POSIX/ANSI-C based library for Unix
+platforms which provides non-preemptive priority-based scheduling for
+multiple threads of execution (aka ``multithreading'') inside
+event-driven applications. All threads run in the same address space of
+the server application, but each thread has it's own individual
+program-counter, run-time stack, signal mask and errno variable.
+
+The thread scheduling itself is done in a cooperative way, i.e., the
+threads are managed by a priority- and event-based non-preemptive
+scheduler. The intention is that this way one can achieve better
+portability and run-time performance than with preemptive
+scheduling. The event facility allows threads to wait until various
+types of events occur, including pending I/O on file descriptors,
+asynchronous signals, elapsed timers, pending I/O on message ports,
+thread and process termination, and even customized callback functions.
+
+Additionally Pth provides an optional emulation API for POSIX.1c
+threads (\"Pthreads\") which can be used for backward compatibility to
+existing multithreaded applications.")
+    (license lgpl2.1+)))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
new file mode 100644
index 0000000000..39d4880ecc
--- /dev/null
+++ b/gnu/packages/python.scm
@@ -0,0 +1,58 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;; 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 python)
+  #:use-module ((guix licenses) #:select (psfl))
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages openssl)
+  #:use-module (gnu packages base)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public python
+  (package
+    (name "python")
+    (version "2.7.3")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "http://www.python.org/ftp/python/"
+                          version "/Python-" version ".tar.xz"))
+      (sha256
+       (base32
+        "11f9aw855lrmknr6c82gm1ijr3n0smc6idyp94y7774yivjnplv1"))))
+    (build-system gnu-build-system)
+    (arguments `(#:tests? #f)) ; XXX: some tests fail
+    (inputs
+     `(("zlib" ,zlib)
+       ("openssl" ,openssl)
+       ("bzip2" ,bzip2)))
+    (home-page "http://python.org")
+    (synopsis
+     "Python, a high-level dynamically-typed programming language")
+    (description
+     "Python is a remarkably powerful dynamic programming language that
+is used in a wide variety of application domains.  Some of its key
+distinguishing features include: clear, readable syntax; strong
+introspection capabilities; intuitive object orientation; natural
+expression of procedural code; full modularity, supporting hierarchical
+packages; exception-based error handling; and very high level dynamic
+data types.")
+    (license psfl)))
diff --git a/gnu/packages/readline.scm b/gnu/packages/readline.scm
new file mode 100644
index 0000000000..8623e63758
--- /dev/null
+++ b/gnu/packages/readline.scm
@@ -0,0 +1,79 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 readline)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (gnu packages ncurses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu))
+
+(define-public readline
+  (let ((post-install-phase
+         '(lambda* (#:key outputs #:allow-other-keys)
+            (let* ((out (assoc-ref outputs "out"))
+                   (lib (string-append out "/lib")))
+              ;; Make libraries writable so that `strip' can work.
+              ;; Failing to do that, it bails out with "Permission
+              ;; denied".
+              (for-each (lambda (f) (chmod f #o755))
+                        (find-files lib "\\.so"))
+              (for-each (lambda (f) (chmod f #o644))
+                        (find-files lib "\\.a"))))))
+    (package
+      (name "readline")
+      (version "6.2")
+      (source (origin
+               (method url-fetch)
+               (uri (string-append "mirror://gnu/readline/readline-"
+                                   version ".tar.gz"))
+               (sha256
+                (base32
+                 "10ckm2bd2rkxhvdmj7nmbsylmihw0abwcsnxf8y27305183rd9kr"))))
+      (build-system gnu-build-system)
+      (propagated-inputs `(("ncurses" ,ncurses)))
+      (inputs `(("patch/link-ncurses"
+                 ,(search-patch "readline-link-ncurses.patch"))))
+      (arguments `(#:patches (list (assoc-ref %build-inputs
+                                              "patch/link-ncurses"))
+                   #:patch-flags '("-p0")
+                   #:configure-flags
+                   (list (string-append "LDFLAGS=-Wl,-rpath -Wl,"
+                                        (assoc-ref %build-inputs "ncurses")
+                                        "/lib"))
+
+                   #:phases (alist-cons-after
+                             'install 'post-install
+                             ,post-install-phase
+                             %standard-phases)))
+      (synopsis "GNU Readline, a library for interactive line editing")
+      (description
+       "The GNU Readline library provides a set of functions for use by
+applications that allow users to edit command lines as they are typed in.
+Both Emacs and vi editing modes are available.  The Readline library includes
+additional functions to maintain a list of previously-entered command lines,
+to recall and perhaps reedit those lines, and perform csh-like history
+expansion on previous commands.
+
+The history facilites are also placed into a separate library, the History
+library, as part of the build process.  The History library may be used
+without Readline in applications which desire its capabilities.")
+      (license gpl3+)
+      (home-page "http://savannah.gnu.org/projects/readline/"))))
diff --git a/gnu/packages/recutils.scm b/gnu/packages/recutils.scm
new file mode 100644
index 0000000000..39452b54b9
--- /dev/null
+++ b/gnu/packages/recutils.scm
@@ -0,0 +1,57 @@
+;;; 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 recutils)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages emacs)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages algebra))
+
+(define-public recutils
+  (package
+   (name "recutils")
+   (version "1.5")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/recutils/recutils-"
+                                version ".tar.gz"))
+            (sha256
+             (base32
+              "1v2xzwwwhc5j5kmvg4sv6baxjpsfqh8ln7ilv4mgb1408rs7xmky"))))
+   (build-system gnu-build-system)
+   (inputs `(;; TODO: Enable optional deps when they're packaged.
+             ;; ("curl" ,(nixpkgs-derivation "curl"))
+             ("emacs" ,emacs)
+             ("check" ,check)
+             ("bc" ,bc)
+             ("patch/gets"
+              ,(search-patch "diffutils-gets-undeclared.patch"))))
+   (arguments `(#:patches (list (assoc-ref %build-inputs "patch/gets"))))
+   (synopsis "GNU recutils, tools and libraries to access human-editable,
+text-based databases")
+   (description
+    "GNU recutils is a set of tools and libraries to access human-editable,
+text-based databases called recfiles.  The data is stored as a sequence of
+records, each record containing an arbitrary number of named fields.")
+   (license gpl3+)
+   (home-page "http://www.gnu.org/software/recutils/")))
diff --git a/gnu/packages/rsync.scm b/gnu/packages/rsync.scm
new file mode 100644
index 0000000000..3fb7874434
--- /dev/null
+++ b/gnu/packages/rsync.scm
@@ -0,0 +1,51 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 rsync)
+  #:use-module (distro)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages acl)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+
+(define-public rsync
+  (package
+   (name "rsync")
+   (version "3.0.9")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "http://rsync.samba.org/ftp/rsync/rsync-"
+                                version ".tar.gz"))
+            (sha256
+             (base32
+              "01bw4klqsrlhh3i9lazd485sd9qx5djvnwa21lj2h3a9sn6hzw9h"))))
+   (build-system gnu-build-system)
+   (inputs `(("perl" ,perl)
+             ("acl" ,acl)))
+   (synopsis "rsync, a remote (and local) file copying tool")
+   (description
+    "rsync is a fast and versatile file copying tool. It can copy locally,
+to/from another host over any remote shell, or to/from a remote rsync daemon.
+Its delta-transfer algorithm reduces the amount of data sent over the network
+by sending only the differences between the source files and the existing
+files in the destination.")
+   (license gpl3+)
+   (home-page "http://rsync.samba.org/")))
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
new file mode 100644
index 0000000000..a1b8f68c9d
--- /dev/null
+++ b/gnu/packages/scheme.scm
@@ -0,0 +1,168 @@
+;;; 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 scheme)
+  #:use-module (distro)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages m4)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages emacs)
+  #:use-module (gnu packages texinfo)
+  #:use-module (ice-9 match))
+
+(define-public mit-scheme
+  (package
+    (name "mit-scheme")
+    (version "9.1.1")
+    (source #f)                                   ; see below
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                                ; no "check" target
+       #:phases
+       (alist-replace
+        'unpack
+        (lambda* (#:key inputs #:allow-other-keys)
+          (and (zero? (system* "tar" "xzvf"
+                               (assoc-ref inputs "source")))
+               (chdir ,(string-append name "-" version))
+               (begin
+                 ;; Delete these dangling symlinks since they break
+                 ;; `patch-shebangs'.
+                 (for-each delete-file
+                           (append (find-files "src/lib/lib" "\\.so$")
+                                   (find-files "src/lib" "^ffi-test")))
+                 (chdir "src")
+                 #t)))
+        (alist-replace
+         'build
+         (lambda* (#:key system outputs #:allow-other-keys)
+           (let ((out (assoc-ref outputs "out")))
+             (if (or (string-prefix? "x86_64" system)
+                     (string-prefix? "i686" system))
+                 (zero? (system* "make" "compile-microcode"))
+                 (zero? (system* "./etc/make-liarc.sh"
+                                 (string-append "--prefix=" out))))))
+         %standard-phases))))
+    (inputs
+     `(;; TODO: Build doc when TeX Live is available.
+       ;; ("automake" ,automake)
+       ;; ("texlive-core" ,texlive-core)
+       ("texinfo" ,texinfo)
+       ("m4" ,m4)
+
+       ("source"
+        ,(lambda (system)
+           ;; MIT/GNU Scheme is not bootstrappable, so it's recommended to
+           ;; compile from the architecture-specific tarballs, which contain
+           ;; pre-built binaries.  It leads to more efficient code than when
+           ;; building the tarball that contains generated C code instead of
+           ;; those binaries.
+           (origin
+            (method url-fetch)
+            (uri (string-append "mirror://gnu/mit-scheme/stable.pkg/"
+                                version "/mit-scheme-"
+                                version "-"
+                                (match system
+                                  ("x86_64-linux" "x86-64")
+                                  ("i686-linux" "i386")
+                                  (_ "c"))
+                                ".tar.gz"))
+            (sha256
+             (match system
+               ("x86_64-linux"
+                (base32
+                 "1wcxm9hyfc53myvlcn93fyqrnnn4scwkknl9hkbp1cphc6mp291x"))
+               ("i686-linux"
+                (base32
+                 "0vi760fy550d9db538m0vzbq1mpdncvw9g8bk4lswk0kcdira55z"))
+               (_
+                (base32
+                 "0pclakzwxbqgy6wqwvs6ml62wgby8ba8xzmwzdwhx1v8wv05yw1j")))))))))
+    (home-page "http://www.gnu.org/software/mit-scheme/")
+    (synopsis "MIT/GNU Scheme, a native code Scheme compiler")
+    (description
+     "MIT/GNU Scheme is an implementation of the Scheme programming
+language, providing an interpreter, compiler, source-code debugger,
+integrated Emacs-like editor, and a large runtime library.  MIT/GNU
+Scheme is best suited to programming large applications with a rapid
+development cycle.")
+    (license gpl2+)))
+
+(define-public bigloo
+  (package
+    (name "bigloo")
+    (version "3.9a")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "ftp://ftp-sop.inria.fr/indes/fp/Bigloo/bigloo"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "0v1q0gcbn38ackdzsnvpkdgaj6ydkfdya31l2hag21aig087px1y"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:patches (list (assoc-ref %build-inputs "patch/shebangs"))
+       #:test-target "test"
+       #:phases (alist-replace
+                 'configure
+                 (lambda* (#:key outputs #:allow-other-keys)
+
+                   (substitute* "configure"
+                     (("^shell=.*$")
+                      (string-append "shell=" (which "bash") "\n")))
+
+                   ;; Those variables are used by libgc's `configure'.
+                   (setenv "SHELL" (which "bash"))
+                   (setenv "CONFIG_SHELL" (which "bash"))
+
+                   ;; The `configure' script doesn't understand options
+                   ;; of those of Autoconf.
+                   (let ((out (assoc-ref outputs "out")))
+                     (zero?
+                      (system* "./configure"
+                               (string-append "--prefix=" out)
+                               (string-append"--mv=" (which "mv"))
+                               (string-append "--rm=" (which "rm"))))))
+                 (alist-cons-after
+                  'patch 'patch-absolute-file-names
+                  (lambda _
+                    (substitute* (cons "configure"
+                                       (find-files "gc" "^install-gc"))
+                      (("/bin/rm") (which "rm"))
+                      (("/bin/mv") (which "mv"))))
+                  %standard-phases))))
+    (inputs
+     `(("gmp" ,gmp)
+       ("emacs" ,emacs)
+       ("patch/shebangs" ,(search-patch "bigloo-gc-shebangs.patch"))))
+    (home-page "http://www-sop.inria.fr/indes/fp/Bigloo/")
+    (synopsis "Bigloo, an efficient Scheme compiler")
+    (description
+     "Bigloo is a Scheme implementation devoted to one goal: enabling
+Scheme based programming style where C(++) is usually
+required.  Bigloo attempts to make Scheme practical by offering
+features usually presented by traditional programming languages
+but not offered by Scheme and functional programming.  Bigloo
+compiles Scheme modules.  It delivers small and fast stand alone
+binary executables.  Bigloo enables full connections between
+Scheme and C programs, between Scheme and Java programs, and
+between Scheme and C# programs.")
+    (license gpl2+)))
diff --git a/gnu/packages/shishi.scm b/gnu/packages/shishi.scm
new file mode 100644
index 0000000000..d6d152f368
--- /dev/null
+++ b/gnu/packages/shishi.scm
@@ -0,0 +1,71 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2012 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 shishi)
+  #:use-module (guix licenses)
+  #:use-module (distro)
+  #:use-module (gnu packages gnutls)
+  #:use-module (gnu packages gnupg)
+  #:use-module ((gnu packages compression)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public shishi
+  (package
+    (name "shishi")
+    (version "1.0.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append
+            "mirror://gnu/shishi/shishi-"
+            version
+            ".tar.gz"))
+      (sha256
+       (base32
+        "13c6w9rpaqb3am65nrn86byvmll5r78pld2vb0i68491vww4fzlx"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       '("CPPFLAGS=-DMAX_ERROR_DESCRIPTION_SIZE=ASN1_MAX_ERROR_DESCRIPTION_SIZE")
+       #:patches (list (assoc-ref %build-inputs
+                                  "patch/gets"))))
+    (inputs
+     `(("gnutls" ,gnutls)
+       ("zlib" ,guix:zlib)
+       ("libgcrypt" ,libgcrypt)
+       ("libtasn1" ,libtasn1)
+       ("patch/gets" ,(search-patch "shishi-gets-undeclared.patch"))))
+    (home-page "http://www.gnu.org/software/shishi/")
+    (synopsis
+     "GNU Shishi, free implementation of the Kerberos 5 network security system")
+    (description
+     " GNU Shishi is an implementation of the Kerberos 5 network
+  authentication system, as specified in RFC 4120.  Shishi can be
+  used to authenticate users in distributed systems.
+
+  Shishi contains a library (`libshishi') that can be used by
+  application developers to add support for Kerberos 5.  Shishi
+  contains a command line utility (1shishi') that is used by
+  users to acquire and manage tickets (and more).  The server
+  side, a Key Distribution Center, is implemented by `shishid'.
+")
+    (license gpl3+))) ; some files are under GPLv2+
diff --git a/gnu/packages/system.scm b/gnu/packages/system.scm
new file mode 100644
index 0000000000..5fb3dc463b
--- /dev/null
+++ b/gnu/packages/system.scm
@@ -0,0 +1,91 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 system)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (distro)
+  #:use-module (gnu packages ncurses))
+
+(define-public pies
+  (package
+    (name "pies")
+    (version "1.2")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/pies/pies-"
+                          version ".tar.bz2"))
+      (sha256
+       (base32
+        "18w0dbg77i56cx1bwa789w0qi3l4xkkbascxcv2b6gbm0zmjg1g6"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.gnu.org/software/pies/")
+    (synopsis
+     "GNU Pies, a program invocation and execution supervisor")
+    (description
+     "The name Pies (pronounced \"p-yes\") stands for Program Invocation
+and Execution Supervisor.  This utility starts and controls execution of
+external programs, called components.  Each component is a stand-alone
+program, which is executed in the foreground.  Upon startup, pies reads
+the list of components from its configuration file, starts them, and
+remains in the background, controlling their execution.  If any of the
+components terminates, the default action of Pies is to restart it.
+However, it can also be programmed to perform a variety of another
+actions such as, e.g., sending mail notifications to the system
+administrator, invoking another external program, etc.
+
+Pies can be used for a wide variety of tasks.  Its most obious use is to
+put in backgound a program which normally cannot detach itself from the
+controlling terminal, such as, e.g., minicom.  It can launch and control
+components of some complex system, such as Jabberd or MeTA1 (and it
+offers much more control over them than the native utilities).  Finally,
+it can replace the inetd utility!")
+    (license gpl3+)))
+
+(define-public inetutils
+  (package
+    (name "inetutils")
+    (version "1.9.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/inetutils/inetutils-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0azzg6njgq79byl6960kb0wihfhhzf49snslhxgvi30ribgfpa82"))))
+    (build-system gnu-build-system)
+    (arguments `(#:patches (list (assoc-ref %build-inputs "patch/gets"))
+
+                 ;; FIXME: `tftp.sh' relies on `netstat' from utils-linux,
+                 ;; which is currently missing.
+                 #:tests? #f))
+    (inputs `(("patch/gets" ,(search-patch "diffutils-gets-undeclared.patch"))
+              ("ncurses" ,ncurses)))
+    (home-page "http://www.gnu.org/software/inetutils/")
+    (synopsis
+     "GNU Inetutils, a collection of common network programs")
+    (description
+     "The GNU network utilities suite provides the following tools:
+ftp(d), hostname, ifconfig, inetd, logger, ping, rcp, rexec(d),
+rlogin(d), rsh(d), syslogd, talk(d), telnet(d), tftp(d), traceroute,
+uucpd, and whois.")
+    (license gpl3+)))
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
new file mode 100644
index 0000000000..a8c4c957c4
--- /dev/null
+++ b/gnu/packages/tcl.scm
@@ -0,0 +1,109 @@
+;;; 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 tcl)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix licenses))
+
+(define-public tcl
+  (package
+    (name "tcl")
+    (version "8.6.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://sourceforge/tcl/Tcl/"
+                          version "/tcl" version "-src.tar.gz"))
+      (sha256
+       (base32
+        "1pnabp3xsja4rc8c01l9q1avb65a3zhdzci3j54qa5krqjwj4i1m"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases (alist-cons-before
+                 'configure 'pre-configure
+                 (lambda _
+                   (chdir "unix"))
+                 (alist-cons-after
+                  'install 'install-private-headers
+                  (lambda _
+                    ;; Private headers are needed by Expect.
+                    (zero? (system* "make" "install-private-headers")))
+                  %standard-phases))
+
+       ;; XXX: There are a few test failures (related to HTTP, most
+       ;; likely related to name resolution), but that doesn't cause
+       ;; `make' to fail.
+       #:test-target "test"))
+    (home-page "http://www.tcl.tk/")
+    (synopsis "The Tcl scripting language")
+    (description "The Tcl (Tool Command Language) scripting language.")
+    (license (bsd-style "http://www.tcl.tk/software/tcltk/license.html"
+                        "Tcl/Tk license"))))
+
+
+(define-public expect
+  (package
+    (name "expect")
+    (version "5.45")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://sourceforge/expect/Expect/"
+                          version "/expect" version ".tar.gz"))
+      (sha256
+       (base32
+        "0h60bifxj876afz4im35rmnbnxjx4lbdqp2ja3k30fwa8a8cm3dj"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(;; TODO: Add these optional dependencies.
+       ;; ("libX11" ,libX11)
+       ;; ("xproto" ,xproto)
+       ;; ("tk" ,tk)
+       ("tcl" ,tcl)))
+    (arguments
+     '(#:configure-flags
+       (list (string-append "--with-tcl="
+                            (assoc-ref %build-inputs "tcl")
+                            "/lib")
+             (string-append "--with-tclinclude="
+                            (assoc-ref %build-inputs "tcl")
+                            "/include")
+             (string-append "--exec-prefix="
+                            (assoc-ref %outputs "out")))
+
+       #:phases (alist-cons-before
+                 'configure 'set-path-to-stty
+                 (lambda _
+                   (substitute* "configure"
+                     (("STTY_BIN=/bin/stty")
+                      (string-append "STTY_BIN=" (which "stty")))))
+                 %standard-phases)
+
+       #:test-target "test"))
+    (home-page "http://expect.nist.gov/")
+    (synopsis
+     "A tool for automating interactive applications")
+    (description
+     "Expect is a tool for automating interactive applications such as
+telnet, ftp, passwd, fsck, rlogin, tip, etc.  Expect really makes this
+stuff trivial. Expect is also useful for testing these same
+applications. And by adding Tk, you can wrap interactive applications in
+X11 GUIs.")
+    (license public-domain)))            ; as written in `license.terms'
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
new file mode 100644
index 0000000000..9a264c627c
--- /dev/null
+++ b/gnu/packages/texinfo.scm
@@ -0,0 +1,61 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 texinfo)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages ncurses))
+
+(define-public texinfo
+  (package
+    (name "texinfo")
+    (version "4.13a")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append
+            "mirror://gnu/texinfo/texinfo-"
+            version
+            ".tar.lzma"))
+      (sha256
+       (base32
+        "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d"))))
+    (build-system gnu-build-system)
+    (inputs `(("ncurses" ,ncurses) ("xz" ,xz)))
+    (home-page
+     "http://www.gnu.org/software/texinfo/")
+    (synopsis
+     "GNU Texinfo, the GNU documentation system")
+    (description
+     "Texinfo is the official documentation format of the GNU project.
+It was invented by Richard Stallman and Bob Chassell many years
+ago, loosely based on Brian Reid's Scribe and other formatting
+languages of the time.  It is used by many non-GNU projects as
+well.
+
+Texinfo uses a single source file to produce output in a number
+of formats, both online and printed (dvi, html, info, pdf, xml,
+etc.).  This means that instead of writing different documents
+for online information and another for a printed manual, you
+need write only one document.  And when the work is revised, you
+need revise only that one document.  The Texinfo system is
+well-integrated with GNU Emacs.")
+    (license gpl3+)))
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
new file mode 100644
index 0000000000..cfb3261f94
--- /dev/null
+++ b/gnu/packages/time.scm
@@ -0,0 +1,66 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
+;;; 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 time)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public time
+  (package
+    (name "time")
+    (version "1.7")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/time/time-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0va9063fcn7xykv658v2s9gilj2fq4rcdxx2mn2mmy1v4ndafzp3"))))
+    (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.gnu.org/software/time/")
+    (synopsis
+     "GNU Time, a tool that runs programs and summarizes the system
+resources they use")
+    (description
+     "The 'time' command runs another program, then displays information
+about the resources used by that program, collected by the system while
+the program was running.  You can select which information is reported
+and the format in which it is shown, or have 'time' save the information
+in a file instead of displaying it on the screen.
+
+The resources that 'time' can report on fall into the general categories
+of time, memory, and I/O and IPC calls.  Some systems do not provide
+much information about program resource use; 'time' reports unavailable
+information as zero values.")
+    (license gpl2+)))
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
new file mode 100644
index 0000000000..ea31a1e70d
--- /dev/null
+++ b/gnu/packages/wget.scm
@@ -0,0 +1,61 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 wget)
+  #:use-module (guix licenses)
+  #:use-module ((gnu packages gettext)
+                #:renamer (symbol-prefix-proc 'guix:))
+  #:use-module (gnu packages gnutls)
+  #:use-module (gnu packages perl)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public wget
+  (package
+    (name "wget")
+    (version "1.14")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/wget/wget-"
+                          version ".tar.xz"))
+      (sha256
+       (base32
+        "0yqllj3nv9p3vqbdm6j4nvpjcwf1y19rq8sd966nrbd2qvvxfq8p"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("gnutls" ,gnutls)
+       ("perl" ,perl)
+       ("gettext" ,guix:gettext)))
+    (arguments
+     '(#:phases
+       (alist-cons-before 'build 'patch-/usr/bin/env
+                          (lambda _
+                            (for-each patch-shebang
+                                      '("doc/texi2pod.pl" "tests/run-px")))
+                          %standard-phases)))
+    (home-page "http://www.gnu.org/software/wget/")
+    (synopsis
+     "GNU Wget, a tool for retrieving files using HTTP, HTTPS, and FTP")
+    (description
+     "GNU Wget is a free software package for retrieving files using HTTP,
+HTTPS and FTP, the most widely-used Internet protocols.  It is a
+non-interactive commandline tool, so it may easily be called from
+scripts, cron jobs, terminals without X-Windows support, etc.")
+    (license gpl3+))) ; some files are under GPLv2+
diff --git a/gnu/packages/which.scm b/gnu/packages/which.scm
new file mode 100644
index 0000000000..aa5330cad7
--- /dev/null
+++ b/gnu/packages/which.scm
@@ -0,0 +1,48 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 which)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public which
+  (package
+    (name "which")
+    (version "2.20")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/which/which-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "1y2p50zadb36izzh2zw4dm5hvdiydqf3qa88l8kav20dcmfbc5yl"))))
+    (build-system gnu-build-system)
+    (home-page "https://gnu.org/software/which/")
+    (synopsis
+     "GNU Which shows the full path of (shell) commands")
+    (description
+     "GNU Which takes one or more arguments. For each of its arguments
+it prints to stdout the full path of the executables that would have
+been executed when this argument had been entered at the shell
+prompt. It does this by searching for an executable or script in the
+directories listed in the environment variable PATH using the same
+algorithm as bash(1).")
+    (license gpl3+))) ; some files are under GPLv2+
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
new file mode 100644
index 0000000000..d67057dab2
--- /dev/null
+++ b/gnu/packages/xml.scm
@@ -0,0 +1,44 @@
+;;; 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 xml)
+  #:use-module ((guix licenses)
+                #:renamer (symbol-prefix-proc 'license:))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public expat
+  (package
+    (name "expat")
+    (version "2.1.0")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://sourceforge/expat/expat/"
+                                 version "/expat-" version ".tar.gz"))
+             (sha256
+              (base32
+               "11pblz61zyxh68s5pdcbhc30ha1b2vfjd83aiwfg4vc15x3hadw2"))))
+    (build-system gnu-build-system)
+    (home-page "http://www.libexpat.org/")
+    (synopsis "A stream-oriented XML parser library written in C")
+    (description
+     "Expat is an XML parser library written in C.  It is a
+stream-oriented parser in which an application registers handlers for
+things the parser might find in the XML document (like start tags).")
+    (license license:expat)))
diff --git a/gnu/packages/zile.scm b/gnu/packages/zile.scm
new file mode 100644
index 0000000000..b5366c046f
--- /dev/null
+++ b/gnu/packages/zile.scm
@@ -0,0 +1,66 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 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 zile)
+  #:use-module (guix licenses)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages help2man)
+  #:use-module (gnu packages ncurses))
+
+(define-public zile
+  (package
+    (name "zile")
+    (version "2.4.9")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "mirror://gnu/zile/zile-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "0j801c28ypm924rw3lqyb6khxyslg6ycrv16wmmwcam0mk3mj6f7"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("boehm-gc" ,libgc)
+       ("ncurses" ,ncurses)
+       ("perl" ,perl)
+       ("help2man" ,help2man)))
+    (home-page "http://www.gnu.org/software/zile/")
+    (synopsis "GNU Zile, a lightweight Emacs clone")
+    (description
+     "GNU Zile, which is a lightweight Emacs clone.  Zile is short
+for Zile Is Lossy Emacs.  Zile has been written to be as
+similar as possible to Emacs; every Emacs user should feel at
+home.
+
+Zile has all of Emacs's basic editing features: it is 8-bit
+clean (though it currently lacks Unicode support), and the
+number of editing buffers and windows is only limited by
+available memory and screen space respectively.  Registers,
+minibuffer completion and auto fill are available.  Function
+and variable names are identical with Emacs's (except those
+containing the word \"emacs\", which instead contain the word
+\"zile\"!).
+
+However, all of this is packed into a program which typically
+compiles to about 130Kb.")
+    (license gpl3+)))