Merge branch 'master' into core-updates
Conflicts: Makefile.am guix/scripts/gc.scm guix/scripts/package.scm guix/ui.scm tests/guix-package.sh
This commit is contained in:
		
						commit
						81eec00cb2
					
				
					 22 changed files with 655 additions and 57 deletions
				
			
		| 
						 | 
					@ -39,12 +39,14 @@ MODULES =					\
 | 
				
			||||||
  guix/licenses.scm				\
 | 
					  guix/licenses.scm				\
 | 
				
			||||||
  guix/build-system.scm				\
 | 
					  guix/build-system.scm				\
 | 
				
			||||||
  guix/build-system/gnu.scm			\
 | 
					  guix/build-system/gnu.scm			\
 | 
				
			||||||
 | 
					  guix/build-system/perl.scm			\
 | 
				
			||||||
  guix/build-system/trivial.scm			\
 | 
					  guix/build-system/trivial.scm			\
 | 
				
			||||||
  guix/ftp-client.scm				\
 | 
					  guix/ftp-client.scm				\
 | 
				
			||||||
  guix/store.scm				\
 | 
					  guix/store.scm				\
 | 
				
			||||||
  guix/ui.scm					\
 | 
					  guix/ui.scm					\
 | 
				
			||||||
  guix/build/download.scm			\
 | 
					  guix/build/download.scm			\
 | 
				
			||||||
  guix/build/gnu-build-system.scm		\
 | 
					  guix/build/gnu-build-system.scm		\
 | 
				
			||||||
 | 
					  guix/build/perl-build-system.scm		\
 | 
				
			||||||
  guix/build/utils.scm				\
 | 
					  guix/build/utils.scm				\
 | 
				
			||||||
  guix/build/union.scm				\
 | 
					  guix/build/union.scm				\
 | 
				
			||||||
  guix/packages.scm				\
 | 
					  guix/packages.scm				\
 | 
				
			||||||
| 
						 | 
					@ -99,6 +101,7 @@ MODULES =					\
 | 
				
			||||||
  gnu/packages/ld-wrapper.scm			\
 | 
					  gnu/packages/ld-wrapper.scm			\
 | 
				
			||||||
  gnu/packages/less.scm				\
 | 
					  gnu/packages/less.scm				\
 | 
				
			||||||
  gnu/packages/libapr.scm 			\
 | 
					  gnu/packages/libapr.scm 			\
 | 
				
			||||||
 | 
					  gnu/packages/libdaemon.scm			\
 | 
				
			||||||
  gnu/packages/libevent.scm			\
 | 
					  gnu/packages/libevent.scm			\
 | 
				
			||||||
  gnu/packages/libffi.scm			\
 | 
					  gnu/packages/libffi.scm			\
 | 
				
			||||||
  gnu/packages/libidn.scm			\
 | 
					  gnu/packages/libidn.scm			\
 | 
				
			||||||
| 
						 | 
					@ -158,6 +161,7 @@ MODULES =					\
 | 
				
			||||||
  gnu/packages/tmux.scm 			\
 | 
					  gnu/packages/tmux.scm 			\
 | 
				
			||||||
  gnu/packages/tor.scm				\
 | 
					  gnu/packages/tor.scm				\
 | 
				
			||||||
  gnu/packages/vim.scm 				\
 | 
					  gnu/packages/vim.scm 				\
 | 
				
			||||||
 | 
					  gnu/packages/vpn.scm				\
 | 
				
			||||||
  gnu/packages/wdiff.scm			\
 | 
					  gnu/packages/wdiff.scm			\
 | 
				
			||||||
  gnu/packages/wget.scm				\
 | 
					  gnu/packages/wget.scm				\
 | 
				
			||||||
  gnu/packages/which.scm			\
 | 
					  gnu/packages/which.scm			\
 | 
				
			||||||
| 
						 | 
					@ -216,7 +220,8 @@ dist_patch_DATA =						\
 | 
				
			||||||
  gnu/packages/patches/shishi-gets-undeclared.patch		\
 | 
					  gnu/packages/patches/shishi-gets-undeclared.patch		\
 | 
				
			||||||
  gnu/packages/patches/tar-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/teckit-cstdio.patch			\
 | 
				
			||||||
 | 
					  gnu/packages/patches/vpnc-script.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bootstrapdir = $(guilemoduledir)/gnu/packages/bootstrap
 | 
					bootstrapdir = $(guilemoduledir)/gnu/packages/bootstrap
 | 
				
			||||||
bootstrap_x86_64_linuxdir = $(bootstrapdir)/x86_64-linux
 | 
					bootstrap_x86_64_linuxdir = $(bootstrapdir)/x86_64-linux
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -514,6 +514,19 @@ 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
 | 
					in the profile; removing MPC also removes MPFR and GMP---unless they had
 | 
				
			||||||
also been explicitly installed independently.
 | 
					also been explicitly installed independently.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@item --install-from-expression=@var{exp}
 | 
				
			||||||
 | 
					@itemx -e @var{exp}
 | 
				
			||||||
 | 
					Install the package @var{exp} evaluates to.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@var{exp} must be a Scheme expression that evaluates to a
 | 
				
			||||||
 | 
					@code{<package>} object.  This option is notably useful to disambiguate
 | 
				
			||||||
 | 
					between same-named variants of a package, with expressions such as
 | 
				
			||||||
 | 
					@code{(@@ (gnu packages base) guile-final)}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that this option installs the first output of the specified
 | 
				
			||||||
 | 
					package, which may be insufficient when needing a specific output of a
 | 
				
			||||||
 | 
					multiple-output package.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@item --remove=@var{package}
 | 
					@item --remove=@var{package}
 | 
				
			||||||
@itemx -r @var{package}
 | 
					@itemx -r @var{package}
 | 
				
			||||||
Remove @var{package}.
 | 
					Remove @var{package}.
 | 
				
			||||||
| 
						 | 
					@ -657,6 +670,18 @@ store---i.e., files and directories no longer reachable from any root.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@item --list-live
 | 
					@item --list-live
 | 
				
			||||||
Show the list of live store files and directories.
 | 
					Show the list of live store files and directories.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In addition, the references among existing store files can be queried:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@table @code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@item --references
 | 
				
			||||||
 | 
					@itemx --referrers
 | 
				
			||||||
 | 
					List the references (respectively, the referrers) of store files given
 | 
				
			||||||
 | 
					as arguments.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@end table
 | 
					@end table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,15 +28,14 @@
 | 
				
			||||||
(define-public global                             ; a global variable
 | 
					(define-public global                             ; a global variable
 | 
				
			||||||
  (package
 | 
					  (package
 | 
				
			||||||
    (name "global")
 | 
					    (name "global")
 | 
				
			||||||
    (version "6.2.7")
 | 
					    (version "6.2.8")
 | 
				
			||||||
    (source
 | 
					    (source (origin
 | 
				
			||||||
     (origin
 | 
					 | 
				
			||||||
             (method url-fetch)
 | 
					             (method url-fetch)
 | 
				
			||||||
             (uri (string-append "mirror://gnu/global/global-"
 | 
					             (uri (string-append "mirror://gnu/global/global-"
 | 
				
			||||||
                                 version ".tar.gz"))
 | 
					                                 version ".tar.gz"))
 | 
				
			||||||
             (sha256
 | 
					             (sha256
 | 
				
			||||||
              (base32
 | 
					              (base32
 | 
				
			||||||
        "1dr250kz65wqpbms4lhz857mzmvmpmiaxgyqxvxkb4b0s840i14i"))))
 | 
					               "1l6g51kff5010gwmw08jbks1mssgddz7wggjvfsky3g000jkpvf1"))))
 | 
				
			||||||
    (build-system gnu-build-system)
 | 
					    (build-system gnu-build-system)
 | 
				
			||||||
    (inputs `(("ncurses" ,ncurses)
 | 
					    (inputs `(("ncurses" ,ncurses)
 | 
				
			||||||
              ("libtool" ,libtool)))
 | 
					              ("libtool" ,libtool)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										61
									
								
								gnu/packages/libdaemon.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								gnu/packages/libdaemon.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					;;; 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 libdaemon)
 | 
				
			||||||
 | 
					  #:use-module (guix licenses)
 | 
				
			||||||
 | 
					  #:use-module (guix packages)
 | 
				
			||||||
 | 
					  #:use-module (guix download)
 | 
				
			||||||
 | 
					  #:use-module (guix build-system gnu))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-public libdaemon
 | 
				
			||||||
 | 
					  (package
 | 
				
			||||||
 | 
					    (name "libdaemon")
 | 
				
			||||||
 | 
					    (version "0.14")
 | 
				
			||||||
 | 
					    (source (origin
 | 
				
			||||||
 | 
					             (method url-fetch)
 | 
				
			||||||
 | 
					             (uri (string-append
 | 
				
			||||||
 | 
					                   "http://0pointer.de/lennart/projects/libdaemon/libdaemon-"
 | 
				
			||||||
 | 
					                   version
 | 
				
			||||||
 | 
					                   ".tar.gz"))
 | 
				
			||||||
 | 
					             (sha256
 | 
				
			||||||
 | 
					              (base32
 | 
				
			||||||
 | 
					               "0d5qlq5ab95wh1xc87rqrh1vx6i8lddka1w3f1zcqvcqdxgyn8zx"))))
 | 
				
			||||||
 | 
					    (build-system gnu-build-system)
 | 
				
			||||||
 | 
					    (home-page "http://0pointer.de/lennart/projects/libdaemon/")
 | 
				
			||||||
 | 
					    (synopsis "Lightweight C library that eases the writing of UNIX daemons")
 | 
				
			||||||
 | 
					    (description
 | 
				
			||||||
 | 
					     "libdaemon is a lightweight C library that eases the writing of UNIX
 | 
				
			||||||
 | 
					daemons. It consists of the following parts:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  • A wrapper around fork() which does the correct daemonization procedure of
 | 
				
			||||||
 | 
					    a process
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  • A wrapper around syslog() for simpler and compatible log output to Syslog
 | 
				
			||||||
 | 
					    or STDERR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  • An API for writing PID files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  • An API for serializing UNIX signals into a pipe for usage with select() or
 | 
				
			||||||
 | 
					    poll()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  • An API for running subprocesses with STDOUT and STDERR redirected to
 | 
				
			||||||
 | 
					    syslog.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APIs like these are used in most daemon software available. It is not that
 | 
				
			||||||
 | 
					simple to get it done right and code duplication is not a goal.")
 | 
				
			||||||
 | 
					    (license lgpl2.1+)))
 | 
				
			||||||
| 
						 | 
					@ -27,15 +27,15 @@
 | 
				
			||||||
(define-public libpng
 | 
					(define-public libpng
 | 
				
			||||||
  (package
 | 
					  (package
 | 
				
			||||||
   (name "libpng")
 | 
					   (name "libpng")
 | 
				
			||||||
   (version "1.5.13")
 | 
					   (version "1.5.14")
 | 
				
			||||||
   (source (origin
 | 
					   (source (origin
 | 
				
			||||||
            (method url-fetch)
 | 
					            (method url-fetch)
 | 
				
			||||||
            (uri (string-append
 | 
					            (uri (string-append
 | 
				
			||||||
                   "http://downloads.sourceforge.net/project/libpng/libpng15/"
 | 
					                   "http://downloads.sourceforge.net/project/libpng/libpng15/"
 | 
				
			||||||
                   version "/libpng-"
 | 
					                   version "/libpng-"
 | 
				
			||||||
                   version ".tar.gz"))
 | 
					                   version ".tar.xz"))
 | 
				
			||||||
            (sha256 (base32
 | 
					            (sha256 (base32
 | 
				
			||||||
                     "0dbh332qjhm3pa8m4ac73rk7dbbmigbqd3ch084m24ggg9qq4k0d"))))
 | 
					                     "0m3vz3gig7s63zanq5b1dgb5ph12qm0cylw4g4fbxlsq3f74hn8l"))))
 | 
				
			||||||
   (build-system gnu-build-system)
 | 
					   (build-system gnu-build-system)
 | 
				
			||||||
   (inputs `(("zlib" ,zlib)))
 | 
					   (inputs `(("zlib" ,zlib)))
 | 
				
			||||||
   (synopsis "Libpng, a library for handling PNG files")
 | 
					   (synopsis "Libpng, a library for handling PNG files")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								gnu/packages/patches/vpnc-script.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								gnu/packages/patches/vpnc-script.patch
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					This patch adapts the vpnc script to newer kernel versions, see
 | 
				
			||||||
 | 
					   https://lkml.org/lkml/2011/3/24/645
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff -u a/vpnc-script.in b/vpnc-script.in
 | 
				
			||||||
 | 
					--- a/vpnc-script.in	2013-03-03 13:55:16.000000000 +0100
 | 
				
			||||||
 | 
					+++ b/vpnc-script.in	2013-03-03 13:56:11.000000000 +0100
 | 
				
			||||||
 | 
					@@ -116,7 +116,7 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 if [ -n "$IPROUTE" ]; then
 | 
				
			||||||
 | 
					 	fix_ip_get_output () {
 | 
				
			||||||
 | 
					-		sed 's/cache//;s/metric \?[0-9]\+ [0-9]\+//g;s/hoplimit [0-9]\+//g'
 | 
				
			||||||
 | 
					+		sed 's/cache//;s/metric \?[0-9]\+ [0-9]\+//g;s/hoplimit [0-9]\+//g;s/ipid 0x....//g'
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	set_vpngateway_route() {
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@
 | 
				
			||||||
    (version "4.0.3")
 | 
					    (version "4.0.3")
 | 
				
			||||||
    (source (origin
 | 
					    (source (origin
 | 
				
			||||||
             (method url-fetch)
 | 
					             (method url-fetch)
 | 
				
			||||||
             (uri (string-append "http://ftp.gnu.org/gnu/screen/screen-"
 | 
					             (uri (string-append "mirror://gnu/screen/screen-"
 | 
				
			||||||
                                 version ".tar.gz"))
 | 
					                                 version ".tar.gz"))
 | 
				
			||||||
             (sha256
 | 
					             (sha256
 | 
				
			||||||
              (base32 "0xvckv1ia5pjxk7fs4za6gz2njwmfd54sc464n8ab13096qxbw3q"))))
 | 
					              (base32 "0xvckv1ia5pjxk7fs4za6gz2njwmfd54sc464n8ab13096qxbw3q"))))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										66
									
								
								gnu/packages/vpn.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								gnu/packages/vpn.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,66 @@
 | 
				
			||||||
 | 
					;;; GNU Guix --- Functional package management for GNU
 | 
				
			||||||
 | 
					;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; This file is part of GNU Guix.
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; GNU Guix is free software; you can redistribute it and/or modify it
 | 
				
			||||||
 | 
					;;; under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					;;; the Free Software Foundation; either version 3 of the License, or (at
 | 
				
			||||||
 | 
					;;; your option) any later version.
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; GNU Guix is distributed in the hope that it will be useful, but
 | 
				
			||||||
 | 
					;;; WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					;;; GNU General Public License for more details.
 | 
				
			||||||
 | 
					;;;
 | 
				
			||||||
 | 
					;;; You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-module (gnu packages vpn)
 | 
				
			||||||
 | 
					  #: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)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages gnupg)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages perl))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-public vpnc
 | 
				
			||||||
 | 
					  (package
 | 
				
			||||||
 | 
					   (name "vpnc")
 | 
				
			||||||
 | 
					   (version "0.5.3")
 | 
				
			||||||
 | 
					   (source (origin
 | 
				
			||||||
 | 
					            (method url-fetch)
 | 
				
			||||||
 | 
					            (uri (string-append "http://www.unix-ag.uni-kl.de/~massar/vpnc/vpnc-"
 | 
				
			||||||
 | 
					                                version ".tar.gz"))
 | 
				
			||||||
 | 
					            (sha256 (base32
 | 
				
			||||||
 | 
					                     "1128860lis89g1s21hqxvap2nq426c9j4bvgghncc1zj0ays7kj6"))))
 | 
				
			||||||
 | 
					   (build-system gnu-build-system)
 | 
				
			||||||
 | 
					   (inputs `(("libgcrypt" ,libgcrypt)
 | 
				
			||||||
 | 
					             ("perl" ,perl)
 | 
				
			||||||
 | 
					             ("patch/script"
 | 
				
			||||||
 | 
					                 ,(search-patch "vpnc-script.patch"))))
 | 
				
			||||||
 | 
					   (arguments
 | 
				
			||||||
 | 
					    `(#:tests? #f ; there is no check target
 | 
				
			||||||
 | 
					      #:patches (list (assoc-ref %build-inputs
 | 
				
			||||||
 | 
					                                 "patch/script"))
 | 
				
			||||||
 | 
					      #:phases
 | 
				
			||||||
 | 
					      (alist-replace
 | 
				
			||||||
 | 
					       'configure
 | 
				
			||||||
 | 
					       (lambda* (#:key outputs #:allow-other-keys)
 | 
				
			||||||
 | 
					         (let ((out (assoc-ref outputs "out")))
 | 
				
			||||||
 | 
					           (substitute* "Makefile"
 | 
				
			||||||
 | 
					             (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
 | 
				
			||||||
 | 
					           (substitute* "Makefile"
 | 
				
			||||||
 | 
					             (("ETCDIR=/etc/vpnc") (string-append "ETCDIR=" out "/etc/vpnc")))))
 | 
				
			||||||
 | 
					       %standard-phases)))
 | 
				
			||||||
 | 
					   (synopsis "vpnc, a client for cisco vpn concentrators")
 | 
				
			||||||
 | 
					   (description
 | 
				
			||||||
 | 
					    "vpnc is a VPN client compatible with Cisco's EasyVPN equipment.
 | 
				
			||||||
 | 
					It supports IPSec (ESP) with Mode Configuration and Xauth. It supports only
 | 
				
			||||||
 | 
					shared-secret IPSec authentication with Xauth, AES (256, 192, 128), 3DES,
 | 
				
			||||||
 | 
					1DES, MD5, SHA1, DH1/2/5 and IP tunneling. It runs entirely in userspace.
 | 
				
			||||||
 | 
					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/")))
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,8 @@
 | 
				
			||||||
                #:renamer (symbol-prefix-proc 'license:))
 | 
					                #:renamer (symbol-prefix-proc 'license:))
 | 
				
			||||||
  #:use-module (guix packages)
 | 
					  #:use-module (guix packages)
 | 
				
			||||||
  #:use-module (guix download)
 | 
					  #:use-module (guix download)
 | 
				
			||||||
  #:use-module (guix build-system gnu))
 | 
					  #:use-module (guix build-system gnu)
 | 
				
			||||||
 | 
					  #:use-module (guix build-system perl))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define-public expat
 | 
					(define-public expat
 | 
				
			||||||
  (package
 | 
					  (package
 | 
				
			||||||
| 
						 | 
					@ -90,3 +91,34 @@ things the parser might find in the XML document (like start tags).")
 | 
				
			||||||
     "Libxslt is an XSLT C library developed for the GNOME project. It is
 | 
					     "Libxslt is an XSLT C library developed for the GNOME project. It is
 | 
				
			||||||
based on libxml for XML parsing, tree manipulation and XPath support.")
 | 
					based on libxml for XML parsing, tree manipulation and XPath support.")
 | 
				
			||||||
    (license license:x11)))
 | 
					    (license license:x11)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-public perl-xml-parser
 | 
				
			||||||
 | 
					  (package
 | 
				
			||||||
 | 
					    (name "perl-xml-parser")
 | 
				
			||||||
 | 
					    (version "2.41")
 | 
				
			||||||
 | 
					    (source (origin
 | 
				
			||||||
 | 
					             (method url-fetch)
 | 
				
			||||||
 | 
					             (uri (string-append
 | 
				
			||||||
 | 
					                   "mirror://cpan/authors/id/M/MS/MSERGEANT/XML-Parser-"
 | 
				
			||||||
 | 
					                   version ".tar.gz"))
 | 
				
			||||||
 | 
					             (sha256
 | 
				
			||||||
 | 
					              (base32
 | 
				
			||||||
 | 
					               "1sadi505g5qmxr36lgcbrcrqh3a5gcdg32b405gnr8k54b6rg0dl"))))
 | 
				
			||||||
 | 
					    (build-system perl-build-system)
 | 
				
			||||||
 | 
					    (arguments `(#:make-maker-flags
 | 
				
			||||||
 | 
					                 (let ((expat (assoc-ref %build-inputs "expat")))
 | 
				
			||||||
 | 
					                   (list (string-append "EXPATLIBPATH=" expat "/lib")
 | 
				
			||||||
 | 
					                         (string-append "EXPATINCPATH=" expat "/include")))))
 | 
				
			||||||
 | 
					    (inputs `(("expat" ,expat)))
 | 
				
			||||||
 | 
					    (license (package-license perl))
 | 
				
			||||||
 | 
					    (synopsis "Perl bindings to the Expat XML parsing library")
 | 
				
			||||||
 | 
					    (description
 | 
				
			||||||
 | 
					     "This module provides ways to parse XML documents.  It is built on top of
 | 
				
			||||||
 | 
					XML::Parser::Expat, which is a lower level interface to James Clark's expat
 | 
				
			||||||
 | 
					library.  Each call to one of the parsing methods creates a new instance of
 | 
				
			||||||
 | 
					XML::Parser::Expat which is then used to parse the document.  Expat options
 | 
				
			||||||
 | 
					may be provided when the XML::Parser object is created.  These options are
 | 
				
			||||||
 | 
					then passed on to the Expat object on each parse call.  They can also be given
 | 
				
			||||||
 | 
					as extra arguments to the parse methods, in which case they override options
 | 
				
			||||||
 | 
					given at XML::Parser creation time.")
 | 
				
			||||||
 | 
					    (home-page "http://search.cpan.org/~toddr/XML-Parser-2.41/Parser.pm")))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,13 +21,13 @@
 | 
				
			||||||
  #:use-module (guix utils)
 | 
					  #:use-module (guix utils)
 | 
				
			||||||
  #:use-module (guix derivations)
 | 
					  #:use-module (guix derivations)
 | 
				
			||||||
  #:use-module (guix build-system)
 | 
					  #:use-module (guix build-system)
 | 
				
			||||||
  #:use-module (guix build-system gnu)
 | 
					 | 
				
			||||||
  #:use-module (guix packages)
 | 
					  #:use-module (guix packages)
 | 
				
			||||||
  #:use-module (srfi srfi-1)
 | 
					  #:use-module (srfi srfi-1)
 | 
				
			||||||
  #:use-module (srfi srfi-39)
 | 
					  #:use-module (srfi srfi-39)
 | 
				
			||||||
  #:use-module (ice-9 match)
 | 
					  #:use-module (ice-9 match)
 | 
				
			||||||
  #:export (gnu-build
 | 
					  #:export (gnu-build
 | 
				
			||||||
            gnu-build-system
 | 
					            gnu-build-system
 | 
				
			||||||
 | 
					            standard-inputs
 | 
				
			||||||
            package-with-explicit-inputs
 | 
					            package-with-explicit-inputs
 | 
				
			||||||
            package-with-extra-configure-variable
 | 
					            package-with-extra-configure-variable
 | 
				
			||||||
            static-libgcc-package
 | 
					            static-libgcc-package
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										103
									
								
								guix/build-system/perl.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								guix/build-system/perl.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,103 @@
 | 
				
			||||||
 | 
					;;; 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 (guix build-system perl)
 | 
				
			||||||
 | 
					  #: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 (perl-build
 | 
				
			||||||
 | 
					            perl-build-system))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; Commentary:
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; Standard build procedure for Perl packages using the "makefile
 | 
				
			||||||
 | 
					;; maker"---i.e., "perl Makefile.PL".  This is implemented as an extension of
 | 
				
			||||||
 | 
					;; `gnu-build-system'.
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; Code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define* (perl-build store name source inputs
 | 
				
			||||||
 | 
					                     #:key
 | 
				
			||||||
 | 
					                     (perl (@ (gnu packages perl) perl))
 | 
				
			||||||
 | 
					                     (tests? #t)
 | 
				
			||||||
 | 
					                     (make-maker-flags ''())
 | 
				
			||||||
 | 
					                     (phases '(@ (guix build perl-build-system)
 | 
				
			||||||
 | 
					                                 %standard-phases))
 | 
				
			||||||
 | 
					                     (outputs '("out"))
 | 
				
			||||||
 | 
					                     (system (%current-system))
 | 
				
			||||||
 | 
					                     (guile #f)
 | 
				
			||||||
 | 
					                     (imported-modules '((guix build perl-build-system)
 | 
				
			||||||
 | 
					                                         (guix build gnu-build-system)
 | 
				
			||||||
 | 
					                                         (guix build utils)))
 | 
				
			||||||
 | 
					                     (modules '((guix build perl-build-system)
 | 
				
			||||||
 | 
					                                (guix build gnu-build-system)
 | 
				
			||||||
 | 
					                                (guix build utils))))
 | 
				
			||||||
 | 
					  "Build SOURCE using PERL, and with INPUTS.  This assumes that SOURCE
 | 
				
			||||||
 | 
					provides a `Makefile.PL' file as its build system."
 | 
				
			||||||
 | 
					  (define builder
 | 
				
			||||||
 | 
					    `(begin
 | 
				
			||||||
 | 
					       (use-modules ,@modules)
 | 
				
			||||||
 | 
					       (perl-build #:name ,name
 | 
				
			||||||
 | 
					                   #:source ,(if (and source (derivation-path? source))
 | 
				
			||||||
 | 
					                                 (derivation-path->output-path source)
 | 
				
			||||||
 | 
					                                 source)
 | 
				
			||||||
 | 
					                   #:make-maker-flags ,make-maker-flags
 | 
				
			||||||
 | 
					                   #:system ,system
 | 
				
			||||||
 | 
					                   #:test-target "test"
 | 
				
			||||||
 | 
					                   #:tests? ,tests?
 | 
				
			||||||
 | 
					                   #:outputs %outputs
 | 
				
			||||||
 | 
					                   #:inputs %build-inputs)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (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 ((perl (package-derivation store perl system)))
 | 
				
			||||||
 | 
					    (build-expression->derivation store name system
 | 
				
			||||||
 | 
					                                  builder
 | 
				
			||||||
 | 
					                                  `(,@(if source
 | 
				
			||||||
 | 
					                                          `(("source" ,source))
 | 
				
			||||||
 | 
					                                          '())
 | 
				
			||||||
 | 
					                                    ("perl" ,perl)
 | 
				
			||||||
 | 
					                                    ,@inputs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                    ;; Keep the standard inputs of
 | 
				
			||||||
 | 
					                                    ;; `gnu-build-system'.
 | 
				
			||||||
 | 
					                                    ,@(standard-inputs system))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                  #:modules imported-modules
 | 
				
			||||||
 | 
					                                  #:outputs outputs
 | 
				
			||||||
 | 
					                                  #:guile-for-build guile-for-build)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define perl-build-system
 | 
				
			||||||
 | 
					  (build-system (name 'perl)
 | 
				
			||||||
 | 
					                (description "The standard Perl build system")
 | 
				
			||||||
 | 
					                (build perl-build)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;; perl.scm ends here
 | 
				
			||||||
							
								
								
									
										61
									
								
								guix/build/perl-build-system.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								guix/build/perl-build-system.scm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					;;; 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 (guix build perl-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
 | 
				
			||||||
 | 
					            perl-build))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; Commentary:
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; Builder-side code of the standard Perl package build procedure.
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; Code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define* (configure #:key outputs (make-maker-flags '())
 | 
				
			||||||
 | 
					                    #:allow-other-keys)
 | 
				
			||||||
 | 
					  "Configure the given Perl package."
 | 
				
			||||||
 | 
					  (let ((out (assoc-ref outputs "out")))
 | 
				
			||||||
 | 
					    (if (file-exists? "Makefile.PL")
 | 
				
			||||||
 | 
					        (let ((args `("Makefile.PL" ,(string-append "PREFIX=" out)
 | 
				
			||||||
 | 
					                      "INSTALLDIRS=site" ,@make-maker-flags)))
 | 
				
			||||||
 | 
					          (format #t "running `perl' with arguments ~s~%" args)
 | 
				
			||||||
 | 
					          (zero? (apply system* "perl" args)))
 | 
				
			||||||
 | 
					        (error "no Makefile.PL found"))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define %standard-phases
 | 
				
			||||||
 | 
					  ;; Everything is as with the GNU Build System except for the `configure'
 | 
				
			||||||
 | 
					  ;; phase.
 | 
				
			||||||
 | 
					  (alist-replace 'configure configure
 | 
				
			||||||
 | 
					                 gnu:%standard-phases))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(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))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;; perl-build-system.scm ends here
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
;;; GNU Guix --- Functional package management for GNU
 | 
					;;; GNU Guix --- Functional package management for GNU
 | 
				
			||||||
;;; Copyright © 2012, 2013 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.
 | 
					;;; This file is part of GNU Guix.
 | 
				
			||||||
;;;
 | 
					;;;
 | 
				
			||||||
| 
						 | 
					@ -98,7 +99,51 @@
 | 
				
			||||||
       "ftp://gd.tuwien.ac.at/pub/infosys/servers/http/apache/dist/"
 | 
					       "ftp://gd.tuwien.ac.at/pub/infosys/servers/http/apache/dist/"
 | 
				
			||||||
       "http://apache.belnet.be/"
 | 
					       "http://apache.belnet.be/"
 | 
				
			||||||
       "http://mirrors.ircam.fr/pub/apache/"
 | 
					       "http://mirrors.ircam.fr/pub/apache/"
 | 
				
			||||||
       "http://apache-mirror.rbc.ru/pub/apache/"))))
 | 
					       "http://apache-mirror.rbc.ru/pub/apache/")
 | 
				
			||||||
 | 
					      (xorg               ; from http://www.x.org/wiki/Releases/Download
 | 
				
			||||||
 | 
					       "http://xorg.freedesktop.org/releases/" ; main mirrors
 | 
				
			||||||
 | 
					       "http://www.x.org/pub/"
 | 
				
			||||||
 | 
					       "ftp://mirror.csclub.uwaterloo.ca/x.org/" ; North America
 | 
				
			||||||
 | 
					       "ftp://xorg.mirrors.pair.com/"
 | 
				
			||||||
 | 
					       "http://mirror.csclub.uwaterloo.ca/x.org/"
 | 
				
			||||||
 | 
					       "http://xorg.mirrors.pair.com/"
 | 
				
			||||||
 | 
					       "http://mirror.us.leaseweb.net/xorg/"
 | 
				
			||||||
 | 
					       "ftp://artfiles.org/x.org/" ; Europe
 | 
				
			||||||
 | 
					       "ftp://ftp.chg.ru/pub/X11/x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.fu-berlin.de/unix/X11/FTP.X.ORG/"
 | 
				
			||||||
 | 
					       "ftp://ftp.gwdg.de/pub/x11/x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.mirrorservice.org/sites/ftp.x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.ntua.gr/pub/X11/"
 | 
				
			||||||
 | 
					       "ftp://ftp.piotrkosoft.net/pub/mirrors/ftp.x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.portal-to-web.de/pub/mirrors/x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.solnet.ch/mirror/x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.sunet.se/pub/X11/"
 | 
				
			||||||
 | 
					       "ftp://gd.tuwien.ac.at/X11/"
 | 
				
			||||||
 | 
					       "ftp://mi.mirror.garr.it/mirrors/x.org/"
 | 
				
			||||||
 | 
					       "ftp://mirror.cict.fr/x.org/"
 | 
				
			||||||
 | 
					       "ftp://mirror.switch.ch/mirror/X11/"
 | 
				
			||||||
 | 
					       "ftp://mirrors.ircam.fr/pub/x.org/"
 | 
				
			||||||
 | 
					       "ftp://x.mirrors.skynet.be/pub/ftp.x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.cs.cuhk.edu.hk/pub/X11" ; East Asia
 | 
				
			||||||
 | 
					       "ftp://ftp.u-aizu.ac.jp/pub/x11/x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.yz.yamagata-u.ac.jp/pub/X11/x.org/"
 | 
				
			||||||
 | 
					       "ftp://ftp.kaist.ac.kr/x.org/"
 | 
				
			||||||
 | 
					       "ftp://mirrors.go-part.com/xorg/"
 | 
				
			||||||
 | 
					       "http://x.cs.pu.edu.tw/"
 | 
				
			||||||
 | 
					       "ftp://ftp.is.co.za/pub/x.org")            ; South Africa
 | 
				
			||||||
 | 
					      (cpan                              ; from http://www.cpan.org/SITES.html
 | 
				
			||||||
 | 
					       "http://cpan.enstimac.fr/"
 | 
				
			||||||
 | 
					       "ftp://ftp.ciril.fr/pub/cpan/"
 | 
				
			||||||
 | 
					       "ftp://artfiles.org/cpan.org/"
 | 
				
			||||||
 | 
					       "http://www.cpan.org/"
 | 
				
			||||||
 | 
					       "ftp://cpan.rinet.ru/pub/mirror/CPAN/"
 | 
				
			||||||
 | 
					       "http://cpan.cu.be/"
 | 
				
			||||||
 | 
					       "ftp://cpan.inode.at/"
 | 
				
			||||||
 | 
					       "ftp://cpan.iht.co.il/"
 | 
				
			||||||
 | 
					       "ftp://ftp.osuosl.org/pub/CPAN/"
 | 
				
			||||||
 | 
					       "ftp://ftp.nara.wide.ad.jp/pub/CPAN/"
 | 
				
			||||||
 | 
					       "http://mirrors.163.com/cpan/"
 | 
				
			||||||
 | 
					       "ftp://cpan.mirror.ac.za/"))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (gnutls-derivation store system)
 | 
					(define (gnutls-derivation store system)
 | 
				
			||||||
  "Return the GnuTLS derivation for SYSTEM."
 | 
					  "Return the GnuTLS derivation for SYSTEM."
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,11 +38,10 @@
 | 
				
			||||||
(define %store
 | 
					(define %store
 | 
				
			||||||
  (make-parameter #f))
 | 
					  (make-parameter #f))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (derivations-from-package-expressions exp system source?)
 | 
					(define (derivations-from-package-expressions str system source?)
 | 
				
			||||||
  "Eval EXP and return the corresponding derivation path for SYSTEM.
 | 
					  "Read/eval STR and return the corresponding derivation path for SYSTEM.
 | 
				
			||||||
When SOURCE? is true, return the derivations of the package sources."
 | 
					When SOURCE? is true, return the derivations of the package sources."
 | 
				
			||||||
  (let ((p (eval exp (current-module))))
 | 
					  (let ((p (read/eval-package-expression str)))
 | 
				
			||||||
    (if (package? p)
 | 
					 | 
				
			||||||
    (if source?
 | 
					    (if source?
 | 
				
			||||||
        (let ((source (package-source p))
 | 
					        (let ((source (package-source p))
 | 
				
			||||||
              (loc    (package-location p)))
 | 
					              (loc    (package-location p)))
 | 
				
			||||||
| 
						 | 
					@ -50,9 +49,7 @@ When SOURCE? is true, return the derivations of the package sources."
 | 
				
			||||||
              (package-source-derivation (%store) source)
 | 
					              (package-source-derivation (%store) source)
 | 
				
			||||||
              (leave (_ "~a: error: package `~a' has no source~%")
 | 
					              (leave (_ "~a: error: package `~a' has no source~%")
 | 
				
			||||||
                     (location->string loc) (package-name p))))
 | 
					                     (location->string loc) (package-name p))))
 | 
				
			||||||
            (package-derivation (%store) p system))
 | 
					        (package-derivation (%store) p system))))
 | 
				
			||||||
        (leave (_ "expression `~s' does not evaluate to a package~%")
 | 
					 | 
				
			||||||
               exp))))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;;;
 | 
					;;;
 | 
				
			||||||
| 
						 | 
					@ -119,9 +116,7 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
 | 
				
			||||||
                  (alist-cons 'derivations-only? #t result)))
 | 
					                  (alist-cons 'derivations-only? #t result)))
 | 
				
			||||||
        (option '(#\e "expression") #t #f
 | 
					        (option '(#\e "expression") #t #f
 | 
				
			||||||
                (lambda (opt name arg result)
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
                  (alist-cons 'expression
 | 
					                  (alist-cons 'expression arg result)))
 | 
				
			||||||
                              (call-with-input-string arg read)
 | 
					 | 
				
			||||||
                              result)))
 | 
					 | 
				
			||||||
        (option '(#\K "keep-failed") #f #f
 | 
					        (option '(#\K "keep-failed") #f #f
 | 
				
			||||||
                (lambda (opt name arg result)
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
                  (alist-cons 'keep-failed? #t result)))
 | 
					                  (alist-cons 'keep-failed? #t result)))
 | 
				
			||||||
| 
						 | 
					@ -227,8 +222,8 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
 | 
				
			||||||
        (let* ((src? (assoc-ref opts 'source?))
 | 
					        (let* ((src? (assoc-ref opts 'source?))
 | 
				
			||||||
               (sys  (assoc-ref opts 'system))
 | 
					               (sys  (assoc-ref opts 'system))
 | 
				
			||||||
               (drv  (filter-map (match-lambda
 | 
					               (drv  (filter-map (match-lambda
 | 
				
			||||||
                                  (('expression . exp)
 | 
					                                  (('expression . str)
 | 
				
			||||||
                                   (derivations-from-package-expressions exp sys
 | 
					                                   (derivations-from-package-expressions str sys
 | 
				
			||||||
                                                                         src?))
 | 
					                                                                         src?))
 | 
				
			||||||
                                  (('argument . (? derivation-path? drv))
 | 
					                                  (('argument . (? derivation-path? drv))
 | 
				
			||||||
                                   drv)
 | 
					                                   drv)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,7 @@
 | 
				
			||||||
  #:use-module (guix ui)
 | 
					  #:use-module (guix ui)
 | 
				
			||||||
  #:use-module (guix store)
 | 
					  #:use-module (guix store)
 | 
				
			||||||
  #:use-module (ice-9 match)
 | 
					  #:use-module (ice-9 match)
 | 
				
			||||||
 | 
					  #:use-module (ice-9 regex)
 | 
				
			||||||
  #:use-module (srfi srfi-1)
 | 
					  #:use-module (srfi srfi-1)
 | 
				
			||||||
  #:use-module (srfi srfi-26)
 | 
					  #:use-module (srfi srfi-26)
 | 
				
			||||||
  #:use-module (srfi srfi-37)
 | 
					  #:use-module (srfi srfi-37)
 | 
				
			||||||
| 
						 | 
					@ -47,6 +48,11 @@ Invoke the garbage collector.\n"))
 | 
				
			||||||
  (display (_ "
 | 
					  (display (_ "
 | 
				
			||||||
      --list-live        list live paths"))
 | 
					      --list-live        list live paths"))
 | 
				
			||||||
  (newline)
 | 
					  (newline)
 | 
				
			||||||
 | 
					  (display (_ "
 | 
				
			||||||
 | 
					      --references       list the references of PATHS"))
 | 
				
			||||||
 | 
					  (display (_ "
 | 
				
			||||||
 | 
					      --referrers        list the referrers of PATHS"))
 | 
				
			||||||
 | 
					  (newline)
 | 
				
			||||||
  (display (_ "
 | 
					  (display (_ "
 | 
				
			||||||
  -h, --help             display this help and exit"))
 | 
					  -h, --help             display this help and exit"))
 | 
				
			||||||
  (display (_ "
 | 
					  (display (_ "
 | 
				
			||||||
| 
						 | 
					@ -125,6 +131,14 @@ interpreted."
 | 
				
			||||||
        (option '("list-live") #f #f
 | 
					        (option '("list-live") #f #f
 | 
				
			||||||
                (lambda (opt name arg result)
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
                  (alist-cons 'action 'list-live
 | 
					                  (alist-cons 'action 'list-live
 | 
				
			||||||
 | 
					                              (alist-delete 'action result))))
 | 
				
			||||||
 | 
					        (option '("references") #f #f
 | 
				
			||||||
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
 | 
					                  (alist-cons 'action 'list-references
 | 
				
			||||||
 | 
					                              (alist-delete 'action result))))
 | 
				
			||||||
 | 
					        (option '("referrers") #f #f
 | 
				
			||||||
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
 | 
					                  (alist-cons 'action 'list-referrers
 | 
				
			||||||
                              (alist-delete 'action result))))))
 | 
					                              (alist-delete 'action result))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,9 +156,37 @@ interpreted."
 | 
				
			||||||
                 (alist-cons 'argument arg result))
 | 
					                 (alist-cons 'argument arg result))
 | 
				
			||||||
               %default-options))
 | 
					               %default-options))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (define (symlink-target file)
 | 
				
			||||||
 | 
					    (let ((s (false-if-exception (lstat file))))
 | 
				
			||||||
 | 
					      (if (and s (eq? 'symlink (stat:type s)))
 | 
				
			||||||
 | 
					          (symlink-target (readlink file))
 | 
				
			||||||
 | 
					          file)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (define (store-directory file)
 | 
				
			||||||
 | 
					    ;; Return the store directory that holds FILE if it's in the store,
 | 
				
			||||||
 | 
					    ;; otherwise return FILE.
 | 
				
			||||||
 | 
					    (or (and=> (string-match (string-append "^" (regexp-quote (%store-prefix))
 | 
				
			||||||
 | 
					                                            "/([^/]+)")
 | 
				
			||||||
 | 
					                             file)
 | 
				
			||||||
 | 
					               (compose (cut string-append (%store-prefix) "/" <>)
 | 
				
			||||||
 | 
					                        (cut match:substring <> 1)))
 | 
				
			||||||
 | 
					        file))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (with-error-handling
 | 
					  (with-error-handling
 | 
				
			||||||
    (let ((opts  (parse-options))
 | 
					    (let* ((opts  (parse-options))
 | 
				
			||||||
          (store (open-connection)))
 | 
					           (store (open-connection))
 | 
				
			||||||
 | 
					           (paths (filter-map (match-lambda
 | 
				
			||||||
 | 
					                               (('argument . arg) arg)
 | 
				
			||||||
 | 
					                               (_ #f))
 | 
				
			||||||
 | 
					                              opts)))
 | 
				
			||||||
 | 
					      (define (list-relatives relatives)
 | 
				
			||||||
 | 
					        (for-each (compose (lambda (path)
 | 
				
			||||||
 | 
					                             (for-each (cut simple-format #t "~a~%" <>)
 | 
				
			||||||
 | 
					                                       (relatives store path)))
 | 
				
			||||||
 | 
					                           store-directory
 | 
				
			||||||
 | 
					                           symlink-target)
 | 
				
			||||||
 | 
					                  paths))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      (case (assoc-ref opts 'action)
 | 
					      (case (assoc-ref opts 'action)
 | 
				
			||||||
        ((collect-garbage)
 | 
					        ((collect-garbage)
 | 
				
			||||||
         (let ((min-freed (assoc-ref opts 'min-freed)))
 | 
					         (let ((min-freed (assoc-ref opts 'min-freed)))
 | 
				
			||||||
| 
						 | 
					@ -152,11 +194,11 @@ interpreted."
 | 
				
			||||||
               (collect-garbage store min-freed)
 | 
					               (collect-garbage store min-freed)
 | 
				
			||||||
               (collect-garbage store))))
 | 
					               (collect-garbage store))))
 | 
				
			||||||
        ((delete)
 | 
					        ((delete)
 | 
				
			||||||
         (let ((paths (filter-map (match-lambda
 | 
					         (delete-paths store paths))
 | 
				
			||||||
                                   (('argument . arg) arg)
 | 
					        ((list-references)
 | 
				
			||||||
                                   (_ #f))
 | 
					         (list-relatives references))
 | 
				
			||||||
                                  opts)))
 | 
					        ((list-referrers)
 | 
				
			||||||
           (delete-paths store paths)))
 | 
					         (list-relatives referrers))
 | 
				
			||||||
        ((list-dead)
 | 
					        ((list-dead)
 | 
				
			||||||
         (for-each (cut simple-format #t "~a~%" <>)
 | 
					         (for-each (cut simple-format #t "~a~%" <>)
 | 
				
			||||||
                   (dead-paths store)))
 | 
					                   (dead-paths store)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -281,6 +281,9 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
 | 
				
			||||||
  (display (_ "
 | 
					  (display (_ "
 | 
				
			||||||
  -i, --install=PACKAGE  install PACKAGE"))
 | 
					  -i, --install=PACKAGE  install PACKAGE"))
 | 
				
			||||||
  (display (_ "
 | 
					  (display (_ "
 | 
				
			||||||
 | 
					  -e, --install-from-expression=EXP
 | 
				
			||||||
 | 
					                         install the package EXP evaluates to"))
 | 
				
			||||||
 | 
					  (display (_ "
 | 
				
			||||||
  -r, --remove=PACKAGE   remove PACKAGE"))
 | 
					  -r, --remove=PACKAGE   remove PACKAGE"))
 | 
				
			||||||
  (display (_ "
 | 
					  (display (_ "
 | 
				
			||||||
  -u, --upgrade=REGEXP   upgrade all the installed packages matching REGEXP"))
 | 
					  -u, --upgrade=REGEXP   upgrade all the installed packages matching REGEXP"))
 | 
				
			||||||
| 
						 | 
					@ -325,6 +328,10 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
 | 
				
			||||||
        (option '(#\i "install") #t #f
 | 
					        (option '(#\i "install") #t #f
 | 
				
			||||||
                (lambda (opt name arg result)
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
                  (alist-cons 'install arg result)))
 | 
					                  (alist-cons 'install arg result)))
 | 
				
			||||||
 | 
					        (option '(#\e "install-from-expression") #t #f
 | 
				
			||||||
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
 | 
					                  (alist-cons 'install (read/eval-package-expression arg)
 | 
				
			||||||
 | 
					                              result)))
 | 
				
			||||||
        (option '(#\r "remove") #t #f
 | 
					        (option '(#\r "remove") #t #f
 | 
				
			||||||
                (lambda (opt name arg result)
 | 
					                (lambda (opt name arg result)
 | 
				
			||||||
                  (alist-cons 'remove arg result)))
 | 
					                  (alist-cons 'remove arg result)))
 | 
				
			||||||
| 
						 | 
					@ -490,6 +497,19 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      (delete-duplicates (map input->name+path deps) same?))
 | 
					      (delete-duplicates (map input->name+path deps) same?))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (define (package->tuple p)
 | 
				
			||||||
 | 
					      (let ((path (package-derivation (%store) p))
 | 
				
			||||||
 | 
					            (deps (package-transitive-propagated-inputs p)))
 | 
				
			||||||
 | 
					        `(,(package-name p)
 | 
				
			||||||
 | 
					          ,(package-version p)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          ;; When given a package via `-e', install the first of its
 | 
				
			||||||
 | 
					          ;; outputs (XXX).
 | 
				
			||||||
 | 
					          ,(car (package-outputs p))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          ,path
 | 
				
			||||||
 | 
					          ,(canonicalize-deps deps))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ;; First roll back if asked to.
 | 
					    ;; First roll back if asked to.
 | 
				
			||||||
    (if (and (assoc-ref opts 'roll-back?) (not dry-run?))
 | 
					    (if (and (assoc-ref opts 'roll-back?) (not dry-run?))
 | 
				
			||||||
        (begin
 | 
					        (begin
 | 
				
			||||||
| 
						 | 
					@ -515,6 +535,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
 | 
				
			||||||
               (install  (append
 | 
					               (install  (append
 | 
				
			||||||
                          upgrade
 | 
					                          upgrade
 | 
				
			||||||
                          (filter-map (match-lambda
 | 
					                          (filter-map (match-lambda
 | 
				
			||||||
 | 
					                                       (('install . (? package? p))
 | 
				
			||||||
 | 
					                                        #f)
 | 
				
			||||||
                                       (('install . (? store-path?))
 | 
					                                       (('install . (? store-path?))
 | 
				
			||||||
                                        #f)
 | 
					                                        #f)
 | 
				
			||||||
                                       (('install . package)
 | 
					                                       (('install . package)
 | 
				
			||||||
| 
						 | 
					@ -530,6 +552,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
 | 
				
			||||||
                                     install))
 | 
					                                     install))
 | 
				
			||||||
               (install* (append
 | 
					               (install* (append
 | 
				
			||||||
                          (filter-map (match-lambda
 | 
					                          (filter-map (match-lambda
 | 
				
			||||||
 | 
					                                       (('install . (? package? p))
 | 
				
			||||||
 | 
					                                        (package->tuple p))
 | 
				
			||||||
                                       (('install . (? store-path? path))
 | 
					                                       (('install . (? store-path? path))
 | 
				
			||||||
                                        (let-values (((name version)
 | 
					                                        (let-values (((name version)
 | 
				
			||||||
                                                      (package-name->name+version
 | 
					                                                      (package-name->name+version
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,6 +66,10 @@
 | 
				
			||||||
            substitutable-paths
 | 
					            substitutable-paths
 | 
				
			||||||
            substitutable-path-info
 | 
					            substitutable-path-info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            references
 | 
				
			||||||
 | 
					            referrers
 | 
				
			||||||
 | 
					            valid-derivers
 | 
				
			||||||
 | 
					            query-derivation-outputs
 | 
				
			||||||
            live-paths
 | 
					            live-paths
 | 
				
			||||||
            dead-paths
 | 
					            dead-paths
 | 
				
			||||||
            collect-garbage
 | 
					            collect-garbage
 | 
				
			||||||
| 
						 | 
					@ -126,7 +130,8 @@
 | 
				
			||||||
  (query-path-from-hash-part 29)
 | 
					  (query-path-from-hash-part 29)
 | 
				
			||||||
  (query-substitutable-path-infos 30)
 | 
					  (query-substitutable-path-infos 30)
 | 
				
			||||||
  (query-valid-paths 31)
 | 
					  (query-valid-paths 31)
 | 
				
			||||||
  (query-substitutable-paths 32))
 | 
					  (query-substitutable-paths 32)
 | 
				
			||||||
 | 
					  (query-valid-derivers 33))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define-enumerate-type hash-algo
 | 
					(define-enumerate-type hash-algo
 | 
				
			||||||
  ;; hash.hh
 | 
					  ;; hash.hh
 | 
				
			||||||
| 
						 | 
					@ -597,6 +602,27 @@ name--it is the caller's responsibility to ensure that it is an absolute
 | 
				
			||||||
file name.  Return #t on success."
 | 
					file name.  Return #t on success."
 | 
				
			||||||
  boolean)
 | 
					  boolean)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define references
 | 
				
			||||||
 | 
					  (operation (query-references (store-path path))
 | 
				
			||||||
 | 
					             "Return the list of references of PATH."
 | 
				
			||||||
 | 
					             store-path-list))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define referrers
 | 
				
			||||||
 | 
					  (operation (query-referrers (store-path path))
 | 
				
			||||||
 | 
					             "Return the list of path that refer to PATH."
 | 
				
			||||||
 | 
					             store-path-list))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define valid-derivers
 | 
				
			||||||
 | 
					  (operation (query-valid-derivers (store-path path))
 | 
				
			||||||
 | 
					             "Return the list of valid \"derivers\" of PATH---i.e., all the
 | 
				
			||||||
 | 
					.drv present in the store that have PATH among their outputs."
 | 
				
			||||||
 | 
					             store-path-list))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define query-derivation-outputs  ; avoid name clash with `derivation-outputs'
 | 
				
			||||||
 | 
					  (operation (query-derivation-outputs (store-path path))
 | 
				
			||||||
 | 
					             "Return the list of outputs of PATH, a .drv file."
 | 
				
			||||||
 | 
					             store-path-list))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define-operation (has-substitutes? (store-path path))
 | 
					(define-operation (has-substitutes? (store-path path))
 | 
				
			||||||
  "Return #t if binary substitutes are available for PATH, and #f otherwise."
 | 
					  "Return #t if binary substitutes are available for PATH, and #f otherwise."
 | 
				
			||||||
  boolean)
 | 
					  boolean)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										21
									
								
								guix/ui.scm
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								guix/ui.scm
									
										
									
									
									
								
							| 
						 | 
					@ -38,6 +38,7 @@
 | 
				
			||||||
            show-what-to-build
 | 
					            show-what-to-build
 | 
				
			||||||
            call-with-error-handling
 | 
					            call-with-error-handling
 | 
				
			||||||
            with-error-handling
 | 
					            with-error-handling
 | 
				
			||||||
 | 
					            read/eval-package-expression
 | 
				
			||||||
            location->string
 | 
					            location->string
 | 
				
			||||||
            call-with-temporary-output-file
 | 
					            call-with-temporary-output-file
 | 
				
			||||||
            switch-symlinks
 | 
					            switch-symlinks
 | 
				
			||||||
| 
						 | 
					@ -116,6 +117,26 @@ General help using GNU software: <http://www.gnu.org/gethelp/>"))
 | 
				
			||||||
                    (nix-protocol-error-message c))))
 | 
					                    (nix-protocol-error-message c))))
 | 
				
			||||||
    (thunk)))
 | 
					    (thunk)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (read/eval-package-expression str)
 | 
				
			||||||
 | 
					  "Read and evaluate STR and return the package it refers to, or exit an
 | 
				
			||||||
 | 
					error."
 | 
				
			||||||
 | 
					  (let ((exp (catch #t
 | 
				
			||||||
 | 
					               (lambda ()
 | 
				
			||||||
 | 
					                 (call-with-input-string str read))
 | 
				
			||||||
 | 
					               (lambda args
 | 
				
			||||||
 | 
					                 (leave (_ "failed to read expression ~s: ~s~%")
 | 
				
			||||||
 | 
					                        str args)))))
 | 
				
			||||||
 | 
					    (let ((p (catch #t
 | 
				
			||||||
 | 
					               (lambda ()
 | 
				
			||||||
 | 
					                 (eval exp the-scm-module))
 | 
				
			||||||
 | 
					               (lambda args
 | 
				
			||||||
 | 
					                 (leave (_ "failed to evaluate expression `~a': ~s~%")
 | 
				
			||||||
 | 
					                        exp args)))))
 | 
				
			||||||
 | 
					      (if (package? p)
 | 
				
			||||||
 | 
					          p
 | 
				
			||||||
 | 
					          (leave (_ "expression `~s' does not evaluate to a package~%")
 | 
				
			||||||
 | 
					                 exp)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define* (show-what-to-build store drv #:optional dry-run?)
 | 
					(define* (show-what-to-build store drv #:optional dry-run?)
 | 
				
			||||||
  "Show what will or would (depending on DRY-RUN?) be built in realizing the
 | 
					  "Show what will or would (depending on DRY-RUN?) be built in realizing the
 | 
				
			||||||
derivations listed in DRV.  Return #t if there's something to build, #f
 | 
					derivations listed in DRV.  Return #t if there's something to build, #f
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										51
									
								
								release.nix
									
										
									
									
									
								
							
							
						
						
									
										51
									
								
								release.nix
									
										
									
									
									
								
							| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/* GNU Guix --- Functional package management for GNU
 | 
					/* GNU Guix --- Functional package management for GNU
 | 
				
			||||||
   Copyright (C) 2012  Ludovic Courtès <ludo@gnu.org>
 | 
					   Copyright (C) 2012, 2013  Ludovic Courtès <ludo@gnu.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   This file is part of GNU Guix.
 | 
					   This file is part of GNU Guix.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,6 +26,28 @@ let
 | 
				
			||||||
  succeedOnFailure = true;
 | 
					  succeedOnFailure = true;
 | 
				
			||||||
  keepBuildDirectory = true;
 | 
					  keepBuildDirectory = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Run the given derivation in outside of a chroot.  This hack is used on
 | 
				
			||||||
 | 
					  # hydra.gnu.org where we want Guix derivations to run in a chroot that lacks
 | 
				
			||||||
 | 
					  # /bin, whereas Nixpkgs relies on /bin/sh.
 | 
				
			||||||
 | 
					  unchroot =
 | 
				
			||||||
 | 
					    let
 | 
				
			||||||
 | 
					      pkgs = import nixpkgs {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # XXX: The `python' derivation contains a `modules' attribute that makes
 | 
				
			||||||
 | 
					      # `overrideDerivation' fail with "cannot coerce an attribute set (except
 | 
				
			||||||
 | 
					      # a derivation) to a string", so just remove it.
 | 
				
			||||||
 | 
					      pythonKludge = drv: removeAttrs drv [ "modules" ];
 | 
				
			||||||
 | 
					    in
 | 
				
			||||||
 | 
					      drv:
 | 
				
			||||||
 | 
					        if builtins.isAttrs drv
 | 
				
			||||||
 | 
					        then pkgs.lib.overrideDerivation (pythonKludge drv) (args: {
 | 
				
			||||||
 | 
					          __noChroot = true;
 | 
				
			||||||
 | 
					          buildNativeInputs = map unchroot args.buildNativeInputs;
 | 
				
			||||||
 | 
					          propagatedBuildNativeInputs =
 | 
				
			||||||
 | 
					            map unchroot args.propagatedBuildNativeInputs;
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        else drv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # The Guile used to bootstrap the whole thing.  It's normally
 | 
					  # The Guile used to bootstrap the whole thing.  It's normally
 | 
				
			||||||
  # downloaded by the build system, but here we download it via a
 | 
					  # downloaded by the build system, but here we download it via a
 | 
				
			||||||
  # fixed-output derivation and stuff it into the build tree.
 | 
					  # fixed-output derivation and stuff it into the build tree.
 | 
				
			||||||
| 
						 | 
					@ -44,23 +66,35 @@ let
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  jobs = {
 | 
					  jobs = {
 | 
				
			||||||
    tarball =
 | 
					    tarball =
 | 
				
			||||||
      let pkgs = import nixpkgs {}; in
 | 
					      unchroot
 | 
				
			||||||
 | 
					      (let pkgs = import nixpkgs {}; in
 | 
				
			||||||
      pkgs.releaseTools.sourceTarball {
 | 
					      pkgs.releaseTools.sourceTarball {
 | 
				
			||||||
        name = "guix-tarball";
 | 
					        name = "guix-tarball";
 | 
				
			||||||
        src = <guix>;
 | 
					        src = <guix>;
 | 
				
			||||||
        buildInputs = with pkgs; [ guile sqlite bzip2 git libgcrypt ];
 | 
					        buildInputs =
 | 
				
			||||||
 | 
					          let git_light = pkgs.git.override {
 | 
				
			||||||
 | 
					              # Minimal Git to avoid building too many dependencies.
 | 
				
			||||||
 | 
					              withManual = false;
 | 
				
			||||||
 | 
					              pythonSupport = false;
 | 
				
			||||||
 | 
					              svnSupport = false;
 | 
				
			||||||
 | 
					              guiSupport = false;
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          in
 | 
				
			||||||
 | 
					            [ git_light ] ++
 | 
				
			||||||
 | 
					            (with pkgs; [ guile sqlite bzip2 libgcrypt ]);
 | 
				
			||||||
        buildNativeInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
 | 
					        buildNativeInputs = with pkgs; [ texinfo gettext cvs pkgconfig ];
 | 
				
			||||||
        preAutoconf = ''git config submodule.nix.url "${<nix>}"'';
 | 
					        preAutoconf = ''git config submodule.nix.url "${<nix>}"'';
 | 
				
			||||||
        configureFlags =
 | 
					        configureFlags =
 | 
				
			||||||
          [ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
 | 
					          [ "--with-libgcrypt-prefix=${pkgs.libgcrypt}"
 | 
				
			||||||
            "--localstatedir=/nix/var"
 | 
					            "--localstatedir=/nix/var"
 | 
				
			||||||
          ];
 | 
					          ];
 | 
				
			||||||
      };
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    build =
 | 
					    build =
 | 
				
			||||||
      { system ? builtins.currentSystem }:
 | 
					      { system ? builtins.currentSystem }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      let pkgs = import nixpkgs { inherit system; }; in
 | 
					      unchroot
 | 
				
			||||||
 | 
					      (let pkgs = import nixpkgs { inherit system; }; in
 | 
				
			||||||
      pkgs.releaseTools.nixBuild {
 | 
					      pkgs.releaseTools.nixBuild {
 | 
				
			||||||
        name = "guix";
 | 
					        name = "guix";
 | 
				
			||||||
        buildInputs = with pkgs; [ guile sqlite bzip2 libgcrypt ];
 | 
					        buildInputs = with pkgs; [ guile sqlite bzip2 libgcrypt ];
 | 
				
			||||||
| 
						 | 
					@ -83,13 +117,14 @@ let
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        inherit succeedOnFailure keepBuildDirectory
 | 
					        inherit succeedOnFailure keepBuildDirectory
 | 
				
			||||||
          buildOutOfSourceTree;
 | 
					          buildOutOfSourceTree;
 | 
				
			||||||
      };
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    build_disable_daemon =
 | 
					    build_disable_daemon =
 | 
				
			||||||
      { system ? builtins.currentSystem }:
 | 
					      { system ? builtins.currentSystem }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      let
 | 
					      unchroot
 | 
				
			||||||
 | 
					      (let
 | 
				
			||||||
        pkgs = import nixpkgs { inherit system; };
 | 
					        pkgs = import nixpkgs { inherit system; };
 | 
				
			||||||
        build = jobs.build { inherit system; };
 | 
					        build = jobs.build { inherit system; };
 | 
				
			||||||
      in
 | 
					      in
 | 
				
			||||||
| 
						 | 
					@ -101,7 +136,7 @@ let
 | 
				
			||||||
          # the chroot.
 | 
					          # the chroot.
 | 
				
			||||||
          preConfigure = "export NIX_REMOTE=daemon";
 | 
					          preConfigure = "export NIX_REMOTE=daemon";
 | 
				
			||||||
          __noChroot = true;
 | 
					          __noChroot = true;
 | 
				
			||||||
        });
 | 
					        }));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Jobs to test the distro.
 | 
					    # Jobs to test the distro.
 | 
				
			||||||
    distro = {
 | 
					    distro = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,6 +25,18 @@ guix gc --version
 | 
				
			||||||
trap "rm -f guix-gc-root" EXIT
 | 
					trap "rm -f guix-gc-root" EXIT
 | 
				
			||||||
rm -f guix-gc-root
 | 
					rm -f guix-gc-root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Check the references of a .drv.
 | 
				
			||||||
 | 
					drv="`guix build guile-bootstrap -d`"
 | 
				
			||||||
 | 
					out="`guix build guile-bootstrap`"
 | 
				
			||||||
 | 
					test -f "$drv" && test -d "$out"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					guix gc --references "$drv" | grep -e -bash
 | 
				
			||||||
 | 
					guix gc --references "$out"
 | 
				
			||||||
 | 
					guix gc --references "$out/bin/guile"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if guix gc --references /dev/null;
 | 
				
			||||||
 | 
					then false; else true; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Add then reclaim a .drv file.
 | 
					# Add then reclaim a .drv file.
 | 
				
			||||||
drv="`guix build idutils -d`"
 | 
					drv="`guix build idutils -d`"
 | 
				
			||||||
test -f "$drv"
 | 
					test -f "$drv"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +33,10 @@ rm -f "$profile"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
trap 'rm "$profile" "$profile-"[0-9]* ; rm -rf t-home-'"$$" EXIT
 | 
					trap 'rm "$profile" "$profile-"[0-9]* ; rm -rf t-home-'"$$" EXIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use `-e' with a non-package expression.
 | 
				
			||||||
 | 
					if guix package --bootstrap -e +;
 | 
				
			||||||
 | 
					then false; else true; fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
guix package --bootstrap -p "$profile" -i guile-bootstrap
 | 
					guix package --bootstrap -p "$profile" -i guile-bootstrap
 | 
				
			||||||
test -L "$profile" && test -L "$profile-1-link"
 | 
					test -L "$profile" && test -L "$profile-1-link"
 | 
				
			||||||
test -f "$profile/bin/guile"
 | 
					test -f "$profile/bin/guile"
 | 
				
			||||||
| 
						 | 
					@ -46,8 +50,9 @@ test -f "$profile/bin/guile"
 | 
				
			||||||
# Check whether we have network access.
 | 
					# Check whether we have network access.
 | 
				
			||||||
if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
 | 
					if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
    boot_make="`guix build -e '(@@ (gnu packages base) gnu-make-boot0)'`"
 | 
					    boot_make="(@@ (gnu packages base) gnu-make-boot0)"
 | 
				
			||||||
    guix package --bootstrap -p "$profile" -i "$boot_make"
 | 
					    boot_make_drv="`guix build -e "$boot_make"`"
 | 
				
			||||||
 | 
					    guix package --bootstrap -p "$profile" -i "$boot_make_drv"
 | 
				
			||||||
    test -L "$profile-2-link"
 | 
					    test -L "$profile-2-link"
 | 
				
			||||||
    test -f "$profile/bin/make" && test -f "$profile/bin/guile"
 | 
					    test -f "$profile/bin/make" && test -f "$profile/bin/guile"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,7 +99,7 @@ then
 | 
				
			||||||
    done
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Reinstall after roll-back to the empty profile.
 | 
					    # Reinstall after roll-back to the empty profile.
 | 
				
			||||||
    guix package --bootstrap -p "$profile" -i "$boot_make"
 | 
					    guix package --bootstrap -p "$profile" -e "$boot_make"
 | 
				
			||||||
    test "`readlink_base "$profile"`" = "$profile-1-link"
 | 
					    test "`readlink_base "$profile"`" = "$profile-1-link"
 | 
				
			||||||
    test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
 | 
					    test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -104,7 +109,7 @@ then
 | 
				
			||||||
    test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
 | 
					    test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Install Make.
 | 
					    # Install Make.
 | 
				
			||||||
    guix package --bootstrap -p "$profile" -i "$boot_make"
 | 
					    guix package --bootstrap -p "$profile" -e "$boot_make"
 | 
				
			||||||
    test "`readlink_base "$profile"`" = "$profile-2-link"
 | 
					    test "`readlink_base "$profile"`" = "$profile-2-link"
 | 
				
			||||||
    test -x "$profile/bin/guile" && test -x "$profile/bin/make"
 | 
					    test -x "$profile/bin/guile" && test -x "$profile/bin/make"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,7 +150,7 @@ test -f "$HOME/.guix-profile/bin/guile"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
 | 
					if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
    guix package --bootstrap -i "$boot_make"
 | 
					    guix package --bootstrap -e "$boot_make"
 | 
				
			||||||
    test -f "$HOME/.guix-profile/bin/make"
 | 
					    test -f "$HOME/.guix-profile/bin/make"
 | 
				
			||||||
    first_environment="`cd $HOME/.guix-profile ; pwd`"
 | 
					    first_environment="`cd $HOME/.guix-profile ; pwd`"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,7 @@
 | 
				
			||||||
  #:use-module (guix base32)
 | 
					  #:use-module (guix base32)
 | 
				
			||||||
  #:use-module (guix packages)
 | 
					  #:use-module (guix packages)
 | 
				
			||||||
  #:use-module (guix derivations)
 | 
					  #:use-module (guix derivations)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages)
 | 
				
			||||||
  #:use-module (gnu packages bootstrap)
 | 
					  #:use-module (gnu packages bootstrap)
 | 
				
			||||||
  #:use-module (ice-9 match)
 | 
					  #:use-module (ice-9 match)
 | 
				
			||||||
  #:use-module (srfi srfi-1)
 | 
					  #:use-module (srfi srfi-1)
 | 
				
			||||||
| 
						 | 
					@ -79,6 +80,31 @@
 | 
				
			||||||
           (> freed 0)
 | 
					           (> freed 0)
 | 
				
			||||||
           (not (file-exists? p))))))
 | 
					           (not (file-exists? p))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(test-assert "references"
 | 
				
			||||||
 | 
					  (let* ((t1 (add-text-to-store %store "random1"
 | 
				
			||||||
 | 
					                                (random-text) '()))
 | 
				
			||||||
 | 
					         (t2 (add-text-to-store %store "random2"
 | 
				
			||||||
 | 
					                                (random-text) (list t1))))
 | 
				
			||||||
 | 
					    (and (equal? (list t1) (references %store t2))
 | 
				
			||||||
 | 
					         (equal? (list t2) (referrers %store t1))
 | 
				
			||||||
 | 
					         (null? (references %store t1))
 | 
				
			||||||
 | 
					         (null? (referrers %store t2)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(test-assert "derivers"
 | 
				
			||||||
 | 
					  (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '()))
 | 
				
			||||||
 | 
					         (s (add-to-store %store "bash" #t "sha256"
 | 
				
			||||||
 | 
					                          (search-bootstrap-binary "bash"
 | 
				
			||||||
 | 
					                                                   (%current-system))))
 | 
				
			||||||
 | 
					         (d (derivation %store "the-thing" (%current-system)
 | 
				
			||||||
 | 
					                        s `("-e" ,b) `(("foo" . ,(random-text)))
 | 
				
			||||||
 | 
					                        `((,b) (,s))))
 | 
				
			||||||
 | 
					         (o (derivation-path->output-path d)))
 | 
				
			||||||
 | 
					    (and (build-derivations %store (list d))
 | 
				
			||||||
 | 
					         (equal? (query-derivation-outputs %store d)
 | 
				
			||||||
 | 
					                 (list o))
 | 
				
			||||||
 | 
					         (equal? (valid-derivers %store o)
 | 
				
			||||||
 | 
					                 (list d)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(test-assert "no substitutes"
 | 
					(test-assert "no substitutes"
 | 
				
			||||||
  (let* ((s  (open-connection))
 | 
					  (let* ((s  (open-connection))
 | 
				
			||||||
         (d1 (package-derivation s %bootstrap-guile (%current-system)))
 | 
					         (d1 (package-derivation s %bootstrap-guile (%current-system)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue