aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am18
-rw-r--r--TODO15
-rw-r--r--build-aux/download.scm5
-rw-r--r--daemon.am2
-rw-r--r--doc/guix.texi6
-rw-r--r--gnu/packages/autotools.scm5
-rw-r--r--gnu/packages/avahi.scm65
-rw-r--r--gnu/packages/base.scm135
-rw-r--r--gnu/packages/bootstrap.scm19
-rw-r--r--gnu/packages/cflow.scm51
-rw-r--r--gnu/packages/cmake.scm78
-rw-r--r--gnu/packages/cppi.scm45
-rw-r--r--gnu/packages/emacs.scm6
-rw-r--r--gnu/packages/fdisk.scm54
-rw-r--r--gnu/packages/gcc.scm249
-rw-r--r--gnu/packages/glib.scm48
-rw-r--r--gnu/packages/gnupg.scm19
-rw-r--r--gnu/packages/gnutls.scm4
-rw-r--r--gnu/packages/guile.scm13
-rw-r--r--gnu/packages/lsof.scm75
-rw-r--r--gnu/packages/lua.scm63
-rw-r--r--gnu/packages/make-bootstrap.scm1
-rw-r--r--gnu/packages/multiprecision.scm4
-rw-r--r--gnu/packages/patches/cmake-fix-tests.patch45
-rw-r--r--gnu/packages/patches/emacs-configure-sh.patch11
-rw-r--r--gnu/packages/patches/glib-tests-prlimit.patch14
-rw-r--r--gnu/packages/patches/w3m-fix-compile.patch15
-rw-r--r--gnu/packages/perl.scm3
-rw-r--r--gnu/packages/pkg-config.scm5
-rw-r--r--gnu/packages/python.scm4
-rw-r--r--gnu/packages/texinfo.scm4
-rw-r--r--gnu/packages/vpn.scm50
-rw-r--r--gnu/packages/w3m.scm81
-rw-r--r--guix/build-system/cmake.scm124
-rw-r--r--guix/build-system/gnu.scm27
-rw-r--r--guix/build-system/perl.scm7
-rw-r--r--guix/build-system/trivial.scm6
-rw-r--r--guix/build/cmake-build-system.scm63
-rw-r--r--guix/build/gnu-build-system.scm38
-rw-r--r--guix/build/perl-build-system.scm4
-rw-r--r--guix/build/utils.scm68
-rw-r--r--guix/derivations.scm129
-rw-r--r--guix/download.scm6
-rw-r--r--guix/gnu-maintenance.scm225
-rw-r--r--guix/licenses.scm12
-rw-r--r--guix/packages.scm51
-rw-r--r--guix/scripts/download.scm47
-rw-r--r--guix/scripts/package.scm87
-rw-r--r--guix/scripts/pull.scm6
-rw-r--r--guix/snix.scm11
-rw-r--r--guix/store.scm50
-rw-r--r--guix/ui.scm4
-rw-r--r--hydra.scm17
-rw-r--r--release.nix29
-rw-r--r--tests/packages.scm38
55 files changed, 1898 insertions, 363 deletions
diff --git a/Makefile.am b/Makefile.am
index 9b9bdbf8b3..053dc1e8c5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -38,6 +38,7 @@ MODULES = \
guix/gnu-maintenance.scm \
guix/licenses.scm \
guix/build-system.scm \
+ guix/build-system/cmake.scm \
guix/build-system/gnu.scm \
guix/build-system/perl.scm \
guix/build-system/trivial.scm \
@@ -45,6 +46,7 @@ MODULES = \
guix/store.scm \
guix/ui.scm \
guix/build/download.scm \
+ guix/build/cmake-build-system.scm \
guix/build/gnu-build-system.scm \
guix/build/perl-build-system.scm \
guix/build/utils.scm \
@@ -58,6 +60,7 @@ MODULES = \
gnu/packages/aspell.scm \
gnu/packages/attr.scm \
gnu/packages/autotools.scm \
+ gnu/packages/avahi.scm \
gnu/packages/base.scm \
gnu/packages/bash.scm \
gnu/packages/bdb.scm \
@@ -65,9 +68,12 @@ MODULES = \
gnu/packages/bison.scm \
gnu/packages/bootstrap.scm \
gnu/packages/cdrom.scm \
+ gnu/packages/cflow.scm \
gnu/packages/check.scm \
+ gnu/packages/cmake.scm \
gnu/packages/compression.scm \
gnu/packages/cpio.scm \
+ gnu/packages/cppi.scm \
gnu/packages/cross-base.scm \
gnu/packages/curl.scm \
gnu/packages/cyrus-sasl.scm \
@@ -75,10 +81,12 @@ MODULES = \
gnu/packages/ddrescue.scm \
gnu/packages/ed.scm \
gnu/packages/emacs.scm \
+ gnu/packages/fdisk.scm \
gnu/packages/file.scm \
gnu/packages/flex.scm \
gnu/packages/fontutils.scm \
gnu/packages/gawk.scm \
+ gnu/packages/gcc.scm \
gnu/packages/gdb.scm \
gnu/packages/gdbm.scm \
gnu/packages/gettext.scm \
@@ -117,6 +125,8 @@ MODULES = \
gnu/packages/linux-initrd.scm \
gnu/packages/lout.scm \
gnu/packages/lsh.scm \
+ gnu/packages/lsof.scm \
+ gnu/packages/lua.scm \
gnu/packages/m4.scm \
gnu/packages/mailutils.scm \
gnu/packages/make-bootstrap.scm \
@@ -163,6 +173,7 @@ MODULES = \
gnu/packages/tor.scm \
gnu/packages/vim.scm \
gnu/packages/vpn.scm \
+ gnu/packages/w3m.scm \
gnu/packages/wdiff.scm \
gnu/packages/wget.scm \
gnu/packages/which.scm \
@@ -185,6 +196,7 @@ dist_patch_DATA = \
gnu/packages/patches/automake-skip-amhello-tests.patch \
gnu/packages/patches/bigloo-gc-shebangs.patch \
gnu/packages/patches/binutils-ld-new-dtags.patch \
+ gnu/packages/patches/cmake-fix-tests.patch \
gnu/packages/patches/cpio-gets-undeclared.patch \
gnu/packages/patches/diffutils-gets-undeclared.patch \
gnu/packages/patches/emacs-configure-sh.patch \
@@ -196,6 +208,7 @@ dist_patch_DATA = \
gnu/packages/patches/gettext-gets-undeclared.patch \
gnu/packages/patches/glib-tests-desktop.patch \
gnu/packages/patches/glib-tests-homedir.patch \
+ gnu/packages/patches/glib-tests-prlimit.patch \
gnu/packages/patches/glib-tests-timezone.patch \
gnu/packages/patches/glibc-bootstrap-system.patch \
gnu/packages/patches/glibc-no-ld-so-cache.patch \
@@ -204,7 +217,7 @@ dist_patch_DATA = \
gnu/packages/patches/guile-default-utf8.patch \
gnu/packages/patches/guile-linux-syscalls.patch \
gnu/packages/patches/guile-relocatable.patch \
- gnu/packages/patches/libapr-skip-getservbyname-test.patch \
+ gnu/packages/patches/libapr-skip-getservbyname-test.patch \
gnu/packages/patches/libevent-dns-tests.patch \
gnu/packages/patches/libtool-skip-tests.patch \
gnu/packages/patches/lsh-guile-compat.patch \
@@ -221,9 +234,10 @@ dist_patch_DATA = \
gnu/packages/patches/readline-link-ncurses.patch \
gnu/packages/patches/shishi-gets-undeclared.patch \
gnu/packages/patches/tar-gets-undeclared.patch \
- gnu/packages/patches/tcsh-fix-autotest.patch \
+ gnu/packages/patches/tcsh-fix-autotest.patch \
gnu/packages/patches/teckit-cstdio.patch \
gnu/packages/patches/vpnc-script.patch \
+ gnu/packages/patches/w3m-fix-compile.patch \
gnu/packages/patches/xpdf-constchar.patch
bootstrapdir = $(guilemoduledir)/gnu/packages/bootstrap
diff --git a/TODO b/TODO
index ecc8e11217..205e1d71af 100644
--- a/TODO
+++ b/TODO
@@ -8,12 +8,6 @@ Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
* integrate needed Nix code
-Guix uses Nix’s daemon (‘nix-worker’, later renamed to ‘nix-daemon’) to
-actually perform builds, scheduling, substitution of pre-built binaries,
-and GC-related tasks. The daemon mainly uses ‘libstore’ from Nix.
-Integrating it in Guix itself will make Guix self-contained, thereby
-simplifying our users’ lives.
-
** Remove dependency on OpenSSL
The ‘openssl’ command-line tool is used in libstore to sign store paths
@@ -51,14 +45,6 @@ For a start, we may use the instance at hydra.nixos.org, generously
provided by TU Delft. However, in the future, we may want to setup our
own instance at gnu.org.
-* add guix pull
-
-A tool that fetches the latest code from [[http://git.savannah.gnu.org/cgit/guix.git/snapshot/guix-master.tar.gz][cgit]], builds a derivation that
-unpacks it, copies only .scm files (this excludes guix/config.in) and
-compiles it, and then links to it from ~/.local/guix/latest . Change
-guix-build and guix-package to have that directory first in their load
-path.
-
* user interface
** Add a package.el (Emacs) back-end
@@ -167,7 +153,6 @@ etc.
See [[https://github.com/NixOS/nixpkgs/commit/d1662d715514e6ef9d3dc29f132f1b3d8e608a18][Shea Levy's `replace-dependency' in Nixpkgs]].
* distro
-** choose a name! (Jinn?)
** port to new GNU/Linux platforms, notably ‘mipsel64-linux’
** port to GNU/Hurd, aka. ‘i686-gnu’
diff --git a/build-aux/download.scm b/build-aux/download.scm
index 62956378ed..c5486f8970 100644
--- a/build-aux/download.scm
+++ b/build-aux/download.scm
@@ -34,6 +34,11 @@
;;"http://www.fdn.fr/~lcourtes/software/guix/packages"
)
+;; XXX: Work around <http://bugs.gnu.org/13095>, present in Guile
+;; up to 2.0.7.
+(module-define! (resolve-module '(web client))
+ 'shutdown (const #f))
+
(define (file-name->uri file)
"Return the URI for FILE."
(match (string-tokenize file (char-set-complement (char-set #\/)))
diff --git a/daemon.am b/daemon.am
index 0c9bc9fb69..4f2314b773 100644
--- a/daemon.am
+++ b/daemon.am
@@ -115,7 +115,7 @@ libstore_a_CPPFLAGS = \
-DNIX_BIN_DIR=\"$(bindir)\" \
-DOPENSSL_PATH="\"openssl\""
-libstore_a_CFLAGS = \
+libstore_a_CXXFLAGS = \
$(SQLITE3_CFLAGS) $(LIBGCRYPT_CFLAGS)
bin_PROGRAMS = guix-daemon
diff --git a/doc/guix.texi b/doc/guix.texi
index a07c277e70..1be172c3f6 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -514,6 +514,12 @@ Thus, when installing MPC, the MPFR and GMP libraries also get installed
in the profile; removing MPC also removes MPFR and GMP---unless they had
also been explicitly installed independently.
+@c XXX: keep me up-to-date
+Besides, when installing a GNU package, the tool reports the
+availability of a newer upstream version. In the future, it may provide
+the option of installing directly from the upstream version, even if
+that version is not yet in the distribution.
+
@item --install-from-expression=@var{exp}
@itemx -e @var{exp}
Install the package @var{exp} evaluates to.
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index bc4dddc01f..114e98f606 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -164,6 +164,11 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
(setenv "SHELL" sh)
(setenv "CONFIG_SHELL" sh)))
%standard-phases)))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "ACLOCAL_PATH")
+ (directories '("share/aclocal")))))
+
(home-page "http://www.gnu.org/software/automake/")
(synopsis
"GNU Automake, a GNU standard-compliant makefile generator")
diff --git a/gnu/packages/avahi.scm b/gnu/packages/avahi.scm
new file mode 100644
index 0000000000..fbdc0e2834
--- /dev/null
+++ b/gnu/packages/avahi.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 avahi)
+ #:use-module ((guix licenses) #:select (lgpl2.1+))
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages gdbm)
+ #:use-module (gnu packages libdaemon)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages xml))
+
+(define-public avahi
+ (package
+ (name "avahi")
+ (version "0.6.31")
+ (home-page "http://avahi.org")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append home-page "/download/avahi-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0j5b5ld6bjyh3qhd2nw0jb84znq0wqai7fsrdzg7bpg24jdp2wl3"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:configure-flags '("--with-distro=none"
+ "--disable-python"
+ "--disable-mono"
+ "--disable-doxygen-doc"
+ "--disable-xmltoman"
+ "--enable-tests"
+ "--disable-qt3" "--disable-qt4"
+ "--disable-gtk" "--disable-gtk3")))
+ (inputs
+ `(("expat" ,expat)
+ ("glib" ,glib)
+ ("dbus" ,dbus)
+ ("libdaemon" ,libdaemon)
+ ("intltool" ,intltool)
+ ("pkg-config" ,pkg-config)
+ ("gdbm" ,gdbm)))
+ (synopsis "Avahi, an mDNS/DNS-SD implementation")
+ (description
+ "Avahi is a system which facilitates service discovery on a local
+network. It is an implementation of the mDNS (for \"Multicast DNS\") and
+DNS-SD (for \"DNS-Based Service Discovery\") protocols.")
+ (license lgpl2.1+)))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 537bd5af6d..606e59b851 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -24,6 +24,7 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages bootstrap)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages gcc)
#:use-module (gnu packages gawk)
#:use-module (gnu packages guile)
#:use-module (gnu packages multiprecision)
@@ -88,14 +89,14 @@ lines.")
(define-public sed
(package
(name "sed")
- (version "4.2.1")
+ (version "4.2.2")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/sed/sed-" version
".tar.bz2"))
(sha256
(base32
- "13wlsb4sf5d5a82xjhxqmdvrrn36rmw5f0pl9qyb9zkvldnb7hra"))))
+ "1myvrmh99jsvk7v3d7crm0gcrq51hmmm1r2kjyyci152in1x2j7h"))))
(build-system gnu-build-system)
(synopsis "GNU sed, a batch stream editor")
(arguments
@@ -263,14 +264,14 @@ The tools supplied with this package are:
(define-public coreutils
(package
(name "coreutils")
- (version "8.20")
+ (version "8.21")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/coreutils/coreutils-"
version ".tar.xz"))
(sha256
(base32
- "1cly97xdy3v4nbbx631k43smqw0nnpn651kkprs0yyl2cj3pkjyv"))))
+ "064f512185iysqqcvhnhaf3bfmzrvcgs7n405qsyp99zmfyl9amd"))))
(build-system gnu-build-system)
(inputs `(("acl" ,acl)
("gmp" ,gmp)
@@ -342,14 +343,14 @@ that it is possible to use Make to build and install the program.")
(define-public binutils
(package
(name "binutils")
- (version "2.22")
+ (version "2.23.1")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/binutils/binutils-"
version ".tar.bz2"))
(sha256
(base32
- "1a9w66v5dwvbnawshjwqcgz7km6kw6ihkzp6sswv9ycc3knzhykc"))))
+ "06bs5v5ndb4g5qx96d52lc818gkbskd1m0sz57314v887sqfbcia"))))
(build-system gnu-build-system)
;; Split Binutils in several outputs, mostly to avoid collisions in
@@ -367,7 +368,11 @@ that it is possible to use Make to build and install the program.")
"LDFLAGS=-static-libgcc"
;; Don't search under /usr/lib & co.
- "--with-lib-path=/no-ld-lib-path")))
+ "--with-lib-path=/no-ld-lib-path"
+
+ ;; Glibc 2.17 has a "comparison of unsigned
+ ;; expression >= 0 is always true" in wchar.h.
+ "--disable-werror")))
(synopsis "GNU Binutils, tools for manipulating binaries (linker,
assembler, etc.)")
@@ -378,119 +383,6 @@ BFD (Binary File Descriptor) library, `gprof', `nm', `strip', etc.")
(license gpl3+)
(home-page "http://www.gnu.org/software/binutils/")))
-(define-public gcc-4.7
- (let ((stripped? #t)) ; TODO: make this a parameter
- (package
- (name "gcc")
- (version "4.7.2")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.bz2"))
- (sha256
- (base32
- "115h03hil99ljig8lkrq4qk426awmzh0g99wrrggxf8g07bq74la"))))
- (build-system gnu-build-system)
- (inputs `(("gmp" ,gmp)
- ("mpfr" ,mpfr)
- ("mpc" ,mpc))) ; TODO: libelf, ppl, cloog, zlib, etc.
- (arguments
- `(#:out-of-source? #t
- #:strip-binaries? ,stripped?
- #:configure-flags
- `("--enable-plugin"
- "--enable-languages=c,c++"
- "--disable-multilib"
-
- "--with-local-prefix=/no-gcc-local-prefix"
-
- ,(let ((libc (assoc-ref %build-inputs "libc")))
- (if libc
- (string-append "--with-native-system-header-dir=" libc
- "/include")
- "--without-headers")))
- #:make-flags
- (let ((libc (assoc-ref %build-inputs "libc")))
- `(,@(if libc
- (list (string-append "LDFLAGS_FOR_TARGET="
- "-B" libc "/lib "
- "-Wl,-dynamic-linker "
- "-Wl," libc
- ,(glibc-dynamic-linker)))
- '())
- ,(string-append "BOOT_CFLAGS=-O2 "
- ,(if stripped? "-g0" "-g"))))
-
- #:tests? #f
- #:phases
- (alist-cons-before
- 'configure 'pre-configure
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out"))
- (libc (assoc-ref inputs "libc")))
- (when libc
- ;; The following is not performed for `--without-headers'
- ;; cross-compiler builds.
-
- ;; Fix the dynamic linker's file name.
- (substitute* (find-files "gcc/config"
- "^linux(64|-elf)?\\.h$")
- (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
- (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
- suffix
- (string-append libc ,(glibc-dynamic-linker)))))
-
- ;; Tell where to find libstdc++, libc, and `?crt*.o', except
- ;; `crt{begin,end}.o', which come with GCC.
- (substitute* (find-files "gcc/config"
- "^(gnu-user(64)?|linux-elf)\\.h$")
- (("#define LIB_SPEC (.*)$" _ suffix)
- ;; Note that with this "lib" spec, we may still add a
- ;; RUNPATH to GCC even when `libgcc_s' is not NEEDED.
- ;; There's not much that can be done to avoid it, though.
- (format #f "#define LIB_SPEC \"-L~a/lib %{!static:-rpath=~a/lib \
-%{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib}} \" ~a"
- libc libc out out suffix))
- (("#define STARTFILE_SPEC.*$" line)
- (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
-#define STANDARD_STARTFILE_PREFIX_2 \"\"
-~a~%"
- libc line))))
-
- ;; Don't retain a dependency on the build-time sed.
- (substitute* "fixincludes/fixincl.x"
- (("static char const sed_cmd_z\\[\\] =.*;")
- "static char const sed_cmd_z[] = \"sed\";"))))
-
- (alist-cons-after
- 'configure 'post-configure
- (lambda _
- ;; Don't store configure flags, to avoid retaining references to
- ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'.
- (substitute* "Makefile"
- (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
- "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))
- (alist-replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (zero?
- (system* "make"
- ,(if stripped?
- "install-strip"
- "install"))))
- %standard-phases)))))
-
- (properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
- (synopsis "The GNU Compiler Collection")
- (description
- "The GNU Compiler Collection includes compiler front ends for C, C++,
-Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well as
-libraries for these languages (libstdc++, libgcj, libgomp,...).
-
-GCC development is a part of the GNU Project, aiming to improve the compiler
-used in the GNU system including the GNU/Linux variant.")
- (license gpl3+)
- (home-page "http://gcc.gnu.org/"))))
-
(define-public glibc
(package
(name "glibc")
@@ -703,7 +595,8 @@ identifier SYSTEM."
#:implicit-inputs? #f
,@(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags cf)
- `(list ,(string-append "--target=" (boot-triplet)))))))
+ `(cons ,(string-append "--target=" (boot-triplet))
+ ,cf)))))
(inputs %boot0-inputs))))
(define gcc-boot0
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 809eb84295..eaad45a741 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -104,7 +104,8 @@ check whether everything is alright."
("tarball" ,(bootstrap-origin (source* (%current-system))))))
(synopsis description*)
(description #f)
- (home-page #f)))
+ (home-page #f)
+ (license #f)))
(define package-with-bootstrap-guile
(memoize
@@ -153,7 +154,8 @@ check whether everything is alright."
(let ((raw (build-system
(name "raw")
(description "Raw build system with direct store access")
- (build (lambda* (store name source inputs #:key outputs system)
+ (build (lambda* (store name source inputs
+ #:key outputs system search-paths)
(define (->store file)
(add-to-store store file #t "sha256"
(or (search-bootstrap-binary file
@@ -285,7 +287,8 @@ $out/bin/guile --version~%"
"08hv8i0axwnihrcgbz19x0a7s6zyv3yx38x8r29liwl8h82x9g88")))))))))
(synopsis "Bootstrap binaries and headers of the GNU C Library")
(description #f)
- (home-page #f)))
+ (home-page #f)
+ (license lgpl2.1+)))
(define %bootstrap-gcc
;; The initial GCC. Uses binaries from a tarball typically built by
@@ -350,9 +353,17 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
("i686-linux"
(base32
"06wqs0xxnpw3hn0xjb4c9cs0899p1xwkcysa2rvzhvpra0c5vsg2")))))))))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "CPATH")
+ (directories '("include")))
+ (search-path-specification
+ (variable "LIBRARY_PATH")
+ (directories '("lib" "lib64")))))
(synopsis "Bootstrap binaries of the GNU Compiler Collection")
(description #f)
- (home-page #f)))
+ (home-page #f)
+ (license gpl3+)))
(define %bootstrap-inputs
;; The initial, pre-built inputs. From now on, we can start building our
diff --git a/gnu/packages/cflow.scm b/gnu/packages/cflow.scm
new file mode 100644
index 0000000000..bb000ddc59
--- /dev/null
+++ b/gnu/packages/cflow.scm
@@ -0,0 +1,51 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages cflow)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix licenses)
+ #:use-module (gnu packages emacs))
+
+(define-public cflow
+ (package
+ (name "cflow")
+ (version "1.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/cflow/cflow-"
+ version ".tar.bz2"))
+ (sha256
+ (base32
+ "1jkbq97ajcf834z68hbn3xfhiz921zhn39gklml1racf0kb3jzh3"))))
+ (build-system gnu-build-system)
+ (home-page "http://www.gnu.org/software/cflow/")
+ (synopsis "A tool to analyze the control flow of C programs")
+ (description
+ "GNU cflow analyzes a collection of C source files and prints a
+graph, charting control flow within the program.
+
+GNU cflow is able to produce both direct and inverted flowgraphs
+for C sources. Optionally a cross-reference listing can be
+generated. Two output formats are implemented: POSIX and GNU
+(extended).
+
+The package also provides Emacs major mode for examining the
+produced flowcharts in Emacs.")
+ (license gpl3+)))
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
new file mode 100644
index 0000000000..734f55f330
--- /dev/null
+++ b/gnu/packages/cmake.scm
@@ -0,0 +1,78 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages cmake)
+ #:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages file))
+
+(define-public cmake
+ (package
+ (name "cmake")
+ (version "2.8.10.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "http://www.cmake.org/files/v"
+ (substring version 0
+ (string-index version #\. (+ 1 (string-index version #\.))))
+ "/cmake-" version ".tar.gz"))
+ (sha256
+ (base32 "1c8fj6i2x9sb39wc9av2ighj415mw33cxfrlfpafcvm0knrlylnf"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:test-target "test"
+ #:patches (list (assoc-ref %build-inputs "fix-tests"))
+ #:patch-flags '("-p0")
+ #:phases (alist-replace
+ 'configure
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ ;; Replace "/bin/sh" by the right path in... a lot of
+ ;; files.
+ (substitute*
+ '("Modules/CompilerId/Xcode-3.pbxproj.in"
+ "Modules/CompilerId/Xcode-1.pbxproj.in"
+ "Modules/CompilerId/Xcode-2.pbxproj.in"
+ "Modules/CPack.RuntimeScript.in"
+ "Source/cmakexbuild.cxx"
+ "Source/cmGlobalXCodeGenerator.cxx"
+ "Source/CTest/cmCTestBatchTestHandler.cxx"
+ "Source/cmLocalUnixMakefileGenerator3.cxx"
+ "Utilities/cmbzip2/Makefile-libbz2_so"
+ "Utilities/Release/release_cmake.cmake"
+ "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
+ "Tests/CMakeLists.txt")
+ (("/bin/sh") (which "sh")))
+ (zero? (system* "./configure"
+ (string-append "--prefix=" out)))))
+ %standard-phases)))
+ (inputs
+ `(("file" ,file)
+ ("fix-tests" ,(search-patch "cmake-fix-tests.patch"))))
+ (home-page "http://www.cmake.org/")
+ (synopsis "A cross-platform, open-source build system")
+ (description
+ "CMake is a family of tools designed to build, test and package software.
+CMake is used to control the software compilation process using simple platform
+and compiler independent configuration files. CMake generates native makefiles
+and workspaces that can be used in the compiler environment of your choice.")
+ (license bsd-3)))
diff --git a/gnu/packages/cppi.scm b/gnu/packages/cppi.scm
new file mode 100644
index 0000000000..53f24698fc
--- /dev/null
+++ b/gnu/packages/cppi.scm
@@ -0,0 +1,45 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages cppi)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix licenses))
+
+(define-public cppi
+ (package
+ (name "cppi")
+ (version "1.18")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/cppi/cppi-"
+ version ".tar.xz"))
+ (sha256
+ (base32
+ "1jk42cjaggk71rimjnx3qpmb6hivps0917vl3z7wbxk3i2whb98j"))))
+ (build-system gnu-build-system)
+ (home-page "http://www.gnu.org/software/cppi/")
+ (synopsis "A cpp directive indenter")
+ (description
+ "GNU cppi indents C preprocessor directives to reflect their nesting and
+ensure that there is exactly one space character between each #if, #elif,
+#define directive and the following token. The number of spaces between the
+`#' and the following directive must correspond to the level of nesting of
+that directive.")
+ (license gpl3+)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 6b2cda6e73..9a107967a3 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -31,14 +31,14 @@
(define-public emacs
(package
(name "emacs")
- (version "24.2")
+ (version "24.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/emacs/emacs-"
- version ".tar.bz2"))
+ version ".tar.xz"))
(sha256
(base32
- "13wbjfjmz13qpjwssy44nw2230lllmkkgjsy0rqfm6am2cf87n3k"))))
+ "1385qzs3bsa52s5rcncbrkxlydkw0ajzrvfxgv8rws5fx512kakh"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags
diff --git a/gnu/packages/fdisk.scm b/gnu/packages/fdisk.scm
new file mode 100644
index 0000000000..5cf02a9014
--- /dev/null
+++ b/gnu/packages/fdisk.scm
@@ -0,0 +1,54 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages fdisk)
+ #:use-module ((guix licenses) #:select (gpl3+))
+ #:use-module ((gnu packages gettext)
+ #:renamer (symbol-prefix-proc 'guix:))
+ #:use-module (gnu packages guile)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages parted)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu))
+
+(define-public fdisk
+ (package
+ (name "fdisk")
+ (version "2.0.0a")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/fdisk/gnufdisk-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "04nd7civ561x2lwcmxhsqbprml3178jfc58fy1v7hzqg5k4nbhy3"))))
+ (build-system gnu-build-system)
+ (inputs
+ `(("gettext" ,guix:gettext)
+ ("guile" ,guile-1.8)
+ ("util-linux" ,util-linux)
+ ("parted" ,parted)))
+ (home-page "https://www.gnu.org/software/fdisk/")
+ (synopsis
+ "GNU Fdisk, a command-line disk partitioning tool")
+ (description
+ "GNU Fdisk provides alternatives to util-linux fdisk and util-linux
+cfdisk. It uses GNU Parted.")
+ (license gpl3+))) \ No newline at end of file
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
new file mode 100644
index 0000000000..878d246c36
--- /dev/null
+++ b/gnu/packages/gcc.scm
@@ -0,0 +1,249 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages gcc)
+ #:use-module (guix licenses)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages bootstrap)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages multiprecision)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu))
+
+(define %gcc-infrastructure
+ ;; Base URL for GCC's infrastructure.
+ "ftp://gcc.gnu.org/pub/gcc/infrastructure/")
+
+(define-public gcc-4.7
+ (let ((stripped? #t)) ; TODO: make this a parameter
+ (package
+ (name "gcc")
+ (version "4.7.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gcc/gcc-"
+ version "/gcc-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "115h03hil99ljig8lkrq4qk426awmzh0g99wrrggxf8g07bq74la"))))
+ (build-system gnu-build-system)
+ (inputs `(("gmp" ,gmp)
+ ("mpfr" ,mpfr)
+ ("mpc" ,mpc))) ; TODO: libelf, ppl, cloog, zlib, etc.
+ (arguments
+ `(#:out-of-source? #t
+ #:strip-binaries? ,stripped?
+ #:configure-flags
+ `("--enable-plugin"
+ "--enable-languages=c,c++"
+ "--disable-multilib"
+
+ "--with-local-prefix=/no-gcc-local-prefix"
+
+ ,(let ((libc (assoc-ref %build-inputs "libc")))
+ (if libc
+ (string-append "--with-native-system-header-dir=" libc
+ "/include")
+ "--without-headers")))
+ #:make-flags
+ (let ((libc (assoc-ref %build-inputs "libc")))
+ `(,@(if libc
+ (list (string-append "LDFLAGS_FOR_TARGET="
+ "-B" libc "/lib "
+ "-Wl,-dynamic-linker "
+ "-Wl," libc
+ ,(glibc-dynamic-linker)))
+ '())
+ ,(string-append "BOOT_CFLAGS=-O2 "
+ ,(if stripped? "-g0" "-g"))))
+
+ #:tests? #f
+ #:phases
+ (alist-cons-before
+ 'configure 'pre-configure
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (libc (assoc-ref inputs "libc")))
+ (when libc
+ ;; The following is not performed for `--without-headers'
+ ;; cross-compiler builds.
+
+ ;; Fix the dynamic linker's file name.
+ (substitute* (find-files "gcc/config"
+ "^linux(64|-elf)?\\.h$")
+ (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
+ (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
+ suffix
+ (string-append libc ,(glibc-dynamic-linker)))))
+
+ ;; Tell where to find libstdc++, libc, and `?crt*.o', except
+ ;; `crt{begin,end}.o', which come with GCC.
+ (substitute* (find-files "gcc/config"
+ "^(gnu-user(64)?|linux-elf)\\.h$")
+ (("#define LIB_SPEC (.*)$" _ suffix)
+ ;; Note that with this "lib" spec, we may still add a
+ ;; RUNPATH to GCC even when `libgcc_s' is not NEEDED.
+ ;; There's not much that can be done to avoid it, though.
+ (format #f "#define LIB_SPEC \"-L~a/lib %{!static:-rpath=~a/lib \
+%{!static-libgcc:-rpath=~a/lib64 -rpath=~a/lib}} \" ~a"
+ libc libc out out suffix))
+ (("#define STARTFILE_SPEC.*$" line)
+ (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
+#define STANDARD_STARTFILE_PREFIX_2 \"\"
+~a~%"
+ libc line))))
+
+ ;; Don't retain a dependency on the build-time sed.
+ (substitute* "fixincludes/fixincl.x"
+ (("static char const sed_cmd_z\\[\\] =.*;")
+ "static char const sed_cmd_z[] = \"sed\";"))))
+
+ (alist-cons-after
+ 'configure 'post-configure
+ (lambda _
+ ;; Don't store configure flags, to avoid retaining references to
+ ;; build-time dependencies---e.g., `--with-ppl=/nix/store/xxx'.
+ (substitute* "Makefile"
+ (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
+ "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))
+ (alist-replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (zero?
+ (system* "make"
+ ,(if stripped?
+ "install-strip"
+ "install"))))
+ %standard-phases)))))
+
+ (native-search-paths
+ (list (search-path-specification
+ (variable "CPATH")
+ (directories '("include")))
+ (search-path-specification
+ (variable "LIBRARY_PATH")
+ (directories '("lib" "lib64")))))
+
+ (properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
+ (synopsis "The GNU Compiler Collection")
+ (description
+ "The GNU Compiler Collection includes compiler front ends for C, C++,
+Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well as
+libraries for these languages (libstdc++, libgcj, libgomp,...).
+
+GCC development is a part of the GNU Project, aiming to improve the compiler
+used in the GNU system including the GNU/Linux variant.")
+ (license gpl3+)
+ (home-page "http://gcc.gnu.org/"))))
+
+(define-public isl
+ (package
+ (name "isl")
+ (version "0.11.1")
+ (source (origin
+ (method url-fetch)
+ (uri (list (string-append
+ "ftp://ftp.linux.student.kuleuven.be/pub/people/skimo/isl/isl-"
+ version
+ ".tar.bz2")
+ (string-append %gcc-infrastructure
+ name "-" version ".tar.gz")))
+ (sha256
+ (base32
+ "13d9cqa5rzhbjq0xf0b2dyxag7pqa72xj9dhsa03m8ccr1a4npq9"))))
+ (build-system gnu-build-system)
+ (inputs `(("gmp" ,gmp)))
+ (home-page "http://www.kotnet.org/~skimo/isl/")
+ (synopsis
+ "A library for manipulating sets and relations of integer points bounded
+by linear constraints")
+ (description
+ "isl is a library for manipulating sets and relations of integer points
+bounded by linear constraints. Supported operations on sets include
+intersection, union, set difference, emptiness check, convex hull, (integer)
+affine hull, integer projection, computing the lexicographic minimum using
+parametric integer programming, coalescing and parametric vertex
+enumeration. It also includes an ILP solver based on generalized basis
+reduction, transitive closures on maps (which may encode infinite graphs),
+dependence analysis and bounds on piecewise step-polynomials.")
+ (license lgpl2.1+)))
+
+(define-public cloog
+ (package
+ (name "cloog")
+ (version "0.18.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (list (string-append
+ "http://www.bastoul.net/cloog/pages/download/count.php3?url=cloog-"
+ version
+ ".tar.gz")
+ (string-append %gcc-infrastructure
+ name "-" version ".tar.gz")))
+ (sha256
+ (base32
+ "0a12rwfwp22zd0nlld0xyql11cj390rrq1prw35yjsw8wzfshjhw"))
+ (file-name (string-append name "-" version ".tar.gz"))))
+ (build-system gnu-build-system)
+ (inputs `(("gmp" ,gmp)
+ ("isl" ,isl)))
+ (arguments '(#:configure-flags '("--with-isl=system")))
+ (home-page "http://www.cloog.org/")
+ (synopsis "A library to generate code for scanning Z-polyhedra")
+ (description
+ "CLooG is a free software library to generate code for scanning
+Z-polyhedra. That is, it finds a code (e.g., in C, FORTRAN...) that
+reaches each integral point of one or more parameterized polyhedra.
+CLooG has been originally written to solve the code generation problem
+for optimizing compilers based on the polytope model. Nevertheless it
+is used now in various area e.g., to build control automata for
+high-level synthesis or to find the best polynomial approximation of a
+function. CLooG may help in any situation where scanning polyhedra
+matters. While the user has full control on generated code quality,
+CLooG is designed to avoid control overhead and to produce a very
+effective code.")
+ (license gpl2+)))
+
+(define-public libelf
+ (package
+ (name "libelf")
+ (version "0.8.13")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://www.mr511.de/software/libelf-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr"))))
+ (build-system gnu-build-system)
+ (arguments '(#:phases (alist-replace
+ 'configure
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; This old `configure' script doesn't support
+ ;; variables passed as arguments.
+ (let ((out (assoc-ref outputs "out")))
+ (setenv "CONFIG_SHELL" (which "bash"))
+ (zero?
+ (system* "./configure"
+ (string-append "--prefix=" out)))))
+ %standard-phases)))
+ (home-page "http://www.mr511.de/software/english.html")
+ (synopsis "An ELF object file access library")
+ (description "libelf is a C library to access ELF object files.")
+ (license lgpl2.0+)))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 1286700911..7ff9ede22b 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -18,7 +18,7 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages glib)
- #:use-module ((guix licenses) #:select (lgpl2.0+ gpl2+))
+ #:use-module ((guix licenses) #:select (lgpl2.0+ gpl2+ gpl2))
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system gnu)
@@ -76,7 +76,7 @@ shared NFS home directories.")
(version "2.34.3")
(source (origin
(method url-fetch)
- (uri (string-append "http://ftp.gnome.org/pub/gnome/sources/"
+ (uri (string-append "mirror://gnome/sources/"
name "/2.34/"
name "-" version ".tar.xz"))
(sha256
@@ -99,11 +99,14 @@ shared NFS home directories.")
("patch/tests-homedir"
,(search-patch "glib-tests-homedir.patch"))
("patch/tests-desktop"
- ,(search-patch "glib-tests-desktop.patch"))))
+ ,(search-patch "glib-tests-desktop.patch"))
+ ("patch/tests-prlimit"
+ ,(search-patch "glib-tests-prlimit.patch"))))
(arguments
'(#:patches (list (assoc-ref %build-inputs "patch/tests-tzdata")
(assoc-ref %build-inputs "patch/tests-homedir")
- (assoc-ref %build-inputs "patch/tests-desktop"))
+ (assoc-ref %build-inputs "patch/tests-desktop")
+ (assoc-ref %build-inputs "patch/tests-prlimit"))
#:phases (alist-cons-before
'build 'pre-build
(lambda* (#:key inputs outputs #:allow-other-keys)
@@ -124,3 +127,40 @@ and interfaces for such runtime functionality as an event loop, threads,
dynamic loading, and an object system.")
(home-page "http://developer.gnome.org/glib/")
(license lgpl2.0+))) ; some files are under lgpl2.1+
+
+(define-public intltool
+ (package
+ (name "intltool")
+ (version "0.40.6")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://gnome/sources/intltool/0.40/intltool-"
+ version
+ ".tar.bz2"))
+ (sha256
+ (base32
+ "0r1vkvy5xzqk01yl6a0xlrry39bra24alkrx6279b77hc62my7jd"))))
+ (build-system gnu-build-system)
+ (native-inputs `(("pkg-config" ,pkg-config)))
+ (propagated-inputs
+ `(("gettext" ,guix:gettext)
+ ("perl-xml-parser" ,xml:perl-xml-parser)
+ ("perl" ,perl)))
+ (home-page "http://freedesktop.org/wiki/Software/intltool")
+ (synopsis "Tools to centralize translation of many different file formats")
+ (description
+ "intltool is a set of tools to centralize translation of many different
+file formats using GNU gettext-compatible PO files.
+
+The intltool collection can be used to do these things:
+
+ Extract translatable strings from various source files (.xml.in,
+ glade, .desktop.in, .server.in, .oaf.in).
+
+ Collect the extracted strings together with messages from traditional
+ source files (.c, .h) in po/$(PACKAGE).pot.
+
+ Merge back the translations from .po files into .xml, .desktop and
+ oaf files. This merge step will happen at build resp. installation time.")
+ (license gpl2)))
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index f26582fb22..1810b65fe8 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
@@ -57,15 +57,14 @@ Daemon and possibly more in the future.")
(define-public libgcrypt
(package
(name "libgcrypt")
- (version "1.5.0")
- (source
- (origin
- (method url-fetch)
- (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
- version ".tar.bz2"))
- (sha256
- (base32
- "1ykkh7dm0gyndz7bbpvn3agijj8xb2h02m02f42hm504c18zqqjb"))))
+ (version "1.5.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
+ version ".tar.bz2"))
+ (sha256
+ (base32
+ "09z5zbxhvg6c7n8qcm8h9ygr28qli2n83hfq1f69jsg711cb37md"))))
(build-system gnu-build-system)
(propagated-inputs
`(("libgpg-error" ,libgpg-error)))
diff --git a/gnu/packages/gnutls.scm b/gnu/packages/gnutls.scm
index 0a681e3a88..dc571adc60 100644
--- a/gnu/packages/gnutls.scm
+++ b/gnu/packages/gnutls.scm
@@ -52,7 +52,7 @@ portable, and only require an ANSI C89 platform.")
(define-public gnutls
(package
(name "gnutls")
- (version "3.1.6")
+ (version "3.1.9.1")
(source (origin
(method url-fetch)
(uri
@@ -62,7 +62,7 @@ portable, and only require an ANSI C89 platform.")
version ".tar.xz"))
(sha256
(base32
- "0zsybr9plllk1phh83bx9bg7c5ccik427j4n3k1s9fiy4j69n0w3"))))
+ "0gkwhz7sypfy39jfj2yzrngbxq5j9l9smqc89mqlqsh25spc8009"))))
(build-system gnu-build-system)
(inputs
`(("guile" ,guile-2.0)
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 58e7c2910c..c74d0512c6 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -88,6 +88,11 @@
;; When cross-compiling, a native version of Guile itself is needed.
(self-native-input? #t)
+ (native-search-paths
+ (list (search-path-specification
+ (variable "GUILE_LOAD_PATH")
+ (directories '("share/guile/site")))))
+
(synopsis "GNU Guile 1.8, an embeddable Scheme interpreter")
(description
"GNU Guile 1.8 is an interpreter for the Scheme programming language,
@@ -137,6 +142,14 @@ extensible. It supports many SRFIs.")
(string-append bash "/bin/bash")))))
%standard-phases)))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "GUILE_LOAD_PATH")
+ (directories '("share/guile/site/2.0")))
+ (search-path-specification
+ (variable "GUILE_LOAD_COMPILED_PATH")
+ (directories '("share/guile/site/2.0")))))
+
(synopsis "GNU Guile 2.0, an embeddable Scheme implementation")
(description
"GNU Guile is an implementation of the Scheme programming language, with
diff --git a/gnu/packages/lsof.scm b/gnu/packages/lsof.scm
new file mode 100644
index 0000000000..d0cdefd533
--- /dev/null
+++ b/gnu/packages/lsof.scm
@@ -0,0 +1,75 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages lsof)
+ #:use-module ((guix licenses)
+ #:renamer (symbol-prefix-proc 'license:))
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages perl))
+
+(define-public lsof
+ (package
+ (name "lsof")
+ (version "4.87")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_"
+ version ".tar.bz2"))
+ (sha256 (base32
+ "0b6si72sml7gr9784ak491cxxbm9mx5bh174yg6rrirbv04kgpfz"))))
+ (build-system gnu-build-system)
+ (inputs `(("perl" ,perl)))
+ (arguments
+ `(#:tests? #f ; no test target
+ #:phases
+ (alist-replace
+ 'unpack
+ (lambda* (#:key source name version #:allow-other-keys)
+ (let ((unpack (assoc-ref %standard-phases 'unpack)))
+ (apply unpack (list #:source source))
+ (apply unpack (list #:source (car (find-files "." "\\.tar$"))))))
+ (alist-replace
+ 'configure
+ (lambda* (#:key #:allow-other-keys)
+ (setenv "LSOF_CC" "gcc")
+ (setenv "LSOF_MAKE" "make")
+ (system* "./Configure" "linux"))
+ (alist-replace
+ 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (mkdir out)
+ (mkdir (string-append out "/bin"))
+ (copy-file "lsof" (string-append out "/bin/lsof"))
+ (mkdir (string-append out "/share"))
+ (mkdir (string-append out "/share/man"))
+ (mkdir (string-append out "/share/man/man8"))
+ (copy-file "lsof.8" (string-append out "/share/man/man8/lsof.8"))
+ ))
+ %standard-phases)))))
+ (synopsis "lsof displays information about open files")
+ (description
+ "Lsof stands for LiSt Open Files, and it does just that.
+It lists information about files that are open by the processes running
+on the system.")
+ (license (license:fsf-free
+ "file://00FAQ"
+ "License inspired by zlib, see point 1.9 of 00FAQ in the distribution."))
+ (home-page "http://people.freebsd.org/~abe/")))
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
new file mode 100644
index 0000000000..14fc28ced0
--- /dev/null
+++ b/gnu/packages/lua.scm
@@ -0,0 +1,63 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages lua)
+ #:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages readline))
+
+(define-public lua
+ (package
+ (name "lua")
+ (version "5.2.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://www.lua.org/ftp/lua-"
+ version ".tar.gz"))
+ (sha256
+ (base32 "1rbv2ysq5fdksz7xg07dnrkl8i0gnx855hg4z6b324vng6l4sc34"))))
+ (build-system gnu-build-system)
+ (inputs `(("readline", readline)))
+ (arguments
+ '(#:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (srfi srfi-1))
+ #:test-target "test"
+ #:phases (alist-replace
+ 'build
+ (lambda _ (zero? (system* "make" "linux"))) ; XXX: Other OS.
+ (alist-replace
+ 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (zero? (system
+ (string-append "make install INSTALL_TOP=" out)))))
+ (alist-delete 'configure %standard-phases)))))
+ (home-page "http://www.lua.org/")
+ (synopsis "An embeddable scripting language.")
+ (description
+ "Lua is a powerful, fast, lightweight, embeddable scripting language. Lua
+combines simple procedural syntax with powerful data description constructs
+based on associative arrays and extensible semantics. Lua is dynamically typed,
+runs by interpreting bytecode for a register-based virtual machine, and has
+automatic memory management with incremental garbage collection, making it ideal
+for configuration, scripting, and rapid prototyping.")
+ (license x11)))
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index 3bb926bd36..40e3e21210 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -27,6 +27,7 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages compression)
#:use-module (gnu packages gawk)
+ #:use-module (gnu packages gcc)
#:use-module (gnu packages guile)
#:use-module (gnu packages bdw-gc)
#:use-module (gnu packages linux)
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 5e0dee0620..acff875db1 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -70,13 +70,13 @@ faster algorithms.")
(define-public mpfr
(package
(name "mpfr")
- (version "3.1.1")
+ (version "3.1.2")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/mpfr/mpfr-" version
".tar.xz"))
(sha256 (base32
- "0ym1ylcq803n52qrggxqmkz66gbn8ncc3ybawal31v5y5p1srma9"))))
+ "0fs501qi8l523gs3cpy4jjcnvwxggyfbklcys80wq236xx3hz79r"))))
(build-system gnu-build-system)
(propagated-inputs `(("gmp" ,gmp))) ; <mpfr.h> refers to <gmp.h>
(synopsis "GNU MPFR, a library for multiple-precision floating-point
diff --git a/gnu/packages/patches/cmake-fix-tests.patch b/gnu/packages/patches/cmake-fix-tests.patch
new file mode 100644
index 0000000000..ae28ca336b
--- /dev/null
+++ b/gnu/packages/patches/cmake-fix-tests.patch
@@ -0,0 +1,45 @@
+--- Tests/CMakeLists.txt 2013-03-20 22:57:13.000000000 +0100
++++ Tests/CMakeLists.txt 2013-03-20 22:58:02.000000000 +0100
+@@ -1706,16 +1706,17 @@
+ PASS_REGULAR_EXPRESSION "Could not find executable"
+ FAIL_REGULAR_EXPRESSION "SegFault")
+
+- configure_file(
+- "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in"
+- "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake"
+- @ONLY ESCAPE_QUOTES)
+- add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND}
+- -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V
+- --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log"
+- )
+- set_tests_properties(CTestTestUpload PROPERTIES
+- PASS_REGULAR_EXPRESSION "Upload\\.xml")
++# This test requires network connectivity: skip it.
++# configure_file(
++# "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in"
++# "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake"
++# @ONLY ESCAPE_QUOTES)
++# add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND}
++# -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V
++# --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log"
++# )
++# set_tests_properties(CTestTestUpload PROPERTIES
++# PASS_REGULAR_EXPRESSION "Upload\\.xml")
+
+ configure_file(
+ "${CMake_SOURCE_DIR}/Tests/CTestTestConfigFileInBuildDir/test1.cmake.in"
+--- Utilities/cmcurl/CMakeLists.txt 2013-03-20 22:57:13.000000000 +0100
++++ Utilities/cmcurl/CMakeLists.txt 2013-03-20 23:08:41.000000000 +0100
+@@ -729,8 +729,9 @@
+ ADD_EXECUTABLE(LIBCURL Testing/curltest.c)
+ TARGET_LINK_LIBRARIES(LIBCURL cmcurl ${CMAKE_DL_LIBS})
+
+-IF(CMAKE_CURL_TEST_URL)
+- ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL})
+-ENDIF(CMAKE_CURL_TEST_URL)
++# This test requires network connectivity: skip it.
++#IF(CMAKE_CURL_TEST_URL)
++# ADD_TEST(curl LIBCURL ${CMAKE_CURL_TEST_URL})
++#ENDIF(CMAKE_CURL_TEST_URL)
+
+ INSTALL(FILES COPYING DESTINATION ${CMake_DOC_DEST}/cmcurl)
diff --git a/gnu/packages/patches/emacs-configure-sh.patch b/gnu/packages/patches/emacs-configure-sh.patch
index fd34d06ced..6f5f3fe93a 100644
--- a/gnu/packages/patches/emacs-configure-sh.patch
+++ b/gnu/packages/patches/emacs-configure-sh.patch
@@ -1,14 +1,13 @@
Make sure the right shell is used when creating src/epaths.h.
---- emacs-24.2/configure 2013-01-13 17:01:53.000000000 +0100
-+++ emacs-24.2/configure 2013-01-13 17:01:57.000000000 +0100
-@@ -24135,7 +24135,7 @@ done
+--- emacs-24.3/configure 2013-03-14 17:42:26.000000000 +0100
++++ emacs-24.3/configure 2013-03-14 17:42:58.000000000 +0100
+@@ -26463,7 +26463,7 @@ done
;;
"epaths":C)
echo creating src/epaths.h
--${MAKE-make} epaths-force
-+${MAKE-make} epaths-force SHELL="$CONFIG_SHELL"
+-${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force
++${MAKE-make} MAKEFILE_NAME=do-not-make-Makefile epaths-force SHELL="$CONFIG_SHELL"
;;
"gdbinit":C)
if test ! -f src/.gdbinit && test -f $srcdir/src/.gdbinit; then
-
diff --git a/gnu/packages/patches/glib-tests-prlimit.patch b/gnu/packages/patches/glib-tests-prlimit.patch
new file mode 100644
index 0000000000..f2b2a61bee
--- /dev/null
+++ b/gnu/packages/patches/glib-tests-prlimit.patch
@@ -0,0 +1,14 @@
+prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64 as found on
+hydra.gnu.org, and strace(1) doesn't recognize it.
+
+--- glib-2.34.3/glib/tests/thread.c 2012-11-20 15:27:12.000000000 +0100
++++ glib-2.34.3/glib/tests/thread.c 2013-03-27 14:48:31.000000000 +0100
+@@ -130,7 +130,7 @@ test_thread3 (void)
+ static void
+ test_thread4 (void)
+ {
+-#ifdef HAVE_PRLIMIT
++#if 0
+ struct rlimit ol, nl;
+ GThread *thread;
+ GError *error;
diff --git a/gnu/packages/patches/w3m-fix-compile.patch b/gnu/packages/patches/w3m-fix-compile.patch
new file mode 100644
index 0000000000..5604052f67
--- /dev/null
+++ b/gnu/packages/patches/w3m-fix-compile.patch
@@ -0,0 +1,15 @@
+https://bugs.archlinux.org/task/33397
+
+diff -aur old/main.c new/main.c
+--- main.c 2013-01-14 18:16:14.216210053 -0600
++++ main.c 2013-01-14 18:17:28.816220559 -0600
+@@ -833,7 +833,8 @@
+ mySignal(SIGPIPE, SigPipe);
+ #endif
+
+- orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
++ orig_GC_warn_proc = GC_get_warn_proc();
++ GC_set_warn_proc(wrap_GC_warn_proc);
+ err_msg = Strnew();
+ if (load_argc == 0) {
+ /* no URL specified */
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 624d228059..c677a1b7e2 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -63,6 +63,9 @@
(string-append "-Dloclibpth=" libc "/lib")))))
%standard-phases)))
(inputs `(("patch/no-sys-dirs" ,(search-patch "perl-no-sys-dirs.patch"))))
+ (native-search-paths (list (search-path-specification
+ (variable "PERL5LIB")
+ (directories '("lib/perl5/site_perl")))))
(synopsis "Implementation of the Perl programming language")
(description
"Perl 5 is a highly capable, feature-rich programming language with over
diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm
index 0910a410ee..294163b474 100644
--- a/gnu/packages/pkg-config.scm
+++ b/gnu/packages/pkg-config.scm
@@ -36,6 +36,11 @@
"05wc5nwkqz7saj2v33ydmz1y6jdg659dll4jjh91n41m63gx0qsg"))))
(build-system gnu-build-system)
(arguments `(#:configure-flags '("--with-internal-glib")))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "PKG_CONFIG_PATH")
+ (directories '("lib/pkgconfig" "lib64/pkgconfig"
+ "share/pkgconfig")))))
(home-page "http://www.freedesktop.org/wiki/Software/pkg-config")
(license gpl2+)
(synopsis "a helper tool used when compiling applications and
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 52b11e4197..26b76864ce 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -43,6 +43,10 @@
`(("zlib" ,zlib)
("openssl" ,openssl)
("bzip2" ,bzip2)))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "PYTHONPATH")
+ (directories '("lib/python2.7/site-packages")))))
(home-page "http://python.org")
(synopsis
"Python, a high-level dynamically-typed programming language")
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index 96016c053d..4194f48ffe 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -28,14 +28,14 @@
(define-public texinfo
(package
(name "texinfo")
- (version "5.0")
+ (version "5.1")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/texinfo/texinfo-"
version ".tar.xz"))
(sha256
(base32
- "1p34f68h9ggfj6ckgj0p62qlj7pmz3ha3vc91kh4hr44pnwm1pla"))))
+ "0864v5i488x3mb3v5p6nhy2kw0mqkzpa3b0453iibj81zlpq078q"))))
(build-system gnu-build-system)
(inputs `(("ncurses" ,ncurses)
("xz" ,xz)))
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 9393e1e7b4..4cd90cd7f2 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -23,8 +23,14 @@
#:use-module (guix download)
#:use-module (guix build-system gnu)
#:use-module (gnu packages)
+ #:use-module (gnu packages compression)
+ #:use-module ((gnu packages gettext)
+ #:renamer (symbol-prefix-proc 'gnu:))
#:use-module (gnu packages gnupg)
- #:use-module (gnu packages perl))
+ #:use-module (gnu packages openssl)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages xml))
(define-public vpnc
(package
@@ -64,3 +70,45 @@ shared-secret IPSec authentication with Xauth, AES (256, 192, 128), 3DES,
Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
(license license:gpl2+) ; some file are bsd-2, see COPYING
(home-page "http://www.unix-ag.uni-kl.de/~massar/vpnc/")))
+
+
+(define-public openconnect
+ (package
+ (name "openconnect")
+ (version "4.99")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "ftp://ftp.infradead.org/pub/openconnect/openconnect-"
+ version ".tar.gz"))
+ (sha256 (base32
+ "1rd8pap455wzkx19i0sy3cqap524b6fwcjvqynxp6lhm01di4bd6"))))
+ (build-system gnu-build-system)
+ (inputs
+ `(("gettext" ,gnu:gettext)
+ ("libxml2" ,libxml2)
+ ("openssl" ,openssl)
+ ("pkg-config" ,pkg-config)
+ ("vpnc" ,vpnc)
+ ("zlib" ,zlib)))
+ (arguments
+ `(#:phases
+ (alist-replace
+ 'configure
+ (lambda* (#:key inputs #:allow-other-keys #:rest args)
+ (let ((vpnc (assoc-ref inputs "vpnc"))
+ (configure (assoc-ref %standard-phases 'configure)))
+ (apply configure
+ (append args
+ (list '#:configure-flags
+ (list (string-append "--with-vpnc-script="
+ vpnc
+ "/etc/vpnc/vpnc-script")))))))
+ %standard-phases)))
+ (synopsis "client for cisco vpn")
+ (description
+ "OpenConnect is a client for Cisco's AnyConnect SSL VPN, which is
+supported by the ASA5500 Series, by IOS 12.4(9)T or later on Cisco SR500,
+870, 880, 1800, 2800, 3800, 7200 Series and Cisco 7301 Routers,
+and probably others.")
+ (license license:lgpl2.1)
+ (home-page "http://www.infradead.org/openconnect/")))
diff --git a/gnu/packages/w3m.scm b/gnu/packages/w3m.scm
new file mode 100644
index 0000000000..9199cbd488
--- /dev/null
+++ b/gnu/packages/w3m.scm
@@ -0,0 +1,81 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages w3m)
+ #:use-module ((guix licenses) #:select (x11-style))
+ #:use-module ((gnu packages gettext)
+ #:renamer (symbol-prefix-proc 'guix:))
+ #:use-module (gnu packages bdw-gc)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages ncurses)
+ #:use-module (gnu packages openssl)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix build-system gnu))
+
+(define-public w3m
+ (package
+ (name "w3m")
+ (version "0.5.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/w3m/w3m-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1qx9f0kprf92r1wxl3sacykla0g04qsi0idypzz24b7xy9ix5579"))))
+ (build-system gnu-build-system)
+ (arguments `(#:tests? #f ; no check target
+ #:phases (alist-cons-before
+ 'configure 'fix-perl
+ (lambda _
+ ;; https://launchpad.net/bugs/935540
+ ;; 'struct file_handle' is used by 'glibc'
+ (substitute* '("istream.c" "istream.h")
+ (("struct[[:blank:]]+file_handle")
+ "struct w3m_file_handle"))
+ (substitute* '("scripts/w3mmail.cgi.in"
+ "scripts/dirlist.cgi.in")
+ (("@PERL@") (which "perl"))))
+ %standard-phases)
+ ;; cf. https://bugs.archlinux.org/task/33397
+ #:patches (list (assoc-ref %build-inputs
+ "patch/fix-compile"))
+ #:patch-flags '("-p0")))
+ (inputs
+ `(("gettext" ,guix:gettext)
+ ("libgc" ,libgc)
+ ("ncurses" ,ncurses)
+ ("openssl" ,openssl)
+ ("perl" ,perl)
+ ("pkg-config" ,pkg-config)
+ ("zlib" ,zlib)
+ ("patch/fix-compile" ,(search-patch "w3m-fix-compile.patch"))))
+ (home-page "http://w3m.sourceforge.net/")
+ (synopsis "w3m, a text-mode web browser")
+ (description
+ "w3m is a text-based web browser as well as a pager like 'more' or
+'less'. With w3m you can browse web pages through a terminal emulator
+window. Moreover, w3m can be used as a text formatting tool which
+typesets HTML into plain text.")
+ (license (x11-style "file://doc/README"
+ "See 'doc/README' in the distribution."))))
diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm
new file mode 100644
index 0000000000..4e993f3961
--- /dev/null
+++ b/guix/build-system/cmake.scm
@@ -0,0 +1,124 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build-system cmake)
+ #:use-module (guix store)
+ #:use-module (guix utils)
+ #:use-module (guix derivations)
+ #:use-module (guix build-system)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix packages)
+ #:use-module (ice-9 match)
+ #:export (cmake-build
+ cmake-build-system))
+
+;; Commentary:
+;;
+;; Standard build procedure for packages using CMake. This is implemented as an
+;; extension of `gnu-build-system'.
+;;
+;; Code:
+
+(define* (cmake-build store name source inputs
+ #:key (guile #f)
+ (outputs '("out")) (configure-flags ''())
+ (search-paths '())
+ (make-flags ''())
+ (patches ''()) (patch-flags ''("--batch" "-p1"))
+ (cmake (@ (gnu packages cmake) cmake))
+ (out-of-source? #f)
+ (tests? #t)
+ (test-target "test")
+ (parallel-build? #t) (parallel-tests? #f)
+ (patch-shebangs? #t)
+ (strip-binaries? #t)
+ (strip-flags ''("--strip-debug"))
+ (strip-directories ''("lib" "lib64" "libexec"
+ "bin" "sbin"))
+ (phases '(@ (guix build cmake-build-system)
+ %standard-phases))
+ (system (%current-system))
+ (imported-modules '((guix build cmake-build-system)
+ (guix build gnu-build-system)
+ (guix build utils)))
+ (modules '((guix build cmake-build-system)
+ (guix build gnu-build-system)
+ (guix build utils))))
+ "Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE
+provides a 'CMakeLists.txt' file as its build system."
+ (define builder
+ `(begin
+ (use-modules ,@modules)
+ (cmake-build #:source ,(if (and source (derivation-path? source))
+ (derivation-path->output-path source)
+ source)
+ #:system ,system
+ #:outputs %outputs
+ #:inputs %build-inputs
+ #:search-paths ',(map search-path-specification->sexp
+ search-paths)
+ #:patches ,patches
+ #:patch-flags ,patch-flags
+ #:phases ,phases
+ #:configure-flags ,configure-flags
+ #:make-flags ,make-flags
+ #:out-of-source? ,out-of-source?
+ #:tests? ,tests?
+ #:test-target ,test-target
+ #:parallel-build? ,parallel-build?
+ #:parallel-tests? ,parallel-tests?
+ #:patch-shebangs? ,patch-shebangs?
+ #:strip-binaries? ,strip-binaries?
+ #:strip-flags ,strip-flags
+ #:strip-directories ,strip-directories)))
+
+ (define guile-for-build
+ (match guile
+ ((? package?)
+ (package-derivation store guile system))
+ ((and (? string?) (? derivation-path?))
+ guile)
+ (#f ; the default
+ (let* ((distro (resolve-interface '(gnu packages base)))
+ (guile (module-ref distro 'guile-final)))
+ (package-derivation store guile system)))))
+
+ (let ((cmake (package-derivation store cmake system)))
+ (build-expression->derivation store name system
+ builder
+ `(,@(if source
+ `(("source" ,source))
+ '())
+ ("cmake" ,cmake)
+ ,@inputs
+
+ ;; Keep the standard inputs of
+ ;; `gnu-build-system'.
+ ,@(standard-inputs system))
+
+ #:modules imported-modules
+ #:outputs outputs
+ #:guile-for-build guile-for-build)))
+
+(define cmake-build-system
+ (build-system (name 'cmake)
+ (description "The standard CMake build system")
+ (build cmake-build)))
+
+;;; cmake.scm ends here
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 8049e7510f..d5ad1e3e01 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -159,11 +159,12 @@ System: GCC, GNU Make, Bash, Coreutils, etc."
(define* (gnu-build store name source inputs
#:key (guile #f)
- (outputs '("out")) (configure-flags ''())
+ (outputs '("out"))
+ (search-paths '())
+ (configure-flags ''())
(make-flags ''())
(patches ''()) (patch-flags ''("--batch" "-p1"))
(out-of-source? #f)
- (path-exclusions ''())
(tests? #t)
(test-target "check")
(parallel-build? #t) (parallel-tests? #t)
@@ -190,6 +191,21 @@ the builder's environment, from the host. Note that we distinguish
between both, because for Guile's own modules like (ice-9 foo), we want
to use GUILE's own version of it, rather than import the user's one,
which could lead to gratuitous input divergence."
+ (define implicit-inputs
+ (and implicit-inputs?
+ (parameterize ((%store store))
+ (standard-inputs system))))
+
+ (define implicit-search-paths
+ (if implicit-inputs?
+ (append-map (match-lambda
+ ((_ (? package? p) _ ...)
+ (package-native-search-paths p))
+ (_
+ '()))
+ implicit-inputs)
+ '()))
+
(define builder
`(begin
(use-modules ,@modules)
@@ -199,13 +215,15 @@ which could lead to gratuitous input divergence."
#:system ,system
#:outputs %outputs
#:inputs %build-inputs
+ #:search-paths ',(map search-path-specification->sexp
+ (append implicit-search-paths
+ search-paths))
#:patches ,patches
#:patch-flags ,patch-flags
#:phases ,phases
#:configure-flags ,configure-flags
#:make-flags ,make-flags
#:out-of-source? ,out-of-source?
- #:path-exclusions ,path-exclusions
#:tests? ,tests?
#:test-target ,test-target
#:parallel-build? ,parallel-build?
@@ -233,8 +251,7 @@ which could lead to gratuitous input divergence."
'())
,@inputs
,@(if implicit-inputs?
- (parameterize ((%store store))
- (standard-inputs system))
+ implicit-inputs
'()))
#:outputs outputs
#:modules imported-modules
diff --git a/guix/build-system/perl.scm b/guix/build-system/perl.scm
index 537c29e799..c97698e225 100644
--- a/guix/build-system/perl.scm
+++ b/guix/build-system/perl.scm
@@ -38,6 +38,7 @@
(define* (perl-build store name source inputs
#:key
(perl (@ (gnu packages perl) perl))
+ (search-paths '())
(tests? #t)
(make-maker-flags ''())
(phases '(@ (guix build perl-build-system)
@@ -53,6 +54,9 @@
(guix build utils))))
"Build SOURCE using PERL, and with INPUTS. This assumes that SOURCE
provides a `Makefile.PL' file as its build system."
+ (define perl-search-paths
+ (package-native-search-paths perl))
+
(define builder
`(begin
(use-modules ,@modules)
@@ -60,6 +64,9 @@ provides a `Makefile.PL' file as its build system."
#:source ,(if (and source (derivation-path? source))
(derivation-path->output-path source)
source)
+ #:search-paths ',(map search-path-specification->sexp
+ (append perl-search-paths
+ search-paths))
#:make-maker-flags ,make-maker-flags
#:system ,system
#:test-target "test"
diff --git a/guix/build-system/trivial.scm b/guix/build-system/trivial.scm
index e5bbeaa91d..2eb15aa2e0 100644
--- a/guix/build-system/trivial.scm
+++ b/guix/build-system/trivial.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -26,7 +26,9 @@
#:export (trivial-build-system))
(define* (trivial-build store name source inputs
- #:key outputs guile system builder (modules '()))
+ #:key
+ outputs guile system builder (modules '())
+ search-paths)
"Run build expression BUILDER, an expression, for SYSTEM. SOURCE is
ignored."
(define guile-for-build
diff --git a/guix/build/cmake-build-system.scm b/guix/build/cmake-build-system.scm
new file mode 100644
index 0000000000..877d8110d7
--- /dev/null
+++ b/guix/build/cmake-build-system.scm
@@ -0,0 +1,63 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build cmake-build-system)
+ #:use-module ((guix build gnu-build-system)
+ #:renamer (symbol-prefix-proc 'gnu:))
+ #:use-module (guix build utils)
+ #:use-module (ice-9 match)
+ #:export (%standard-phases
+ cmake-build))
+
+;; Commentary:
+;;
+;; Builder-side code of the standard cmake build procedure.
+;;
+;; Code:
+
+(define* (configure #:key outputs (configure-flags '())
+ #:allow-other-keys)
+ "Configure the given package."
+ (let ((out (assoc-ref outputs "out")))
+ (if (file-exists? "CMakeLists.txt")
+ (let ((args `(,(string-append "-DCMAKE_INSTALL_PREFIX=" out)
+ ,@configure-flags)))
+ (format #t "running 'cmake' with arguments ~s~%" args)
+ (zero? (apply system* "cmake" args)))
+ (error "no CMakeLists.txt found"))))
+
+(define* (check #:key (tests? #t) (parallel-tests? #t) (test-target "test")
+ #:allow-other-keys)
+ (let ((gnu-check (assoc-ref gnu:%standard-phases 'check)))
+ (gnu-check #:tests? tests? #:test-target test-target
+ #:parallel-tests? parallel-tests?)))
+
+(define %standard-phases
+ ;; Everything is as with the GNU Build System except for the `configure'
+ ;; and 'check' phases.
+ (alist-replace 'configure configure
+ (alist-replace 'check check
+ gnu:%standard-phases)))
+
+(define* (cmake-build #:key inputs (phases %standard-phases)
+ #:allow-other-keys #:rest args)
+ "Build the given package, applying all of PHASES in order."
+ (apply gnu:gnu-build #:inputs inputs #:phases phases args))
+
+;;; cmake-build-system.scm ends here
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 8fc6f86507..94a7d6bca8 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -48,34 +48,22 @@
#f
dir))
-(define* (set-paths #:key inputs (path-exclusions '())
+(define* (set-paths #:key inputs (search-paths '())
#:allow-other-keys)
- (define (relevant-input-directories env-var)
- ;; Return the subset of INPUTS that should be considered when setting
- ;; ENV-VAR.
- (match (assoc-ref path-exclusions env-var)
- (#f
- (map cdr inputs))
- ((excluded ...)
- (filter-map (match-lambda
- ((name . dir)
- (and (not (member name excluded))
- dir)))
- inputs))))
+ (define input-directories
+ (match inputs
+ (((_ . dir) ...)
+ dir)))
- (set-path-environment-variable "PATH" '("bin")
- (relevant-input-directories "PATH"))
- (set-path-environment-variable "CPATH" '("include")
- (relevant-input-directories "CPATH"))
- (set-path-environment-variable "LIBRARY_PATH" '("lib" "lib64")
- (relevant-input-directories "LIBRARY_PATH"))
+ (set-path-environment-variable "PATH" '("bin" "sbin")
+ input-directories)
- ;; FIXME: Eventually move this to the `search-paths' field of the
- ;; `pkg-config' package.
- (set-path-environment-variable "PKG_CONFIG_PATH"
- '("lib/pkgconfig" "lib64/pkgconfig"
- "share/pkgconfig")
- (relevant-input-directories "PKG_CONFIG_PATH"))
+ (for-each (match-lambda
+ ((env-var (directories ...) separator)
+ (set-path-environment-variable env-var directories
+ input-directories
+ #:separator separator)))
+ search-paths)
;; Dump the environment variables as a shell script, for handy debugging.
(system "export > environment-variables"))
diff --git a/guix/build/perl-build-system.scm b/guix/build/perl-build-system.scm
index d625ef3ed6..793b6aacb5 100644
--- a/guix/build/perl-build-system.scm
+++ b/guix/build/perl-build-system.scm
@@ -50,10 +50,6 @@
(define* (perl-build #:key inputs (phases %standard-phases)
#:allow-other-keys #:rest args)
"Build the given Perl package, applying all of PHASES in order."
- (set-path-environment-variable "PERL5LIB" '("lib/perl5/site_perl")
- (match inputs
- (((_ . path) ...)
- path)))
(apply gnu:gnu-build
#:inputs inputs #:phases phases
args))
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index ef215e60bb..356dd46b52 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -51,7 +52,8 @@
patch-shebang
patch-makefile-SHELL
fold-port-matches
- remove-store-references))
+ remove-store-references
+ wrap-program))
;;;
@@ -652,6 +654,70 @@ known as `nuke-refs' in Nixpkgs."
(put-u8 out (char->integer char))
result))))))
+(define* (wrap-program prog #:rest vars)
+ "Rename PROG to .PROG-real and make PROG a wrapper. VARS should look like
+this:
+
+ '(VARIABLE DELIMITER POSITION LIST-OF-DIRECTORIES)
+
+where DELIMITER is optional. ':' will be used if DELIMITER is not given.
+
+For example, this command:
+
+ (wrap-program \"foo\"
+ '(\"PATH\" \":\" = (\"/nix/.../bar/bin\"))
+ '(\"CERT_PATH\" suffix (\"/nix/.../baz/certs\"
+ \"/qux/certs\")))
+
+will copy 'foo' to '.foo-real' and create the file 'foo' with the following
+contents:
+
+ #!location/of/bin/bash
+ export PATH=\"/nix/.../bar/bin\"
+ export CERT_PATH=\"$CERT_PATH${CERT_PATH:+:}/nix/.../baz/certs:/qux/certs\"
+ exec location/of/.foo-real
+
+This is useful for scripts that expect particular programs to be in $PATH, for
+programs that expect particular shared libraries to be in $LD_LIBRARY_PATH, or
+modules in $GUILE_LOAD_PATH, etc."
+ (let ((prog-real (string-append "." prog "-real"))
+ (prog-tmp (string-append "." prog "-tmp")))
+ (define (export-variable lst)
+ ;; Return a string that exports an environment variable.
+ (match lst
+ ((var sep '= rest)
+ (format #f "export ~a=\"~a\""
+ var (string-join rest sep)))
+ ((var sep 'prefix rest)
+ (format #f "export ~a=\"~a${~a~a+~a}$~a\""
+ var (string-join rest sep) var sep sep var))
+ ((var sep 'suffix rest)
+ (format #f "export ~a=\"$~a${~a~a+~a}~a\""
+ var var var sep sep (string-join rest sep)))
+ ((var '= rest)
+ (format #f "export ~a=\"~a\""
+ var (string-join rest ":")))
+ ((var 'prefix rest)
+ (format #f "export ~a=\"~a${~a:+:}$~a\""
+ var (string-join rest ":") var var))
+ ((var 'suffix rest)
+ (format #f "export ~a=\"$~a${~a:+:}~a\""
+ var var var (string-join rest ":")))))
+
+ (copy-file prog prog-real)
+
+ (with-output-to-file prog-tmp
+ (lambda ()
+ (format #t
+ "#!~a~%~a~%exec ~a~%"
+ (which "bash")
+ (string-join (map export-variable vars)
+ "\n")
+ (canonicalize-path prog-real))))
+
+ (chmod prog-tmp #o755)
+ (rename-file prog-tmp prog)))
+
;;; Local Variables:
;;; eval: (put 'call-with-output-file/atomic 'scheme-indent-function 1)
;;; eval: (put 'with-throw-handler 'scheme-indent-function 1)
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 18a637ae5a..2243d2ba46 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -235,6 +235,32 @@ DRV and not already available in STORE, recursively."
(hash-set! cache file drv)
drv))))))
+(define-inlinable (write-sequence lst write-item port)
+ ;; Write each element of LST with WRITE-ITEM to PORT, separating them with a
+ ;; comma.
+ (match lst
+ (()
+ #t)
+ ((prefix (... ...) last)
+ (for-each (lambda (item)
+ (write-item item port)
+ (display "," port))
+ prefix)
+ (write-item last port))))
+
+(define-inlinable (write-list lst write-item port)
+ ;; Write LST as a derivation list to PORT, using WRITE-ITEM to write each
+ ;; element.
+ (display "[" port)
+ (write-sequence lst write-item port)
+ (display "]" port))
+
+(define-inlinable (write-tuple lst write-item port)
+ ;; Same, but write LST as a tuple.
+ (display "(" port)
+ (write-sequence lst write-item port)
+ (display ")" port))
+
(define (write-derivation drv port)
"Write the ATerm-like serialization of DRV to PORT. See Section 2.4 of
Eelco Dolstra's PhD dissertation for an overview of a previous version of
@@ -243,11 +269,8 @@ that form."
;; Make sure we're using the faster implementation.
(define format simple-format)
- (define (list->string lst)
- (string-append "[" (string-join lst ",") "]"))
-
- (define (write-list lst)
- (display (list->string lst) port))
+ (define (write-string-list lst)
+ (write-list lst write port))
(define (coalesce-duplicate-inputs inputs)
;; Return a list of inputs, such that when INPUTS contains the same DRV
@@ -272,6 +295,34 @@ that form."
'()
inputs))
+ (define (write-output output port)
+ (match output
+ ((name . ($ <derivation-output> path hash-algo hash))
+ (write-tuple (list name path
+ (or (and=> hash-algo symbol->string) "")
+ (or (and=> hash bytevector->base16-string)
+ ""))
+ write
+ port))))
+
+ (define (write-input input port)
+ (match input
+ (($ <derivation-input> path sub-drvs)
+ (display "(" port)
+ (write path port)
+ (display "," port)
+ (write-string-list (sort sub-drvs string<?))
+ (display ")" port))))
+
+ (define (write-env-var env-var port)
+ (match env-var
+ ((name . value)
+ (display "(" port)
+ (write name port)
+ (display "," port)
+ (write value port)
+ (display ")" port))))
+
;; Note: lists are sorted alphabetically, to conform with the behavior of
;; C++ `std::map' in Nix itself.
@@ -279,37 +330,28 @@ that form."
(($ <derivation> outputs inputs sources
system builder args env-vars)
(display "Derive(" port)
- (write-list (map (match-lambda
- ((name . ($ <derivation-output> path hash-algo hash))
- (format #f "(~s,~s,~s,~s)"
- name path
- (or (and=> hash-algo symbol->string) "")
- (or (and=> hash bytevector->base16-string)
- ""))))
- (sort outputs
- (lambda (o1 o2)
- (string<? (car o1) (car o2))))))
+ (write-list (sort outputs
+ (lambda (o1 o2)
+ (string<? (car o1) (car o2))))
+ write-output
+ port)
(display "," port)
- (write-list (map (match-lambda
- (($ <derivation-input> path sub-drvs)
- (format #f "(~s,~a)" path
- (list->string (map object->string
- (sort sub-drvs string<?))))))
- (sort (coalesce-duplicate-inputs inputs)
- (lambda (i1 i2)
- (string<? (derivation-input-path i1)
- (derivation-input-path i2))))))
+ (write-list (sort (coalesce-duplicate-inputs inputs)
+ (lambda (i1 i2)
+ (string<? (derivation-input-path i1)
+ (derivation-input-path i2))))
+ write-input
+ port)
(display "," port)
- (write-list (map object->string (sort sources string<?)))
+ (write-string-list (sort sources string<?))
(format port ",~s,~s," system builder)
- (write-list (map object->string args))
+ (write-string-list args)
(display "," port)
- (write-list (map (match-lambda
- ((name . value)
- (format #f "(~s,~s)" name value)))
- (sort env-vars
- (lambda (e1 e2)
- (string<? (car e1) (car e2))))))
+ (write-list (sort env-vars
+ (lambda (e1 e2)
+ (string<? (car e1) (car e2))))
+ write-env-var
+ port)
(display ")" port))))
(define derivation-path->output-path
@@ -699,14 +741,21 @@ omitted or is #f, the value of the `%guile-for-build' fluid is used instead."
(unsetenv "LD_LIBRARY_PATH")))
(builder (add-text-to-store store
(string-append name "-guile-builder")
- (string-append
- (object->string prologue)
- (object->string
- `(exit
- ,(match exp
- ((_ ...)
- (remove module-form? exp))
- (_ `(,exp))))))
+
+ ;; Explicitly use UTF-8 for determinism,
+ ;; and also because UTF-8 output is faster.
+ (with-fluids ((%default-port-encoding
+ "UTF-8"))
+ (call-with-output-string
+ (lambda (port)
+ (write prologue port)
+ (write
+ `(exit
+ ,(match exp
+ ((_ ...)
+ (remove module-form? exp))
+ (_ `(,exp))))
+ port))))
;; The references don't really matter
;; since the builder is always used in
diff --git a/guix/download.scm b/guix/download.scm
index fa89058702..689920c3e0 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -43,7 +43,6 @@
"http://ftpmirror.gnu.org/"
"ftp://ftp.cs.tu-berlin.de/pub/gnu/"
- "ftp://ftp.chg.ru/pub/gnu/"
"ftp://ftp.funet.fi/pub/mirrors/ftp.gnu.org/gnu/"
;; This one is the master repository, and thus it's always
@@ -67,6 +66,11 @@
"ftp://trumpetti.atm.tut.fi/gcrypt/"
"ftp://mirror.cict.fr/gnupg/"
"ftp://ftp.strasbourg.linuxfr.org/pub/gnupg/")
+ (gnome
+ "http://ftp.belnet.be/ftp.gnome.org/"
+ "http://ftp.linux.org.uk/mirrors/ftp.gnome.org/"
+ "http://ftp.gnome.org/pub/GNOME/"
+ "http://mirror.yandex.ru/mirrors/ftp.gnome.org/")
(savannah
"http://download.savannah.gnu.org/releases/"
"ftp://ftp.twaren.net/Unix/NonGNU/"
diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm
index 6475c386d3..979678d076 100644
--- a/guix/gnu-maintenance.scm
+++ b/guix/gnu-maintenance.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2010, 2011, 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,6 +22,7 @@
#:use-module (web client)
#:use-module (web response)
#:use-module (ice-9 regex)
+ #:use-module (ice-9 rdelim)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
@@ -29,7 +30,23 @@
#:use-module (system foreign)
#:use-module (guix ftp-client)
#:use-module (guix utils)
- #:export (official-gnu-packages
+ #:use-module (guix packages)
+ #:export (gnu-package-name
+ gnu-package-mundane-name
+ gnu-package-copyright-holder
+ gnu-package-savannah
+ gnu-package-fsd
+ gnu-package-language
+ gnu-package-logo
+ gnu-package-doc-category
+ gnu-package-doc-summary
+ gnu-package-doc-urls
+ gnu-package-download-url
+
+ official-gnu-packages
+ find-packages
+ gnu-package?
+
releases
latest-release
gnu-package-name->name+version))
@@ -47,16 +64,32 @@
;;;
(define (http-fetch uri)
- "Return a string containing the textual data at URI, a string."
+ "Return an input port containing the textual data at URI, a string."
(let*-values (((resp data)
(http-get (string->uri uri)))
((code)
(response-code resp)))
(case code
((200)
- data)
+ (cond ((string<=? (version) "2.0.5")
+ (begin
+ ;; XXX: Guile 2.0.5 and earlier did not support chunked transfer
+ ;; encoding, which is required when fetching %PACKAGE-LIST-URL
+ ;; (see <http://lists.gnu.org/archive/html/guile-devel/2011-09/msg00089.html>).
+ ;; Since users may still be using these versions, warn them and
+ ;; bail out.
+ (format (current-error-port)
+ "warning: using Guile ~a, ~a ~s encoding~%"
+ (version)
+ "which does not support HTTP"
+ (response-transfer-encoding resp))
+ (error "download failed; use a newer Guile"
+ uri resp)))
+ ((string<=? (version) "2.0.7")
+ (open-input-string data))
+ (else data)))
(else
- (error "download failed:" uri code
+ (error "download failed" uri code
(response-reason-phrase resp))))))
(define %package-list-url
@@ -64,16 +97,114 @@
"viewvc/*checkout*/gnumaint/"
"gnupackages.txt?root=womb"))
+(define-record-type* <gnu-package-descriptor>
+ gnu-package-descriptor
+ make-gnu-package-descriptor
+
+ gnu-package-descriptor?
+
+ (name gnu-package-name)
+ (mundane-name gnu-package-mundane-name)
+ (copyright-holder gnu-package-copyright-holder)
+ (savannah gnu-package-savannah)
+ (fsd gnu-package-fsd)
+ (language gnu-package-language)
+ (logo gnu-package-logo)
+ (doc-category gnu-package-doc-category)
+ (doc-summary gnu-package-doc-summary)
+ (doc-urls gnu-package-doc-urls)
+ (download-url gnu-package-download-url))
+
(define (official-gnu-packages)
- "Return a list of GNU packages."
- (define %package-line-rx
- (make-regexp "^package: (.+)$"))
-
- (let ((lst (string-split (http-fetch %package-list-url) #\nl)))
- (filter-map (lambda (line)
- (and=> (regexp-exec %package-line-rx line)
- (cut match:substring <> 1)))
- lst)))
+ "Return a list of records, which are GNU packages."
+ (define (group-package-fields port state)
+ ;; Return a list of alists. Each alist contains fields of a GNU
+ ;; package.
+ (let ((line (read-line port))
+ (field-rx (make-regexp "^([[:graph:]]+): (.*)$"))
+ (doc-urls-rx (make-regexp "^doc-url: (.*)$"))
+ (end-rx (make-regexp "^# End. .+Do not remove this line.+")))
+
+ (define (match-field str)
+ ;; Packages are separated by empty strings. If STR is an
+ ;; empty string, create a new list to store fields of a
+ ;; different package. Otherwise, match and create a key-value
+ ;; pair.
+ (match str
+ (""
+ (group-package-fields port (cons '() state)))
+ (str
+ (cond ((regexp-exec doc-urls-rx str)
+ =>
+ (lambda (match)
+ (if (equal? (assoc-ref (first state) "doc-urls") #f)
+ (group-package-fields
+ port (cons (cons (cons "doc-urls"
+ (list
+ (match:substring match 1)))
+ (first state))
+ (drop state 1)))
+ (group-package-fields
+ port (cons (cons (cons "doc-urls"
+ (cons (match:substring match 1)
+ (assoc-ref (first state)
+ "doc-urls")))
+ (assoc-remove! (first state)
+ "doc-urls"))
+ (drop state 1))))))
+ ((regexp-exec field-rx str)
+ =>
+ (lambda (match)
+ (group-package-fields
+ port (cons (cons (cons (match:substring match 1)
+ (match:substring match 2))
+ (first state))
+ (drop state 1)))))
+ (else (group-package-fields port state))))))
+
+ (if (or (eof-object? line)
+ (regexp-exec end-rx line)) ; don't include dummy fields
+ (remove null-list? state)
+ (match-field line))))
+
+ (define (alist->record alist make keys)
+ ;; Apply MAKE, which should be a syntactic constructor, to the
+ ;; values associated with KEYS in ALIST.
+ (let ((args (map (cut assoc-ref alist <>) keys)))
+ (apply make args)))
+
+ (reverse
+ (map (lambda (alist)
+ (alist->record alist
+ make-gnu-package-descriptor
+ (list "package" "mundane-name" "copyright-holder"
+ "savannah" "fsd" "language" "logo"
+ "doc-category" "doc-summary" "doc-urls"
+ "download-url")))
+ (group-package-fields (http-fetch %package-list-url)
+ '(())))))
+
+(define (find-packages regexp)
+ "Find GNU packages which satisfy REGEXP."
+ (let ((name-rx (make-regexp regexp)))
+ (filter (lambda (package)
+ (false-if-exception
+ (regexp-exec name-rx (gnu-package-name package))))
+ (official-gnu-packages))))
+
+(define gnu-package?
+ (memoize
+ (lambda (package)
+ "Return true if PACKAGE is a GNU package. This procedure may access the
+network to check in GNU's database."
+ ;; TODO: Find a way to determine that a package is non-GNU without going
+ ;; through the network.
+ (let ((url (and=> (package-source package) origin-uri))
+ (name (package-name package)))
+ (or (and (string? url) (string-prefix? "mirror://gnu" url))
+ (and (member name (map gnu-package-name (official-gnu-packages)))
+ #t))))))
+
;;;
;;; Latest release.
@@ -119,43 +250,45 @@ pairs. Example: (\"mit-scheme-9.0.1\" . \"/gnu/mit-scheme/stable.pkg/9.0.1\").
(let ((end (string-contains tarball ".tar")))
(substring tarball 0 end)))
+ (define (release-file file)
+ ;; Return #f if FILE is not a release tarball, otherwise return
+ ;; PACKAGE-VERSION.
+ (and (not (string-suffix? ".sig" file))
+ (regexp-exec release-rx file)
+ (not (regexp-exec alpha-rx file))
+ (let ((s (sans-extension file)))
+ (and (regexp-exec %package-name-rx s) s))))
+
(let-values (((server directory) (ftp-server/directory project)))
(define conn (ftp-open server))
(let loop ((directories (list directory))
(result '()))
- (if (null? directories)
- (begin
- (ftp-close conn)
- result)
- (let* ((directory (car directories))
- (files (ftp-list conn directory))
- (subdirs (filter-map (lambda (file)
- (match file
- ((name 'directory . _) name)
- (_ #f)))
- files)))
- (loop (append (map (cut string-append directory "/" <>)
- subdirs)
- (cdr directories))
- (append
- ;; Filter out signatures, deltas, and files which
- ;; are potentially not releases of PROJECT--e.g.,
- ;; in /gnu/guile, filter out guile-oops and
- ;; guile-www; in mit-scheme, filter out binaries.
- (filter-map (lambda (file)
- (match file
- ((file 'file . _)
- (and (not (string-suffix? ".sig" file))
- (regexp-exec release-rx file)
- (not (regexp-exec alpha-rx file))
- (let ((s (sans-extension file)))
- (and (regexp-exec
- %package-name-rx s)
- (cons s directory)))))
- (_ #f)))
- files)
- result)))))))
+ (match directories
+ (()
+ (ftp-close conn)
+ result)
+ ((directory rest ...)
+ (let* ((files (ftp-list conn directory))
+ (subdirs (filter-map (match-lambda
+ ((name 'directory . _) name)
+ (_ #f))
+ files)))
+ (loop (append (map (cut string-append directory "/" <>)
+ subdirs)
+ rest)
+ (append
+ ;; Filter out signatures, deltas, and files which
+ ;; are potentially not releases of PROJECT--e.g.,
+ ;; in /gnu/guile, filter out guile-oops and
+ ;; guile-www; in mit-scheme, filter out binaries.
+ (filter-map (match-lambda
+ ((file 'file . _)
+ (and=> (release-file file)
+ (cut cons <> directory)))
+ (_ #f))
+ files)
+ result))))))))
(define (latest-release project)
"Return (\"FOO-X.Y\" . \"/bar/foo\") or #f."
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 4e4aee2036..9c4e17737a 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -39,7 +39,7 @@
psfl public-domain
qpl
vim
- x11
+ x11 x11-style
zlib
fsf-free))
@@ -236,6 +236,16 @@ which may be a file:// URI pointing the package's tree."
"http://directory.fsf.org/wiki/License:X11"
"https://www.gnu.org/licenses/license-list#X11License"))
+(define* (x11-style uri #:optional (comment ""))
+ "Return an X11-style license, whose full text can be found at URI,
+which may be a file:// URI pointing the package's tree."
+ (license "X11-style"
+ uri
+ (string-append
+ "This is an X11-style, non-copyleft free software license. "
+ "Check the URI for details. "
+ comment)))
+
(define zlib
(license "Zlib"
"http://www.gzip.org/zlib/zlib_license.html"
diff --git a/guix/packages.scm b/guix/packages.scm
index 51984baa3b..3a6a07bbcc 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -37,6 +37,11 @@
origin-file-name
base32
+ <search-path-specification>
+ search-path-specification
+ search-path-specification?
+ search-path-specification->sexp
+
package
package?
package-name
@@ -49,6 +54,7 @@
package-native-inputs
package-propagated-inputs
package-outputs
+ package-native-search-paths
package-search-paths
package-synopsis
package-description
@@ -104,8 +110,22 @@ representation."
((_ str)
#'(nix-base32-string->bytevector str)))))
-;; A package.
+;; The specification of a search path.
+(define-record-type* <search-path-specification>
+ search-path-specification make-search-path-specification
+ search-path-specification?
+ (variable search-path-specification-variable)
+ (directories search-path-specification-directories)
+ (separator search-path-specification-separator (default ":")))
+
+(define (search-path-specification->sexp spec)
+ "Return an sexp representing SPEC, a <search-path-specification>. The sexp
+corresponds to the arguments expected by `set-path-environment-variable'."
+ (match spec
+ (($ <search-path-specification> variable directories separator)
+ `(,variable ,directories ,separator))))
+;; A package.
(define-record-type* <package>
package make-package
package?
@@ -128,14 +148,17 @@ representation."
(outputs package-outputs ; list of strings
(default '("out")))
- (search-paths package-search-paths ; list of (ENV-VAR (DIRS ...))
- (default '())) ; tuples; see
- ; `set-path-environment-variable'
- ; (aka. "setup-hook")
+
+ ; lists of
+ ; <search-path-specification>,
+ ; for native and cross
+ ; inputs
+ (native-search-paths package-native-search-paths (default '()))
+ (search-paths package-search-paths (default '()))
(synopsis package-synopsis) ; one-line description
(description package-description) ; one or two paragraphs
- (license package-license (default '()))
+ (license package-license)
(home-page package-home-page)
(platforms package-platforms (default '()))
(maintainers package-maintainers (default '()))
@@ -292,16 +315,22 @@ PACKAGE for SYSTEM."
(($ <package> name version source (= build-system-builder builder)
args inputs propagated-inputs native-inputs self-native-input?
outputs)
- ;; TODO: For `search-paths', add a builder prologue that calls
- ;; `set-path-environment-variable'.
- (let ((inputs (map expand-input
- (package-transitive-inputs package))))
+ (let* ((inputs (package-transitive-inputs package))
+ (input-drvs (map expand-input inputs))
+ (paths (delete-duplicates
+ (append-map (match-lambda
+ ((_ (? package? p) _ ...)
+ (package-native-search-paths
+ p))
+ (_ '()))
+ inputs))))
(apply builder
store (package-full-name package)
(and source
(package-source-derivation store source system))
- inputs
+ input-drvs
+ #:search-paths paths
#:outputs outputs #:system system
(args))))))))
diff --git a/guix/scripts/download.scm b/guix/scripts/download.scm
index 3dc227fdcd..3f989a3494 100644
--- a/guix/scripts/download.scm
+++ b/guix/scripts/download.scm
@@ -110,26 +110,27 @@ and the hash of its contents.\n"))
(alist-cons 'argument arg result))
%default-options))
- (let* ((opts (parse-options))
- (store (open-connection))
- (arg (assq-ref opts 'argument))
- (uri (or (string->uri arg)
- (leave (_ "guix-download: ~a: failed to parse URI~%")
- arg)))
- (path (case (uri-scheme uri)
- ((file)
- (add-to-store store (basename (uri-path uri))
- #f "sha256" (uri-path uri)))
- (else
- (fetch-and-store store
- (cut url-fetch arg <>
- #:mirrors %mirrors)
- (basename (uri-path uri))))))
- (hash (call-with-input-file
- (or path
- (leave (_ "guix-download: ~a: download failed~%")
- arg))
- (compose sha256 get-bytevector-all)))
- (fmt (assq-ref opts 'format)))
- (format #t "~a~%~a~%" path (fmt hash))
- #t))
+ (with-error-handling
+ (let* ((opts (parse-options))
+ (store (open-connection))
+ (arg (assq-ref opts 'argument))
+ (uri (or (string->uri arg)
+ (leave (_ "guix-download: ~a: failed to parse URI~%")
+ arg)))
+ (path (case (uri-scheme uri)
+ ((file)
+ (add-to-store store (basename (uri-path uri))
+ #f "sha256" (uri-path uri)))
+ (else
+ (fetch-and-store store
+ (cut url-fetch arg <>
+ #:mirrors %mirrors)
+ (basename (uri-path uri))))))
+ (hash (call-with-input-file
+ (or path
+ (leave (_ "guix-download: ~a: download failed~%")
+ arg))
+ (compose sha256 get-bytevector-all)))
+ (fmt (assq-ref opts 'format)))
+ (format #t "~a~%~a~%" path (fmt hash))
+ #t)))
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index ccca614d88..6de2f1beb6 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -39,6 +39,7 @@
#:use-module (gnu packages)
#:use-module ((gnu packages base) #:select (guile-final))
#:use-module ((gnu packages bootstrap) #:select (%bootstrap-guile))
+ #:use-module (guix gnu-maintenance)
#:export (guix-package))
(define %store
@@ -266,6 +267,47 @@ matching packages."
(assoc-ref (derivation-outputs drv) sub-drv))))
`(,name ,out))))))
+(define-syntax-rule (waiting exp fmt rest ...)
+ "Display the given message while EXP is being evaluated."
+ (let* ((message (format #f fmt rest ...))
+ (blank (make-string (string-length message) #\space)))
+ (display message (current-error-port))
+ (force-output (current-error-port))
+ (let ((result exp))
+ ;; Clear the line.
+ (display #\cr (current-error-port))
+ (display blank (current-error-port))
+ (display #\cr (current-error-port))
+ (force-output (current-error-port))
+ exp)))
+
+(define (check-package-freshness package)
+ "Check whether PACKAGE has a newer version available upstream, and report
+it."
+ ;; TODO: Automatically inject the upstream version when desired.
+
+ (catch #t
+ (lambda ()
+ (when (false-if-exception (gnu-package? package))
+ (let ((name (package-name package))
+ (full-name (package-full-name package)))
+ (match (waiting (latest-release name)
+ (_ "looking for the latest release of GNU ~a...") name)
+ ((latest-version . _)
+ (when (version>? latest-version full-name)
+ (format (current-error-port)
+ (_ "~a: note: using ~a \
+but ~a is available upstream~%")
+ (location->string (package-location package))
+ full-name latest-version)))
+ (_ #t)))))
+ (lambda (key . args)
+ ;; Silently ignore networking errors rather than preventing
+ ;; installation.
+ (case key
+ ((getaddrinfo-error ftp-error) #f)
+ (else (apply throw key args))))))
+
;;;
;;; Command-line options.
@@ -510,6 +552,44 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
,path
,(canonicalize-deps deps))))
+ (define (show-what-to-remove/install remove install dry-run?)
+ ;; Tell the user what's going to happen in high-level terms.
+ ;; TODO: Report upgrades more clearly.
+ (match remove
+ (((name version _ path _) ..1)
+ (let ((len (length name))
+ (remove (map (cut format #f " ~a-~a\t~a" <> <> <>)
+ name version path)))
+ (if dry-run?
+ (format (current-error-port)
+ (N_ "The following package would be removed:~% ~{~a~%~}~%"
+ "The following packages would be removed:~% ~{~a~%~}~%"
+ len)
+ remove)
+ (format (current-error-port)
+ (N_ "The following package will be removed:~% ~{~a~%~}~%"
+ "The following packages will be removed:~% ~{~a~%~}~%"
+ len)
+ remove))))
+ (_ #f))
+ (match install
+ (((name version _ path _) ..1)
+ (let ((len (length name))
+ (install (map (cut format #f " ~a-~a\t~a" <> <> <>)
+ name version path)))
+ (if dry-run?
+ (format (current-error-port)
+ (N_ "The following package would be installed:~% ~{~a~%~}~%"
+ "The following packages would be installed:~% ~{~a~%~}~%"
+ len)
+ install)
+ (format (current-error-port)
+ (N_ "The following package will be installed:~% ~{~a~%~}~%"
+ "The following packages will be installed:~% ~{~a~%~}~%"
+ len)
+ install))))
+ (_ #f)))
+
;; First roll back if asked to.
(if (and (assoc-ref opts 'roll-back?) (not dry-run?))
(begin
@@ -547,6 +627,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
((name version sub-drv
(? package? package)
(deps ...))
+ (check-package-freshness package)
(package-derivation (%store) package))
(_ #f))
install))
@@ -576,6 +657,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
package)
(_ #f))
opts))
+ (remove* (filter-map (cut assoc <> installed) remove))
(packages (append install*
(fold (lambda (package result)
(match package
@@ -587,6 +669,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(when (equal? profile %current-profile)
(ensure-default-profile))
+ (show-what-to-remove/install remove* install* dry-run?)
(show-what-to-build (%store) drv dry-run?)
(or dry-run?
@@ -669,8 +752,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(let ((opts (parse-options)))
(or (process-query opts)
- (parameterize ((%store (open-connection)))
- (with-error-handling
+ (with-error-handling
+ (parameterize ((%store (open-connection)))
(parameterize ((%guile-for-build
(package-derivation (%store)
(if (assoc-ref opts 'bootstrap?)
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index 942bf501c5..bc72dc4088 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -194,9 +194,9 @@ Download and deploy the latest version of Guix.\n"))
(leave (_ "~A: unexpected argument~%") arg))
%default-options))
- (let ((opts (parse-options))
- (store (open-connection)))
- (with-error-handling
+ (with-error-handling
+ (let ((opts (parse-options))
+ (store (open-connection)))
(let ((tarball (download-and-store store)))
(unless tarball
(leave (_ "failed to download up-to-date source, exiting\n")))
diff --git a/guix/snix.scm b/guix/snix.scm
index 3a470b9b8b..0c19fecb28 100644
--- a/guix/snix.scm
+++ b/guix/snix.scm
@@ -277,7 +277,7 @@ ATTRIBUTE is true, only that attribute is considered."
%nix-instantiate "--strict" "--eval-only" "--xml"
;; Pass a dummy `crossSystem' argument so that `buildInputs' and
- ;; `buildNativeInputs' are not coalesced.
+ ;; `nativeBuildInputs' are not coalesced.
;; XXX: This is hacky and has other problems.
;"--arg" "crossSystem" cross-system
@@ -423,12 +423,15 @@ location of DERIVATION."
(build-system gnu-build-system)
;; When doing a native Nixpkgs build, `buildInputs' is empty and
- ;; everything is in `buildNativeInputs'. So we can't distinguish
+ ;; everything is in `nativeBuildInputs'. So we can't distinguish
;; between both, here.
+ ;;
+ ;; Note that `nativeBuildInputs' was renamed from
+ ;; `buildNativeInputs' in Nixpkgs sometime around March 2013.
,@(maybe-inputs 'inputs
- (convert-inputs "buildNativeInputs"))
+ (convert-inputs "nativeBuildInputs"))
,@(maybe-inputs 'propagated-inputs
- (convert-inputs "propagatedBuildNativeInputs"))
+ (convert-inputs "propagatedNativeBuildInputs"))
(home-page ,(and=> (find-attribute-by-name "homepage" meta)
attribute-value))
diff --git a/guix/store.scm b/guix/store.scm
index 80b36daf93..4d078c5899 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -39,6 +39,9 @@
nix-server-socket
&nix-error nix-error?
+ &nix-connection-error nix-connection-error?
+ nix-connection-error-file
+ nix-connection-error-code
&nix-protocol-error nix-protocol-error?
nix-protocol-error-message
nix-protocol-error-status
@@ -231,8 +234,19 @@
(define write-store-path-list write-string-list)
(define read-store-path-list read-string-list)
-(define (write-contents file p)
- "Write the contents of FILE to output port P."
+(define (write-contents file p size)
+ "Write SIZE bytes from FILE to output port P."
+ (define (call-with-binary-input-file file proc)
+ ;; Open FILE as a binary file. This avoids scan-for-encoding, and thus
+ ;; avoids any initial buffering. Disable file name canonicalization to
+ ;; avoid stat'ing like crazy.
+ (with-fluids ((%file-port-name-canonicalization #f))
+ (let ((port (open-file file "rb")))
+ (catch #t (cut proc port)
+ (lambda args
+ (close-port port)
+ (apply throw args))))))
+
(define (dump in size)
(define buf-size 65536)
(define buf (make-bytevector buf-size))
@@ -247,13 +261,14 @@
(put-bytevector p buf 0 read)
(loop (- left read))))))))
- (let ((size (stat:size (lstat file))))
- (write-string "contents" p)
- (write-long-long size p)
- (call-with-input-file file
- (lambda (p)
- (dump p size)))
- (write-padding size p)))
+ (write-string "contents" p)
+ (write-long-long size p)
+ (call-with-binary-input-file file
+ ;; Use `sendfile' when available (Guile 2.0.8+).
+ (if (compile-time-value (defined? 'sendfile))
+ (cut sendfile p <> size 0)
+ (cut dump <> size)))
+ (write-padding size p))
(define (write-file f p)
(define %archive-version-1 "nix-archive-1")
@@ -271,7 +286,7 @@
(begin
(write-string "executable" p)
(write-string "" p)))
- (write-contents f p))
+ (write-contents f p (stat:size s)))
((directory)
(write-string "type" p)
(write-string "directory" p)
@@ -373,6 +388,11 @@
(define-condition-type &nix-error &error
nix-error?)
+(define-condition-type &nix-connection-error &nix-error
+ nix-connection-error?
+ (file nix-connection-error-file)
+ (errno nix-connection-error-code))
+
(define-condition-type &nix-protocol-error &nix-error
nix-protocol-error?
(message nix-protocol-error-message)
@@ -392,7 +412,15 @@ operate, should the disk become full. Return a server object."
;; Enlarge the receive buffer.
(setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024))
- (connect s a)
+ (catch 'system-error
+ (cut connect s a)
+ (lambda args
+ ;; Translate the error to something user-friendly.
+ (let ((errno (system-error-errno args)))
+ (raise (condition (&nix-connection-error
+ (file file)
+ (errno errno)))))))
+
(write-int %worker-magic-1 s)
(let ((r (read-int s)))
(and (eqv? r %worker-magic-2)
diff --git a/guix/ui.scm b/guix/ui.scm
index 03d881a428..94f0825a0a 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -111,6 +111,10 @@ General help using GNU software: <http://www.gnu.org/gethelp/>"))
(leave (_ "~a:~a:~a: error: package `~a' has an invalid input: ~s~%")
file line column
(package-full-name package) input)))
+ ((nix-connection-error? c)
+ (leave (_ "error: failed to connect to `~a': ~a~%")
+ (nix-connection-error-file c)
+ (strerror (nix-connection-error-code c))))
((nix-protocol-error? c)
;; FIXME: Server-provided error messages aren't i18n'd.
(leave (_ "error: build failed: ~a~%")
diff --git a/hydra.scm b/hydra.scm
index 8e3be16b08..8cbfecf34c 100644
--- a/hydra.scm
+++ b/hydra.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,6 +21,21 @@
;;; tool.
;;;
+;; Attempt to use our very own Guix modules.
+(eval-when (compile load eval)
+
+ ;; Ignore any available .go, and force recompilation. This is because our
+ ;; checkout in the store has mtime set to the epoch, and thus .go files look
+ ;; newer, even though they may not correspond.
+ (set! %fresh-auto-compile #t)
+
+ (and=> (assoc-ref (current-source-location) 'filename)
+ (lambda (file)
+ (let ((dir (dirname file)))
+ (format (current-error-port) "prepending ~s to the load path~%"
+ dir)
+ (set! %load-path (cons dir %load-path))))))
+
(use-modules (guix store)
(guix packages)
((guix utils) #:select (%current-system))
diff --git a/release.nix b/release.nix
index 5aab8600ab..86560ea15a 100644
--- a/release.nix
+++ b/release.nix
@@ -42,12 +42,23 @@ let
if builtins.isAttrs drv
then pkgs.lib.overrideDerivation (pythonKludge drv) (args: {
__noChroot = true;
- buildNativeInputs = map unchroot args.buildNativeInputs;
- propagatedBuildNativeInputs =
- map unchroot args.propagatedBuildNativeInputs;
+ nativeBuildInputs = map unchroot args.nativeBuildInputs;
+ propagatedNativeBuildInputs =
+ map unchroot args.propagatedNativeBuildInputs;
})
else drv;
+ # Return a Nixpkgs with some derivations "unchrooted".
+ unchrootedNixpkgs = system:
+ import nixpkgs {
+ # XXX: Hack to make sure these ones also get "unchrooted".
+ config.packageOverrides = pkgs: {
+ zlib = unchroot pkgs.zlib;
+ libunistring = unchroot pkgs.libunistring;
+ };
+ inherit system;
+ };
+
# The Guile used to bootstrap the whole thing. It's normally
# downloaded by the build system, but here we download it via a
# fixed-output derivation and stuff it into the build tree.
@@ -67,7 +78,7 @@ let
jobs = {
tarball =
unchroot
- (let pkgs = import nixpkgs {}; in
+ (let pkgs = unchrootedNixpkgs builtins.currentSystem; in
pkgs.releaseTools.sourceTarball {
name = "guix-tarball";
src = <guix>;
@@ -82,7 +93,7 @@ let
in
[ git_light ] ++
(with pkgs; [ guile sqlite bzip2 libgcrypt ]);
- buildNativeInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
+ nativeBuildInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
preAutoconf = ''git config submodule.nix.url "${<nix>}"'';
configureFlags =
[ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
@@ -94,11 +105,11 @@ let
{ system ? builtins.currentSystem }:
unchroot
- (let pkgs = import nixpkgs { inherit system; }; in
+ (let pkgs = unchrootedNixpkgs system; in
pkgs.releaseTools.nixBuild {
name = "guix";
buildInputs = with pkgs; [ guile sqlite bzip2 libgcrypt ];
- buildNativeInputs = [ pkgs.pkgconfig ];
+ nativeBuildInputs = [ pkgs.pkgconfig ];
src = jobs.tarball;
configureFlags =
[ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
@@ -125,7 +136,7 @@ let
unchroot
(let
- pkgs = import nixpkgs { inherit system; };
+ pkgs = unchrootedNixpkgs system;
build = jobs.build { inherit system; };
in
pkgs.lib.overrideDerivation build ({ configureFlags, ... }: {
@@ -144,7 +155,7 @@ let
{ system ? builtins.currentSystem }:
let
- pkgs = import nixpkgs { inherit system; };
+ pkgs = unchrootedNixpkgs system;
guix = jobs.build { inherit system; };
in
# XXX: We have no way to tell the Nix code to swallow the .drv
diff --git a/tests/packages.scm b/tests/packages.scm
index f441532d22..2d16f8a03f 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -22,6 +22,7 @@
#:use-module (guix utils)
#:use-module (guix derivations)
#:use-module (guix packages)
+ #:use-module (guix build-system)
#:use-module (guix build-system trivial)
#:use-module (guix build-system gnu)
#:use-module (gnu packages)
@@ -49,7 +50,7 @@
(package (name name*) (version "0") (source #f)
(build-system gnu-build-system)
(synopsis #f) (description #f)
- (home-page #f)
+ (home-page #f) (license #f)
extra-fields ...))
(test-assert "package-transitive-inputs"
@@ -138,6 +139,41 @@
(let ((p (pk 'drv d (derivation-path->output-path d))))
(eq? 'hello (call-with-input-file p read))))))
+(test-assert "search paths"
+ (let* ((p (make-prompt-tag "return-search-paths"))
+ (s (build-system
+ (name "raw")
+ (description "Raw build system with direct store access")
+ (build (lambda* (store name source inputs
+ #:key outputs system search-paths)
+ search-paths))))
+ (x (list (search-path-specification
+ (variable "GUILE_LOAD_PATH")
+ (directories '("share/guile/site/2.0")))
+ (search-path-specification
+ (variable "GUILE_LOAD_COMPILED_PATH")
+ (directories '("share/guile/site/2.0")))))
+ (a (package (inherit (dummy-package "guile"))
+ (build-system s)
+ (native-search-paths x)))
+ (b (package (inherit (dummy-package "guile-foo"))
+ (build-system s)
+ (inputs `(("guile" ,a)))))
+ (c (package (inherit (dummy-package "guile-bar"))
+ (build-system s)
+ (inputs `(("guile" ,a)
+ ("guile-foo" ,b))))))
+ (let-syntax ((collect (syntax-rules ()
+ ((_ body ...)
+ (call-with-prompt p
+ (lambda ()
+ body ...)
+ (lambda (k search-paths)
+ search-paths))))))
+ (and (null? (collect (package-derivation %store a)))
+ (equal? x (collect (package-derivation %store b)))
+ (equal? x (collect (package-derivation %store c)))))))
+
(unless (false-if-exception (getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV))
(test-skip 1))
(test-assert "GNU Make, bootstrap"