Merge branch 'master' into core-updates
This commit is contained in:
		
						commit
						af018f5e0a
					
				
					 129 changed files with 7784 additions and 1679 deletions
				
			
		|  | @ -6,6 +6,7 @@ | |||
|  (scheme-mode | ||||
|   . | ||||
|   ((indent-tabs-mode . nil) | ||||
|    (eval . (put 'eval-when 'scheme-indent-function 1)) | ||||
|    (eval . (put 'test-assert 'scheme-indent-function 1)) | ||||
|    (eval . (put 'test-equal 'scheme-indent-function 1)) | ||||
|    (eval . (put 'test-eq 'scheme-indent-function 1)) | ||||
|  | @ -16,6 +17,8 @@ | |||
|    (eval . (put 'with-directory-excursion 'scheme-indent-function 1)) | ||||
|    (eval . (put 'package 'scheme-indent-function 0)) | ||||
|    (eval . (put 'origin 'scheme-indent-function 0)) | ||||
|    (eval . (put 'operating-system 'scheme-indent-function 0)) | ||||
|    (eval . (put 'file-system 'scheme-indent-function 0)) | ||||
|    (eval . (put 'manifest-entry 'scheme-indent-function 0)) | ||||
|    (eval . (put 'manifest-pattern 'scheme-indent-function 0)) | ||||
|    (eval . (put 'substitute-keyword-arguments 'scheme-indent-function 1)) | ||||
|  | @ -31,7 +34,13 @@ | |||
|    (eval . (put 'with-monad 'scheme-indent-function 1)) | ||||
|    (eval . (put 'mlet* 'scheme-indent-function 2)) | ||||
|    (eval . (put 'mlet 'scheme-indent-function 2)) | ||||
|    (eval . (put 'run-with-store 'scheme-indent-function 1)))) | ||||
|    (eval . (put 'run-with-store 'scheme-indent-function 1)) | ||||
| 
 | ||||
|    ;; Recognize '~' and '$', as used for gexps, as quotation symbols.  This | ||||
|    ;; notably allows '(' in Paredit to not insert a space when the preceding | ||||
|    ;; symbol is one of these. | ||||
|    (eval . (modify-syntax-entry ?~ "'")) | ||||
|    (eval . (modify-syntax-entry ?$ "'")))) | ||||
|  (emacs-lisp-mode . ((indent-tabs-mode . nil))) | ||||
|  (texinfo-mode    . ((indent-tabs-mode . nil) | ||||
|                      (fill-column . 72)))) | ||||
|  |  | |||
							
								
								
									
										2
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitmodules
									
										
									
									
										vendored
									
									
								
							|  | @ -1,3 +1,3 @@ | |||
| [submodule "nix-upstream"] | ||||
| 	path = nix-upstream | ||||
| 	url = http://github.com/NixOS/nix.git | ||||
| 	url = https://github.com/NixOS/nix.git | ||||
|  |  | |||
							
								
								
									
										3
									
								
								HACKING
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								HACKING
									
										
									
									
									
								
							|  | @ -159,7 +159,8 @@ patches include fixing typos, etc.) | |||
| For patches that just add a new package, and a simple one, it’s OK to commit, | ||||
| if you’re confident (which means you successfully built it in a chroot setup, | ||||
| and have done a reasonable copyright and license auditing.)  Likewise for | ||||
| package upgrades.  We have a mailing list for commit notifications | ||||
| package upgrades, except upgrades that trigger a lot of rebuilds (for example, | ||||
| upgrading GnuTLS or GLib.)  We have a mailing list for commit notifications | ||||
| (guix-commits@gnu.org), so people can notice.  Before pushing your changes, | ||||
| make sure to run ‘git pull --rebase’. | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										10
									
								
								Makefile.am
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								Makefile.am
									
										
									
									
									
								
							|  | @ -37,6 +37,7 @@ MODULES =					\ | |||
|   guix/download.scm				\ | ||||
|   guix/git-download.scm				\ | ||||
|   guix/monads.scm				\ | ||||
|   guix/gexp.scm					\ | ||||
|   guix/profiles.scm				\ | ||||
|   guix/serialization.scm			\ | ||||
|   guix/nar.scm					\ | ||||
|  | @ -58,7 +59,6 @@ MODULES =					\ | |||
|   guix/build/download.scm			\ | ||||
|   guix/build/cmake-build-system.scm		\ | ||||
|   guix/build/git.scm				\ | ||||
|   guix/build/gnome.scm				\ | ||||
|   guix/build/gnu-build-system.scm		\ | ||||
|   guix/build/gnu-dist.scm			\ | ||||
|   guix/build/linux-initrd.scm			\ | ||||
|  | @ -70,6 +70,9 @@ MODULES =					\ | |||
|   guix/build/rpath.scm				\ | ||||
|   guix/build/svn.scm				\ | ||||
|   guix/build/vm.scm				\ | ||||
|   guix/build/install.scm			\ | ||||
|   guix/build/activation.scm			\ | ||||
|   guix/build/syscalls.scm			\ | ||||
|   guix/packages.scm				\ | ||||
|   guix/snix.scm					\ | ||||
|   guix/scripts/download.scm			\ | ||||
|  | @ -139,9 +142,11 @@ SCM_TESTS =					\ | |||
|   tests/snix.scm				\ | ||||
|   tests/store.scm				\ | ||||
|   tests/monads.scm				\ | ||||
|   tests/gexp.scm				\ | ||||
|   tests/nar.scm					\ | ||||
|   tests/union.scm				\ | ||||
|   tests/profiles.scm | ||||
|   tests/profiles.scm				\ | ||||
|   tests/syscalls.scm | ||||
| 
 | ||||
| SH_TESTS =					\ | ||||
|   tests/guix-build.sh				\ | ||||
|  | @ -254,6 +259,7 @@ endif BUILD_DAEMON | |||
| ACLOCAL_AMFLAGS = -I m4 | ||||
| AM_DISTCHECK_CONFIGURE_FLAGS =			\ | ||||
|   --with-libgcrypt-prefix="$(LIBGCRYPT_PREFIX)"	\ | ||||
|   --with-libgcrypt-libdir="$(LIBGCRYPT_LIBDIR)"	\ | ||||
|   --with-nix-prefix="$(NIX_PREFIX)"		\ | ||||
|   --enable-daemon | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										26
									
								
								TODO
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								TODO
									
										
									
									
									
								
							|  | @ -63,32 +63,6 @@ create a new ‘dir’. | |||
|       ("i3" ,p3))) | ||||
| #+END_SRC | ||||
| 
 | ||||
| * MAYBE use HOP-like escapes to refer to inputs in build-side code | ||||
| 
 | ||||
| Instead of doing things like: | ||||
| 
 | ||||
| #+BEGIN_SRC scheme | ||||
|   (inputs `(("foo" ,foo))) | ||||
|   (arguments '(#:configure-flags | ||||
|                (list (string-append "--with-foo=" | ||||
|                                     (assoc-ref %build-inputs "foo"))))) | ||||
| #+END_SRC | ||||
| 
 | ||||
| Allow things like: | ||||
| 
 | ||||
| #+BEGIN_SRC scheme | ||||
|   (inputs (list foo)) | ||||
|   (arguments ~(#:configure-flags | ||||
|                (list (string-append "--with-foo=" $foo)))) | ||||
|    | ||||
| #+END_SRC | ||||
| 
 | ||||
| ... where '~' is 'build-quote' and '$' is 'build-unquote'.  Better yet, | ||||
| automatically compute the list of references of an expression passed to | ||||
| 'derivation-expression'. | ||||
| 
 | ||||
| Use a [[http://dorophone.blogspot.fr/2011/09/scheme-syntax-is-monad.html][monad]] for the syntax. | ||||
| 
 | ||||
| * synchronize non-GNU package descriptions with the [[http://directory.fsf.org][FSD]] | ||||
| 
 | ||||
| Meta-data for GNU packages, including descriptions and synopses, can be | ||||
|  |  | |||
|  | @ -22,9 +22,10 @@ | |||
| ;;; machine images that we build. | ||||
| ;;; | ||||
| 
 | ||||
| (use-modules (gnu packages zile) | ||||
| (use-modules (gnu) | ||||
| 
 | ||||
|              (gnu packages zile) | ||||
|              (gnu packages xorg) | ||||
|              (gnu packages base) | ||||
|              (gnu packages admin) | ||||
|              (gnu packages guile) | ||||
|              (gnu packages bash) | ||||
|  | @ -33,8 +34,6 @@ | |||
|              (gnu packages tor) | ||||
|              (gnu packages package-management) | ||||
| 
 | ||||
|              (gnu system shadow)                  ; 'user-account' | ||||
|              (gnu services base) | ||||
|              (gnu services networking) | ||||
|              (gnu services xorg)) | ||||
| 
 | ||||
|  | @ -42,11 +41,32 @@ | |||
|  (host-name "gnu") | ||||
|  (timezone "Europe/Paris") | ||||
|  (locale "en_US.UTF-8") | ||||
|  (bootloader (grub-configuration | ||||
|               (device "/dev/sda"))) | ||||
|  (file-systems | ||||
|   ;; We provide a dummy file system for /, but that's OK because the VM build | ||||
|   ;; code will automatically declare the / file system for us. | ||||
|   (list (file-system | ||||
|           (mount-point "/") | ||||
|           (device "dummy") | ||||
|           (type "dummy")) | ||||
|         ;; %fuse-control-file-system   ; needs fuse.ko | ||||
|         %binary-format-file-system)) | ||||
|  (users (list (user-account | ||||
|                (name "guest") | ||||
|                (uid 1000) (gid 100) | ||||
|                (group "wheel") | ||||
|                (password "") | ||||
|                (comment "Guest of GNU") | ||||
|                (home-directory "/home/guest")))) | ||||
|  (groups (list (user-group (name "root") (id 0)) | ||||
|                (user-group | ||||
|                 (name "wheel") | ||||
|                 (id 1) | ||||
|                 (members '("guest")))             ; allow 'guest' to use sudo | ||||
|                (user-group | ||||
|                 (name "users") | ||||
|                 (id 100) | ||||
|                 (members '("guest"))))) | ||||
|  (services (cons* (slim-service #:auto-login? #t | ||||
|                                 #:default-user "guest") | ||||
| 
 | ||||
|  | @ -56,6 +76,9 @@ | |||
|                                              #:gateway "10.0.2.2") | ||||
| 
 | ||||
|                   %base-services)) | ||||
|  (pam-services | ||||
|   ;; Explicitly allow for empty passwords. | ||||
|   (base-pam-services #:allow-empty-passwords? #t)) | ||||
|  (packages (list bash coreutils findutils grep sed | ||||
|                  procps psmisc less | ||||
|                  guile-2.0 dmd guix util-linux inetutils | ||||
|  |  | |||
|  | @ -38,13 +38,21 @@ if test "x$guix_build_daemon" = "xyes"; then | |||
|   case "$LIBGCRYPT_PREFIX" in | ||||
|     no) | ||||
|       LIBGCRYPT_CFLAGS="" | ||||
|       LIBGCRYPT_LIBS="" | ||||
|       ;; | ||||
|     *) | ||||
|       LIBGCRYPT_CFLAGS="-I$LIBGCRYPT_PREFIX/include" | ||||
|       LIBGCRYPT_LIBS="-L$LIBGCRYPT_PREFIX/lib -lgcrypt" | ||||
|       ;; | ||||
|   esac | ||||
| 
 | ||||
|   case "$LIBGCRYPT_LIBDIR" in | ||||
|     no) | ||||
|       LIBGCRYPT_LIBS="-lgcrypt" | ||||
|       ;; | ||||
|    *) | ||||
|       LIBGCRYPT_LIBS="-L$LIBGCRYPT_LIBDIR -lgcrypt" | ||||
|       ;; | ||||
|   esac | ||||
| 
 | ||||
|   AC_SUBST([LIBGCRYPT_CFLAGS]) | ||||
|   AC_SUBST([LIBGCRYPT_LIBS]) | ||||
| 
 | ||||
|  | @ -67,9 +75,14 @@ if test "x$guix_build_daemon" = "xyes"; then | |||
|   AC_CHECK_FUNCS([chroot unshare]) | ||||
|   AC_CHECK_HEADERS([sched.h sys/param.h sys/mount.h]) | ||||
| 
 | ||||
|   dnl Check for lutimes, optionally used for changing the mtime of | ||||
|   dnl symlinks. | ||||
|   AC_CHECK_FUNCS([lutimes]) | ||||
|   dnl lutimes and lchown: used when canonicalizing store items. | ||||
|   dnl posix_fallocate: used when extracting archives. | ||||
|   dnl vfork: to speed up spawning of helper programs. | ||||
|   dnl sched_setaffinity: to improve RPC locality. | ||||
|   dnl statvfs: to detect disk-full conditions. | ||||
|   dnl strsignal: for error reporting. | ||||
|   AC_CHECK_FUNCS([lutimes lchown posix_fallocate vfork sched_setaffinity \ | ||||
|      statvfs nanosleep strsignal]) | ||||
| 
 | ||||
|   dnl Check whether the store optimiser can optimise symlinks. | ||||
|   AC_MSG_CHECKING([whether it is possible to create a link to a symlink]) | ||||
|  |  | |||
							
								
								
									
										27
									
								
								configure.ac
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								configure.ac
									
										
									
									
									
								
							|  | @ -116,19 +116,44 @@ AC_ARG_WITH([libgcrypt-prefix], | |||
|     yes|no) | ||||
|       LIBGCRYPT="libgcrypt" | ||||
|       LIBGCRYPT_PREFIX="no" | ||||
|       LIBGCRYPT_LIBDIR="no" | ||||
|       ;; | ||||
|     *) | ||||
|       LIBGCRYPT="$withval/lib/libgcrypt" | ||||
|       LIBGCRYPT_PREFIX="$withval" | ||||
|       LIBGCRYPT_LIBDIR="$withval/lib" | ||||
|       ;; | ||||
|    esac], | ||||
|   [LIBGCRYPT="libgcrypt"]) | ||||
|   [LIBGCRYPT="libgcrypt" | ||||
|    LIBGCRYPT_PREFIX="no" | ||||
|    LIBGCRYPT_LIBDIR="no"]) | ||||
| 
 | ||||
| AC_ARG_WITH([libgcrypt-libdir], | ||||
|   [AS_HELP_STRING([--with-libgcrypt-libdir=DIR], | ||||
|      [search for GNU libgcrypt's shared library in DIR])], | ||||
|   [case "$withval" in | ||||
|     yes|no) | ||||
|       LIBGCRYPT="libgcrypt" | ||||
|       LIBGCRYPT_LIBDIR="no" | ||||
|       ;; | ||||
|     *) | ||||
|       LIBGCRYPT="$withval/libgcrypt" | ||||
|       LIBGCRYPT_LIBDIR="$withval" | ||||
|       ;; | ||||
|    esac], | ||||
|   [if test "x$LIBGCRYPT" = x; then | ||||
|       LIBGCRYPT="libgcrypt" | ||||
|    fi | ||||
|    if test "x$LIBGCRYPT_LIBDIR" = x; then | ||||
|       LIBGCRYPT_LIBDIR="no" | ||||
|    fi]) | ||||
| 
 | ||||
| dnl Library name suitable for `dynamic-link'. | ||||
| AC_MSG_CHECKING([for libgcrypt shared library name]) | ||||
| AC_MSG_RESULT([$LIBGCRYPT]) | ||||
| AC_SUBST([LIBGCRYPT]) | ||||
| AC_SUBST([LIBGCRYPT_PREFIX]) | ||||
| AC_SUBST([LIBGCRYPT_LIBDIR]) | ||||
| 
 | ||||
| GUIX_ASSERT_LIBGCRYPT_USABLE | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										381
									
								
								doc/guix.texi
									
										
									
									
									
								
							
							
						
						
									
										381
									
								
								doc/guix.texi
									
										
									
									
									
								
							|  | @ -11,7 +11,7 @@ | |||
| 
 | ||||
| @copying | ||||
| Copyright @copyright{} 2012, 2013, 2014 Ludovic Courtès@* | ||||
| Copyright @copyright{} 2013 Andreas Enge@* | ||||
| Copyright @copyright{} 2013, 2014 Andreas Enge@* | ||||
| Copyright @copyright{} 2013 Nikita Karetnikov | ||||
| 
 | ||||
| Permission is granted to copy, distribute and/or modify this document | ||||
|  | @ -828,6 +828,17 @@ name: libgc | |||
| version: 7.2alpha6 | ||||
| @end example | ||||
| 
 | ||||
| Similarly, to show the name of all the packages available under the | ||||
| terms of the GNU@tie{}LGPL version 3: | ||||
| 
 | ||||
| @example | ||||
| $ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"' | ||||
| name: elfutils | ||||
| 
 | ||||
| name: gmp | ||||
| @dots{} | ||||
| @end example | ||||
| 
 | ||||
| @item --list-installed[=@var{regexp}] | ||||
| @itemx -I [@var{regexp}] | ||||
| List the currently installed packages in the specified profile, with the | ||||
|  | @ -1305,6 +1316,7 @@ package definitions. | |||
| * The Store::                   Manipulating the package store. | ||||
| * Derivations::                 Low-level interface to package derivations. | ||||
| * The Store Monad::             Purely functional interface to the store. | ||||
| * G-Expressions::               Manipulating build expressions. | ||||
| @end menu | ||||
| 
 | ||||
| @node Defining Packages | ||||
|  | @ -1762,13 +1774,21 @@ to a Bash executable in the store: | |||
|                            "echo hello world > $out\n" '()))) | ||||
|   (derivation store "foo" | ||||
|               bash `("-e" ,builder) | ||||
|               #:inputs `((,bash) (,builder)) | ||||
|               #:env-vars '(("HOME" . "/homeless")))) | ||||
| @result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo> | ||||
| @end lisp | ||||
| 
 | ||||
| As can be guessed, this primitive is cumbersome to use directly.  An | ||||
| improved variant is @code{build-expression->derivation}, which allows | ||||
| the caller to directly pass a Guile expression as the build script: | ||||
| As can be guessed, this primitive is cumbersome to use directly.  A | ||||
| better approach is to write build scripts in Scheme, of course!  The | ||||
| best course of action for that is to write the build code as a | ||||
| ``G-expression'', and to pass it to @code{gexp->derivation}.  For more | ||||
| information, @ref{G-Expressions}. | ||||
| 
 | ||||
| Once upon a time, @code{gexp->derivation} did not exist and constructing | ||||
| derivations with build code written in Scheme was achieved with | ||||
| @code{build-expression->derivation}, documented below.  This procedure | ||||
| is now deprecated in favor of the much nicer @code{gexp->derivation}. | ||||
| 
 | ||||
| @deffn {Scheme Procedure} build-expression->derivation @var{store} @ | ||||
|        @var{name} @var{exp} @ | ||||
|  | @ -1816,20 +1836,6 @@ containing one file: | |||
| @result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}> | ||||
| @end lisp | ||||
| 
 | ||||
| @cindex strata of code | ||||
| Remember that the build expression passed to | ||||
| @code{build-expression->derivation} is run by a separate Guile process | ||||
| than the one that calls @code{build-expression->derivation}: it is run | ||||
| by a Guile process launched by the daemon, typically in a chroot.  So, | ||||
| while there is a single language for both the @dfn{host} and the build | ||||
| side, there are really two @dfn{strata} of code: the host-side, and the | ||||
| build-side code@footnote{The term @dfn{stratum} in this context was | ||||
| coined by Manuel Serrano et al. in the context of their work on Hop.}. | ||||
| This distinction is important to keep in mind, notably when using | ||||
| higher-level constructs such as @var{gnu-build-system} (@pxref{Defining | ||||
| Packages}).  For this reason, Guix modules that are meant to be used in | ||||
| the build stratum are kept in the @code{(guix build @dots{})} name | ||||
| space. | ||||
| 
 | ||||
| @node The Store Monad | ||||
| @section The Store Monad | ||||
|  | @ -1873,11 +1879,12 @@ Consider this ``normal'' procedure: | |||
| 
 | ||||
| Using @code{(guix monads)}, it may be rewritten as a monadic function: | ||||
| 
 | ||||
| @c FIXME: Find a better example, one that uses 'mlet'. | ||||
| @example | ||||
| (define (sh-symlink) | ||||
|   ;; Same, but return a monadic value. | ||||
|   (mlet %store-monad ((sh (package-file bash "bin"))) | ||||
|     (derivation-expression "sh" `(symlink ,sh %output)))) | ||||
|   (gexp->derivation "sh" | ||||
|                     #~(symlink (string-append #$bash "/bin/bash") #$output))) | ||||
| @end example | ||||
| 
 | ||||
| There are two things to note in the second version: the @code{store} | ||||
|  | @ -1978,21 +1985,206 @@ directory of @var{package}.  When @var{file} is omitted, return the name | |||
| of the @var{output} directory of @var{package}. | ||||
| @end deffn | ||||
| 
 | ||||
| @deffn {Monadic Procedure} derivation-expression @var{name} @var{exp} @ | ||||
|        [#:system (%current-system)] [#:inputs '()] @ | ||||
|        [#:outputs '("out")] [#:hash #f] @ | ||||
|        [#:hash-algo #f] [#:env-vars '()] [#:modules '()] @ | ||||
|        [#:references-graphs #f] [#:guile-for-build #f] | ||||
| Monadic version of @code{build-expression->derivation} | ||||
| (@pxref{Derivations}). | ||||
| @end deffn | ||||
| 
 | ||||
| @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}] | ||||
| Monadic version of @code{package-derivation} (@pxref{Defining | ||||
| Packages}). | ||||
| @end deffn | ||||
| 
 | ||||
| 
 | ||||
| @node G-Expressions | ||||
| @section G-Expressions | ||||
| 
 | ||||
| @cindex G-expression | ||||
| @cindex build code quoting | ||||
| So we have ``derivations'', which represent a sequence of build actions | ||||
| to be performed to produce an item in the store (@pxref{Derivations}). | ||||
| Those build actions are performed when asking the daemon to actually | ||||
| build the derivations; they are run by the daemon in a container | ||||
| (@pxref{Invoking guix-daemon}). | ||||
| 
 | ||||
| @cindex strata of code | ||||
| It should come as no surprise that we like to write those build actions | ||||
| in Scheme.  When we do that, we end up with two @dfn{strata} of Scheme | ||||
| code@footnote{The term @dfn{stratum} in this context was coined by | ||||
| Manuel Serrano et al.@: in the context of their work on Hop.  Oleg | ||||
| Kiselyov, who has written insightful | ||||
| @url{http://okmij.org/ftp/meta-programming/#meta-scheme, essays and code | ||||
| on this topic}, refers to this kind of code generation as | ||||
| @dfn{staging}.}: the ``host code''---code that defines packages, talks | ||||
| to the daemon, etc.---and the ``build code''---code that actually | ||||
| performs build actions, such as making directories, invoking | ||||
| @command{make}, etc. | ||||
| 
 | ||||
| To describe a derivation and its build actions, one typically needs to | ||||
| embed build code inside host code.  It boils down to manipulating build | ||||
| code as data, and Scheme's homoiconicity---code has a direct | ||||
| representation as data---comes in handy for that.  But we need more than | ||||
| Scheme's normal @code{quasiquote} mechanism to construct build | ||||
| expressions. | ||||
| 
 | ||||
| The @code{(guix gexp)} module implements @dfn{G-expressions}, a form of | ||||
| S-expressions adapted to build expressions.  G-expressions, or | ||||
| @dfn{gexps}, consist essentially in three syntactic forms: @code{gexp}, | ||||
| @code{ungexp}, and @code{ungexp-splicing} (or simply: @code{#~}, | ||||
| @code{#$}, and @code{#$@@}), which are comparable respectively to | ||||
| @code{quasiquote}, @code{unquote}, and @code{unquote-splicing} | ||||
| (@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile | ||||
| Reference Manual}).  However, there are major differences: | ||||
| 
 | ||||
| @itemize | ||||
| @item | ||||
| Gexps are meant to be written to a file and run or manipulated by other | ||||
| processes. | ||||
| 
 | ||||
| @item | ||||
| When a package or derivation is unquoted inside a gexp, the result is as | ||||
| if its output file name had been introduced. | ||||
| 
 | ||||
| @item | ||||
| Gexps carry information about the packages or derivations they refer to, | ||||
| and these dependencies are automatically added as inputs to the build | ||||
| processes that use them. | ||||
| @end itemize | ||||
| 
 | ||||
| To illustrate the idea, here is an example of a gexp: | ||||
| 
 | ||||
| @example | ||||
| (define build-exp | ||||
|   #~(begin | ||||
|       (mkdir #$output) | ||||
|       (chdir #$output) | ||||
|       (symlink (string-append #$coreutils "/bin/ls")  | ||||
|                "list-files"))) | ||||
| @end example | ||||
| 
 | ||||
| This gexp can be passed to @code{gexp->derivation}; we obtain a | ||||
| derivation that builds a directory containing exactly one symlink to | ||||
| @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}: | ||||
| 
 | ||||
| @example | ||||
| (gexp->derivation "the-thing" build-exp) | ||||
| @end example | ||||
| 
 | ||||
| As one would expect, the @code{"/gnu/store/@dots{}-coreutils-8.22"} string is | ||||
| substituted to the reference to the @var{coreutils} package in the | ||||
| actual build code, and @var{coreutils} is automatically made an input to | ||||
| the derivation.  Likewise, @code{#$output} (equivalent to @code{(ungexp | ||||
| output)}) is replaced by a string containing the derivation's output | ||||
| directory name.  The syntactic form to construct gexps is summarized | ||||
| below. | ||||
| 
 | ||||
| @deffn {Scheme Syntax} #~@var{exp} | ||||
| @deffnx {Scheme Syntax} (gexp @var{exp}) | ||||
| Return a G-expression containing @var{exp}.  @var{exp} may contain one | ||||
| or more of the following forms: | ||||
| 
 | ||||
| @table @code | ||||
| @item #$@var{obj} | ||||
| @itemx (ungexp @var{obj}) | ||||
| Introduce a reference to @var{obj}.  @var{obj} may be a package or a | ||||
| derivation, in which case the @code{ungexp} form is replaced by its | ||||
| output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}. | ||||
| 
 | ||||
| If @var{obj} is a list, it is traversed and any package or derivation | ||||
| references are substituted similarly. | ||||
| 
 | ||||
| If @var{obj} is another gexp, its contents are inserted and its | ||||
| dependencies are added to those of the containing gexp. | ||||
| 
 | ||||
| If @var{obj} is another kind of object, it is inserted as is. | ||||
| 
 | ||||
| @item #$@var{package-or-derivation}:@var{output} | ||||
| @itemx (ungexp @var{package-or-derivation} @var{output}) | ||||
| This is like the form above, but referring explicitly to the | ||||
| @var{output} of @var{package-or-derivation}---this is useful when | ||||
| @var{package-or-derivation} produces multiple outputs (@pxref{Packages | ||||
| with Multiple Outputs}). | ||||
| 
 | ||||
| @item #$output[:@var{output}] | ||||
| @itemx (ungexp output [@var{output}]) | ||||
| Insert a reference to derivation output @var{output}, or to the main | ||||
| output when @var{output} is omitted. | ||||
| 
 | ||||
| This only makes sense for gexps passed to @code{gexp->derivation}. | ||||
| 
 | ||||
| @item #$@@@var{lst} | ||||
| @itemx (ungexp-splicing @var{lst}) | ||||
| Like the above, but splices the contents of @var{lst} inside the | ||||
| containing list. | ||||
| 
 | ||||
| @end table | ||||
| 
 | ||||
| G-expressions created by @code{gexp} or @code{#~} are run-time objects | ||||
| of the @code{gexp?} type (see below.) | ||||
| @end deffn | ||||
| 
 | ||||
| @deffn {Scheme Procedure} gexp? @var{obj} | ||||
| Return @code{#t} if @var{obj} is a G-expression. | ||||
| @end deffn | ||||
| 
 | ||||
| G-expressions are meant to be written to disk, either as code building | ||||
| some derivation, or as plain files in the store.  The monadic procedures | ||||
| below allow you to do that (@pxref{The Store Monad}, for more | ||||
| information about monads.) | ||||
| 
 | ||||
| @deffn {Monadic Procedure} gexp->derivation @var{name} @var{exp} @ | ||||
|        [#:system (%current-system)] [#:inputs '()] @ | ||||
|        [#:hash #f] [#:hash-algo #f] @ | ||||
|        [#:recursive? #f] [#:env-vars '()] [#:modules '()] @ | ||||
|        [#:references-graphs #f] [#:local-build? #f] @ | ||||
|        [#:guile-for-build #f] | ||||
| Return a derivation @var{name} that runs @var{exp} (a gexp) with | ||||
| @var{guile-for-build} (a derivation) on @var{system}. | ||||
| 
 | ||||
| Make @var{modules} available in the evaluation context of @var{EXP}; | ||||
| @var{MODULES} is a list of names of Guile modules from the current | ||||
| search path to be copied in the store, compiled, and made available in | ||||
| the load path during the execution of @var{exp}---e.g., @code{((guix | ||||
| build utils) (guix build gnu-build-system))}. | ||||
| 
 | ||||
| The other arguments are as for @code{derivation} (@pxref{Derivations}). | ||||
| @end deffn | ||||
| 
 | ||||
| @deffn {Monadic Procedure} gexp->script @var{name} @var{exp} | ||||
| Return an executable script @var{name} that runs @var{exp} using | ||||
| @var{guile} with @var{modules} in its search path. | ||||
| 
 | ||||
| The example below builds a script that simply invokes the @command{ls} | ||||
| command: | ||||
| 
 | ||||
| @example | ||||
| (use-modules (guix gexp) (gnu packages base)) | ||||
| 
 | ||||
| (gexp->script "list-files" | ||||
|               #~(execl (string-append #$coreutils "/bin/ls") | ||||
|                        "ls")) | ||||
| @end example | ||||
| 
 | ||||
| When ``running'' it through the store (@pxref{The Store Monad, | ||||
| @code{run-with-store}}), we obtain a derivation that produces an | ||||
| executable file @file{/gnu/store/@dots{}-list-files} along these lines: | ||||
| 
 | ||||
| @example | ||||
| #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds | ||||
| !# | ||||
| (execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls") | ||||
|        "ls") | ||||
| @end example | ||||
| @end deffn | ||||
| 
 | ||||
| @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} | ||||
| Return a derivation that builds a file @var{name} containing @var{exp}. | ||||
| 
 | ||||
| The resulting file holds references to all the dependencies of @var{exp} | ||||
| or a subset thereof. | ||||
| @end deffn | ||||
| 
 | ||||
| Of course, in addition to gexps embedded in ``host'' code, there are | ||||
| also modules containing build tools.  To make it clear that they are | ||||
| meant to be used in the build stratum, these modules are kept in the | ||||
| @code{(guix build @dots{})} name space. | ||||
| 
 | ||||
| 
 | ||||
| @c ********************************************************************* | ||||
| @node Utilities | ||||
| @chapter Utilities | ||||
|  | @ -2412,6 +2604,7 @@ to join!  @ref{Contributing}, for information about how you can help. | |||
| @node Installing Debugging Files | ||||
| @section Installing Debugging Files | ||||
| 
 | ||||
| @cindex debugging files | ||||
| Program binaries, as produced by the GCC compilers for instance, are | ||||
| typically written in the ELF format, with a section containing | ||||
| @dfn{debugging information}.  Debugging information is what allows the | ||||
|  | @ -2442,7 +2635,7 @@ installs the debugging information for the GNU C Library and for GNU | |||
| Guile: | ||||
| 
 | ||||
| @example | ||||
| guix package -i glibc:debug -i guile:debug | ||||
| guix package -i glibc:debug guile:debug | ||||
| @end example | ||||
| 
 | ||||
| GDB must then be told to look for debug files in the user's profile, by | ||||
|  | @ -2457,9 +2650,16 @@ GDB}): | |||
| From there on, GDB will pick up debugging information from the | ||||
| @code{.debug} files under @file{~/.guix-profile/lib/debug}. | ||||
| 
 | ||||
| In addition, you will most likely want GDB to be able to show the source | ||||
| code being debugged.  To do that, you will have to unpack the source | ||||
| code of the package of interest (obtained with @code{guix build | ||||
| --source}, @pxref{Invoking guix build}), and to point GDB to that source | ||||
| directory using the @code{directory} command (@pxref{Source Path, | ||||
| @code{directory},, gdb, Debugging with GDB}). | ||||
| 
 | ||||
| @c XXX: keep me up-to-date | ||||
| The @code{debug} output mechanism in Guix is implemented by the | ||||
| @code{gnu-build-system} (@pxref{Defining Packages}).  Currently, it is | ||||
| @code{gnu-build-system} (@pxref{Build Systems}).  Currently, it is | ||||
| opt-in---debugging information is available only for those packages | ||||
| whose definition explicitly declares a @code{debug} output.  This may be | ||||
| changed to opt-out in the future, if our build farm servers can handle | ||||
|  | @ -2570,6 +2770,7 @@ needed is to review and apply the patch. | |||
| * Package Naming::       What's in a name? | ||||
| * Version Numbers::      When the name is not enough. | ||||
| * Python Modules::       Taming the snake. | ||||
| * Perl Modules::         Little pearls. | ||||
| @end menu | ||||
| 
 | ||||
| @node Software Freedom | ||||
|  | @ -2611,12 +2812,15 @@ the string in the @code{name} field of a package definition.  This name | |||
| is used by package management commands such as | ||||
| @command{guix package} and @command{guix build}. | ||||
| 
 | ||||
| Both are usually the same and correspond to the lowercase conversion of the | ||||
| project name chosen upstream.  For instance, the GNUnet project is packaged | ||||
| as @code{gnunet}.  We do not add @code{lib} prefixes for library packages, | ||||
| unless these are already part of the official project name.  But see | ||||
| @ref{Python Modules} for special rules concerning modules for | ||||
| the Python language. | ||||
| Both are usually the same and correspond to the lowercase conversion of | ||||
| the project name chosen upstream, with underscores replaced with | ||||
| hyphens.  For instance, GNUnet is available as @code{gnunet}, and | ||||
| SDL_net as @code{sdl-net}. | ||||
| 
 | ||||
| We do not add @code{lib} prefixes for library packages, unless these are | ||||
| already part of the official project name.  But see @pxref{Python | ||||
| Modules} and @ref{Perl Modules} for special rules concerning modules for | ||||
| the Python and Perl languages. | ||||
| 
 | ||||
| 
 | ||||
| @node Version Numbers | ||||
|  | @ -2678,6 +2882,19 @@ for instance, the module python-dateutil is packaged under the names | |||
| @code{python-dateutil} and @code{python2-dateutil}. | ||||
| 
 | ||||
| 
 | ||||
| @node Perl Modules | ||||
| @subsection Perl Modules | ||||
| 
 | ||||
| Perl programs standing for themselves are named as any other package, | ||||
| using the lowercase upstream name. | ||||
| For Perl packages containing a single class, we use the lowercase class name, | ||||
| replace all occurrences of @code{::} by dashes and prepend the prefix | ||||
| @code{perl-}. | ||||
| So the class @code{XML::Parser} becomes @code{perl-xml-parser}. | ||||
| Modules containing several classes keep their lowercase upstream name and | ||||
| are also prepended by @code{perl-}.  Such modules tend to have the word | ||||
| @code{perl} somewhere in their name, which gets dropped in favor of the | ||||
| prefix.  For instance, @code{libwww-perl} becomes @code{perl-libwww}. | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -2895,9 +3112,8 @@ Linux-Libre kernel, initial RAM disk, and boot loader looks like this: | |||
| 
 | ||||
| @findex operating-system | ||||
| @lisp | ||||
| (use-modules (gnu services base)   ; for '%base-services' | ||||
| (use-modules (gnu)   ; for 'user-account', '%base-services', etc. | ||||
|              (gnu services ssh)    ; for 'lsh-service' | ||||
|              (gnu system shadow)   ; for 'user-account' | ||||
|              (gnu packages base)   ; Coreutils, grep, etc. | ||||
|              (gnu packages bash)   ; Bash | ||||
|              (gnu packages admin)  ; dmd, Inetutils | ||||
|  | @ -2911,6 +3127,12 @@ Linux-Libre kernel, initial RAM disk, and boot loader looks like this: | |||
|    (host-name "komputilo") | ||||
|    (timezone "Europe/Paris") | ||||
|    (locale "fr_FR.UTF-8") | ||||
|    (bootloader (grub-configuration | ||||
|                  (device "/dev/sda"))) | ||||
|    (file-systems (list (file-system | ||||
|                          (device "/dev/disk/by-label/root") | ||||
|                          (mount-point "/") | ||||
|                          (type "ext3")))) | ||||
|    (users (list (user-account | ||||
|                  (name "alice") | ||||
|                  (password "") | ||||
|  | @ -2986,6 +3208,29 @@ operating system is instantiate.  Currently the following values are | |||
| supported: | ||||
| 
 | ||||
| @table @code | ||||
| @item build | ||||
| Build the operating system's derivation, which includes all the | ||||
| configuration files and programs needed to boot and run the system. | ||||
| This action does not actually install anything. | ||||
| 
 | ||||
| @item init | ||||
| Populate the given directory with all the files necessary to run the | ||||
| operating system specified in @var{file}.  This is useful for first-time | ||||
| installations of the GNU system.  For instance: | ||||
| 
 | ||||
| @example | ||||
| guix system init my-os-config.scm /mnt | ||||
| @end example | ||||
| 
 | ||||
| copies to @file{/mnt} all the store items required by the configuration | ||||
| specified in @file{my-os-config.scm}.  This includes configuration | ||||
| files, packages, and so on.  It also creates other essential files | ||||
| needed for the system to operate correctly---e.g., the @file{/etc}, | ||||
| @file{/var}, and @file{/run} directories, and the @file{/bin/sh} file. | ||||
| 
 | ||||
| This command also installs GRUB on the device specified in | ||||
| @file{my-os-config}, unless the @option{--no-grub} option was passed. | ||||
| 
 | ||||
| @item vm | ||||
| @cindex virtual machine | ||||
| Build a virtual machine that contain the operating system declared in | ||||
|  | @ -2994,9 +3239,23 @@ Build a virtual machine that contain the operating system declared in | |||
| The VM shares its store with the host system. | ||||
| 
 | ||||
| @item vm-image | ||||
| Return a virtual machine image of the operating system declared in | ||||
| @var{file} that stands alone.  Use the @option{--image-size} option to | ||||
| specify the size of the image. | ||||
| @itemx disk-image | ||||
| Return a virtual machine or disk image of the operating system declared | ||||
| in @var{file} that stands alone.  Use the @option{--image-size} option | ||||
| to specify the size of the image. | ||||
| 
 | ||||
| When using @code{vm-image}, the returned image is in qcow2 format, which | ||||
| the QEMU emulator can efficiently use. | ||||
| 
 | ||||
| When using @code{disk-image}, a raw disk image is produced; it can be | ||||
| copied as is to a USB stick, for instance.  Assuming @code{/dev/sdc} is | ||||
| the device corresponding to a USB stick, one can copy the image on it | ||||
| using the following command: | ||||
| 
 | ||||
| @example | ||||
| # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc | ||||
| @end example | ||||
| 
 | ||||
| @end table | ||||
| 
 | ||||
| @var{options} can contain any of the common build options provided by | ||||
|  | @ -3039,29 +3298,33 @@ like: | |||
| 
 | ||||
| @lisp | ||||
| (define (nscd-service) | ||||
|   (mlet %store-monad ((nscd (package-file glibc "sbin/nscd"))) | ||||
|   (with-monad %store-monad | ||||
|     (return (service | ||||
|              (documentation "Run libc's name service cache daemon.") | ||||
|              (provision '(nscd)) | ||||
|              (start `(make-forkexec-constructor ,nscd "-f" "/dev/null" | ||||
|                                                 "--foreground")) | ||||
|              (stop  `(make-kill-destructor)) | ||||
| 
 | ||||
|              (respawn? #f) | ||||
|              (inputs `(("glibc" ,glibc))))))) | ||||
|              (activate #~(begin | ||||
|                            (use-modules (guix build utils)) | ||||
|                            (mkdir-p "/var/run/nscd"))) | ||||
|              (start #~(make-forkexec-constructor | ||||
|                        (string-append #$glibc "/sbin/nscd") | ||||
|                        "-f" "/dev/null" "--foreground")) | ||||
|              (stop #~(make-kill-destructor)) | ||||
|              (respawn? #f))))) | ||||
| @end lisp | ||||
| 
 | ||||
| @noindent | ||||
| The @code{inputs} field specifies that this service depends on the | ||||
| @var{glibc} package---the package that contains the @command{nscd} | ||||
| program.  The @code{start} and @code{stop} fields are expressions that | ||||
| make use of dmd's facilities to start and stop processes (@pxref{Service | ||||
| De- and Constructors,,, dmd, GNU dmd Manual}).  The @code{provision} | ||||
| field specifies the name under which this service is known to dmd, and | ||||
| @code{documentation} specifies on-line documentation.  Thus, the | ||||
| commands @command{deco start ncsd}, @command{deco stop nscd}, and | ||||
| @command{deco doc nscd} will do what you would expect (@pxref{Invoking | ||||
| deco,,, dmd, GNU dmd Manual}). | ||||
| The @code{activate}, @code{start}, and @code{stop} fields are G-expressions | ||||
| (@pxref{G-Expressions}).  The @code{activate} field contains a script to | ||||
| run at ``activation'' time; it makes sure that the @file{/var/run/nscd} | ||||
| directory exists before @command{nscd} is started. | ||||
| 
 | ||||
| The @code{start} and @code{stop} fields refer to dmd's facilities to | ||||
| start and stop processes (@pxref{Service De- and Constructors,,, dmd, | ||||
| GNU dmd Manual}).  The @code{provision} field specifies the name under | ||||
| which this service is known to dmd, and @code{documentation} specifies | ||||
| on-line documentation.  Thus, the commands @command{deco start ncsd}, | ||||
| @command{deco stop nscd}, and @command{deco doc nscd} will do what you | ||||
| would expect (@pxref{Invoking deco,,, dmd, GNU dmd Manual}). | ||||
| 
 | ||||
| 
 | ||||
| @c ********************************************************************* | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| # GNU Guix --- Functional package management for GNU | ||||
| # Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| # Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| # Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| # Copyright © 2013, 2014 Mark H Weaver <mhw@netris.org> | ||||
| # | ||||
| # This file is part of GNU Guix. | ||||
|  | @ -22,6 +22,7 @@ | |||
| # binaries. | ||||
| 
 | ||||
| GNU_SYSTEM_MODULES =				\ | ||||
|   gnu.scm					\ | ||||
|   gnu/packages.scm				\ | ||||
|   gnu/packages/acct.scm				\ | ||||
|   gnu/packages/acl.scm				\ | ||||
|  | @ -35,14 +36,17 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/autogen.scm			\ | ||||
|   gnu/packages/autotools.scm			\ | ||||
|   gnu/packages/avahi.scm			\ | ||||
|   gnu/packages/backup.scm			\ | ||||
|   gnu/packages/base.scm				\ | ||||
|   gnu/packages/bash.scm				\ | ||||
|   gnu/packages/bdb.scm				\ | ||||
|   gnu/packages/bdw-gc.scm			\ | ||||
|   gnu/packages/bittorrent.scm			\ | ||||
|   gnu/packages/bison.scm			\ | ||||
|   gnu/packages/boost.scm			\ | ||||
|   gnu/packages/bootstrap.scm			\ | ||||
|   gnu/packages/calcurse.scm			\ | ||||
|   gnu/packages/ccache.scm			\ | ||||
|   gnu/packages/cdrom.scm			\ | ||||
|   gnu/packages/cflow.scm			\ | ||||
|   gnu/packages/check.scm			\ | ||||
|  | @ -61,6 +65,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/ddrescue.scm			\ | ||||
|   gnu/packages/dictionaries.scm			\ | ||||
|   gnu/packages/docbook.scm			\ | ||||
|   gnu/packages/doxygen.scm			\ | ||||
|   gnu/packages/dwm.scm				\ | ||||
|   gnu/packages/ed.scm				\ | ||||
|   gnu/packages/elf.scm				\ | ||||
|  | @ -72,6 +77,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/fonts.scm			\ | ||||
|   gnu/packages/fontutils.scm			\ | ||||
|   gnu/packages/freeipmi.scm			\ | ||||
|   gnu/packages/ftp.scm				\ | ||||
|   gnu/packages/games.scm			\ | ||||
|   gnu/packages/gawk.scm				\ | ||||
|   gnu/packages/gcal.scm				\ | ||||
|  | @ -83,6 +89,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/gettext.scm			\ | ||||
|   gnu/packages/ghostscript.scm			\ | ||||
|   gnu/packages/giflib.scm			\ | ||||
|   gnu/packages/gimp.scm				\ | ||||
|   gnu/packages/gkrellm.scm			\ | ||||
|   gnu/packages/gl.scm				\ | ||||
|   gnu/packages/glib.scm				\ | ||||
|  | @ -147,11 +154,13 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/make-bootstrap.scm		\ | ||||
|   gnu/packages/maths.scm			\ | ||||
|   gnu/packages/mc.scm				\ | ||||
|   gnu/packages/mcrypt.scm			\ | ||||
|   gnu/packages/messaging.scm			\ | ||||
|   gnu/packages/mit-krb5.scm			\ | ||||
|   gnu/packages/moe.scm				\ | ||||
|   gnu/packages/mpd.scm				\ | ||||
|   gnu/packages/mp3.scm				\ | ||||
|   gnu/packages/mpi.scm				\ | ||||
|   gnu/packages/multiprecision.scm		\ | ||||
|   gnu/packages/mtools.scm			\ | ||||
|   gnu/packages/mysql.scm			\ | ||||
|  | @ -170,6 +179,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/parallel.scm			\ | ||||
|   gnu/packages/parted.scm			\ | ||||
|   gnu/packages/patchutils.scm			\ | ||||
|   gnu/packages/pciutils.scm			\ | ||||
|   gnu/packages/pcre.scm				\ | ||||
|   gnu/packages/pdf.scm				\ | ||||
|   gnu/packages/pem.scm				\ | ||||
|  | @ -236,12 +246,15 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/zip.scm				\ | ||||
| 						\ | ||||
|   gnu/services.scm				\ | ||||
|   gnu/services/avahi.scm			\ | ||||
|   gnu/services/base.scm				\ | ||||
|   gnu/services/dbus.scm				\ | ||||
|   gnu/services/dmd.scm				\ | ||||
|   gnu/services/networking.scm			\ | ||||
|   gnu/services/xorg.scm				\ | ||||
| 						\ | ||||
|   gnu/system.scm				\ | ||||
|   gnu/system/file-systems.scm			\ | ||||
|   gnu/system/grub.scm				\ | ||||
|   gnu/system/linux.scm				\ | ||||
|   gnu/system/linux-initrd.scm			\ | ||||
|  | @ -259,7 +272,9 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/binutils-loongson-workaround.patch	\ | ||||
|   gnu/packages/patches/bitlbee-fix-tests.patch			\ | ||||
|   gnu/packages/patches/bitlbee-memset-fix.patch			\ | ||||
|   gnu/packages/patches/ccache-stdc-predef-test.patch		\ | ||||
|   gnu/packages/patches/cdparanoia-fpic.patch			\ | ||||
|   gnu/packages/patches/clucene-pkgconfig.patch			\ | ||||
|   gnu/packages/patches/cmake-fix-tests.patch			\ | ||||
|   gnu/packages/patches/coreutils-dummy-man.patch		\ | ||||
|   gnu/packages/patches/coreutils-skip-nohup.patch		\ | ||||
|  | @ -269,6 +284,8 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/diffutils-gets-undeclared.patch		\ | ||||
|   gnu/packages/patches/dmd-getpw.patch				\ | ||||
|   gnu/packages/patches/dmd-tests-longer-sleeps.patch		\ | ||||
|   gnu/packages/patches/doxygen-test.patch			\ | ||||
|   gnu/packages/patches/doxygen-tmake.patch			\ | ||||
|   gnu/packages/patches/emacs-configure-sh.patch			\ | ||||
|   gnu/packages/patches/findutils-absolute-paths.patch		\ | ||||
|   gnu/packages/patches/flac-fix-memcmp-not-declared.patch	\ | ||||
|  | @ -311,13 +328,20 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/make-impure-dirs.patch			\ | ||||
|   gnu/packages/patches/mc-fix-ncurses-build.patch		\ | ||||
|   gnu/packages/patches/mcron-install.patch			\ | ||||
|   gnu/packages/patches/mhash-keygen-test-segfault.patch		\ | ||||
|   gnu/packages/patches/mit-krb5-init-fix.patch			\ | ||||
|   gnu/packages/patches/mpc123-initialize-ao.patch		\ | ||||
|   gnu/packages/patches/openssl-CVE-2010-5298.patch		\ | ||||
|   gnu/packages/patches/openssl-extension-checking-fixes.patch	\ | ||||
|   gnu/packages/patches/patchelf-page-size.patch			\ | ||||
|   gnu/packages/patches/patchutils-xfail-gendiff-tests.patch	\ | ||||
|   gnu/packages/patches/perl-no-sys-dirs.patch			\ | ||||
|   gnu/packages/patches/perl-tk-x11-discover.patch		\ | ||||
|   gnu/packages/patches/petsc-fix-threadcomm.patch		\ | ||||
|   gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\ | ||||
|   gnu/packages/patches/procps-make-3.82.patch			\ | ||||
|   gnu/packages/patches/pybugz-encode-error.patch		\ | ||||
|   gnu/packages/patches/pybugz-stty.patch			\ | ||||
|   gnu/packages/patches/python-fix-tests.patch			\ | ||||
|   gnu/packages/patches/python-libffi-mips-n32-fix.patch		\ | ||||
|   gnu/packages/patches/qt4-tests.patch				\ | ||||
|  | @ -325,11 +349,14 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/readline-link-ncurses.patch		\ | ||||
|   gnu/packages/patches/ripperx-libm.patch			\ | ||||
|   gnu/packages/patches/scheme48-tests.patch			\ | ||||
|   gnu/packages/patches/scotch-test-threading.patch		\ | ||||
|   gnu/packages/patches/slim-session.patch			\ | ||||
|   gnu/packages/patches/slim-config.patch			\ | ||||
|   gnu/packages/patches/slim-sigusr1.patch			\ | ||||
|   gnu/packages/patches/soprano-find-clucene.patch		\ | ||||
|   gnu/packages/patches/source-highlight-regexrange-test.patch	\ | ||||
|   gnu/packages/patches/sqlite-large-page-size-fix.patch		\ | ||||
|   gnu/packages/patches/superlu-dist-scotchmetis.patch		\ | ||||
|   gnu/packages/patches/tcsh-fix-autotest.patch			\ | ||||
|   gnu/packages/patches/teckit-cstdio.patch			\ | ||||
|   gnu/packages/patches/valgrind-glibc.patch			\ | ||||
|  |  | |||
							
								
								
									
										46
									
								
								gnu.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								gnu.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This composite module re-exports core parts the (gnu …) public modules. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (eval-when (eval load compile) | ||||
|   (begin | ||||
|     (define %public-modules | ||||
|       '((gnu system) | ||||
|         (gnu system file-systems) | ||||
|         (gnu system grub)                         ; 'grub-configuration' | ||||
|         (gnu system linux)                        ; 'base-pam-services' | ||||
|         (gnu system shadow)                       ; 'user-account' | ||||
|         (gnu system linux-initrd) | ||||
|         (gnu services) | ||||
|         (gnu services base) | ||||
|         (gnu packages) | ||||
|         (gnu packages base))) | ||||
| 
 | ||||
|     (for-each (let ((i (module-public-interface (current-module)))) | ||||
|                 (lambda (m) | ||||
|                   (module-use! i (resolve-interface m)))) | ||||
|               %public-modules))) | ||||
| 
 | ||||
| ;;; gnu.scm ends here | ||||
|  | @ -40,10 +40,14 @@ | |||
|                 #:select (tar)) | ||||
|   #:use-module ((gnu packages compression) | ||||
|                 #:select (gzip)) | ||||
|   #:use-module ((gnu packages openssl) | ||||
|                 #:renamer (symbol-prefix-proc 'o:)) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages flex) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages texinfo) | ||||
|   #:use-module (gnu packages groff) | ||||
|   #:use-module (gnu packages xorg)) | ||||
| 
 | ||||
| (define-public dmd | ||||
|  | @ -471,6 +475,28 @@ network statistics collection, security monitoring, network debugging, etc.") | |||
|     ;; fad-*.c and a couple other files are BSD-4, but the rest is BSD-3. | ||||
|     (license bsd-3))) | ||||
| 
 | ||||
| (define-public tcpdump | ||||
|   (package | ||||
|     (name "tcpdump") | ||||
|     (version "4.5.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://www.tcpdump.org/release/tcpdump-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "15hb7zkzd66nag102qbv100hcnf7frglbkylmr8adwr8f5jkkaql")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("libpcap" ,libpcap) | ||||
|               ("openssl" ,o:openssl))) | ||||
|     (native-inputs `(("perl" ,perl)))        ; for tests | ||||
|     (home-page "http://www.tcpdump.org/") | ||||
|     (synopsis "Network packet analyzer") | ||||
|     (description | ||||
|      "Tcpdump is a command-line tool to analyze network traffic passing | ||||
| through the network interface controller.") | ||||
|     (license bsd-3))) | ||||
| 
 | ||||
| (define-public jnettop | ||||
|   (package | ||||
|     (name "jnettop") | ||||
|  | @ -542,3 +568,157 @@ by bandwidth they use.") | |||
| console window to allow commands to be interactively run on multiple servers | ||||
| over ssh connections.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public rottlog | ||||
|   (package | ||||
|     (name "rottlog") | ||||
|     (version "0.72.2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnu/rottlog/rottlog-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0751mb9l2f0jrk3vj6q8ilanifd121dliwk0c34g8k0dlzsv3kd7")) | ||||
|               (modules '((guix build utils))) | ||||
|               (snippet | ||||
|                '(substitute* "Makefile.in" | ||||
|                   (("-o \\$\\{LOG_OWN\\} -g \\$\\{LOG_GROUP\\}") | ||||
|                    ;; Don't try to chown root. | ||||
|                    "") | ||||
|                   (("mkdir -p \\$\\(ROTT_STATDIR\\)") | ||||
|                    ;; Don't attempt to create /var/lib/rottlog. | ||||
|                    "true"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags (list (string-append "ROTT_ETCDIR=" | ||||
|                                               (assoc-ref %outputs "out") | ||||
|                                               "/etc") | ||||
|                                "--localstatedir=/var") | ||||
|        #:phases (alist-cons-after | ||||
|                  'install 'install-info | ||||
|                  (lambda _ | ||||
|                    (zero? (system* "make" "install-info"))) | ||||
|                  %standard-phases))) | ||||
|     (native-inputs `(("texinfo" ,texinfo) | ||||
|                      ("util-linux" ,util-linux))) ; for 'cal' | ||||
|     (home-page "http://www.gnu.org/software/rottlog/") | ||||
|     (synopsis "Log rotation and management") | ||||
|     (description | ||||
|      "GNU Rot[t]log is a program for managing log files.  It is used to | ||||
| automatically rotate out log files when they have reached a given size or | ||||
| according to a given schedule.  It can also be used to automatically compress | ||||
| and archive such logs.  Rot[t]log will mail reports of its activity to the | ||||
| system administrator.") | ||||
|     (license gpl3+))) | ||||
| 
 | ||||
| (define-public sudo | ||||
|   (package | ||||
|     (name "sudo") | ||||
|     (version "1.8.10p2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri | ||||
|                (list (string-append "http://www.sudo.ws/sudo/dist/sudo-" | ||||
|                                     version ".tar.gz") | ||||
|                      (string-append "ftp://ftp.sudo.ws/pub/sudo/OLD/sudo-" | ||||
|                                     version ".tar.gz"))) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1wbrygz584abmywklq0b4xhqn3s1bjk3rrladslr5nycdpdvhv5s")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags '("--with-logpath=/var/log/sudo.log") | ||||
|        #:phases (alist-cons-before | ||||
|                  'configure 'pre-configure | ||||
|                  (lambda _ | ||||
|                    (substitute* "configure" | ||||
|                      ;; Refer to the right executables. | ||||
|                      (("/usr/bin/mv") (which "mv")) | ||||
|                      (("/usr/bin/sh") (which "sh"))) | ||||
|                    (substitute* (find-files "." "Makefile\\.in") | ||||
|                      (("-O [[:graph:]]+ -G [[:graph:]]+") | ||||
|                       ;; Allow installation as non-root. | ||||
|                       "") | ||||
|                      (("^install: (.*)install-sudoers(.*)" _ before after) | ||||
|                       ;; Don't try to create /etc/sudoers. | ||||
|                       (string-append "install: " before after "\n")))) | ||||
|                  %standard-phases) | ||||
| 
 | ||||
|        ;; XXX: The 'testsudoers' test series expects user 'root' to exist, but | ||||
|        ;; the chroot's /etc/passwd doesn't have it.  Turn off the tests. | ||||
|        #:tests? #f)) | ||||
|     (inputs | ||||
|      `(("groff" ,groff) | ||||
|        ("linux-pam" ,linux-pam) | ||||
|        ("coreutils" ,coreutils))) | ||||
|     (home-page "http://www.sudo.ws/") | ||||
|     (synopsis "Run commands as root") | ||||
|     (description | ||||
|      "Sudo (su \"do\") allows a system administrator to delegate authority to | ||||
| give certain users (or groups of users) the ability to run some (or all) | ||||
| commands as root or another user while providing an audit trail of the | ||||
| commands and their arguments.") | ||||
| 
 | ||||
|     ;; See <http://www.sudo.ws/sudo/license.html>. | ||||
|     (license x11))) | ||||
| 
 | ||||
| (define-public wpa-supplicant | ||||
|   (package | ||||
|     (name "wpa-supplicant") | ||||
|     (version "2.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://hostap.epitest.fi/releases/wpa_supplicant-" | ||||
|                     version | ||||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0xxjw7lslvql1ykfbwmbhdrnjsjljf59fbwf837418s97dz2wqwi")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-replace | ||||
|                  'configure | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    (chdir "wpa_supplicant") | ||||
|                    (copy-file "defconfig" ".config") | ||||
|                    (let ((port (open-file ".config" "al"))) | ||||
|                      (display " | ||||
|       CONFIG_DEBUG_SYSLOG=y | ||||
|       CONFIG_CTRL_IFACE_DBUS=y | ||||
|       CONFIG_CTRL_IFACE_DBUS_NEW=y | ||||
|       CONFIG_CTRL_IFACE_DBUS_INTRO=y | ||||
|       CONFIG_DRIVER_NL80211=y | ||||
|       CFLAGS += $(shell pkg-config libnl-3.0 --cflags) | ||||
|       CONFIG_LIBNL32=y | ||||
|       CONFIG_READLINE=y\n" port) | ||||
|                      (close-port port))) | ||||
|                  %standard-phases) | ||||
| 
 | ||||
|       #:make-flags (list "CC=gcc" | ||||
|                          (string-append "BINDIR=" (assoc-ref %outputs "out") | ||||
|                                         "/sbin") | ||||
|                          (string-append "LIBDIR=" (assoc-ref %outputs "out") | ||||
|                                         "/lib")) | ||||
|       #:tests? #f)) | ||||
|     (inputs | ||||
|      `(("readline" ,readline) | ||||
|        ("libnl" ,libnl) | ||||
|        ("dbus" ,dbus) | ||||
|        ("openssl" ,o:openssl))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://hostap.epitest.fi/wpa_supplicant/") | ||||
|     (synopsis "Connecting to WPA and WPA2-protected wireless networks") | ||||
|     (description | ||||
|      "wpa_supplicant is a WPA Supplicant with support for WPA and WPA2 (IEEE | ||||
| 802.11i / RSN).  Supplicant is the IEEE 802.1X/WPA component that is used in | ||||
| the client stations.  It implements key negotiation with a WPA Authenticator | ||||
| and it controls the roaming and IEEE 802.11 authentication/association of the | ||||
| WLAN driver. | ||||
| 
 | ||||
| This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.") | ||||
| 
 | ||||
|     ;; In practice, this is linked against Readline, which makes it GPLv3+. | ||||
|     (license bsd-3))) | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ | |||
| (define-module (gnu packages algebra) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages multiprecision) | ||||
|   #:use-module (gnu packages mpi) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages flex) | ||||
|  | @ -123,14 +124,14 @@ PARI is also available as a C library to allow for faster computations.") | |||
| (define-public gp2c | ||||
|   (package | ||||
|    (name "gp2c") | ||||
|    (version "0.0.8pl1") | ||||
|    (version "0.0.9pl1") | ||||
|    (source (origin | ||||
|             (method url-fetch) | ||||
|             (uri (string-append | ||||
|                   "http://pari.math.u-bordeaux.fr/pub/pari/GP2C/gp2c-" | ||||
|                   version ".tar.gz")) | ||||
|             (sha256 (base32 | ||||
|                      "0r1xrshgx0db2snmacwvg5r99fhd9rpblcfs86pfsp23hnjxj9i0")))) | ||||
|                      "1p36060vwhn38j77r4c3jqyaslvhvgm6fdw2486k7krxk5ai7ph5")))) | ||||
|    (build-system gnu-build-system) | ||||
|    (native-inputs `(("perl" ,perl))) | ||||
|    (inputs `(("pari-gp" ,pari-gp))) | ||||
|  | @ -196,14 +197,14 @@ syntax is similar to that of C, so basic usage is familiar.  It also includes | |||
| (define-public fftw | ||||
|   (package | ||||
|     (name "fftw") | ||||
|     (version "3.3.3") | ||||
|     (version "3.3.4") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "ftp://ftp.fftw.org/pub/fftw/fftw-" | ||||
|                                  version".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1wwp9b2va7vkq3ay7a9jk22nr4x5q6m37rzqy2j8y3d11c5grkc5")))) | ||||
|                "10h9mzjxnwlsjziah4lri85scc05rlajz39nqf3mbh4vja8dw34g")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags '("--enable-shared" "--enable-openmp") | ||||
|  | @ -237,3 +238,17 @@ cosine/ sine transforms or DCT/DST).") | |||
|     (description | ||||
|      (string-append (package-description fftw) | ||||
|                     "  Single-precision version.")))) | ||||
| 
 | ||||
| (define-public fftw-openmpi | ||||
|   (package (inherit fftw) | ||||
|     (name "fftw-openmpi") | ||||
|     (inputs | ||||
|      `(("openmpi" ,openmpi) | ||||
|        ,@(package-inputs fftw))) | ||||
|     (arguments | ||||
|      (substitute-keyword-arguments (package-arguments fftw) | ||||
|        ((#:configure-flags cf) | ||||
|         `(cons "--enable-mpi" ,cf)))) | ||||
|     (description | ||||
|      (string-append (package-description fftw) | ||||
|                     "  With OpenMPI parallelism support.")))) | ||||
|  |  | |||
|  | @ -74,6 +74,20 @@ know anything about Autoconf or M4.") | |||
|        (base32 | ||||
|         "1fjm21k2na07f3vasf288a0zx66lbv0hd3l9bvv3q8p62s3pg569")))))) | ||||
| 
 | ||||
| (define-public autoconf-2.64 | ||||
|   ;; As of GDB 7.8, GDB is still developed using this version of Autoconf. | ||||
|   (package (inherit autoconf) | ||||
|     (version "2.64") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "mirror://gnu/autoconf/autoconf-" | ||||
|                           version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "0j3jdjpf5ly39dlp0bg70h72nzqr059k0x8iqxvaxf106chpgn9j")))))) | ||||
| 
 | ||||
| 
 | ||||
| (define* (autoconf-wrapper #:optional (autoconf autoconf)) | ||||
|   "Return an wrapper around AUTOCONF that generates `configure' scripts that | ||||
| use our own Bash instead of /bin/sh in shebangs.  For that reason, it should | ||||
|  |  | |||
							
								
								
									
										71
									
								
								gnu/packages/backup.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								gnu/packages/backup.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.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 backup) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system python) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages gnupg) | ||||
|   #:use-module (gnu packages rsync) | ||||
|   #:use-module (srfi srfi-1)) | ||||
| 
 | ||||
| (define-public duplicity | ||||
|   (package | ||||
|     (name "duplicity") | ||||
|     (version "0.6.24") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "https://code.launchpad.net/duplicity/" | ||||
|                           (string-join (take (string-split version #\.) 2) ".") | ||||
|                           "-series/" version "/+download/duplicity-" | ||||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "0l14nrhbgkyjgvh339bbhnm6hrdwrjadphq1jmpi0mcgcdbdfh8x")))) | ||||
|     (build-system python-build-system) | ||||
|     (native-inputs | ||||
|      `(("python2-setuptools" ,python2-setuptools))) | ||||
|     (inputs | ||||
|      `(("python" ,python-2) | ||||
|        ("librsync" ,librsync) | ||||
|        ("mock" ,python2-mock)           ;for testing | ||||
|        ("lockfile" ,python2-lockfile) | ||||
|        ("gnupg" ,gnupg-1)))             ;gpg executable needed | ||||
|     (arguments | ||||
|      `(#:python ,python-2               ;setup assumes Python 2 | ||||
|        #:test-target "test" | ||||
|        #:phases (alist-cons-before | ||||
|                  'check 'patch-tests | ||||
|                  (lambda _ | ||||
|                    (substitute* "testing/functional/__init__.py" | ||||
|                      (("/bin/sh") (which "sh")))) | ||||
|                  %standard-phases))) | ||||
|     (home-page "http://duplicity.nongnu.org/index.html") | ||||
|     (synopsis "Encrypted backup using rsync algorithm") | ||||
|     (description | ||||
|      "Duplicity backs up directories by producing encrypted tar-format volumes | ||||
| and uploading them to a remote or local file server.  Because duplicity uses | ||||
| librsync, the incremental archives are space efficient and only record the | ||||
| parts of files that have changed since the last backup.  Because duplicity | ||||
| uses GnuPG to encrypt and/or sign these archives, they will be safe from | ||||
| spying and/or modification by the server.") | ||||
|     (license gpl2+))) | ||||
|  | @ -1184,4 +1184,7 @@ and binaries, plus debugging symbols in the 'debug' output), and Binutils.") | |||
| (define-public gcc-toolchain-4.8 | ||||
|   (gcc-toolchain gcc-final)) | ||||
| 
 | ||||
| (define-public gcc-toolchain-4.9 | ||||
|   (gcc-toolchain gcc-4.9)) | ||||
| 
 | ||||
| ;;; base.scm ends here | ||||
|  |  | |||
							
								
								
									
										91
									
								
								gnu/packages/bittorrent.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								gnu/packages/bittorrent.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 bittorrent) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module ((guix licenses) | ||||
|                 #:renamer (symbol-prefix-proc 'l:)) | ||||
|   #:use-module (gnu packages openssl) | ||||
|   #:use-module (gnu packages libevent) | ||||
|   #:use-module (gnu packages curl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages file) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module ((gnu packages compression) | ||||
|                 #:select (zlib)) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gtk)) | ||||
| 
 | ||||
| (define-public transmission | ||||
|   (package | ||||
|     (name "transmission") | ||||
|     (version "2.83") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "https://transmission.cachefly.net/transmission-" | ||||
|                     version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0cqlgl6jmjw1caybz6nzh3l8z0jak1dxba01isv72zvy2r8b1qdh")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (outputs '("out"                      ; library and command-line interface | ||||
|                "gui"))                    ; graphical user interface | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-after | ||||
|                  'install 'move-gui | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    ;; Move the GUI to its own output, so that "out" doesn't | ||||
|                    ;; depend on GTK+. | ||||
|                    (let ((out (assoc-ref outputs "out")) | ||||
|                          (gui (assoc-ref outputs "gui"))) | ||||
|                      (mkdir-p (string-append gui "/bin")) | ||||
|                      (rename-file (string-append out "/bin/transmission-gtk") | ||||
|                                   (string-append gui | ||||
|                                                  "/bin/transmission-gtk")))) | ||||
|                  %standard-phases))) | ||||
|     (inputs | ||||
|      `(("inotify-tools" ,inotify-tools) | ||||
|        ("libevent" ,libevent) | ||||
|        ("curl" ,curl) | ||||
|        ("openssl" ,openssl) | ||||
|        ("file" ,file) | ||||
|        ("zlib" ,zlib) | ||||
|        ("gtk+" ,gtk+))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://www.transmissionbt.com/") | ||||
|     (synopsis "Fast and easy BitTorrent client") | ||||
|     (description | ||||
|      "Transmission is a BitTorrent client that comes with graphical, | ||||
| textual, and Web user interfaces.  Transmission also has a daemon for | ||||
| unattended operationg.  It supports local peer discovery, full encryption, | ||||
| DHT, µTP, PEX and Magnet Links.") | ||||
| 
 | ||||
|     ;; COPYING reads: | ||||
|     ;; | ||||
|     ;;     Transmission can be redistributed and/or modified under the terms of | ||||
|     ;; the GNU GPLv2 (http://www.gnu.org/licenses/license-list.html#GPLv2), | ||||
|     ;; the GNU GPLv3 (http://www.gnu.org/licenses/license-list.html#GNUGPLv3), | ||||
|     ;; or any future license endorsed by Mnemosyne LLC. | ||||
|     ;; | ||||
|     ;; A few files files carry an MIT/X11 license header. | ||||
|     (license l:gpl3+))) | ||||
|  | @ -16,7 +16,7 @@ | |||
| ;;; 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 autogen) | ||||
| (define-module (gnu packages calcurse) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix download) | ||||
|  |  | |||
							
								
								
									
										57
									
								
								gnu/packages/ccache.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								gnu/packages/ccache.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.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 ccache) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module ((guix licenses) #:select (gpl3+)) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages compression)) | ||||
| 
 | ||||
| (define-public ccache | ||||
|   (package | ||||
|     (name "ccache") | ||||
|     (version "3.1.9") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "https://www.samba.org/ftp/ccache/ccache-" | ||||
|                           version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1i06015jjc0n55xgvhv2h37fjp0i7z8a10s0v40f87c5mprzv0a9")) | ||||
|       (patches (list (search-patch "ccache-stdc-predef-test.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("perl" ,perl)))   ;for test.sh | ||||
|     (inputs `(("zlib" ,zlib))) | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-before | ||||
|                  'check 'patch-test-shebangs | ||||
|                  (lambda _ | ||||
|                    (substitute* '("test/test_hashutil.c" "test.sh") | ||||
|                      (("#!/bin/sh") (string-append "#!" (which "sh"))))) | ||||
|                  %standard-phases))) | ||||
|     (home-page "https://ccache.samba.org/") | ||||
|     (synopsis "Compiler cache") | ||||
|     (description | ||||
|      "Ccache is a compiler cache.  It speeds up recompilation by caching | ||||
| previous compilations and detecting when the same compilation is being done | ||||
| again.  Supported languages are C, C++, Objective-C and Objective-C++.") | ||||
|     (license gpl3+))) | ||||
|  | @ -238,6 +238,29 @@ LZO is written in ANSI C.  Both the source code and the compressed data | |||
| format are designed to be portable across platforms.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public lzop | ||||
|   (package | ||||
|     (name "lzop") | ||||
|     (version "1.03") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://www.lzop.org/download/lzop-" | ||||
|                            version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1jdjvc4yjndf7ihmlcsyln2rbnbaxa86q4jskmkmm7ylfy65nhn1")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("lzo" ,lzo))) | ||||
|     (home-page "http://www.lzop.org/") | ||||
|     (synopsis "Compress or expand files") | ||||
|     (description | ||||
|      "Lzop is a file compressor which is very similar to gzip.  Lzop uses the | ||||
| LZO data compression library for compression services, and its main advantages | ||||
| over gzip are much higher compression and decompression speed (at the cost of | ||||
| some compression ratio).") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public lzip | ||||
|   (package | ||||
|     (name "lzip") | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -34,8 +34,12 @@ | |||
|    (version "2.1.26") | ||||
|    (source (origin | ||||
|             (method url-fetch) | ||||
|             (uri (string-append "ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-" version | ||||
|                                 ".tar.gz")) | ||||
|             (uri (list (string-append | ||||
|                         "http://cyrusimap.org/releases/cyrus-sasl-" | ||||
|                         version ".tar.gz") | ||||
|                        (string-append | ||||
|                         "ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-" | ||||
|                         version ".tar.gz"))) | ||||
|             (sha256 (base32 | ||||
|                      "1hvvbcsg21nlncbgs0cgn3iwlnb3vannzwsp6rwvnn9ba4v53g4g")))) | ||||
|    (build-system gnu-build-system) | ||||
|  |  | |||
							
								
								
									
										74
									
								
								gnu/packages/doxygen.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								gnu/packages/doxygen.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 doxygen) | ||||
|   #:use-module ((guix licenses) #:select (gpl3+)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages flex) | ||||
|   #:use-module (gnu packages graphviz) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages python)) | ||||
| 
 | ||||
| (define-public doxygen | ||||
|   (package | ||||
|     (name "doxygen") | ||||
|     (version "1.8.7") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://ftp.stack.nl/pub/users/dimitri/" | ||||
|                                  name "-" version ".src.tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1ng3dv5fninhfi2fj75ghkr5jwsl653fxv2sxhaswj11x2vcdsn6")) | ||||
|              (patches (list (search-patch "doxygen-tmake.patch") | ||||
|                             (search-patch "doxygen-test.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("bison" ,bison) | ||||
|        ("flex" ,flex) | ||||
|        ("libxml2" ,libxml2) ; provides xmllint for the tests | ||||
|        ("perl" ,perl) ; for the tests | ||||
|        ("python" ,python-2))) ; for creating the documentation | ||||
|     (propagated-inputs | ||||
|      `(("graphviz" ,graphviz))) | ||||
|     (arguments | ||||
|      `(#:test-target "test" | ||||
|        #:phases | ||||
|          (alist-replace | ||||
|           'configure | ||||
|           (lambda* (#:key outputs #:allow-other-keys) | ||||
|             (let ((out (assoc-ref outputs "out"))) | ||||
|               ;; do not pass "--enable-fast-install", which makes the | ||||
|               ;; configure process fail | ||||
|               (zero? (system* | ||||
|                       "./configure" | ||||
|                       "--prefix" out)))) | ||||
|           %standard-phases))) | ||||
|     (home-page "http://www.stack.nl/~dimitri/doxygen/") | ||||
|     (synopsis "tool for generating documentation from annotated sources") | ||||
|     (description "Doxygen is the de facto standard tool for generating | ||||
| documentation from annotated C++ sources, but it also supports other popular | ||||
| programming languages such as C, Objective-C, C#, PHP, Java, Python, | ||||
| IDL (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, | ||||
| and to some extent D.") | ||||
|     (license gpl3+))) | ||||
							
								
								
									
										56
									
								
								gnu/packages/ftp.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								gnu/packages/ftp.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 ftp) | ||||
|   #:use-module ((guix licenses) #:select (gpl3+)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages gnutls) | ||||
|   #:use-module (gnu packages compression)) | ||||
| 
 | ||||
| (define-public lftp | ||||
|   (package | ||||
|     (name "lftp") | ||||
|     (version "4.4.15") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://lftp.yar.ru/ftp/lftp-" | ||||
|                                   version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0s38vc2ij869dwx3i1c7sk96mqv0hknf3cqf86av59rqnix0px3m")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("zlib" ,zlib) | ||||
|        ("readline" ,readline) | ||||
|        ("gnutls" ,gnutls))) | ||||
|     (home-page "http://lftp.yar.ru/") | ||||
|     (synopsis "Command-line file transfer program") | ||||
|     (description | ||||
|      "LFTP is a sophisticated FTP/HTTP client, and a file transfer program | ||||
| supporting a number of network protocols.  Like Bash, it has job control and | ||||
| uses the Readline library for input.  It has bookmarks, a built-in mirror | ||||
| command, and can transfer several files in parallel.  It was designed with | ||||
| reliability in mind.") | ||||
|     (license gpl3+))) | ||||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 John Darrington <jmd@gnu.org> | ||||
| ;;; Copyright © 2014 David Thompson <dthompson2@worcester.edu> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -32,6 +33,7 @@ | |||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages sqlite) | ||||
|   #:use-module (gnu packages sdl) | ||||
|   #:use-module (guix build-system gnu)) | ||||
| 
 | ||||
| (define-public gnubg | ||||
|  | @ -94,3 +96,65 @@ you to set the size of the cube (the default is 3x3) or to change the colors. | |||
|  You may even apply photos to the faces instead of colors.  The game is | ||||
| scriptable with Guile.") | ||||
|     (license gpl3+))) | ||||
| 
 | ||||
| (define-public abbaye | ||||
|   (package | ||||
|     (name "abbaye") | ||||
|     (version "1.13") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://abbaye-for-linux.googlecode.com/files/abbaye-for-linux-src-" | ||||
|                            version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1wgvckgqa2084rbskxif58wbb83xbas8s1i8s7d57xbj08ryq8rk")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:modules ((ice-9 match) | ||||
|                   (guix build gnu-build-system) | ||||
|                   (guix build utils)) | ||||
|        #:phases (alist-cons-after | ||||
|                  'set-paths 'set-sdl-paths | ||||
|                  (lambda* (#:key inputs outputs (search-paths '()) #:allow-other-keys) | ||||
|                    (define input-directories | ||||
|                      (match inputs | ||||
|                        (((_ . dir) ...) | ||||
|                         dir))) | ||||
|                    ;; This package does not use pkg-config, so modify CPATH | ||||
|                    ;; variable to point to include/SDL for SDL header files. | ||||
|                    (set-path-environment-variable "CPATH" | ||||
|                                                   '("include/SDL") | ||||
|                                                   input-directories)) | ||||
|                  (alist-cons-after | ||||
|                   'patch-source-shebangs 'patch-makefile | ||||
|                   (lambda* (#:key outputs #:allow-other-keys) | ||||
|                     ;; Replace /usr with package output directory. | ||||
|                     (for-each (lambda (file) | ||||
|                                 (substitute* file | ||||
|                                   (("/usr") (assoc-ref outputs "out")))) | ||||
|                               '("makefile" "src/pantallas.c" "src/comun.h"))) | ||||
|                   (alist-cons-before | ||||
|                    'install 'make-install-dirs | ||||
|                    (lambda* (#:key outputs #:allow-other-keys) | ||||
|                      (let ((prefix (assoc-ref outputs "out"))) | ||||
|                        ;; Create directories that the makefile assumes exist. | ||||
|                        (mkdir-p (string-append prefix "/bin")) | ||||
|                        (mkdir-p (string-append prefix "/share/applications")))) | ||||
|                    ;; No configure script. | ||||
|                    (alist-delete 'configure %standard-phases)))) | ||||
|        #:tests? #f)) ;; No check target. | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (inputs `(("sdl" ,sdl) | ||||
|               ("sdl-gfx" ,sdl-gfx) | ||||
|               ("sdl-image" ,sdl-image) | ||||
|               ("sdl-mixer" ,sdl-mixer) | ||||
|               ("sdl-ttf" ,sdl-ttf))) | ||||
|     (home-page "http://code.google.com/p/abbaye-for-linux/") | ||||
|     (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"") | ||||
|     (description "L'Abbaye des Morts is a 2D platform game set in 13th century | ||||
| France.  The Cathars, who preach about good Christian beliefs, were being | ||||
| expelled by the Catholic Church out of the Languedoc region in France.  One of | ||||
| them, called Jean Raymond, found an old church in which to hide, not knowing | ||||
| that beneath its ruins lay buried an ancient evil.") | ||||
|     (license gpl3+))) | ||||
|  |  | |||
|  | @ -227,6 +227,17 @@ Go.  It also includes runtime support libraries for these languages.") | |||
|               (base32 | ||||
|                "1j6dwgby4g3p3lz7zkss32ghr45zpdidrg8xvazvn91lqxv25p09")))))) | ||||
| 
 | ||||
| (define-public gcc-4.9 | ||||
|   (package (inherit gcc-4.7) | ||||
|     (version "4.9.0") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://gnu/gcc/gcc-" | ||||
|                                  version "/gcc-" version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0mqjxpw2klskls00lwx1k24pnyzm3whqxg3hk74c3sddgfllgc5r")))))) | ||||
| 
 | ||||
| (define (custom-gcc gcc name languages) | ||||
|   "Return a custom version of GCC that supports LANGUAGES." | ||||
|   (package (inherit gcc) | ||||
|  |  | |||
|  | @ -33,14 +33,14 @@ | |||
| (define-public gdb | ||||
|   (package | ||||
|     (name "gdb") | ||||
|     (version "7.7") | ||||
|     (version "7.7.1") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://gnu/gdb/gdb-" | ||||
|                                  version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "08vcb97j1b7vxwq6088wb6s3g3bm8iwikd922y0xsgbbxv3d2104")))) | ||||
|                "199sn1p0gzli6icp9dcvrphdvyi7hm4cc9zhziq0q6vg81h55g8d")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:tests? #f ; FIXME "make check" fails on single-processor systems. | ||||
|  | @ -57,7 +57,11 @@ | |||
|        ("readline" ,readline) | ||||
|        ("ncurses" ,ncurses) | ||||
|        ("python" ,python-wrapper) | ||||
|        ("dejagnu" ,dejagnu))) | ||||
|        ("dejagnu" ,dejagnu) | ||||
| 
 | ||||
|        ;; Allow use of XML-formatted syscall information.  This enables 'catch | ||||
|        ;; syscall' and similar commands. | ||||
|        ("libxml2" ,libxml2))) | ||||
|     (native-inputs | ||||
|       `(("texinfo" ,texinfo))) | ||||
|     (home-page "http://www.gnu.org/software/gdb/") | ||||
|  |  | |||
							
								
								
									
										63
									
								
								gnu/packages/gimp.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								gnu/packages/gimp.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 gimp) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module ((guix licenses) | ||||
|                 #:renamer (symbol-prefix-proc 'license:)) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages gnome) | ||||
|   #:use-module (gnu packages libpng) | ||||
|   #:use-module (gnu packages libjpeg) | ||||
|   #:use-module ((gnu packages ghostscript) | ||||
|                 #:select (lcms)) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages photo) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages imagemagick)) | ||||
| 
 | ||||
| (define-public babl | ||||
|   (package | ||||
|     (name "babl") | ||||
|     (version "0.1.10") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (list (string-append "http://ftp.gtk.org/pub/babl/0.1/babl-" | ||||
|                                         version ".tar.bz2") | ||||
|                          (string-append "ftp://ftp.gtk.org/pub/babl/0.1/babl-" | ||||
|                                         version ".tar.bz2"))) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1x2mb7zfbvk9d0a7h5cpdff9hhjsadxvqml2jay2bpf7x9nc6gwl")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (home-page "http://gegl.org/babl/") | ||||
|     (synopsis "Image pixel format conversion library") | ||||
|     (description | ||||
|      "babl is a dynamic, any to any, pixel format translation library. | ||||
| It allows converting between different methods of storing pixels known as | ||||
| pixel formats that have with different bitdepths and other data | ||||
| representations, color models and component permutations. | ||||
| 
 | ||||
| A vocabulary to formulate new pixel formats from existing primitives is | ||||
| provided as well as the framework to add new color models and data types.") | ||||
|     (license license:lgpl3+))) | ||||
|  | @ -160,6 +160,17 @@ shared NFS home directories.") | |||
|       ;; In 'gio/tests', 'gdbus-test-codegen-generated.h' is #included in a | ||||
|       ;; file that gets compiled possibly before it has been fully generated. | ||||
|       #:parallel-tests? #f)) | ||||
| 
 | ||||
|    (native-search-paths | ||||
|     ;; This variable is not really "owned" by GLib, but several related | ||||
|     ;; packages refer to it: gobject-introspection's tools use it as a search | ||||
|     ;; path for .gir files, and it's also a search path for schemas produced | ||||
|     ;; by 'glib-compile-schemas'. | ||||
|     (list (search-path-specification | ||||
|            (variable "XDG_DATA_DIRS") | ||||
|            (directories '("share"))))) | ||||
|    (search-paths native-search-paths) | ||||
| 
 | ||||
|    (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME") | ||||
|    (description | ||||
|     "GLib provides data structure handling for C, portability wrappers, | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -17,25 +18,31 @@ | |||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages gnome) | ||||
|   #:use-module ((guix licenses) #:select (gpl2 gpl2+ lgpl2.0+ lgpl2.1+ lgpl3)) | ||||
|   #: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 bison) | ||||
|   #:use-module (gnu packages flex)   | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gnupg) | ||||
|   #:use-module (gnu packages gstreamer) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages pdf) | ||||
|   #:use-module (gnu packages popt) | ||||
|   #:use-module (gnu packages ghostscript) | ||||
|   #:use-module (gnu packages iso-codes) | ||||
|   #:use-module (gnu packages libcanberra) | ||||
|   #:use-module (gnu packages libjpeg) | ||||
|   #:use-module (gnu packages libpng) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages gl) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages xorg)) | ||||
| 
 | ||||
| (define-public brasero | ||||
|  | @ -75,7 +82,7 @@ | |||
|     (description "Brasero is an application to burn CD/DVD for the Gnome | ||||
| Desktop.  It is designed to be as simple as possible and has some unique | ||||
| features to enable users to create their discs easily and quickly.") | ||||
|     (license gpl2+))) | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public gnome-desktop | ||||
|   (package | ||||
|  | @ -116,7 +123,7 @@ stability. Documentation for the API is available with gtk-doc. | |||
| 
 | ||||
| The gnome-about program helps find which version of GNOME is installed.") | ||||
|     ; Some bits under the LGPL. | ||||
|     (license gpl2+))) | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public gnome-doc-utils | ||||
|   (package | ||||
|  | @ -146,7 +153,7 @@ The gnome-about program helps find which version of GNOME is installed.") | |||
|      "Gnome-doc-utils is a collection of documentation utilities for the | ||||
| Gnome project.  It includes xml2po tool which makes it easier to translate | ||||
| and keep up to date translations of documentation.") | ||||
|     (license gpl2+))) ; xslt under lgpl | ||||
|     (license license:gpl2+))) ; xslt under lgpl | ||||
| 
 | ||||
| (define-public libgnome-keyring | ||||
|   (package | ||||
|  | @ -177,7 +184,7 @@ and keep up to date translations of documentation.") | |||
|      "Client library to access passwords from the GNOME keyring.") | ||||
| 
 | ||||
|     ;; Though a couple of files are LGPLv2.1+. | ||||
|     (license lgpl2.0+))) | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| (define-public evince | ||||
|   (package | ||||
|  | @ -242,7 +249,7 @@ and keep up to date translations of documentation.") | |||
| currently supports PDF, PostScript, DjVu, TIFF and DVI.  The goal | ||||
| of Evince is to replace the multiple document viewers that exist | ||||
| on the GNOME Desktop with a single simple application.") | ||||
|     (license gpl2+))) | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public gsettings-desktop-schemas | ||||
|   (package | ||||
|  | @ -269,7 +276,7 @@ on the GNOME Desktop with a single simple application.") | |||
|     (description | ||||
|      "Gsettings-desktop-schemas contains a collection of GSettings schemas | ||||
| for settings shared by various components of the GNOME desktop.") | ||||
|     (license lgpl2.1+))) | ||||
|     (license license:lgpl2.1+))) | ||||
| 
 | ||||
| (define-public icon-naming-utils | ||||
|   (package | ||||
|  | @ -294,7 +301,7 @@ for settings shared by various components of the GNOME desktop.") | |||
|      "To help with the transition to the Freedesktop Icon Naming | ||||
| Specification, the icon naming utility maps the icon names used by the | ||||
| GNOME and KDE desktops to the icon names proposed in the specification.") | ||||
|     (license lgpl2.1+))) | ||||
|     (license license:lgpl2.1+))) | ||||
| 
 | ||||
| (define-public gnome-icon-theme | ||||
|   (package | ||||
|  | @ -321,7 +328,7 @@ GNOME and KDE desktops to the icon names proposed in the specification.") | |||
|      "GNOME icon theme") | ||||
|     (description | ||||
|      "Icons for the GNOME desktop.") | ||||
|     (license lgpl3))) ; or Creative Commons BY-SA 3.0 | ||||
|     (license license:lgpl3))) ; or Creative Commons BY-SA 3.0 | ||||
| 
 | ||||
| (define-public shared-mime-info | ||||
|   (package | ||||
|  | @ -352,7 +359,7 @@ and the update-mime-database command used to extend it.  It requires glib2 to | |||
| be installed for building the update command.  Additionally, it uses intltool | ||||
| for translations, though this is only a dependency for the maintainers.  This | ||||
| database is translated at Transifex.") | ||||
|     (license gpl2+))) | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public hicolor-icon-theme | ||||
|   (package | ||||
|  | @ -374,7 +381,7 @@ database is translated at Transifex.") | |||
|      "Freedesktop icon theme") | ||||
|     (description | ||||
|      "Freedesktop icon theme.") | ||||
|     (license gpl2))) | ||||
|     (license license:gpl2))) | ||||
| 
 | ||||
| (define-public libnotify | ||||
|   (package | ||||
|  | @ -405,7 +412,7 @@ database is translated at Transifex.") | |||
| notification daemon, as defined in the Desktop Notifications spec. These | ||||
| notifications can be used to inform the user about an event or display | ||||
| some form of information without getting in the user's way.") | ||||
|     (license lgpl2.1+))) | ||||
|     (license license:lgpl2.1+))) | ||||
| 
 | ||||
| (define-public libpeas | ||||
|   (package | ||||
|  | @ -421,45 +428,16 @@ some form of information without getting in the user's way.") | |||
|        (base32 | ||||
|         "13fzyzv6c0cfdj83z1s16lv8k997wpnzyzr0wfwcfkcmvz64g1q0")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:modules ((guix build gnome) | ||||
|                   (guix build gnu-build-system) | ||||
|                   (guix build utils)) | ||||
|        #:imported-modules ((guix build gnome) | ||||
|                            (guix build gnu-build-system) | ||||
|                            (guix build utils)) | ||||
|        #:phases | ||||
|         (alist-replace | ||||
|          'configure | ||||
|          (lambda* (#:key inputs #:allow-other-keys #:rest args) | ||||
|           (let ((configure (assoc-ref %standard-phases 'configure))) | ||||
|            (substitute* "libpeas-gtk/Makefile.in" | ||||
|             (("--add-include-path") | ||||
|              (string-append | ||||
|                " --add-include-path=" (gir-directory inputs "atk") | ||||
|                " --add-include-path=" (gir-directory inputs "gdk-pixbuf") | ||||
|                " --add-include-path=" (gir-directory inputs "gtk+") | ||||
|                " --add-include-path=" (gir-directory inputs "pango") | ||||
|                " --add-include-path"))) | ||||
|            (substitute* "libpeas-gtk/Makefile.in" | ||||
|             (("--includedir=\\$\\(top_builddir") | ||||
|              (string-append | ||||
|               " --includedir=" (gir-directory inputs "atk") | ||||
|               " --includedir=" (gir-directory inputs "gdk-pixbuf") | ||||
|               " --includedir=" (gir-directory inputs "gtk+") | ||||
|               " --includedir=" (gir-directory inputs "pango") | ||||
|               " --includedir=$(top_builddir"))) | ||||
|            (apply configure args))) | ||||
|          %standard-phases))) | ||||
|     (inputs | ||||
|      `(("atk" ,atk) | ||||
|        ("gdk-pixbuf" ,gdk-pixbuf) | ||||
|        ("glib" ,glib) | ||||
|        ("gobject-introspection" ,gobject-introspection) | ||||
|        ("gtk+" ,gtk+) | ||||
|        ("intltool" ,intltool) | ||||
|        ("pango" ,pango) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|        ("pango" ,pango))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("gobject-introspection" ,gobject-introspection) | ||||
|        ("intltool" ,intltool))) | ||||
|     (home-page "https://wiki.gnome.org/Libpeas") | ||||
|     (synopsis "GObject plugin system") | ||||
|     (description | ||||
|  | @ -469,7 +447,7 @@ set of features including, but not limited to: multiple extension points; on | |||
| demand (lazy) programming language support for C, Python and JS; simplicity of | ||||
| the API") | ||||
| 
 | ||||
|     (license lgpl2.0+))) | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| (define-public gtkglext | ||||
|   (package | ||||
|  | @ -495,7 +473,7 @@ the API") | |||
|     (description "GtkGLExt is an OpenGL extension to GTK+. It provides | ||||
| additional GDK objects which support OpenGL rendering in GTK+ and GtkWidget | ||||
| API add-ons to make GTK+ widgets OpenGL-capable.") | ||||
|     (license lgpl2.1+))) | ||||
|     (license license:lgpl2.1+))) | ||||
| 
 | ||||
| (define-public glade3 | ||||
|   (package | ||||
|  | @ -522,4 +500,593 @@ API add-ons to make GTK+ widgets OpenGL-capable.") | |||
|     (description "Glade is a rapid application development (RAD) tool to | ||||
| enable quick & easy development of user interfaces for the GTK+ toolkit and | ||||
| the GNOME desktop environment.") | ||||
|     (license lgpl2.0+))) | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| (define-public libcroco | ||||
|   (package | ||||
|     (name "libcroco") | ||||
|     (version "0.6.8") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/libcroco/0.6/libcroco-" | ||||
|                     version | ||||
|                     ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0w453f3nnkbkrly7spx5lx5pf6mwynzmd5qhszprq8amij2invpa")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("glib" ,glib) | ||||
|        ("libxml2" ,libxml2) | ||||
|        ("zlib" ,zlib))) | ||||
|     (home-page "https://github.com/GNOME/libcroco") | ||||
|     (synopsis "CSS2 parsing and manipulation library") | ||||
|     (description | ||||
|      "Libcroco is a standalone CSS2 parsing and manipulation library. | ||||
| The parser provides a low level event driven SAC-like API and a CSS object | ||||
| model like API.  Libcroco provides a CSS2 selection engine and an experimental | ||||
| XML/CSS rendering engine.") | ||||
| 
 | ||||
|     ;; LGPLv2.1-only. | ||||
|     (license license:lgpl2.1))) | ||||
| 
 | ||||
| (define-public libgsf | ||||
|   (package | ||||
|     (name "libgsf") | ||||
|     (version "1.14.30") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://gnome/sources/libgsf/1.14/libgsf-" | ||||
|                                   version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0w2v1a9sxsymd1mcy4mwsz4r6za9iwq69rj86nb939p41d4c6j6b")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("python" ,python) | ||||
|        ("zlib" ,zlib) | ||||
|        ("bzip2" ,bzip2))) | ||||
|     (propagated-inputs | ||||
|      `(("gdk-pixbuf" ,gdk-pixbuf) | ||||
|        ("glib" ,glib) | ||||
|        ("libxml2" ,libxml2))) | ||||
|     (home-page "http://www.gnome.org/projects/libgsf") | ||||
|     (synopsis "GNOME's Structured File Library") | ||||
|     (description | ||||
|      "Libgsf aims to provide an efficient extensible I/O abstraction for | ||||
| dealing with different structured file formats.") | ||||
| 
 | ||||
|     ;; LGPLv2.1-only. | ||||
|     (license license:lgpl2.1))) | ||||
| 
 | ||||
| (define-public librsvg | ||||
|   (package | ||||
|     (name "librsvg") | ||||
|     (version "2.40.2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/librsvg/2.40/librsvg-" | ||||
|                     version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "071959yjb2i1bja7ciy4bmpnd6fn2is9jjqsvvvnsqwl69j9n128")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (alist-cons-before | ||||
|         'configure 'augment-gir-search-path | ||||
|         (lambda* (#:key inputs #:allow-other-keys) | ||||
|           (substitute* "gdk-pixbuf-loader/Makefile.in" | ||||
|             ;; By default the gdk-pixbuf loader is installed under | ||||
|             ;; gdk-pixbuf's prefix.  Work around that. | ||||
|             (("gdk_pixbuf_moduledir = .*$") | ||||
|              (string-append "gdk_pixbuf_moduledir = " | ||||
|                             "$(prefix)/lib/gdk-pixbuf-2.0/2.0.10/" | ||||
|                              "loaders\n")) | ||||
|             ;; Likewise, create a separate 'loaders.cache' file. | ||||
|             (("gdk_pixbuf_cache_file = .*$") | ||||
|              "gdk_pixbuf_cache_file = $(gdk_pixbuf_moduledir).cache\n"))) | ||||
|         %standard-phases))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc. | ||||
|     (inputs | ||||
|      `(("pango" ,pango) | ||||
|        ("libcroco" ,libcroco) | ||||
|        ("bzip2" ,bzip2) | ||||
|        ("libgsf" ,libgsf) | ||||
|        ("libxml2" ,libxml2))) | ||||
|     (propagated-inputs | ||||
|      ;; librsvg-2.0.pc refers to all of that. | ||||
|      `(("cairo" ,cairo) | ||||
|        ("gdk-pixbuf" ,gdk-pixbuf) | ||||
|        ("glib" ,glib))) | ||||
|     (home-page "https://wiki.gnome.org/LibRsvg") | ||||
|     (synopsis "Render SVG files using Cairo") | ||||
|     (description | ||||
|      "librsvg is a C library to render SVG files using the Cairo 2D graphics | ||||
| library.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| (define-public libidl | ||||
|   (package | ||||
|     (name "libidl") | ||||
|     (version "0.8.14") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (let ((upstream-name "libIDL")) | ||||
| 		     (string-append | ||||
| 		      "mirror://gnome/sources/" upstream-name "/" (string-take version 3) "/" upstream-name "-" | ||||
| 		      version | ||||
| 		      ".tar.bz2"))) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "08129my8s9fbrk0vqvnmx6ph4nid744g5vbwphzkaik51664vln5")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("glib" ,glib))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("flex", flex) | ||||
|        ("bison" ,bison))) | ||||
|     (home-page "http://freecode.com/projects/libidl") | ||||
|     (synopsis "Create trees of CORBA Interface Definition Language files") | ||||
|     (description  "libidl is a library for creating trees of CORBA Interface | ||||
| Definition Language (idl) files, which is a specification for defining | ||||
| portable interfaces. libidl was initially written for orbit (the orb from the | ||||
| GNOME project, and the primary means of libidl distribution). However, the | ||||
| functionality was designed to be as reusable and portable as possible.")  | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public orbit2 | ||||
|   (package | ||||
|     (name "orbit2") | ||||
|     (version "2.14.19") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (let ((upstream-name "ORBit2"))  | ||||
| 		     (string-append | ||||
| 		      "mirror://gnome/sources/" upstream-name "/" (string-take version 4) "/" upstream-name "-" | ||||
| 		      version | ||||
| 		      ".tar.bz2"))) | ||||
|               (sha256 | ||||
|                (base32 "0l3mhpyym9m5iz09fz0rgiqxl2ym6kpkwpsp1xrr4aa80nlh1jam")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; The programmer kindly gives us a hook to turn off deprecation warnings ... | ||||
|      `(#:configure-flags '("DISABLE_DEPRECATED_CFLAGS=-DGLIB_DISABLE_DEPRECATION_WARNINGS") | ||||
|                          ;; ... which they then completly ignore !! | ||||
|                          #:phases | ||||
|                          (alist-cons-before | ||||
|                           'configure 'ignore-deprecations | ||||
|                           (lambda _ | ||||
|                             (substitute* "linc2/src/Makefile.in" | ||||
|                               (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS"))) | ||||
|                           %standard-phases))) | ||||
|     (inputs `(("glib" ,glib) | ||||
|               ("libidl" ,libidl))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://projects.gnome.org/orbit2/") | ||||
|     (synopsis "CORBA 2.4-compliant Object Request Broker") | ||||
|     (description  "orbit2 is a CORBA 2.4-compliant Object Request Broker (orb) | ||||
| featuring mature C, C++ and Python bindings.")  | ||||
|     ;; Licence notice is unclear.  The Web page simply say "GPL" without giving a version. | ||||
|     ;; SOME of the code files have licence notices for GPLv2+ | ||||
|     ;; The tarball contains files of the text of GPLv2 and LGPLv2 | ||||
|     (license license:gpl2+)))  | ||||
| 
 | ||||
| 
 | ||||
| (define-public libbonobo | ||||
|   (package | ||||
|     (name "libbonobo") | ||||
|     (version "2.32.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 4) "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 "0swp4kk6x7hy1rvd1f9jba31lvfc6qvafkvbpg9h0r34fzrd8q4i")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; The programmer kindly gives us a hook to turn off deprecation warnings ... | ||||
|      `(#:configure-flags '("DISABLE_DEPRECATED_CFLAGS=-DGLIB_DISABLE_DEPRECATION_WARNINGS") | ||||
|                          ;; ... which they then completly ignore !! | ||||
|                          #:phases | ||||
|                          (alist-cons-before | ||||
|                           'configure 'ignore-deprecations | ||||
|                           (lambda _ | ||||
|                             (substitute* "activation-server/Makefile.in" | ||||
|                               (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS"))) | ||||
|                           %standard-phases))) | ||||
|     (inputs `(("popt" ,popt) | ||||
|               ("libxml2" ,libxml2))) | ||||
|     ;; The following are Required by the .pc file | ||||
|     (propagated-inputs   | ||||
|      `(("glib" ,glib) | ||||
|        ("orbit2" ,orbit2))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config) | ||||
|        ("flex" ,flex) | ||||
|        ("bison" ,bison))) | ||||
|     (home-page "https://developer.gnome.org/libbonobo/") | ||||
|     (synopsis "Framework for creating reusable components for use in GNOME applications") | ||||
|     (description "Bonobo is a framework for creating reusable components for | ||||
| use in GNOME applications, built on top of CORBA.")  | ||||
|     ;; Licence not explicitly stated.  Source files contain no licence notices. | ||||
|     ;; Tarball contains text of both GPLv2 and LGPLv2 | ||||
|     ;; GPLv2 covers both conditions | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public gconf | ||||
|   (package | ||||
|     (name "gconf") | ||||
|     (version "3.2.6") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
| 	      (uri  | ||||
| 	       (let ((upstream-name "GConf")) | ||||
| 		 (string-append | ||||
| 		  "mirror://gnome/sources/" upstream-name "/" (string-take version 3)  "/" upstream-name "-" | ||||
| 		  version | ||||
| 		  ".tar.xz"))) | ||||
|               (sha256 | ||||
|                (base32 "0k3q9nh53yhc9qxf1zaicz4sk8p3kzq4ndjdsgpaa2db0ccbj4hr")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("glib" ,glib) | ||||
|               ("dbus" ,dbus) | ||||
|               ("dbus-glib" ,dbus-glib) | ||||
|               ("libxml2" ,libxml2))) | ||||
|     (propagated-inputs `(("orbit2" ,orbit2))) ; referred to in the .pc file | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://projects.gnome.org/gconf/") | ||||
|     (synopsis "store application preferences") | ||||
|     (description  "gconf is a system for storing application preferences. It | ||||
| is intended for user preferences; not arbitrary data storage.")  | ||||
|     (license license:lgpl2.0+)))  | ||||
| 
 | ||||
| 
 | ||||
| (define-public gnome-mime-data | ||||
|   (package | ||||
|     (name "gnome-mime-data") | ||||
|     (version "2.18.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 4)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1mvg8glb2a40yilmyabmb7fkbzlqd3i3d31kbkabqnq86xdnn69p")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("perl" ,perl) | ||||
|        ("intltool" ,intltool))) | ||||
|     (home-page "http://www.gnome.org") | ||||
|     (synopsis "base MIME and Application database for GNOME") | ||||
|     (description  "GNOME Mime Data is a module which contains the base MIME | ||||
| and Application database for GNOME.  The data stored by this module is | ||||
| designed to be accessed through the MIME functions in GnomeVFS.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public gnome-vfs | ||||
|   (package | ||||
|     (name "gnome-vfs") | ||||
|     (version "2.24.4") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 4)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 "1ajg8jb8k3snxc7rrgczlh8daxkjidmcv3zr9w809sq4p2sn9pk2")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; The programmer kindly gives us a hook to turn off deprecation warnings ... | ||||
|      `(#:configure-flags '("DISABLE_DEPRECATED_CFLAGS=-DGLIB_DISABLE_DEPRECATION_WARNINGS") | ||||
|                          ;; ... which they then completly ignore !! | ||||
|                          #:phases | ||||
|                          (alist-cons-before | ||||
|                           'configure 'ignore-deprecations | ||||
|                           (lambda _ | ||||
|                             (begin | ||||
|                               (substitute* "libgnomevfs/Makefile.in" | ||||
|                                 (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS")) | ||||
|                               (substitute* "daemon/Makefile.in" | ||||
|                                 (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS")))) | ||||
|                           %standard-phases))) | ||||
|     (inputs `(("glib" ,glib) | ||||
|               ("libxml2" ,libxml2) | ||||
|               ("dbus-glib" ,dbus-glib) | ||||
|               ("dbus" ,dbus) | ||||
|               ("gconf" ,gconf) | ||||
|               ("gnome-mime-data" ,gnome-mime-data) | ||||
|               ("zlib" ,zlib))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://developer.gnome.org/gnome-vfs/") | ||||
|     (synopsis "access files and folders in GNOME applications") | ||||
|     (description  "GnomeVFS is the core library used to access files and | ||||
| folders in GNOME applications. It provides a file system abstraction which | ||||
| allows applications to access local and remote files with a single consistent API.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| (define-public libgnome | ||||
|   (package | ||||
|     (name "libgnome") | ||||
|     (version "2.32.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 3)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "197pnq8y0knqjhm2fg4j6hbqqm3qfzfnd0irhwxpk1b4hqb3kimj")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (alist-cons-before | ||||
|         'configure 'enable-deprecated | ||||
|         (lambda _  | ||||
|           (substitute* "libgnome/Makefile.in" | ||||
|             (("-DG_DISABLE_DEPRECATED") "-DGLIB_DISABLE_DEPRECATION_WARNINGS"))) | ||||
|         %standard-phases))) | ||||
|     (inputs `(("popt" ,popt) | ||||
|               ("libxml2" ,libxml2))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     ;; The following are listed as Required in the .pc file | ||||
|     ;; (except for libcanberra -- which seems to be oversight on the part | ||||
|     ;; of the upstream developers -- anything that links against libgnome, | ||||
|     ;; must also link against libcanberra | ||||
|     (propagated-inputs | ||||
|      `(("libcanberra" ,libcanberra) | ||||
|        ("libbonobo" ,libbonobo) | ||||
|        ("gconf" ,gconf) | ||||
|        ("gnome-vfs" ,gnome-vfs) | ||||
|        ("glib" ,glib))) | ||||
|     (home-page "https://developer.gnome.org/libgnome/") | ||||
|     (synopsis "Useful routines for building applications") | ||||
|     (description  "The libgnome library provides a number of useful routines | ||||
| for building modern applications, including session management, activation of | ||||
| files and URIs, and displaying help.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public libart-lgpl | ||||
|   (package | ||||
|     (name "libart-lgpl") | ||||
|     (version "2.3.9") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (let ((upstream-name "libart_lgpl")) | ||||
|                      (string-append | ||||
|                       "mirror://gnome/sources/" upstream-name "/"  | ||||
|                       (string-take version 3) "/" upstream-name "-" version | ||||
|                       ".tar.bz2"))) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "072r4svs4hjf2f4gxzx02n3f970kdv9fpx54r2m8bd42fjyyawrw")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://people.gnome.org/~mathieu/libart") | ||||
|     (synopsis "2D drawing library") | ||||
|     (description  "Libart is a 2D drawing library intended as a  | ||||
| high-quality vector-based 2D library with antialiasing and alpha composition.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| (define-public libgnomecanvas | ||||
|   (package | ||||
|     (name "libgnomecanvas") | ||||
|     (version "2.30.3") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 4)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1nhnq4lfkk8ljkdafscwaggx0h95mq0rxnd7zgqyq0xb6kkqbjm8")))) | ||||
|     (build-system gnu-build-system) | ||||
|     ;; Mentioned as Required in the .pc file | ||||
|     (propagated-inputs `(("libart-lgpl" ,libart-lgpl) | ||||
|                          ("gtk+" ,gtk+-2))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://developer.gnome.org/libgnomecanvas/") | ||||
|     (synopsis "Flexible widget for creating interactive structured graphics") | ||||
|     (description  "The GnomeCanvas widget provides a flexible widget for | ||||
| creating interactive structured graphics.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| (define-public libgnomeui | ||||
|   (package | ||||
|     (name "libgnomeui") | ||||
|     (version "2.24.5") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 4)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "03rwbli76crkjl6gp422wrc9lqpl174k56cp9i96b7l8jlj2yddf")))) | ||||
|     (build-system gnu-build-system) | ||||
|     ;; Mentioned as Required in the .pc file | ||||
|     (propagated-inputs `(("libgnome" ,libgnome) | ||||
|                          ("libgnome-keyring" ,libgnome-keyring))) | ||||
|     (inputs `(("libgnomecanvas" ,libgnomecanvas) | ||||
|               ("libbonoboui" ,libbonoboui) | ||||
|               ("libjpeg" ,libjpeg) | ||||
|               ("popt" ,popt) | ||||
|               ("libbonobo" ,libbonobo) | ||||
|               ("libxml2" ,libxml2) | ||||
|               ("libglade" ,libglade))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://developer.gnome.org/libgnomeui/") | ||||
|     (synopsis "Additional widgets for applications") | ||||
|     (description  "The libgnomeui library provides additional widgets for | ||||
| applications. Many of the widgets from libgnomeui have already been ported to GTK+.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| (define-public libglade | ||||
|   (package | ||||
|     (name "libglade") | ||||
|     (version "2.6.4") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 3)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1v2x2s04jry4gpabws92i0wq2ghd47yr5n9nhgnkd7c38xv1wdk4")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("gtk+-2" ,gtk+-2) | ||||
|        ("libxml2" ,libxml2) | ||||
|        ("python" ,python))) ;; needed for the optional libglade-convert program | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://developer.gnome.org/libglade") | ||||
|     (synopsis "load glade interfaces and access the glade built widgets") | ||||
|     (description  "libglade is a library that provides interfaces for loading | ||||
| graphical interfaces described in glade files and for accessing the | ||||
| widgets built in the loading process.") | ||||
|     (license license:gpl2+))) ; This is correct.  GPL not LGPL | ||||
| 
 | ||||
| (define-public libgnomeprint | ||||
|   (package | ||||
|     (name "libgnomeprint") | ||||
|     (version "2.8.2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 3)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "129ka3nn8gx9dlfry17ib79azxk45wzfv5rgqzw6dwx2b5ns8phm")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("popt" ,popt) | ||||
|        ("libart-lgpl" ,libart-lgpl) | ||||
|        ("gtk+" ,gtk+-2) | ||||
|        ("libxml2" ,libxml2)))  | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://projects.gnome.org/gnome-print/home/faq.html") | ||||
|     (synopsis "printing framework for GNOME") | ||||
|     (description  "Gnome-print is a high-quality printing framework for GNOME.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public libgnomeprintui | ||||
|   (package | ||||
|     (name "libgnomeprintui") | ||||
|     (version "2.8.2") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 3)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1ivipk7r61rg90p9kp889j28xlyyj6466ypvwa4jvnrcllnaajsw")))) | ||||
|     (build-system gnu-build-system) | ||||
|     ;; Mentioned as Required in the .pc file | ||||
|     (propagated-inputs `(("libgnomeprint" ,libgnomeprint))) | ||||
|     (inputs `(("gtk+" ,gtk+-2) | ||||
|               ("glib" ,glib) | ||||
|               ("gnome-icon-theme" ,gnome-icon-theme) | ||||
|               ("libgnomecanvas" ,libgnomecanvas) | ||||
|               ("libxml2" ,libxml2)))  | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://projects.gnome.org/gnome-print/home/faq.html") | ||||
|     (synopsis "Printing framework for GNOME") | ||||
|     (description  "Gnome-print is a high-quality printing framework for GNOME.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public libbonoboui | ||||
|   (package | ||||
|     (name "libbonoboui") | ||||
|     (version "2.24.5") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://gnome/sources/" name "/" (string-take version 3)  "/" name "-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1kbgqh7bw0fdx4f1a1aqwpff7gp5mwhbaz60c6c98bc4djng5dgs")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (alist-cons-before | ||||
|         'check 'start-xserver | ||||
|         (lambda* (#:key inputs #:allow-other-keys) | ||||
|           (let ((xorg-server (assoc-ref inputs "xorg-server")) | ||||
|                 (disp ":1")) | ||||
|              | ||||
|             (setenv "HOME" (getcwd)) | ||||
|             (setenv "DISPLAY" disp) | ||||
|             ;; There must be a running X server and make check doesn't start one. | ||||
|             ;; Therefore we must do it. | ||||
|             (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp))))) | ||||
|         %standard-phases))) | ||||
|     ;; Mentioned as Required by the .pc file | ||||
|     (propagated-inputs `(("libxml2" ,libxml2))) | ||||
|     (inputs | ||||
|      `(("popt" ,popt) | ||||
|        ("pangox-compat" ,pangox-compat) | ||||
|        ("libgnome" ,libgnome) | ||||
|        ("libgnomecanvas" ,libgnomecanvas) | ||||
|        ("libglade" ,libglade))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("xorg-server" ,xorg-server) ; For running the tests | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://developer.gnome.org/libbonoboui/") | ||||
|     (synopsis "Some user interface controls using Bonobo") | ||||
|     (description  "The Bonobo UI library provides a number of user interface | ||||
| controls using the Bonobo component framework.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
|  |  | |||
|  | @ -279,7 +279,7 @@ and every application benefits from this.") | |||
|                      "1g1jly3wl4ks6h8ydkygyl2c4i7v3z91rg42005m6vm70y1d8b3d")))) | ||||
|    (build-system gnu-build-system) | ||||
|    (inputs `(("perl" ,perl) | ||||
|              ("python" ,python-wrapper) | ||||
|              ("python" ,python-2)           ; uses the Python 2 'print' syntax | ||||
|              ("gpg" ,gnupg))) | ||||
|    (arguments | ||||
|     `(#:tests? #f | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -53,9 +53,10 @@ | |||
|              (base32 | ||||
|               "1c2hbg66wfvibsz2ia0ri48yr62751fn950i97c53j3b0fjifsb3")))) | ||||
|    (build-system gnu-build-system) | ||||
|    (inputs `(("glib" ,glib) | ||||
|              ("gobject-introspection" ,gobject-introspection))) | ||||
|    (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|    (inputs `(("glib" ,glib))) | ||||
|    (native-inputs | ||||
|     `(("pkg-config" ,pkg-config) | ||||
|       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc. | ||||
|    (synopsis "GNOME accessibility toolkit") | ||||
|    (description | ||||
|     "ATK provides the set of accessibility interfaces that are implemented | ||||
|  | @ -156,10 +157,10 @@ affine transformation (scale, rotation, shear, etc.)") | |||
|     `(("cairo" ,cairo) | ||||
|       ("harfbuzz" ,harfbuzz))) | ||||
|    (inputs | ||||
|     `(("gobject-introspection" ,gobject-introspection) | ||||
|       ("zlib" ,zlib))) | ||||
|     `(("zlib" ,zlib))) | ||||
|    (native-inputs | ||||
|     `(("pkg-config" ,pkg-config))) | ||||
|     `(("pkg-config" ,pkg-config) | ||||
|       ("gobject-introspection" ,gobject-introspection))) ; g-ir-compiler, etc. | ||||
|    (synopsis "GNOME text and font handling library") | ||||
|    (description | ||||
|     "Pango is the core text and font handling library used in GNOME | ||||
|  | @ -168,6 +169,33 @@ used throughout the world.") | |||
|    (license license:lgpl2.0+) | ||||
|    (home-page "https://developer.gnome.org/pango/"))) | ||||
| 
 | ||||
| (define-public pangox-compat | ||||
|   (package | ||||
|     (name "pangox-compat") | ||||
|     (version "0.0.2") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append | ||||
|                    "mirror://gnome/sources/" name "/" (string-take version 3)  "/" name "-" | ||||
|                    version | ||||
|                    ".tar.xz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0ip0ziys6mrqqmz4n71ays0kf5cs1xflj1gfpvs4fgy2nsrr482m")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("glib" ,glib) | ||||
|        ("pango" ,pango))) | ||||
|     (native-inputs | ||||
|      `(("intltool" ,intltool) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://developer.gnome.org/pango") | ||||
|     (synopsis "functions now obsolete in pango") | ||||
|     (description  "Pangox was a X backend to pango.  It is now obsolete and no | ||||
| longer provided by recent pango releases.  pangox-compat provides the | ||||
| functions which were removed.") | ||||
|     (license license:lgpl2.0+))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public gtksourceview | ||||
|   (package | ||||
|  | @ -236,12 +264,12 @@ printing and other features typical of a source code editor.") | |||
|    (build-system gnu-build-system) | ||||
|    (inputs | ||||
|     `(("glib" ,glib) | ||||
|       ("gobject-introspection", gobject-introspection) | ||||
|       ("libjpeg" ,libjpeg) | ||||
|       ("libpng" ,libpng) | ||||
|       ("libtiff" ,libtiff))) | ||||
|    (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("gobject-introspection", gobject-introspection))) ; g-ir-compiler, etc. | ||||
|    (synopsis "GNOME image loading and manipulation library") | ||||
|    (description | ||||
|     "GdkPixbuf is a library for image loading and manipulation developed | ||||
|  | @ -366,21 +394,15 @@ application suites.") | |||
|       ("libxinerama" ,libxinerama) | ||||
|       ("pango" ,pango))) | ||||
|    (inputs | ||||
|     `(("gobject-introspection" ,gobject-introspection) | ||||
|       ("libxml2" ,libxml2))) | ||||
|     `(("libxml2" ,libxml2))) | ||||
|    (native-inputs | ||||
|      `(("perl" ,perl) | ||||
|     `(("perl" ,perl) | ||||
|       ("pkg-config" ,pkg-config) | ||||
|       ("gobject-introspection" ,gobject-introspection) | ||||
|       ("python-wrapper" ,python-wrapper) | ||||
|       ("xorg-server" ,xorg-server))) | ||||
|    (arguments | ||||
|     `(#:modules ((guix build gnome) | ||||
|                  (guix build gnu-build-system) | ||||
|                  (guix build utils)) | ||||
|       #:imported-modules ((guix build gnome) | ||||
|                           (guix build gnu-build-system) | ||||
|                           (guix build utils)) | ||||
|       #:phases | ||||
|     `(#:phases | ||||
|       (alist-replace | ||||
|        'configure | ||||
|        (lambda* (#:key inputs #:allow-other-keys #:rest args) | ||||
|  | @ -391,32 +413,8 @@ application suites.") | |||
|            ;; directory. | ||||
|            ;; See the manual page for dbus-uuidgen to correct this issue. | ||||
|            (substitute* "testsuite/Makefile.in" | ||||
|             (("SUBDIRS = gdk gtk a11y css reftests") "SUBDIRS = gdk")) | ||||
| 
 | ||||
| 	   ;; We need to tell GIR where it can find some of the required .gir | ||||
|            ;; files. | ||||
|            (substitute* "gdk/Makefile.in" | ||||
|             (("--add-include-path=../gdk") | ||||
|              (string-append | ||||
|               "--add-include-path=../gdk" | ||||
|               " --add-include-path=" (gir-directory inputs "gdk-pixbuf") | ||||
|               " --add-include-path=" (gir-directory inputs "pango"))) | ||||
|             (("--includedir=\\.") | ||||
|              (string-append "--includedir=." | ||||
|               " --includedir=" (gir-directory inputs "gdk-pixbuf") | ||||
|               " --includedir=" (gir-directory inputs "pango")))) | ||||
| 
 | ||||
|            (substitute* "gtk/Makefile.in" | ||||
|             (("--add-include-path=../gdk") | ||||
|              (string-append "--add-include-path=../gdk" | ||||
|               " --add-include-path=" (gir-directory inputs "atk") | ||||
|               " --add-include-path=" (gir-directory inputs "gdk-pixbuf") | ||||
|               " --add-include-path=" (gir-directory inputs "pango"))) | ||||
|             (("--includedir=../gdk") | ||||
|              (string-append "--includedir=../gdk" | ||||
|               " --includedir=" (gir-directory inputs "atk") | ||||
|               " --includedir=" (gir-directory inputs "gdk-pixbuf") | ||||
|               " --includedir=" (gir-directory inputs "pango")))) | ||||
|              (("SUBDIRS = gdk gtk a11y css reftests") | ||||
|               "SUBDIRS = gdk")) | ||||
|            (apply configure args))) | ||||
|        %standard-phases))))) | ||||
| 
 | ||||
|  |  | |||
|  | @ -247,7 +247,8 @@ many readers as needed).") | |||
|     (inputs `(("ncurses" ,ncurses) | ||||
|               ("guile" ,guile-2.0))) | ||||
|     (arguments | ||||
|      '(#:configure-flags (list (string-append "--with-guilesitedir=" | ||||
|      '(#:configure-flags (list "--with-ncursesw"  ; Unicode support | ||||
|                                (string-append "--with-guilesitedir=" | ||||
|                                               (assoc-ref %outputs "out") | ||||
|                                               "/share/guile/site/2.0")) | ||||
|        #:phases (alist-cons-after | ||||
|  | @ -271,18 +272,18 @@ library.") | |||
| (define-public mcron | ||||
|   (package | ||||
|     (name "mcron") | ||||
|     (version "1.0.6") | ||||
|     (version "1.0.7") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://gnu/mcron/mcron-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0yvrfzzdy2m7fbqkr61fw01wd9r2jpnbyabxhcsfivgxywknl0fy")) | ||||
|                "1d214fmhsn3kvpnwxnqwfpy6gr5c5dbz2mx3sijhxi070vkfibxc")) | ||||
|              (patches (list (search-patch "mcron-install.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("ed" ,ed) ("which" ,which) ("guile" ,guile-1.8))) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (inputs `(("ed" ,ed) ("which" ,which) ("guile" ,guile-2.0))) | ||||
|     (home-page "http://www.gnu.org/software/mcron/") | ||||
|     (synopsis "Run jobs at scheduled times") | ||||
|     (description | ||||
|  |  | |||
|  | @ -37,14 +37,14 @@ | |||
| (define-public imagemagick | ||||
|   (package | ||||
|     (name "imagemagick") | ||||
|     (version "6.8.8-10") | ||||
|     (version "6.8.9-0") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://imagemagick/ImageMagick-" | ||||
|                                  version ".tar.xz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0crdazi2f1qj1ppb01f0mhqjw5q3afswgw49fa1m100bxmqpf77k")))) | ||||
|                "1lapn2798fkc2wn81slpms5p21kq4dsyg45khsk7n8p69cvrmw2b")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases (alist-cons-before | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -17,14 +17,22 @@ | |||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages kde) | ||||
|   #:use-module ((guix licenses) #:select (bsd-2 lgpl2.1+)) | ||||
|   #:use-module ((guix licenses) #:select (bsd-2 lgpl2.0+ lgpl2.1 lgpl2.1+)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system cmake) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages doxygen) | ||||
|   #:use-module (gnu packages geeqie) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages pulseaudio) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages qt) | ||||
|   #:use-module (gnu packages rdf) | ||||
|   #:use-module (gnu packages video) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages xorg)) | ||||
| 
 | ||||
| (define-public automoc4 | ||||
|  | @ -78,3 +86,122 @@ | |||
|     (synopsis "Qt 4 multimedia API") | ||||
|     (description "KDE desktop environment") | ||||
|     (license lgpl2.1+))) | ||||
| 
 | ||||
| (define-public qjson | ||||
|   (package | ||||
|     (name "qjson") | ||||
|     (version "0.8.1") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "https://github.com/flavio/qjson/archive/" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "163fspi0xc705irv79qw861fmh68pjyla9vx3kqiq6xrdhb9834j")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (inputs | ||||
|      `(("qt" ,qt-4))) | ||||
|     (arguments | ||||
|      `(#:tests? #f)) ; no test target | ||||
|     (home-page "http://qjson.sourceforge.net/") | ||||
|     (synopsis "Qt-based library for handling JSON") | ||||
|     (description "QJson is a Qt-based library that maps JSON data to QVariant | ||||
| objects and vice versa.  JSON arrays are mapped to QVariantList instances, | ||||
| while JSON objects are mapped to QVariantMap.") | ||||
|     (license lgpl2.1+))) | ||||
| 
 | ||||
| (define-public libdbusmenu-qt | ||||
|   (package | ||||
|     (name "libdbusmenu-qt") | ||||
|     (version "0.9.2") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "https://launchpad.net/" name "/trunk/" | ||||
|                                  version "/+download/" | ||||
|                                  name "-" version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1v0ri5g9xw2z64ik0kx0ra01v8rpjn2kxprrxppkls1wvav1qv5f")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (native-inputs | ||||
|      `(("doxygen" ,doxygen) ; used for static documentation | ||||
|        ("pkg-config" ,pkg-config) | ||||
|        ("qjson", qjson))) ; used for the tests | ||||
|     (inputs | ||||
|      `(("qt" ,qt-4))) | ||||
|     (arguments | ||||
|      `(#:tests? #f)) ; no check target | ||||
|     (home-page "https://launchpad.net/libdbusmenu-qt/") | ||||
|     (synopsis "Qt implementation of the DBusMenu protocol") | ||||
|     (description "The library provides a Qt implementation of the DBusMenu | ||||
| protocol.  The DBusMenu protocol makes it possible for applications to export | ||||
| and import their menus over DBus.") | ||||
|     (license lgpl2.0+))) | ||||
| 
 | ||||
| (define-public attica | ||||
|   (package | ||||
|     (name "attica") | ||||
|     (version "0.4.2") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://download.kde.org/stable/" | ||||
|                                  name "/" | ||||
|                                  name "-" version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1y74gsyzi70dfr9d1f1b08k130rm3jaibsppg8dv5h3211vm771v")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (inputs | ||||
|      `(("qt" ,qt-4))) | ||||
|     (home-page "https://projects.kde.org/projects/kdesupport/attica") | ||||
|     (synopsis "Qt library for the Open Collaboration Services API") | ||||
|     (description "Attica is a Qt library that implements the Open | ||||
| Collaboration Services API version 1.6.  It grants easy access to the | ||||
| services such as querying information about persons and contents.  The | ||||
| library is used in KNewStuff3 as content provider.  In order to integrate | ||||
| with KDE's Plasma Desktop, a platform plugin exists in kdebase.") | ||||
|     (license lgpl2.1+))) | ||||
| 
 | ||||
| (define-public strigi | ||||
|   (package | ||||
|     (name "strigi") | ||||
|     (version "0.7.8") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://www.vandenoever.info/software/" | ||||
|                                  name "/" | ||||
|                                  name "-" version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "12grxzqwnvbyqw7q1gnz42lypadxmq89vk2qpxczmpmc4nk63r23")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     ;; FIXME: Add optional inputs XAttr, FAM, Log4cxx | ||||
|     (inputs | ||||
|      `(("clucene" ,clucene) | ||||
|        ("dbus" ,dbus) | ||||
|        ("exiv2" ,exiv2) | ||||
|        ("ffmpeg" ,ffmpeg) | ||||
|        ("libxml2" ,libxml2) | ||||
|        ("perl" ,perl) | ||||
|        ("python" ,python-wrapper) | ||||
|        ("qt" ,qt-4) | ||||
|        ("zlib" ,zlib))) | ||||
|     (arguments | ||||
|      `(#:tests? #f)) ; FIXME: Test 23/25 ProcessInputStreamTest fails. | ||||
|     (home-page "http://www.vandenoever.info/software/strigi/") | ||||
|     (synopsis "Desktop search daemon") | ||||
|     (description "Strigi is a desktop search daemon with the following | ||||
| main features: | ||||
| very fast crawling; | ||||
| very small memory footprint; | ||||
| no hammering of the system; | ||||
| pluggable backend, currently clucene and hyperestraier, sqlite3 and xapian | ||||
| are in the works; | ||||
| communication between daemon and search program over an abstract interface, | ||||
| currently a simple socket; | ||||
| simple interface for implementing plugins for extracting information; | ||||
| calculation of sha1 for every file crawled | ||||
| (allows fast finding of duplicates).") | ||||
|     (license lgpl2.0+))) | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -23,7 +23,9 @@ | |||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages which) | ||||
|   #:use-module (gnu packages python)) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages autotools) | ||||
|   #:use-module (gnu packages pkg-config)) | ||||
| 
 | ||||
| (define-public libevent | ||||
|   (package | ||||
|  | @ -58,3 +60,44 @@ network servers.  An application just needs to call event_dispatch() and | |||
| then add or remove events dynamically without having to change the event | ||||
| loop.") | ||||
|     (license bsd-3))) | ||||
| 
 | ||||
| (define-public libuv | ||||
|   (package | ||||
|     (name "libuv") | ||||
|     (version "0.11.25") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://github.com/joyent/libuv/archive/v" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1ys2wlypdbv59yywn91d5vl329z50mi7ivi3fj5rjm4mr9g3wnmr")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-before | ||||
|                  'configure 'autogen | ||||
|                  (lambda _ | ||||
|                    ;; Fashionable people don't run 'make dist' these days, so | ||||
|                    ;; we need to do that ourselves. | ||||
|                    (zero? (system* "./autogen.sh"))) | ||||
|                  %standard-phases) | ||||
| 
 | ||||
|        ;; XXX: Some tests want /dev/tty, attempt to make connections, etc. | ||||
|        #:tests? #f)) | ||||
|     (native-inputs `(("autoconf" ,(autoconf-wrapper)) | ||||
|                      ("automake" ,automake) | ||||
|                      ("libtool" ,libtool "bin") | ||||
| 
 | ||||
|                      ;; libuv.pc is installed only when pkg-config is found. | ||||
|                      ("pkg-config" ,pkg-config))) | ||||
|     (home-page "https://github.com/joyent/libuv") | ||||
|     (synopsis "Library for asynchronous I/O") | ||||
|     (description | ||||
|      "libuv is a multi-platform support library with a focus on asynchronous | ||||
| I/O.  Among other things, it supports event loops via epoll, kqueue, and | ||||
| similar IOCP, and event ports, asynchronous TCP/UDP sockets, asynchronous DNS | ||||
| resolution, asynchronous file system operations, and threading primitives.") | ||||
| 
 | ||||
|     ;; A few files fall under other non-copyleft licenses; see 'LICENSE' for | ||||
|     ;; details. | ||||
|     (license x11))) | ||||
|  |  | |||
|  | @ -38,11 +38,14 @@ | |||
|   #:use-module (gnu packages attr) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages autotools) | ||||
|   #:use-module (gnu packages texinfo) | ||||
|   #:use-module (gnu packages check) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system cmake) | ||||
|   #:use-module (guix build-system python)) | ||||
|   #:use-module (guix build-system python) | ||||
|   #:use-module (guix build-system trivial)) | ||||
| 
 | ||||
| (define-public (system->linux-architecture arch) | ||||
|   "Return the Linux architecture name for ARCH, a Guix system name such as | ||||
|  | @ -440,7 +443,8 @@ slabtop, and skill.") | |||
|                "0ibkkvp6kan0hn0d1anq4n2md70j5gcm7mwna515w82xwyr02rfw")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("util-linux" ,util-linux))) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config) | ||||
|                      ("texinfo" ,texinfo)))    ; for the libext2fs Info manual | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-before | ||||
|                  'configure 'patch-shells | ||||
|  | @ -466,6 +470,39 @@ slabtop, and skill.") | |||
|                    lgpl2.0                        ; libext2fs | ||||
|                    x11))))                        ; libuuid | ||||
| 
 | ||||
| (define-public e2fsck/static | ||||
|   (package | ||||
|     (name "e2fsck-static") | ||||
|     (version (package-version e2fsprogs)) | ||||
|     (build-system trivial-build-system) | ||||
|     (source #f) | ||||
|     (arguments | ||||
|      `(#:modules ((guix build utils)) | ||||
|        #:builder | ||||
|        (begin | ||||
|          (use-modules (guix build utils) | ||||
|                       (ice-9 ftw) | ||||
|                       (srfi srfi-26)) | ||||
| 
 | ||||
|          (let ((source (string-append (assoc-ref %build-inputs "e2fsprogs") | ||||
|                                       "/sbin")) | ||||
|                (bin    (string-append (assoc-ref %outputs "out") "/sbin"))) | ||||
|            (mkdir-p bin) | ||||
|            (with-directory-excursion bin | ||||
|              (for-each (lambda (file) | ||||
|                          (copy-file (string-append source "/" file) | ||||
|                                     file) | ||||
|                          (remove-store-references file) | ||||
|                          (chmod file #o555)) | ||||
|                        (scandir source (cut string-prefix? "fsck." <>)))))))) | ||||
|     (inputs `(("e2fsprogs" ,(static-package e2fsprogs)))) | ||||
|     (synopsis "Statically-linked fsck.* commands from e2fsprogs") | ||||
|     (description | ||||
|      "This package provides statically-linked command of fsck.ext[234] taken | ||||
| from the e2fsprogs package.  It is meant to be used in initrds.") | ||||
|     (home-page (package-home-page e2fsprogs)) | ||||
|     (license (package-license e2fsprogs)))) | ||||
| 
 | ||||
| (define-public strace | ||||
|   (package | ||||
|     (name "strace") | ||||
|  | @ -962,6 +999,23 @@ space, using the FUSE library.  Mounting a union file system allows you to | |||
| UnionFS-FUSE additionally supports copy-on-write.") | ||||
|     (license bsd-3))) | ||||
| 
 | ||||
| (define fuse-static | ||||
|   (package (inherit fuse) | ||||
|     (name "fuse-static") | ||||
|     (source (origin (inherit (package-source fuse)) | ||||
|               (modules '((guix build utils))) | ||||
|               (snippet | ||||
|                ;; Normally libfuse invokes mount(8) so that /etc/mtab is | ||||
|                ;; updated.  Change calls to 'mtab_needs_update' to 0 so that | ||||
|                ;; it doesn't do that, allowing us to remove the dependency on | ||||
|                ;; util-linux (something that is useful in initrds.) | ||||
|                '(substitute* '("lib/mount_util.c" | ||||
|                                "util/mount_util.c") | ||||
|                   (("mtab_needs_update[[:blank:]]*\\([a-z_]+\\)") | ||||
|                    "0") | ||||
|                   (("/bin/") | ||||
|                    ""))))))) | ||||
| 
 | ||||
| (define-public unionfs-fuse/static | ||||
|   (package (inherit unionfs-fuse) | ||||
|     (synopsis "User-space union file system (statically linked)") | ||||
|  | @ -976,4 +1030,118 @@ UnionFS-FUSE additionally supports copy-on-write.") | |||
|                                   libs " dl)")))))) | ||||
|     (arguments | ||||
|      '(#:tests? #f | ||||
|        #:configure-flags '("-DCMAKE_EXE_LINKER_FLAGS=-static"))))) | ||||
|        #:configure-flags '("-DCMAKE_EXE_LINKER_FLAGS=-static"))) | ||||
|     (inputs `(("fuse" ,fuse-static))))) | ||||
| 
 | ||||
| (define-public numactl | ||||
|   (package | ||||
|     (name "numactl") | ||||
|     (version "2.0.9") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "ftp://oss.sgi.com/www/projects/libnuma/download/numactl-" | ||||
|                     version | ||||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "073myxlyyhgxh1w3r757ajixb7s2k69czc3r0g12c3scq7k3784w")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-replace | ||||
|                  'configure | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    ;; There's no 'configure' script, just a raw makefile. | ||||
|                    (substitute* "Makefile" | ||||
|                      (("^prefix := .*$") | ||||
|                       (string-append "prefix := " (assoc-ref outputs "out") | ||||
|                                      "\n")) | ||||
|                      (("^libdir := .*$") | ||||
|                       ;; By default the thing tries to install under | ||||
|                       ;; $prefix/lib64 when on a 64-bit platform. | ||||
|                       (string-append "libdir := $(prefix)/lib\n")))) | ||||
|                  %standard-phases) | ||||
| 
 | ||||
|        #:make-flags (list | ||||
|                      ;; By default the thing tries to use 'cc'. | ||||
|                      "CC=gcc" | ||||
| 
 | ||||
|                      ;; Make sure programs have an RPATH so they can find | ||||
|                      ;; libnuma.so. | ||||
|                      (string-append "LDLIBS=-Wl,-rpath=" | ||||
|                                     (assoc-ref %outputs "out") "/lib")) | ||||
| 
 | ||||
|        ;; There's a 'test' target, but it requires NUMA support in the kernel | ||||
|        ;; to run, which we can't assume to have. | ||||
|        #:tests? #f)) | ||||
|     (home-page "http://oss.sgi.com/projects/libnuma/") | ||||
|     (synopsis "Tools for non-uniform memory access (NUMA) machines") | ||||
|     (description | ||||
|      "NUMA stands for Non-Uniform Memory Access, in other words a system whose | ||||
| memory is not all in one place.  The numactl program allows you to run your | ||||
| application program on specific CPU's and memory nodes.  It does this by | ||||
| supplying a NUMA memory policy to the operating system before running your | ||||
| program. | ||||
| 
 | ||||
| The package contains other commands, such as numademo, numastat and memhog. | ||||
| The numademo command provides a quick overview of NUMA performance on your | ||||
| system.") | ||||
|     (license (list gpl2                           ; programs | ||||
|                    lgpl2.1))))                    ; library | ||||
| 
 | ||||
| (define-public kbd | ||||
|   (package | ||||
|     (name "kbd") | ||||
|     (version "2.0.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://kernel.org/linux/utils/kbd/kbd-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0c34b0za2v0934acvgnva0vaqpghmmhz4zh7k0m9jd4mbc91byqm")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-before | ||||
|                  'build 'pre-build | ||||
|                  (lambda* (#:key inputs #:allow-other-keys) | ||||
|                    (let ((gzip  (assoc-ref %build-inputs "gzip")) | ||||
|                          (bzip2 (assoc-ref %build-inputs "bzip2"))) | ||||
|                      (substitute* "src/libkeymap/findfile.c" | ||||
|                        (("gzip") | ||||
|                         (string-append gzip "/bin/gzip")) | ||||
|                        (("bzip2") | ||||
|                         (string-append bzip2 "/bin/bzip2"))))) | ||||
|                  %standard-phases))) | ||||
|     (inputs `(("check" ,check) | ||||
|               ("gzip" ,guix:gzip) | ||||
|               ("bzip2" ,guix:bzip2) | ||||
|               ("pam" ,linux-pam))) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "ftp://ftp.kernel.org/pub/linux/utils/kbd/") | ||||
|     (synopsis "Linux keyboard utilities and keyboard maps") | ||||
|     (description | ||||
|      "This package contains keytable files and keyboard utilities compatible | ||||
| for systems using the Linux kernel.  This includes commands such as | ||||
| 'loadkeys', 'setfont', 'kbdinfo', and 'chvt'.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public inotify-tools | ||||
|   (package | ||||
|     (name "inotify-tools") | ||||
|     (version "3.13") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://sourceforge/inotify-tools/inotify-tools/" | ||||
|                     version "/inotify-tools-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0icl4bx041axd5dvhg89kilfkysjj86hjakc7bk8n49cxjn4cha6")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (home-page "http://inotify-tools.sourceforge.net/") | ||||
|     (synopsis "Monitor file accesses") | ||||
|     (description | ||||
|      "The inotify-tools packages provides a C library and command-line tools | ||||
| to use Linux' inotify mechanism, which allows file accesses to be monitored.") | ||||
|     (license gpl2+))) | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> | ||||
| ;;; Copyright © 2014 Raimon Grau <raimonster@gmail.com> | ||||
| ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -29,13 +30,13 @@ | |||
| (define-public lua | ||||
|   (package | ||||
|     (name "lua") | ||||
|     (version "5.2.1") | ||||
|     (version "5.2.3") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://www.lua.org/ftp/lua-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 "1rbv2ysq5fdksz7xg07dnrkl8i0gnx855hg4z6b324vng6l4sc34")))) | ||||
|               (base32 "0b8034v1s82n4dg5rzcn12067ha3nxaylp2vdp8gg08kjsbzphhk")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("readline", readline))) | ||||
|     (arguments | ||||
|  | @ -45,7 +46,7 @@ | |||
|        #:test-target "test" | ||||
|        #:phases (alist-replace | ||||
|                  'build | ||||
|                  (lambda _ (zero? (system* "make" "linux"))) ; XXX: Other OS. | ||||
|                  (lambda _ (zero? (system* "make" "CFLAGS=-fPIC" "linux"))) | ||||
|                  (alist-replace | ||||
|                   'install | ||||
|                   (lambda* (#:key outputs #:allow-other-keys) | ||||
|  | @ -66,6 +67,16 @@ automatic memory management with incremental garbage collection, making it ideal | |||
| for configuration, scripting, and rapid prototyping.") | ||||
|     (license x11))) | ||||
| 
 | ||||
| (define-public lua-5.1 | ||||
|   (package (inherit lua) | ||||
|     (version "5.1.5") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://www.lua.org/ftp/lua-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 "0cskd4w0g6rdm2q8q3i4n1h3j8kylhs3rq8mxwl9vwlmlxbgqh16")))))) | ||||
| 
 | ||||
| (define-public luajit | ||||
|   (package | ||||
|     (name "luajit") | ||||
|  |  | |||
|  | @ -20,9 +20,12 @@ | |||
| (define-module (gnu packages mail) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages autotools) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages cyrus-sasl) | ||||
|   #:use-module (gnu packages dejagnu) | ||||
|   #:use-module (gnu packages emacs) | ||||
|   #:use-module (gnu packages gdbm) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gnupg) | ||||
|   #:use-module (gnu packages gnutls) | ||||
|   #:use-module (gnu packages guile) | ||||
|  | @ -32,7 +35,9 @@ | |||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages openssl) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages search) | ||||
|   #:use-module (gnu packages texinfo) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages glib) | ||||
|  | @ -44,6 +49,7 @@ | |||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system python) | ||||
|   #:use-module (srfi srfi-1)) | ||||
| 
 | ||||
| (define-public mailutils | ||||
|  | @ -253,4 +259,71 @@ content (body).  The program is able to learn from the user's classifications | |||
| and corrections.  It is based on a Bayesian filter.") | ||||
|     (license gpl2))) | ||||
| 
 | ||||
| (define-public offlineimap | ||||
|   (package | ||||
|     (name "offlineimap") | ||||
|     (version "6.5.5") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://github.com/OfflineIMAP/offlineimap/" | ||||
|                                   "archive/v" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "00k84qagph3xnxss6rkxm61x07ngz8fvffx4z9jyw5baf3cdd32p")))) | ||||
|     (build-system python-build-system) | ||||
|     (native-inputs `(("python" ,python-2))) | ||||
|     (arguments | ||||
|      ;; The setup.py script expects python-2. | ||||
|      `(#:python ,python-2 | ||||
|       ;; Tests require a modifiable IMAP account. | ||||
|        #:tests? #f)) | ||||
|     (home-page "http://www.offlineimap.org") | ||||
|     (synopsis "Synch emails between two repositories") | ||||
|     (description | ||||
|      "OfflineImap synchronizes emails between two repositories, so that you | ||||
| can read the same mailbox from multiple computers.  It supports IMAP as REMOTE | ||||
| repository and Maildir/IMAP as LOCAL repository.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public mu | ||||
|   (package | ||||
|     (name "mu") | ||||
|     (version "0.9.9.5") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://mu0.googlecode.com/files/mu-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1hwkliyb8fjrz5sw9fcisssig0jkdxzhccw0ld0l9a10q1l9mqhp")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config) | ||||
|        ("texinfo" ,texinfo))) | ||||
|     ;; TODO: Add webkit and gtk to build the mug GUI. | ||||
|     (inputs | ||||
|      `(("xapian" ,xapian) | ||||
|        ("emacs" ,emacs) | ||||
|        ("guile" ,guile-2.0) | ||||
|        ("glib" ,glib) | ||||
|        ("gmime" ,gmime) | ||||
|        ("tzdata" ,tzdata)))             ;for mu/test/test-mu-query.c | ||||
|     (arguments | ||||
|      '(#:phases (alist-cons-before | ||||
|                  'check 'check-tz-setup | ||||
|                  (lambda* (#:key inputs #:allow-other-keys) | ||||
|                    ;; For mu/test/test-mu-query.c | ||||
|                    (setenv "TZDIR" | ||||
|                            (string-append (assoc-ref inputs "tzdata") | ||||
|                                           "/share/zoneinfo"))) | ||||
|                  %standard-phases))) | ||||
|     (home-page "http://www.djcbsoftware.nl/code/mu/") | ||||
|     (synopsis "Quickly find emails") | ||||
|     (description | ||||
|      "Mu is a tool for dealing with e-mail messages stored in the | ||||
| Maildir-format.  Mu's purpose in life is to help you to quickly find the | ||||
| messages you need; in addition, it allows you to view messages, extract | ||||
| attachments, create new maildirs, and so on.") | ||||
|     (license gpl3+))) | ||||
| 
 | ||||
| ;;; mail.scm ends here | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -40,7 +40,9 @@ | |||
|             %glibc-bootstrap-tarball | ||||
|             %gcc-bootstrap-tarball | ||||
|             %guile-bootstrap-tarball | ||||
|             %bootstrap-tarballs)) | ||||
|             %bootstrap-tarballs | ||||
| 
 | ||||
|             %guile-static-stripped)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  |  | |||
|  | @ -102,6 +102,10 @@ a flexible and convenient way.") | |||
|        ("groff" ,groff) | ||||
|        ("less" ,less) | ||||
|        ("libpipeline" ,libpipeline))) | ||||
|     (native-search-paths | ||||
|      (list (search-path-specification | ||||
|             (variable "MANPATH") | ||||
|             (directories '("share/man"))))) | ||||
|     (home-page "http://man-db.nongnu.org/") | ||||
|     (synopsis "Standard Unix documentation system") | ||||
|     (description | ||||
|  | @ -117,7 +121,7 @@ the traditional flat-text whatis databases.") | |||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://kernel/linux/docs/man-pages/man-pages-" | ||||
|                     "mirror://kernel.org/linux/docs/man-pages/man-pages-" | ||||
|                     version ".tar.xz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|  |  | |||
|  | @ -1,7 +1,8 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; Copyright © 2014 John Darrington <jmd@gnu.org> | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -24,11 +25,16 @@ | |||
|                 #:renamer (symbol-prefix-proc 'license:)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module (guix build-system cmake) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages algebra) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages cmake) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages curl) | ||||
|   #:use-module (gnu packages elf) | ||||
|   #:use-module (gnu packages flex) | ||||
|   #:use-module (gnu packages fltk) | ||||
|   #:use-module (gnu packages fontutils) | ||||
|   #:use-module (gnu packages gettext) | ||||
|  | @ -37,14 +43,18 @@ | |||
|   #:use-module (gnu packages ghostscript) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages less) | ||||
|   #:use-module (gnu packages gnome) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages gl) | ||||
|   #:use-module (gnu packages mpi) | ||||
|   #:use-module (gnu packages multiprecision) | ||||
|   #:use-module (gnu packages pcre) | ||||
|   #:use-module (gnu packages popt) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages tcsh) | ||||
|   #:use-module (gnu packages texinfo) | ||||
|   #:use-module (gnu packages texlive) | ||||
|   #:use-module (gnu packages xml)) | ||||
|  | @ -137,7 +147,7 @@ LP/MIP solver is included in the package.") | |||
| (define-public pspp | ||||
|   (package | ||||
|     (name "pspp") | ||||
|     (version "0.8.2") | ||||
|     (version "0.8.3") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -145,7 +155,7 @@ LP/MIP solver is included in the package.") | |||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1w7h3dglgx0jlq1wb605b8pgfsk2vr1q2q2rj7bsajh9ihbcsixr")))) | ||||
|         "0vri2pzvmm38qaihfvwlry30f40lcnps4blg59ixic4q20ldxf5d")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("cairo" ,cairo) | ||||
|  | @ -190,43 +200,14 @@ output in text, PostScript, PDF or HTML.") | |||
|     (inputs `(("fortran" ,gfortran-4.8) | ||||
|               ("python" ,python-2))) | ||||
|     (arguments | ||||
|      `(#:modules ((guix build cmake-build-system) | ||||
|                   (guix build utils) | ||||
|                   (guix build rpath) | ||||
|                   (srfi srfi-1)) | ||||
|        #:imported-modules ((guix build cmake-build-system) | ||||
|                            (guix build gnu-build-system) | ||||
|                            (guix build utils) | ||||
|                            (guix build rpath)) | ||||
|        #:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES") | ||||
|      `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES") | ||||
|        #:phases (alist-cons-before | ||||
|                  'check 'patch-python | ||||
|                  (lambda* (#:key inputs #:allow-other-keys) | ||||
|                    (let ((python (assoc-ref inputs "python"))) | ||||
|                      (substitute* "lapack_testing.py" | ||||
|                        (("/usr/bin/env python") python)))) | ||||
|                  (alist-cons-after | ||||
|                   'strip 'add-libs-to-runpath | ||||
|                   (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|                     (let* ((out     (assoc-ref outputs "out")) | ||||
|                            (fortran (assoc-ref inputs "fortran")) | ||||
|                            (libc    (assoc-ref inputs "libc")) | ||||
|                            (rpaths  `(,(string-append fortran "/lib64") | ||||
|                                       ,(string-append fortran "/lib") | ||||
|                                       ,(string-append libc "/lib") | ||||
|                                       ,(string-append out "/lib")))) | ||||
|                       ;; Set RUNPATH for all libraries | ||||
|                       (with-directory-excursion out | ||||
|                         (for-each | ||||
|                          (lambda (lib) | ||||
|                            (let ((lib-rpaths (file-rpath lib))) | ||||
|                              (for-each | ||||
|                               (lambda (dir) | ||||
|                                 (or (member dir lib-rpaths) | ||||
|                                     (augment-rpath lib dir))) | ||||
|                               rpaths))) | ||||
|                          (find-files "lib" ".*so$"))))) | ||||
|                   %standard-phases)))) | ||||
|                   %standard-phases))) | ||||
|     (synopsis "Library for numerical linear algebra") | ||||
|     (description | ||||
|      "LAPACK is a Fortran 90 library for solving the most commonly occurring | ||||
|  | @ -349,3 +330,499 @@ applications and it provides great support for visualizing results.  Work may | |||
| be performed both at the interactive command-line as well as via script | ||||
| files.") | ||||
|     (license license:gpl3+))) | ||||
| 
 | ||||
| (define-public gmsh | ||||
|   (package | ||||
|     (name "gmsh") | ||||
|     (version "2.8.4") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "http://www.geuz.org/gmsh/src/gmsh-" | ||||
|                           version "-source.tgz")) | ||||
|       (sha256 | ||||
|        (base32 "0jv2yvk28w86rx5mvjkb0w12ff2jxih7axnpvznpd295lg5jg7hr")) | ||||
|       (modules '((guix build utils))) | ||||
|       (snippet | ||||
|        ;; Remove non-free METIS code | ||||
|        '(delete-file-recursively "contrib/Metis")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (native-inputs `(("patchelf" ,patchelf))) ;for augment-rpath | ||||
|     (propagated-inputs | ||||
|      `(("fltk" ,fltk) | ||||
|        ("gfortran" ,gfortran-4.8) | ||||
|        ("gmp" ,gmp) | ||||
|        ("hdf5-lib" ,hdf5 "lib") | ||||
|        ("hdf5-include" ,hdf5 "include") | ||||
|        ("lapack" ,lapack) | ||||
|        ("mesa" ,mesa) | ||||
|        ("libx11" ,libx11) | ||||
|        ("libxext" ,libxext))) | ||||
|     (arguments | ||||
|      `(#:configure-flags `("-DENABLE_METIS:BOOL=OFF" | ||||
|                            "-DENABLE_BUILD_SHARED:BOOL=ON" | ||||
|                            "-DENABLE_BUILD_DYNAMIC:BOOL=ON"))) | ||||
|     (home-page "http://www.geuz.org/gmsh/") | ||||
|     (synopsis "3D finite element grid generator") | ||||
|     (description "Gmsh is a 3D finite element grid generator with a built-in | ||||
| CAD engine and post-processor.  Its design goal is to provide a fast, light | ||||
| and user-friendly meshing tool with parametric input and advanced | ||||
| visualization capabilities.  Gmsh is built around four modules: geometry, | ||||
| mesh, solver and post-processing.  The specification of any input to these | ||||
| modules is done either interactively using the graphical user interface or in | ||||
| ASCII text files using Gmsh's own scripting language.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public petsc | ||||
|   (package | ||||
|     (name "petsc") | ||||
|     (version "3.4.4") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       ;; The *-lite-* tarball does not contain the *large* documentation | ||||
|       (uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/" | ||||
|                           "petsc-lite-" version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 "0v5dg6dhdjpi5ianvd4mm6hsvxzv1bsxwnh9f9myag0a0d9xk9iv")) | ||||
|       (patches | ||||
|        (list (search-patch "petsc-fix-threadcomm.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("python" ,python-2) | ||||
|        ("perl" ,perl))) | ||||
|     (inputs | ||||
|      `(("gfortran" ,gfortran-4.8) | ||||
|        ("lapack" ,lapack) | ||||
|        ("superlu" ,superlu) | ||||
|        ;; leaving out hdf5 and fftw, as petsc expects them to be built with mpi | ||||
|        ;; leaving out opengl, as configuration seems to only be for mac | ||||
|        )) | ||||
|     (arguments | ||||
|      `(#:test-target "test" | ||||
|        #:parallel-build? #f | ||||
|        #:configure-flags | ||||
|        `("--with-mpi=0" | ||||
|          "--with-openmp=1" | ||||
|          "--with-superlu=1" | ||||
|          ,(string-append "--with-superlu-include=" | ||||
|                          (assoc-ref %build-inputs "superlu") "/include") | ||||
|          ,(string-append "--with-superlu-lib=" | ||||
|                          (assoc-ref %build-inputs "superlu") "/lib/libsuperlu.a")) | ||||
|        #:phases | ||||
|        (alist-replace | ||||
|         'configure | ||||
|         ;; PETSc's configure script is actually a python script, so we can't | ||||
|         ;; run it with bash. | ||||
|         (lambda* (#:key outputs (configure-flags '()) | ||||
|                   #:allow-other-keys) | ||||
|           (let* ((prefix (assoc-ref outputs "out")) | ||||
|                  (flags `(,(string-append "--prefix=" prefix) | ||||
|                           ,@configure-flags))) | ||||
|             (format #t "build directory: ~s~%" (getcwd)) | ||||
|             (format #t "configure flags: ~s~%" flags) | ||||
|             (zero? (apply system* "./configure" flags)))) | ||||
|         (alist-cons-after | ||||
|          'configure 'clean-local-references | ||||
|          ;; Try to keep build directory names from leaking into compiled code | ||||
|          (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|            (let ((out (assoc-ref outputs "out"))) | ||||
|              (substitute* (find-files "." "^petsc(conf|machineinfo).h$") | ||||
|                (((getcwd)) out)))) | ||||
|          (alist-cons-after | ||||
|           'install 'clean-install | ||||
|           ;; Try to keep installed files from leaking build directory names. | ||||
|           (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|             (let ((out     (assoc-ref outputs "out")) | ||||
|                   (fortran (assoc-ref inputs  "gfortran"))) | ||||
|               (substitute* (map (lambda (file) | ||||
|                                   (string-append out "/" file)) | ||||
|                                 '("conf/petscvariables" | ||||
|                                   "conf/PETScConfig.cmake")) | ||||
|                 (((getcwd)) out)) | ||||
|               ;; Make compiler references point to the store | ||||
|               (substitute* (string-append out "/conf/petscvariables") | ||||
|                 (("= g(cc|\\+\\+|fortran)" _ suffix) | ||||
|                  (string-append "= " fortran "/bin/g" suffix))) | ||||
|               ;; PETSc installs some build logs, which aren't necessary. | ||||
|               (for-each (lambda (file) | ||||
|                           (let ((f (string-append out "/" file))) | ||||
|                             (when (file-exists? f) | ||||
|                               (delete-file f)))) | ||||
|                         '("conf/configure.log" | ||||
|                           "conf/make.log" | ||||
|                           "conf/test.log" | ||||
|                           "conf/error.log" | ||||
|                           "conf/RDict.db" | ||||
|                           ;; Once installed, should uninstall with Guix | ||||
|                           "conf/uninstall.py")))) | ||||
|           %standard-phases))))) | ||||
|     (home-page "http://www.mcs.anl.gov/petsc") | ||||
|     (synopsis "Library to solve PDEs") | ||||
|     (description "PETSc, pronounced PET-see (the S is silent), is a suite of | ||||
| data structures and routines for the scalable (parallel) solution of | ||||
| scientific applications modeled by partial differential equations.") | ||||
|     (license (license:bsd-style | ||||
|               "http://www.mcs.anl.gov/petsc/documentation/copyright.html")))) | ||||
| 
 | ||||
| (define-public petsc-complex | ||||
|   (package (inherit petsc) | ||||
|     (name "petsc-complex") | ||||
|     (arguments | ||||
|      (substitute-keyword-arguments (package-arguments petsc) | ||||
|        ((#:configure-flags cf) | ||||
|         `(cons "--with-scalar-type=complex" ,cf)))) | ||||
|     (synopsis "Library to solve PDEs (with complex scalars)"))) | ||||
| 
 | ||||
| (define-public petsc-openmpi | ||||
|   (package (inherit petsc) | ||||
|     (name "petsc-openmpi") | ||||
|     (inputs | ||||
|      `(("openmpi" ,openmpi) | ||||
|        ,@(package-inputs petsc))) | ||||
|     (arguments | ||||
|      (substitute-keyword-arguments (package-arguments petsc) | ||||
|        ((#:configure-flags cf) | ||||
|         ``("--with-mpiexec=mpirun" | ||||
|            ,(string-append "--with-mpi-dir=" | ||||
|                            (assoc-ref %build-inputs "openmpi")) | ||||
|            ,@(delete "--with-mpi=0" ,cf))))) | ||||
|     (synopsis "Library to solve PDEs (with MPI support)"))) | ||||
| 
 | ||||
| (define-public petsc-complex-openmpi | ||||
|   (package (inherit petsc-complex) | ||||
|     (name "petsc-complex-openmpi") | ||||
|     (inputs | ||||
|      `(("openmpi" ,openmpi) | ||||
|        ,@(package-inputs petsc-complex))) | ||||
|     (arguments | ||||
|      (substitute-keyword-arguments (package-arguments petsc-complex) | ||||
|        ((#:configure-flags cf) | ||||
|         ``("--with-mpiexec=mpirun" | ||||
|            ,(string-append "--with-mpi-dir=" | ||||
|                            (assoc-ref %build-inputs "openmpi")) | ||||
|            ,@(delete "--with-mpi=0" ,cf))))) | ||||
|     (synopsis "Library to solve PDEs (with complex scalars and MPI support)"))) | ||||
| 
 | ||||
| (define-public superlu | ||||
|   (package | ||||
|     (name "superlu") | ||||
|     (version "4.3") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/" | ||||
|                            "superlu_" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 "10b785s9s4x0m9q7ihap09275pq4km3k2hk76jiwdfdr5qr2168n")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("tcsh" ,tcsh))) | ||||
|     (inputs | ||||
|      `(("lapack" ,lapack) | ||||
|        ("gfortran" ,gfortran-4.8))) | ||||
|     (arguments | ||||
|      `(#:parallel-build? #f | ||||
|        #:tests? #f                      ;tests are run as part of `make all` | ||||
|        #:phases | ||||
|        (alist-replace | ||||
|         'configure | ||||
|         (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|           (call-with-output-file "make.inc" | ||||
|             (lambda (port) | ||||
|               (format port " | ||||
| PLAT        = | ||||
| SuperLUroot = ~a | ||||
| SUPERLULIB  = ~a/lib/libsuperlu.a | ||||
| TMGLIB      = libtmglib.a | ||||
| BLASDEF     = -DUSE_VENDOR_BLAS | ||||
| BLASLIB     = -L~a/lib -lblas | ||||
| LIBS        = $(SUPERLULIB) $(BLASLIB) | ||||
| ARCH        = ar | ||||
| ARCHFLAGS   = cr | ||||
| RANLIB      = ranlib | ||||
| CC          = gcc | ||||
| PIC         = -fPIC | ||||
| CFLAGS      = -O3 -DPRNTlevel=0 $(PIC) | ||||
| NOOPTS      = -O0 $(PIC) | ||||
| FORTRAN     = gfortran | ||||
| FFLAGS      = -O2 $(PIC) | ||||
| LOADER      = $(CC) | ||||
| CDEFS       = -DAdd_" | ||||
|                       (getcwd) | ||||
|                       (assoc-ref outputs "out") | ||||
|                       (assoc-ref inputs "lapack"))))) | ||||
|         (alist-cons-before | ||||
|          'build 'create-install-directories | ||||
|          (lambda* (#:key outputs #:allow-other-keys) | ||||
|            (for-each | ||||
|             (lambda (dir) | ||||
|               (mkdir-p (string-append (assoc-ref outputs "out") | ||||
|                                       "/" dir))) | ||||
|             '("lib" "include"))) | ||||
|          (alist-replace | ||||
|           'install | ||||
|           (lambda* (#:key outputs #:allow-other-keys) | ||||
|             ;; Library is placed in lib during the build phase.  Copy over | ||||
|             ;; headers to include. | ||||
|             (let* ((out    (assoc-ref outputs "out")) | ||||
|                    (incdir (string-append out "/include"))) | ||||
|               (for-each (lambda (file) | ||||
|                           (let ((base (basename file))) | ||||
|                             (format #t "installing `~a' to `~a'~%" | ||||
|                                     base incdir) | ||||
|                             (copy-file file | ||||
|                                        (string-append incdir "/" base)))) | ||||
|                         (find-files "SRC" ".*\\.h$")))) | ||||
|           %standard-phases))))) | ||||
|     (home-page "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/") | ||||
|     (synopsis "Supernodal direct solver for sparse linear systems") | ||||
|     (description | ||||
|      "SuperLU is a general purpose library for the direct solution of large, | ||||
| sparse, nonsymmetric systems of linear equations on high performance machines. | ||||
| The library is written in C and is callable from either C or Fortran.  The | ||||
| library routines perform an LU decomposition with partial pivoting and | ||||
| triangular system solves through forward and back substitution.  The library | ||||
| also provides threshold-based ILU factorization preconditioners.") | ||||
|     (license license:bsd-3))) | ||||
| 
 | ||||
| (define-public superlu-dist | ||||
|   (package | ||||
|     (name "superlu-dist") | ||||
|     (version "3.3") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/" | ||||
|                            "superlu_dist_" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 "1hnak09yxxp026blq8zhrl7685yip16svwngh1wysqxf8z48vzfj")) | ||||
|        (patches (list (search-patch "superlu-dist-scotchmetis.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("tcsh" ,tcsh))) | ||||
|     (inputs | ||||
|      `(("gfortran" ,gfortran-4.8))) | ||||
|     (propagated-inputs | ||||
|      `(("openmpi" ,openmpi)             ;headers include MPI heades | ||||
|        ("lapack" ,lapack)               ;required to link with output library | ||||
|        ("pt-scotch" ,pt-scotch)))       ;same | ||||
|     (arguments | ||||
|      `(#:parallel-build? #f             ;race conditions using ar | ||||
|        #:phases | ||||
|        (alist-replace | ||||
|         'configure | ||||
|         (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|           (call-with-output-file "make.inc" | ||||
|             (lambda (port) | ||||
|               (format port " | ||||
| PLAT        = | ||||
| DSuperLUroot = ~a | ||||
| DSUPERLULIB  = ~a/lib/libsuperlu_dist.a | ||||
| BLASDEF     = -DUSE_VENDOR_BLAS | ||||
| BLASLIB     = -L~a/lib -lblas | ||||
| PARMETISLIB = -L~a/lib \ | ||||
|               -lptscotchparmetis -lptscotch -lptscotcherr -lptscotcherrexit \ | ||||
|               -lscotch -lscotcherr -lscotcherrexit | ||||
| METISLIB    = -L~:*~a/lib \ | ||||
|               -lscotchmetis -lscotch -lscotcherr -lscotcherrexit | ||||
| LIBS        = $(DSUPERLULIB) $(PARMETISLIB) $(METISLIB) $(BLASLIB) | ||||
| ARCH        = ar | ||||
| ARCHFLAGS   = cr | ||||
| RANLIB      = ranlib | ||||
| CC          = mpicc | ||||
| PIC         = -fPIC | ||||
| CFLAGS      = -O3 -g -DPRNTlevel=0 $(PIC) | ||||
| NOOPTS      = -O0 -g $(PIC) | ||||
| FORTRAN     = mpifort | ||||
| FFLAGS      = -O2 -g $(PIC) | ||||
| LOADER      = $(CC) | ||||
| CDEFS       = -DAdd_" | ||||
|                       (getcwd) | ||||
|                       (assoc-ref outputs "out") | ||||
|                       (assoc-ref inputs "lapack") | ||||
|                       (assoc-ref inputs "pt-scotch"))))) | ||||
|         (alist-cons-after | ||||
|          'unpack 'remove-broken-symlinks | ||||
|          (lambda _ | ||||
|            (for-each delete-file | ||||
|                      (find-files "MAKE_INC" "\\.#make\\..*"))) | ||||
|          (alist-cons-before | ||||
|           'build 'create-install-directories | ||||
|           (lambda* (#:key outputs #:allow-other-keys) | ||||
|             (for-each | ||||
|              (lambda (dir) | ||||
|                (mkdir-p (string-append (assoc-ref outputs "out") | ||||
|                                        "/" dir))) | ||||
|              '("lib" "include"))) | ||||
|           (alist-replace | ||||
|            'check | ||||
|            (lambda _ | ||||
|              (with-directory-excursion "EXAMPLE" | ||||
|                (and | ||||
|                 (zero? (system* "mpirun" "-n" "2" | ||||
|                                 "./pddrive" "-r" "1" "-c" "2" "g20.rua")) | ||||
|                 (zero? (system* "mpirun" "-n" "2" | ||||
|                                 "./pzdrive" "-r" "1" "-c" "2" "cg20.cua"))))) | ||||
|            (alist-replace | ||||
|             'install | ||||
|             (lambda* (#:key outputs #:allow-other-keys) | ||||
|               ;; Library is placed in lib during the build phase.  Copy over | ||||
|               ;; headers to include. | ||||
|               (let* ((out    (assoc-ref outputs "out")) | ||||
|                      (incdir (string-append out "/include"))) | ||||
|                 (for-each (lambda (file) | ||||
|                             (let ((base (basename file))) | ||||
|                               (format #t "installing `~a' to `~a'~%" | ||||
|                                       base incdir) | ||||
|                               (copy-file file | ||||
|                                          (string-append incdir "/" base)))) | ||||
|                           (find-files "SRC" ".*\\.h$")))) | ||||
|             %standard-phases))))))) | ||||
|     (home-page (package-home-page superlu)) | ||||
|     (synopsis "Parallel supernodal direct solver") | ||||
|     (description | ||||
|      "SuperLU_DIST is a parallel extension to the serial SuperLU library. | ||||
| It is targeted for distributed memory parallel machines.  SuperLU_DIST is | ||||
| implemented in ANSI C, and MPI for communications.") | ||||
|     (license license:bsd-3))) | ||||
| 
 | ||||
| (define-public scotch | ||||
|   (package | ||||
|     (name "scotch") | ||||
|     (version "6.0.0") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "https://gforge.inria.fr/frs/download.php/31831/" | ||||
|                           "scotch_" version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 "0yfqf9lk7chb3h42777x42x4adx0v3n0b41q0cdqrdmscp4iczp5")) | ||||
|       (patches (list (search-patch "scotch-test-threading.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("zlib" ,zlib) | ||||
|        ("flex" ,flex) | ||||
|        ("bison" ,bison))) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (alist-cons-after | ||||
|         'unpack 'chdir-to-src | ||||
|         (lambda _ (chdir "src")) | ||||
|         (alist-replace | ||||
|          'configure | ||||
|          (lambda _ | ||||
|            (call-with-output-file "Makefile.inc" | ||||
|              (lambda (port) | ||||
|                (format port " | ||||
| EXE = | ||||
| LIB = .a | ||||
| OBJ = .o | ||||
| MAKE = make | ||||
| AR = ar | ||||
| ARFLAGS = -ruv | ||||
| CCS = gcc | ||||
| CCP = mpicc | ||||
| CCD = gcc | ||||
| CPPFLAGS =~{ -D~a~} | ||||
| CFLAGS = -O2 -g $(CPPFLAGS) | ||||
| LDFLAGS = -lz -lm -lrt -lpthread | ||||
| CP = cp | ||||
| LEX = flex -Pscotchyy -olex.yy.c | ||||
| LN = ln | ||||
| MKDIR = mkdir | ||||
| MV = mv | ||||
| RANLIB = ranlib | ||||
| YACC = bison -pscotchyy -y -b y | ||||
| " | ||||
|                        '("COMMON_FILE_COMPRESS_GZ" | ||||
|                          "COMMON_PTHREAD" | ||||
|                          "COMMON_RANDOM_FIXED_SEED" | ||||
|                          ;; TODO: Define once our MPI supports | ||||
|                          ;; MPI_THREAD_MULTIPLE | ||||
|                          ;; "SCOTCH_PTHREAD" | ||||
|                          ;; "SCOTCH_PTHREAD_NUMBER=2" | ||||
|                          "restrict=__restrict"))))) | ||||
|          (alist-replace | ||||
|           'install | ||||
|           (lambda* (#:key outputs #:allow-other-keys) | ||||
|             (let ((out (assoc-ref outputs "out"))) | ||||
|               (mkdir out) | ||||
|               (zero? (system* "make" | ||||
|                               (string-append "prefix=" out) | ||||
|                               "install")))) | ||||
|           %standard-phases))))) | ||||
|     (home-page "http://www.labri.fr/perso/pelegrin/scotch/") | ||||
|     (synopsis "Programs and libraries for graph algorithms") | ||||
|     (description "SCOTCH is a set of programs and libraries which implement | ||||
| the static mapping and sparse matrix reordering algorithms developed within | ||||
| the SCOTCH project.  Its purpose is to apply graph theory, with a divide and | ||||
| conquer approach, to scientific computing problems such as graph and mesh | ||||
| partitioning, static mapping, and sparse matrix ordering, in application | ||||
| domains ranging from structural mechanics to operating systems or | ||||
| bio-chemistry.") | ||||
|     ;; See LICENSE_en.txt | ||||
|     (license license:cecill-c))) | ||||
| 
 | ||||
| (define-public pt-scotch | ||||
|   (package (inherit scotch) | ||||
|     (name "pt-scotch") | ||||
|     (propagated-inputs | ||||
|      `(("openmpi" ,openmpi)))           ;Headers include MPI headers | ||||
|     (arguments | ||||
|      (substitute-keyword-arguments (package-arguments scotch) | ||||
|        ((#:phases scotch-phases) | ||||
|         `(alist-replace | ||||
|           'build | ||||
|           ;; TODO: Would like to add parallelism here | ||||
|           (lambda _ | ||||
|             (and | ||||
|              (zero? (system* "make" "ptscotch")) | ||||
|              ;; Install the serial metis compatibility library | ||||
|              (zero? (system* "make" "-C" "libscotchmetis" "install")))) | ||||
|           (alist-replace | ||||
|            'check | ||||
|            (lambda _ (zero? (system* "make" "ptcheck"))) | ||||
|            (alist-replace | ||||
|             'install | ||||
|             (lambda* (#:key outputs #:allow-other-keys) | ||||
|               (let ((out (assoc-ref outputs "out"))) | ||||
|                 (mkdir out) | ||||
|                 (zero? (system* "make" | ||||
|                                 (string-append "prefix=" out) | ||||
|                                 "install")))) | ||||
|             ,scotch-phases)))))) | ||||
|     (synopsis "Programs and libraries for graph algorithms (with MPI)"))) | ||||
| 
 | ||||
| (define-public gsegrafix | ||||
|   (package | ||||
|     (name "gsegrafix") | ||||
|     (version "1.0.6") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "mirror://gnu/" name "/" name "-" | ||||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1b13hvx063zv970y750bx41wpx6hwd5ngjhbdrna8w8yy5kmxcda")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:configure-flags '("LDFLAGS=-lm"))) | ||||
|     (inputs | ||||
|      `(("libgnomecanvas" ,libgnomecanvas) | ||||
|        ("libbonoboui" ,libbonoboui) | ||||
|        ("libgnomeui" ,libgnomeui) | ||||
|        ("libgnomeprintui" ,libgnomeprintui) | ||||
|        ("popt" ,popt))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://www.gnu.org/software/gsegrafix/") | ||||
|     (synopsis "GNOME application to create scientific and engineering plots") | ||||
|     (description  "GSEGrafix is an application which produces high-quality graphical | ||||
| plots for science and engineering.  Plots are specified via simple ASCII | ||||
| parameter files and data files and are presented in an anti-aliased GNOME | ||||
| canvas.  The program supports rectangular two-dimensional plots, histograms, | ||||
| polar-axis plots and three-dimensional plots.  Plots can be printed or saved | ||||
| to BMP, JPEG or PNG image formats.") | ||||
|     (license license:gpl3+))) | ||||
|  |  | |||
							
								
								
									
										114
									
								
								gnu/packages/mcrypt.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								gnu/packages/mcrypt.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,114 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.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 mcrypt) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module ((guix licenses) #:select (gpl2+)) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages file)) | ||||
| 
 | ||||
| (define-public mcrypt | ||||
|   (package | ||||
|     (name "mcrypt") | ||||
|     (version "2.6.8") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "mirror://sourceforge/mcrypt/mcrypt-" | ||||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "161031n1w9pb4yzz9i47szc12a4mwpcpvyxnvafsik2l9s2aliai")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("zlib" ,zlib) | ||||
|        ("libmcrypt" ,libmcrypt) | ||||
|        ("libmhash" ,libmhash))) | ||||
|     (home-page "http://mcrypt.sourceforge.net/") | ||||
|     (synopsis "Replacement for the popular Unix crypt command") | ||||
|     (description | ||||
|      "MCrypt is a replacement for the old crypt() package and crypt(1) | ||||
| command, with extensions.  It allows developers to use a wide range of | ||||
| encryption functions, without making drastic changes to their code.  It allows | ||||
| users to encrypt files or data streams without having to be cryptographers. | ||||
| The companion to MCrypt is Libmcrypt, which contains the actual encryption | ||||
| functions themselves, and provides a standardized mechanism for accessing | ||||
| them.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public libmcrypt | ||||
|   (package | ||||
|     (name "libmcrypt") | ||||
|     (version "2.5.8") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "mirror://sourceforge/mcrypt/libmcrypt-" | ||||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "0gipgb939vy9m66d3k8il98rvvwczyaw2ixr8yn6icds9c3nrsz4")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("file" ,file))) | ||||
|     (home-page "http://mcrypt.sourceforge.net/") | ||||
|     (synopsis "Encryption algorithm library") | ||||
|     (description | ||||
|      "Libmcrypt is a data encryption library.  The library is thread safe and | ||||
| provides encryption and decryption functions.  This version of the library | ||||
| supports many encryption algorithms and encryption modes.  Some algorithms | ||||
| which are supported: SERPENT, RIJNDAEL, 3DES, GOST, SAFER+, CAST-256, RC2, | ||||
| XTEA, 3WAY, TWOFISH, BLOWFISH, ARCFOUR, WAKE and more.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public libmhash | ||||
|   (package | ||||
|     (name "libmhash") | ||||
|     (version "0.9.9.9") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
| 
 | ||||
|       (uri (string-append "mirror://sourceforge/mhash/mhash-" | ||||
|                           version ".tar.bz2")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1w7yiljan8gf1ibiypi6hm3r363imm3sxl1j8hapjdq3m591qljn")) | ||||
|       (patches (list (search-patch "mhash-keygen-test-segfault.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("file" ,file) | ||||
|        ("perl" ,perl)))                 ;for tests | ||||
|     (home-page "http://mhash.sourceforge.net/") | ||||
|     (synopsis "Thread-safe hash library") | ||||
|     (description | ||||
|      "mhash is a thread-safe hash library, implemented in C, and provides a | ||||
| uniform interface to a large number of hash algorithms. These algorithms can | ||||
| be used to compute checksums, message digests, and other signatures. The HMAC | ||||
| support implements the basics for message authentication, following RFC 2104. | ||||
| 
 | ||||
| Algorithms currently supplied are: | ||||
| 
 | ||||
| CRC-32, CRC-32B, ALDER-32, MD-2, MD-4, MD-5, RIPEMD-128, RIPEMD-160, | ||||
| RIPEMD-256, RIPEMD-320, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, HAVAL-128, | ||||
| HAVAL-160, HAVAL-192, HAVAL-256, TIGER, TIGER-128, TIGER-160, GOST, WHIRLPOOL, | ||||
| SNEFRU-128, SNEFRU-256") | ||||
|     (license gpl2+))) | ||||
|  | @ -30,6 +30,9 @@ | |||
|   #:use-module (gnu packages pcre) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:use-module (gnu packages pulseaudio) | ||||
|   #:use-module ((gnu packages linux) | ||||
|                 #:select (alsa-lib)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu)) | ||||
|  | @ -186,6 +189,30 @@ This package contains the binary.") | |||
|    (license license:gpl2+) | ||||
|    (home-page "http://mp3splt.sourceforge.net/mp3splt_page/home.php"))) | ||||
| 
 | ||||
| (define-public mpg123 | ||||
|   (package | ||||
|     (name "mpg123") | ||||
|     (version "1.19.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://sourceforge/mpg123/mpg123-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "06xhd68mj9yp0r6l771aq0d7xgnl402a3wm2mvhxmd3w3ph29446")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments '(#:configure-flags '("--with-default-audio=pulse"))) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (inputs `(("pulseaudio" ,pulseaudio) | ||||
|               ("alsa-lib" ,alsa-lib))) | ||||
|     (home-page "http://www.mpg123.org/") | ||||
|     (synopsis "Console MP3 player and decoder library") | ||||
|     (description | ||||
|      "mpg123 is a real time MPEG 1.0/2.0/2.5 audio player/decoder for layers | ||||
| 1,2 and 3 (MPEG 1.0 layer 3 aka MP3 most commonly tested).  It comes with a | ||||
| command-line tool as well as a C library, libmpg123.") | ||||
|     (license license:lgpl2.1))) | ||||
| 
 | ||||
| (define-public mpg321 | ||||
|   (package | ||||
|     (name "mpg321") | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 David Thompson <dthompson2@worcester.edu> | ||||
| ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -26,6 +27,7 @@ | |||
|   #:use-module (gnu packages avahi) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages curl) | ||||
|   #:use-module (gnu packages doxygen) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages mp3) | ||||
|  | @ -53,9 +55,7 @@ | |||
|                (base32 | ||||
|                 "0csb9r3nlmbwpiryixjr5k33x3zqd61xjhwmlps3a6prck1n1xw2")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; FIXME: Needs doxygen. | ||||
|      '(#:configure-flags '("--disable-documentation"))) | ||||
|     (native-inputs `(("doxygen" ,doxygen))) | ||||
|     (synopsis "Music Player Daemon client library") | ||||
|     (description "A stable, documented, asynchronous API library for | ||||
| interfacing MPD in the C, C++ & Objective C languages.") | ||||
|  |  | |||
							
								
								
									
										130
									
								
								gnu/packages/mpi.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								gnu/packages/mpi.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,130 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; Copyright © 2014 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 mpi) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module ((guix licenses) | ||||
|                 #:hide (expat)) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages gcc) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages pciutils) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages gtk) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages valgrind) | ||||
|   #:use-module (srfi srfi-1)) | ||||
| 
 | ||||
| (define-public hwloc | ||||
|   (package | ||||
|     (name "hwloc") | ||||
|     (version "1.9") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://www.open-mpi.org/software/hwloc/v" | ||||
|                                   version "/downloads/hwloc-" | ||||
|                                   version ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0zjgiili2a8v63s8ly3a8qp8ibxv1jw3zbgm7diic3w1qgqiza14")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; Enable libpci support, which effectively makes hwloc GPLv2+. | ||||
|      '(#:configure-flags '("--enable-libpci"))) | ||||
|     (inputs | ||||
|      `(("libx11" ,libx11) | ||||
|        ("cairo" ,cairo) | ||||
|        ("ncurses" ,ncurses) | ||||
|        ("expat" ,expat))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (propagated-inputs | ||||
|      ;; 'hwloc.pc' refers to libpci and libnuma, hence the propagation. | ||||
|      `(("numactl" ,numactl) | ||||
|        ("pciutils" ,pciutils))) | ||||
|     (home-page "http://www.open-mpi.org/projects/hwloc/") | ||||
|     (synopsis "Abstraction of hardware architectures") | ||||
|     (description | ||||
|      "hwloc provides a portable abstraction (across OS, | ||||
| versions, architectures, ...) of the hierarchical topology of modern | ||||
| architectures, including NUMA memory nodes, sockets, shared caches, cores and | ||||
| simultaneous multithreading.  It also gathers various attributes such as cache | ||||
| and memory information.  It primarily aims at helping high-performance | ||||
| computing applications with gathering information about the hardware so as to | ||||
| exploit it accordingly and efficiently. | ||||
| 
 | ||||
| hwloc may display the topology in multiple convenient formats.  It also offers | ||||
| a powerful programming interface to gather information about the hardware, | ||||
| bind processes, and much more.") | ||||
| 
 | ||||
|     ;; But see above about linking against libpci. | ||||
|     (license bsd-3))) | ||||
| 
 | ||||
| (define-public openmpi | ||||
|   (package | ||||
|     (name "openmpi") | ||||
|     (version "1.8.1") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|       (uri (string-append "http://www.open-mpi.org/software/ompi/v" | ||||
|                           (string-join (take (string-split version #\.) 2) | ||||
|                                        ".") | ||||
|                           "/downloads/openmpi-" version ".tar.bz2")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "13z1q69f3qwmmhpglarfjminfy2yw4rfqr9jydjk5507q3mjf50p")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("hwloc" ,hwloc) | ||||
|        ("gfortran" ,gfortran-4.8) | ||||
|        ("valgrind" ,valgrind))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (arguments | ||||
|      `(#:configure-flags `("--enable-static" | ||||
|                            "--enable-oshmem" | ||||
|                            ;; Thread support causes some applications to hang | ||||
|                            ;; "--enable-event-thread-support" | ||||
|                            ;; "--enable-opal-multi-threads" | ||||
|                            ;; "--enable-orte-progress-threads" | ||||
|                            ;; "--enable-mpi-thread-multiple" | ||||
|                            "--enable-mpi-ext=all" | ||||
|                            "--with-devel-headers" | ||||
|                            "--enable-debug" | ||||
|                            "--enable-memchecker" | ||||
|                            ,(string-append "--with-valgrind=" | ||||
|                                            (assoc-ref %build-inputs "valgrind")) | ||||
|                            ,(string-append "--with-hwloc=" | ||||
|                                            (assoc-ref %build-inputs "hwloc"))))) | ||||
|     (home-page "http://www.open-mpi.org") | ||||
|     (synopsis "MPI-2 implementation") | ||||
|     (description | ||||
|      "The Open MPI Project is an MPI-2 implementation that is developed and | ||||
| maintained by a consortium of academic, research, and industry partners.  Open | ||||
| MPI is therefore able to combine the expertise, technologies, and resources | ||||
| from all across the High Performance Computing community in order to build the | ||||
| best MPI library available.  Open MPI offers advantages for system and | ||||
| software vendors, application developers and computer science researchers.") | ||||
|     ;; See file://LICENSE | ||||
|     (license bsd-2))) | ||||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -34,7 +35,10 @@ | |||
|                                 ".tar.gz")) | ||||
|             (sha256 | ||||
|              (base32 | ||||
|               "0a70qdqccg16nw4bbawa6pjvzn05vfp5wkwg6jl0grch7f683jsk")))) | ||||
|               "0a70qdqccg16nw4bbawa6pjvzn05vfp5wkwg6jl0grch7f683jsk")) | ||||
|             (patches | ||||
|              (list (search-patch "openssl-CVE-2010-5298.patch") | ||||
|                    (search-patch "openssl-extension-checking-fixes.patch"))))) | ||||
|    (build-system gnu-build-system) | ||||
|    (native-inputs `(("perl" ,perl))) | ||||
|    (arguments | ||||
|  |  | |||
							
								
								
									
										157
									
								
								gnu/packages/patches/ccache-stdc-predef-test.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								gnu/packages/patches/ccache-stdc-predef-test.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,157 @@ | |||
| This patch is a combination of the following commits:: | ||||
| 
 | ||||
|   https://git.samba.org/?p=ccache.git;a=commit;h=b5d63f81c1a83fd4c50b769a96a04f581b7db70c | ||||
|   https://git.samba.org/?p=ccache.git;a=commit;h=a11f5688748ecb49f590b3f4bc0e9b3458f9a56f | ||||
|   https://git.samba.org/?p=ccache.git;a=commit;h=5a9322c56ed0cd16255966e99077843aae57ab3e | ||||
| 
 | ||||
| from the general discussion at | ||||
| http://comments.gmane.org/gmane.comp.compilers.ccache/1089 | ||||
| 
 | ||||
| --- a/test.sh
 | ||||
| +++ b/test.sh
 | ||||
| @@ -562,6 +562,12 @@
 | ||||
|  EOF | ||||
|      backdate test1.h test2.h test3.h | ||||
|   | ||||
| +    $COMPILER -c -Wp,-MD,expected.d test.c
 | ||||
| +    expected_d_content=`cat expected.d`
 | ||||
| +
 | ||||
| +    $COMPILER -c -Wp,-MMD,expected_mmd.d test.c
 | ||||
| +    expected_mmd_d_content=`cat expected_mmd.d`
 | ||||
| +
 | ||||
|      ################################################################## | ||||
|      # First compilation is a miss. | ||||
|      testname="first compilation" | ||||
| @@ -677,7 +683,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_d_content"
 | ||||
|   | ||||
|      rm -f other.d | ||||
|   | ||||
| @@ -685,7 +691,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 1 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_d_content"
 | ||||
|   | ||||
|      rm -f other.d | ||||
|   | ||||
| @@ -698,7 +704,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_mmd_d_content"
 | ||||
|   | ||||
|      rm -f other.d | ||||
|   | ||||
| @@ -706,7 +712,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 1 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_mmd_d_content"
 | ||||
|   | ||||
|      rm -f other.d | ||||
|   | ||||
| @@ -760,7 +766,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile test.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile test.d "$expected_d_content"
 | ||||
|   | ||||
|      rm -f test.d | ||||
|   | ||||
| @@ -768,7 +774,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 1 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile test.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile test.d "$expected_d_content"
 | ||||
|   | ||||
|      ################################################################## | ||||
|      # Check the scenario of running a ccache with direct mode on a cache | ||||
| @@ -780,7 +786,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile test.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile test.d "$expected_d_content"
 | ||||
|   | ||||
|      rm -f test.d | ||||
|   | ||||
| @@ -788,7 +794,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 1 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile test.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile test.d "$expected_d_content"
 | ||||
|   | ||||
|      rm -f test.d | ||||
|   | ||||
| @@ -796,7 +802,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 2 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile test.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile test.d "$expected_d_content"
 | ||||
|   | ||||
|      rm -f test.d | ||||
|   | ||||
| @@ -804,7 +810,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 1 | ||||
|      checkstat 'cache hit (preprocessed)' 2 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile test.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile test.d "$expected_d_content"
 | ||||
|   | ||||
|      ################################################################## | ||||
|      # Check that -MF works. | ||||
| @@ -815,7 +821,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_d_content"
 | ||||
|   | ||||
|      rm -f other.d | ||||
|   | ||||
| @@ -823,7 +829,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 1 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_d_content"
 | ||||
|   | ||||
|      ################################################################## | ||||
|      # Check that a missing .d file in the cache is handled correctly. | ||||
| @@ -835,13 +841,13 @@
 | ||||
|      checkstat 'cache hit (direct)' 0 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_d_content"
 | ||||
|   | ||||
|      $CCACHE $COMPILER -c -MD test.c | ||||
|      checkstat 'cache hit (direct)' 1 | ||||
|      checkstat 'cache hit (preprocessed)' 0 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_d_content"
 | ||||
|   | ||||
|      find $CCACHE_DIR -name '*.d' -exec rm -f '{}' \; | ||||
|   | ||||
| @@ -849,7 +855,7 @@
 | ||||
|      checkstat 'cache hit (direct)' 1 | ||||
|      checkstat 'cache hit (preprocessed)' 1 | ||||
|      checkstat 'cache miss' 1 | ||||
| -    checkfile other.d "test.o: test.c test1.h test3.h test2.h"
 | ||||
| +    checkfile other.d "$expected_d_content"
 | ||||
|   | ||||
|      ################################################################## | ||||
|      # Check that stderr from both the preprocessor and the compiler is emitted | ||||
							
								
								
									
										21
									
								
								gnu/packages/patches/clucene-pkgconfig.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								gnu/packages/patches/clucene-pkgconfig.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| Taken from the Debian package. | ||||
| 
 | ||||
| From 7be4a19b76d98260cf95040a47935f854a4ba7a4 Mon Sep 17 00:00:00 2001 | ||||
| From: Valentin Rusu <kde@rusu.info> | ||||
| Date: Sat, 17 Dec 2011 13:47:58 +0100 | ||||
| Subject: [PATCH] Fix .pc file by adding clucene-shared library | ||||
| 
 | ||||
| ---
 | ||||
|  src/core/libclucene-core.pc.cmake |    2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
| 
 | ||||
| --- a/src/core/libclucene-core.pc.cmake
 | ||||
| +++ b/src/core/libclucene-core.pc.cmake
 | ||||
| @@ -6,6 +6,6 @@ includedir=${prefix}/include:${prefix}/i
 | ||||
|  Name: libclucene | ||||
|  Description: CLucene - a C++ search engine, ported from the popular Apache Lucene | ||||
|  Version: @CLUCENE_VERSION_MAJOR@.@CLUCENE_VERSION_MINOR@.@CLUCENE_VERSION_REVISION@.@CLUCENE_VERSION_PATCH@ | ||||
| -Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core
 | ||||
| +Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core -lclucene-shared
 | ||||
|  Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext | ||||
|  ~ | ||||
							
								
								
									
										38
									
								
								gnu/packages/patches/doxygen-test.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								gnu/packages/patches/doxygen-test.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| Modify the expected outcome of test 012 so that it passes when bibtex is | ||||
| not in the path, as we do not wish to add texlive as an input just for this | ||||
| test. | ||||
| 
 | ||||
| diff -u -r doxygen-1.8.7.orig/testing/012/citelist.xml doxygen-1.8.7/testing/012/citelist.xml
 | ||||
| --- doxygen-1.8.7.orig/testing/012/citelist.xml	2014-04-24 23:43:34.000000000 +0200
 | ||||
| +++ doxygen-1.8.7/testing/012/citelist.xml	2014-04-24 23:49:43.000000000 +0200
 | ||||
| @@ -4,17 +4,6 @@
 | ||||
|      <compoundname>citelist</compoundname> | ||||
|      <title>Bibliography</title> | ||||
|      <detaileddescription> | ||||
| -      <para>
 | ||||
| -        <variablelist>
 | ||||
| -          <varlistentry>
 | ||||
| -            <term><anchor id="_1CITEREF_knuth79"/>[1]</term>
 | ||||
| -          </varlistentry>
 | ||||
| -          <listitem>
 | ||||
| -            <para>Donald<nonbreakablespace/>E. Knuth. <emphasis>Tex and Metafont, New Directions in Typesetting</emphasis>. American Mathematical Society and Digital Press, Stanford, 1979.</para>
 | ||||
| -            <para/>
 | ||||
| -          </listitem>
 | ||||
| -        </variablelist>
 | ||||
| -      </para>
 | ||||
|      </detaileddescription> | ||||
|    </compounddef> | ||||
|  </doxygen> | ||||
| diff -u -r doxygen-1.8.7.orig/testing/012/indexpage.xml doxygen-1.8.7/testing/012/indexpage.xml
 | ||||
| --- doxygen-1.8.7.orig/testing/012/indexpage.xml	2014-04-24 23:43:34.000000000 +0200
 | ||||
| +++ doxygen-1.8.7/testing/012/indexpage.xml	2014-04-24 23:44:05.000000000 +0200
 | ||||
| @@ -4,7 +4,7 @@
 | ||||
|      <compoundname>index</compoundname> | ||||
|      <title>My Project</title> | ||||
|      <detaileddescription> | ||||
| -      <para>See <ref refid="citelist_1CITEREF_knuth79" kindref="member">[1]</ref> for more info. </para>
 | ||||
| +      <para>See <ref refid="citelist_1CITEREF_knuth79" kindref="member">knuth79</ref> for more info. </para>
 | ||||
|      </detaileddescription> | ||||
|    </compounddef> | ||||
|  </doxygen> | ||||
| Nur in doxygen-1.8.7/testing: test_output_012. | ||||
							
								
								
									
										24
									
								
								gnu/packages/patches/doxygen-tmake.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								gnu/packages/patches/doxygen-tmake.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| Fix the `check_unix' function, which looks for `/bin/uname' to determine | ||||
| whether we're on a Unix-like system. | ||||
| Taken from nixpkgs. | ||||
| 
 | ||||
| --- doxygen-1.5.8/tmake/bin/tmake	2008-12-06 14:16:20.000000000 +0100
 | ||||
| +++ doxygen-1.5.8/tmake/bin/tmake	2009-03-05 11:29:55.000000000 +0100
 | ||||
| @@ -234,17 +234,7 @@ sub tmake_verb {
 | ||||
|  # | ||||
|   | ||||
|  sub check_unix { | ||||
| -    my($r);
 | ||||
| -    $r = 0;
 | ||||
| -    if ( -f "/bin/uname" ) {
 | ||||
| -	$r = 1;
 | ||||
| -	(-f "\\bin\\uname") && ($r = 0);
 | ||||
| -    }
 | ||||
| -    if ( -f "/usr/bin/uname" ) {
 | ||||
| -	$r = 1;
 | ||||
| -	(-f "\\usr\\bin\\uname") && ($r = 0);
 | ||||
| -    }
 | ||||
| -    return $r;
 | ||||
| +    return 1;
 | ||||
|  } | ||||
|   | ||||
							
								
								
									
										13
									
								
								gnu/packages/patches/mhash-keygen-test-segfault.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								gnu/packages/patches/mhash-keygen-test-segfault.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| This patch from resolution of https://sourceforge.net/p/mhash/bugs/37/ | ||||
| 
 | ||||
| --- a/src/keygen_test.c
 | ||||
| +++ b/src/keygen_test.c
 | ||||
| @@ -121,8 +121,6 @@
 | ||||
|  	 | ||||
|  	mhash_keygen_ext(KEYGEN_S2K_SALTED, data, key, keysize, password, passlen); | ||||
|   | ||||
| -	mutils_memset(tmp, 0, keysize * 2);
 | ||||
| -
 | ||||
|  	tmp = mutils_asciify(key, keysize); | ||||
|   | ||||
|  	result = mutils_strcmp((mutils_word8 *) KEY2, tmp); | ||||
							
								
								
									
										27
									
								
								gnu/packages/patches/openssl-CVE-2010-5298.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								gnu/packages/patches/openssl-CVE-2010-5298.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| From db978be7388852059cf54e42539a363d549c5bfd Mon Sep 17 00:00:00 2001 | ||||
| From: Kurt Roeckx <kurt@roeckx.be> | ||||
| Date: Sun, 13 Apr 2014 15:05:30 +0200 | ||||
| Subject: [PATCH] Don't release the buffer when there still is data in it | ||||
| 
 | ||||
| RT: 2167, 3265 | ||||
| ---
 | ||||
|  ssl/s3_pkt.c | 3 ++- | ||||
|  1 file changed, 2 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/ssl/s3_pkt.c b/ssl/s3_pkt.c
 | ||||
| index b9e45c7..32e9207 100644
 | ||||
| --- a/ssl/s3_pkt.c
 | ||||
| +++ b/ssl/s3_pkt.c
 | ||||
| @@ -1055,7 +1055,8 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
 | ||||
|  				{ | ||||
|  				s->rstate=SSL_ST_READ_HEADER; | ||||
|  				rr->off=0; | ||||
| -				if (s->mode & SSL_MODE_RELEASE_BUFFERS)
 | ||||
| +				if (s->mode & SSL_MODE_RELEASE_BUFFERS &&
 | ||||
| +					s->s3->rbuf.left == 0)
 | ||||
|  					ssl3_release_read_buffer(s); | ||||
|  				} | ||||
|  			} | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
							
								
								
									
										40
									
								
								gnu/packages/patches/openssl-extension-checking-fixes.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								gnu/packages/patches/openssl-extension-checking-fixes.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| From 300b9f0b704048f60776881f1d378c74d9c32fbd Mon Sep 17 00:00:00 2001 | ||||
| From: "Dr. Stephen Henson" <steve@openssl.org> | ||||
| Date: Tue, 15 Apr 2014 18:48:54 +0100 | ||||
| Subject: [PATCH] Extension checking fixes. | ||||
| 
 | ||||
| When looking for an extension we need to set the last found | ||||
| position to -1 to properly search all extensions. | ||||
| 
 | ||||
| PR#3309. | ||||
| ---
 | ||||
|  crypto/x509v3/v3_purp.c | 6 +++--- | ||||
|  1 file changed, 3 insertions(+), 3 deletions(-) | ||||
| 
 | ||||
| diff --git a/crypto/x509v3/v3_purp.c b/crypto/x509v3/v3_purp.c
 | ||||
| index 6c40c7d..5f931db 100644
 | ||||
| --- a/crypto/x509v3/v3_purp.c
 | ||||
| +++ b/crypto/x509v3/v3_purp.c
 | ||||
| @@ -389,8 +389,8 @@ static void x509v3_cache_extensions(X509 *x)
 | ||||
|  	/* Handle proxy certificates */ | ||||
|  	if((pci=X509_get_ext_d2i(x, NID_proxyCertInfo, NULL, NULL))) { | ||||
|  		if (x->ex_flags & EXFLAG_CA | ||||
| -		    || X509_get_ext_by_NID(x, NID_subject_alt_name, 0) >= 0
 | ||||
| -		    || X509_get_ext_by_NID(x, NID_issuer_alt_name, 0) >= 0) {
 | ||||
| +		    || X509_get_ext_by_NID(x, NID_subject_alt_name, -1) >= 0
 | ||||
| +		    || X509_get_ext_by_NID(x, NID_issuer_alt_name, -1) >= 0) {
 | ||||
|  			x->ex_flags |= EXFLAG_INVALID; | ||||
|  		} | ||||
|  		if (pci->pcPathLengthConstraint) { | ||||
| @@ -670,7 +670,7 @@ static int check_purpose_timestamp_sign(const X509_PURPOSE *xp, const X509 *x,
 | ||||
|  		return 0; | ||||
|   | ||||
|  	/* Extended Key Usage MUST be critical */ | ||||
| -	i_ext = X509_get_ext_by_NID((X509 *) x, NID_ext_key_usage, 0);
 | ||||
| +	i_ext = X509_get_ext_by_NID((X509 *) x, NID_ext_key_usage, -1);
 | ||||
|  	if (i_ext >= 0) | ||||
|  		{ | ||||
|  		X509_EXTENSION *ext = X509_get_ext((X509 *) x, i_ext); | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
							
								
								
									
										14
									
								
								gnu/packages/patches/perl-tk-x11-discover.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								gnu/packages/patches/perl-tk-x11-discover.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| On non-x86_64 systems, this conditional can cause a specified X11 build value | ||||
| to be overwritten to null, causing x11 discovery to fail. | ||||
| 
 | ||||
| --- a/myConfig	2014-05-12 11:16:48.152719722 -0500
 | ||||
| +++ b/myConfig	2014-05-12 11:16:24.704719113 -0500
 | ||||
| @@ -350,7 +350,7 @@
 | ||||
|    # | ||||
|    # Prefer 64bit libraries on certain architectures | ||||
|    # | ||||
| -  unless (defined $xlib and $Config{'archname'} =~ m/x86_64/)
 | ||||
| +  unless (defined $xlib or not $Config{'archname'} =~ m/x86_64/)
 | ||||
|      { | ||||
|        $xlib64 = &lX11(0, chooseX11(</usr/X11*/lib64>)); | ||||
|      } | ||||
							
								
								
									
										15
									
								
								gnu/packages/patches/petsc-fix-threadcomm.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								gnu/packages/patches/petsc-fix-threadcomm.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| Fix "error: unknown type name 'cpu_set_t'".  Patch submitted upstream | ||||
| http://lists.mcs.anl.gov/pipermail/petsc-dev/2014-May/015345.html | ||||
| 
 | ||||
| --- a/src/sys/threadcomm/impls/openmp/tcopenmp.c	2014-03-13 21:47:22.000000000 -0500
 | ||||
| +++ b/src/sys/threadcomm/impls/openmp/tcopenmp.c	2014-04-02 14:44:57.185170151 -0500
 | ||||
| @@ -1,6 +1,9 @@
 | ||||
|  #define PETSC_DESIRE_FEATURE_TEST_MACROS | ||||
|  #include <../src/sys/threadcomm/impls/openmp/tcopenmpimpl.h> | ||||
|  #include <omp.h> | ||||
| +#if defined(PETSC_HAVE_SCHED_CPU_SET_T)
 | ||||
| +#include <sched.h>
 | ||||
| +#endif
 | ||||
|   | ||||
|  PetscErrorCode PetscThreadCommGetRank_OpenMP(PetscInt *trank) | ||||
|  { | ||||
							
								
								
									
										17
									
								
								gnu/packages/patches/pybugz-encode-error.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								gnu/packages/patches/pybugz-encode-error.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| In case of 'AttributeError', 'value' is None, so do not try to | ||||
| access it. | ||||
| Submitted upstream. | ||||
| 
 | ||||
| --- pybugz-0.6.11/bugz.py	2006-09-02 14:35:37.000000000 +0200
 | ||||
| +++ pybugz-0.6.11/bugz.py	2014-05-05 16:02:20.000000000 +0200
 | ||||
| @@ -1249,9 +1254,9 @@ class PrettyBugz(Bugz):
 | ||||
|          for field, name in FIELDS + MORE_FIELDS: | ||||
|              try: | ||||
|                  value = result.find('//%s' % field).text | ||||
| +                print '%-12s: %s' % (name, value.encode(self.enc))
 | ||||
|              except AttributeError: | ||||
|                  continue | ||||
| -            print '%-12s: %s' % (name, value.encode(self.enc))
 | ||||
|   | ||||
|          # Print out the cc'ed people | ||||
|          cced = result.findall('.//cc') | ||||
							
								
								
									
										19
									
								
								gnu/packages/patches/pybugz-stty.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								gnu/packages/patches/pybugz-stty.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| Gracefully deal with 'stty size' failures. | ||||
| Submitted upstream. | ||||
| 
 | ||||
| --- pybugz-0.6.11/bugz.py	2006-09-02 14:35:37.000000000 +0200
 | ||||
| +++ pybugz-0.6.11/bugz.py	2014-05-05 15:17:03.000000000 +0200
 | ||||
| @@ -288,7 +288,12 @@ def get_cols():
 | ||||
|      stty = which('stty') | ||||
|      if stty: | ||||
|          row_cols = commands.getoutput("%s size" % stty) | ||||
| -        rows, cols = map(int, row_cols.split())
 | ||||
| +        try:
 | ||||
| +            rows, cols = map(int, row_cols.split())
 | ||||
| +        except:
 | ||||
| +            # In some cases 'stty size' will just fail with
 | ||||
| +            # "Inappropriate ioctl for device".
 | ||||
| +            cols = DEFAULT_NUM_COLS
 | ||||
|          return cols | ||||
|      else: | ||||
|          return DEFAULT_NUM_COLS | ||||
							
								
								
									
										139
									
								
								gnu/packages/patches/scotch-test-threading.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								gnu/packages/patches/scotch-test-threading.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,139 @@ | |||
| * These tests assume threading support, even when the library is compiled | ||||
|   without it.  Protect these checks. | ||||
| 
 | ||||
| * Tests should not require keyboard interaction. | ||||
| 
 | ||||
| --- a/src/check/test_scotch_dgraph_band.c	2012-09-27 10:46:42.000000000 -0500
 | ||||
| +++ b/src/check/test_scotch_dgraph_band.c	2014-05-13 14:36:07.479270243 -0500
 | ||||
| @@ -99,10 +99,12 @@
 | ||||
|      errorPrint ("main: Cannot initialize (1)"); | ||||
|      exit       (1); | ||||
|    } | ||||
| +#ifdef SCOTCH_PTHREAD
 | ||||
|    if (thrdlvlreqval > thrdlvlproval) { | ||||
|      errorPrint ("main: Cannot initialize (2)"); | ||||
|      exit       (1); | ||||
|    } | ||||
| +#endif
 | ||||
|   | ||||
|    if (argc != 2) { | ||||
|      errorPrint ("main: invalid number of parameters"); | ||||
| @@ -115,12 +117,14 @@
 | ||||
|   | ||||
|    fprintf (stderr, "Proc %2d of %2d, pid %d\n", proclocnum, procglbnbr, getpid ()); | ||||
|   | ||||
| +#ifdef SCOTCH_DEBUG_CHECK2
 | ||||
|    if (proclocnum == 0) {                          /* Synchronize on keybord input */ | ||||
|      char           c; | ||||
|   | ||||
|      printf ("Waiting for key press...\n"); | ||||
|      scanf ("%c", &c); | ||||
|    } | ||||
| +#endif /* SCOTCH_DEBUG_CHECK2 */
 | ||||
|   | ||||
|    if (MPI_Barrier (proccomm) != MPI_SUCCESS) {    /* Synchronize for debug */ | ||||
|      errorPrint ("main: cannot communicate"); | ||||
| --- a/src/check/test_scotch_dgraph_grow.c	2012-11-30 12:19:33.000000000 -0600
 | ||||
| +++ b/src/check/test_scotch_dgraph_grow.c	2014-05-13 14:35:31.307269303 -0500
 | ||||
| @@ -103,10 +103,12 @@
 | ||||
|      errorPrint ("main: Cannot initialize (1)"); | ||||
|      exit       (1); | ||||
|    } | ||||
| +#ifdef SCOTCH_PTHREAD
 | ||||
|    if (thrdlvlreqval > thrdlvlproval) { | ||||
|      errorPrint ("main: Cannot initialize (2)"); | ||||
|      exit       (1); | ||||
|    } | ||||
| +#endif
 | ||||
|   | ||||
|    if (argc != 2) { | ||||
|      errorPrint ("main: invalid number of parameters"); | ||||
| @@ -119,12 +121,14 @@
 | ||||
|   | ||||
|    fprintf (stderr, "Proc %2d of %2d, pid %d\n", proclocnum, procglbnbr, getpid ()); | ||||
|   | ||||
| +#ifdef SCOTCH_DEBUG_CHECK2
 | ||||
|    if (proclocnum == 0) {                          /* Synchronize on keybord input */ | ||||
|      char           c; | ||||
|   | ||||
|      printf ("Waiting for key press...\n"); | ||||
|      scanf ("%c", &c); | ||||
|    } | ||||
| +#endif /* SCOTCH_DEBUG_CHECK2 */
 | ||||
|   | ||||
|    if (MPI_Barrier (proccomm) != MPI_SUCCESS) {    /* Synchronize for debug */ | ||||
|      errorPrint ("main: cannot communicate"); | ||||
| --- a/src/check/test_scotch_dgraph_redist.c	2012-09-26 11:42:27.000000000 -0500
 | ||||
| +++ b/src/check/test_scotch_dgraph_redist.c	2014-05-13 14:34:30.323267722 -0500
 | ||||
| @@ -98,10 +98,12 @@
 | ||||
|      errorPrint ("main: Cannot initialize (1)"); | ||||
|      exit       (1); | ||||
|    } | ||||
| +#ifdef SCOTCH_PTHREAD
 | ||||
|    if (thrdlvlreqval > thrdlvlproval) { | ||||
|      errorPrint ("main: Cannot initialize (2)"); | ||||
|      exit       (1); | ||||
|    } | ||||
| +#endif
 | ||||
|   | ||||
|    if (argc != 2) { | ||||
|      errorPrint ("main: invalid number of parameters"); | ||||
| @@ -114,7 +116,6 @@
 | ||||
|   | ||||
|    fprintf (stderr, "Proc %2d of %2d, pid %d\n", proclocnum, procglbnbr, getpid ()); | ||||
|   | ||||
| -#define SCOTCH_DEBUG_CHECK2
 | ||||
|  #ifdef SCOTCH_DEBUG_CHECK2 | ||||
|    if (proclocnum == 0) {                          /* Synchronize on keybord input */ | ||||
|      char           c; | ||||
| --- /tmp/nix-build-scotch-6.0.0.drv-9/scotch_6.0.0/src/check/test_common_thread.c	2012-11-30 11:05:23.000000000 -0600
 | ||||
| +++ scotch_6.0.0/src/check/test_common_thread.c	2014-05-13 17:26:27.159535244 -0500
 | ||||
| @@ -90,7 +90,7 @@
 | ||||
|  /*                       */ | ||||
|  /*************************/ | ||||
|   | ||||
| -#if ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD))
 | ||||
| +#ifdef SCOTCH_PTHREAD
 | ||||
|   | ||||
|  static | ||||
|  void | ||||
| @@ -161,7 +161,7 @@
 | ||||
|    return (o); | ||||
|  } | ||||
|   | ||||
| -#endif /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
 | ||||
| +#endif /* SCOTCH_PTHREAD */
 | ||||
|   | ||||
|  /*********************/ | ||||
|  /*                   */ | ||||
| @@ -175,14 +175,14 @@
 | ||||
|  char *              argv[]) | ||||
|  { | ||||
|    TestThreadGroup       groudat; | ||||
| -#if ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD))
 | ||||
| +#ifdef SCOTCH_PTHREAD
 | ||||
|    TestThread * restrict thrdtab; | ||||
|    int                   thrdnbr; | ||||
| -#endif /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
 | ||||
| +#endif /* SCOTCH_PTHREAD */
 | ||||
|   | ||||
|    SCOTCH_errorProg (argv[0]); | ||||
|   | ||||
| -#if ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD))
 | ||||
| +#ifdef SCOTCH_PTHREAD
 | ||||
|    thrdnbr = SCOTCH_PTHREAD_NUMBER; | ||||
|   | ||||
|    groudat.redusum = COMPVAL (thrdnbr); | ||||
| @@ -197,9 +197,9 @@
 | ||||
|      errorPrint ("main: cannot launch or run threads"); | ||||
|      return     (1); | ||||
|    } | ||||
| -#else /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
 | ||||
| -  printf ("Scotch not compiled with either COMMON_PTHREAD or SCOTCH_PTHREAD\n");
 | ||||
| -#endif /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
 | ||||
| +#else /* not SCOTCH_PTHREAD */
 | ||||
| +  printf ("Scotch not compiled with SCOTCH_PTHREAD\n");
 | ||||
| +#endif /* not SCOTCH_PTHREAD */
 | ||||
|   | ||||
|    return (0); | ||||
|  } | ||||
							
								
								
									
										15
									
								
								gnu/packages/patches/soprano-find-clucene.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								gnu/packages/patches/soprano-find-clucene.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| Search for clucene include file in the clucene include directory. | ||||
| 
 | ||||
| diff -u -r soprano-2.9.4.orig/cmake/modules/FindCLucene.cmake soprano-2.9.4/cmake/modules/FindCLucene.cmake
 | ||||
| --- soprano-2.9.4.orig/cmake/modules/FindCLucene.cmake	2013-10-09 19:22:28.000000000 +0200
 | ||||
| +++ soprano-2.9.4/cmake/modules/FindCLucene.cmake	2014-04-28 20:08:11.000000000 +0200
 | ||||
| @@ -77,7 +77,8 @@
 | ||||
|   | ||||
|  get_filename_component(TRIAL_LIBRARY_DIR ${CLUCENE_LIBRARY} PATH) | ||||
|  find_path(CLUCENE_LIBRARY_DIR | ||||
| -  NAMES CLucene/clucene-config.h PATHS ${TRIAL_LIBRARY_DIR} ${TRIAL_LIBRARY_PATHS} ${TRIAL_INCLUDE_PATHS} NO_DEFAULT_PATH)
 | ||||
| +  NAMES CLucene/clucene-config.h PATHS ${TRIAL_LIBRARY_DIR} ${TRIAL_LIBRARY_PATHS} ${TRIAL_INCLUDE_PATHS} ${CLUCENE_INCLUDE_DIR} NO_DEFAULT_PATH)
 | ||||
| +message (STATUS "XXX ${CLUCENE_LIBRARY_DIR}")
 | ||||
|  if(CLUCENE_LIBRARY_DIR) | ||||
|    message(STATUS "Found CLucene library dir: ${CLUCENE_LIBRARY_DIR}") | ||||
|    file(READ ${CLUCENE_LIBRARY_DIR}/CLucene/clucene-config.h CLCONTENT) | ||||
							
								
								
									
										21
									
								
								gnu/packages/patches/superlu-dist-scotchmetis.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								gnu/packages/patches/superlu-dist-scotchmetis.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| The METIS interface from Scotch may segfault if passed NULL to indicate a | ||||
| default parameter, so use the older calling style. | ||||
| 
 | ||||
| --- a/SRC/get_perm_c.c	2014-05-16 23:38:30.070835316 -0500
 | ||||
| +++ b/SRC/get_perm_c.c	2014-05-16 23:39:04.582836211 -0500
 | ||||
| @@ -70,11 +70,13 @@
 | ||||
|  #else | ||||
|   | ||||
|      /* Earlier version 3.x.x */ | ||||
| -    /* METIS_NodeND(&nm, b_colptr, b_rowind, &numflag, metis_options,
 | ||||
| -       perm, iperm);*/
 | ||||
| +    METIS_NodeND(&nm, b_colptr, b_rowind, &numflag, metis_options,
 | ||||
| +                 perm, iperm);
 | ||||
|   | ||||
|      /* Latest version 4.x.x */ | ||||
| +#if 0
 | ||||
|      METIS_NodeND(&nm, b_colptr, b_rowind, NULL, NULL, perm, iperm); | ||||
| +#endif
 | ||||
|   | ||||
|      /*check_perm_dist("metis perm",  n, perm);*/ | ||||
|  #endif | ||||
							
								
								
									
										91
									
								
								gnu/packages/pciutils.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								gnu/packages/pciutils.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 pciutils) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module ((guix licenses) | ||||
|                 #:renamer (symbol-prefix-proc 'license:)) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages which)) | ||||
| 
 | ||||
| (define-public pciutils | ||||
|   (package | ||||
|     (name "pciutils") | ||||
|     (version "3.2.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "mirror://kernel.org/software/utils/pciutils/pciutils-" | ||||
|                     version | ||||
|                     ".tar.bz2")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0d9as9jzjjg5c1nwf58z1y1i7rf9fqxmww1civckhcvcn0xr85mq")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-replace | ||||
|                  'configure | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    ;; There's no 'configure' script, just a raw makefile. | ||||
|                    (substitute* "Makefile" | ||||
|                      (("^PREFIX=.*$") | ||||
|                       (string-append "PREFIX := " (assoc-ref outputs "out") | ||||
|                                      "\n")) | ||||
|                      (("^MANDIR:=.*$") | ||||
|                        ;; By default the thing tries to automatically | ||||
|                        ;; determine whether to use $prefix/man or | ||||
|                        ;; $prefix/share/man, and wrongly so. | ||||
|                       (string-append "MANDIR := " (assoc-ref outputs "out") | ||||
|                                      "/share/man\n")) | ||||
|                      (("^SHARED=.*$") | ||||
|                       ;; Build libpciutils.so. | ||||
|                       "SHARED := yes\n") | ||||
|                      (("^ZLIB=.*$") | ||||
|                       ;; Ask for zlib support. | ||||
|                       "ZLIB := yes\n"))) | ||||
| 
 | ||||
|                  (alist-replace | ||||
|                   'install | ||||
|                   (lambda* (#:key outputs #:allow-other-keys) | ||||
|                     ;; Install the commands, library, and .pc files. | ||||
|                     (zero? (system* "make" "install" "install-lib"))) | ||||
|                   %standard-phases)) | ||||
| 
 | ||||
|        ;; Make sure programs have an RPATH so they can find libpciutils.so. | ||||
|        #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath=" | ||||
|                                          (assoc-ref %outputs "out") "/lib")) | ||||
| 
 | ||||
|        ;; No test suite. | ||||
|        #:tests? #f)) | ||||
|     (native-inputs | ||||
|      `(("which" ,which) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      ;; TODO: Add dependency on Linux libkmod. | ||||
|      `(("zlib" ,zlib))) | ||||
|     (home-page "http://mj.ucw.cz/sw/pciutils/") | ||||
|     (synopsis "Programs for inspecting and manipulating PCI devices") | ||||
|     (description | ||||
|      "The PCI Utilities are a collection of programs for inspecting and | ||||
| manipulating configuration of PCI devices, all based on a common portable | ||||
| library libpci which offers access to the PCI configuration space on a variety | ||||
| of operating systems.  This includes the 'lspci' and 'setpci' commands.") | ||||
|     (license license:gpl2+))) | ||||
|  | @ -106,14 +106,14 @@ matching a regular expression.") | |||
| (define-public perl-io-tty | ||||
|   (package | ||||
|     (name "perl-io-tty") | ||||
|     (version "1.10") | ||||
|     (version "1.11") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "mirror://cpan/authors/id/T/TO/TODDR/IO-Tty-" | ||||
|                                   version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1cgqyv1zg8857inlnfczrrgpqr0r6mmqv29b7jlmxv47s4df59ii")))) | ||||
|                 "0lgd9xcbi4gf4gw1ka6fj94my3w1f3k1zamb4pfln0qxz45zlxx4")))) | ||||
|     (build-system perl-build-system) | ||||
|     (home-page "http://search.cpan.org/~toddr/IO-Tty/") | ||||
|     (synopsis "Perl interface to pseudo ttys") | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ | |||
| 
 | ||||
| (define-module (gnu packages python) | ||||
|   #:use-module ((guix licenses) | ||||
|                 #:select (bsd-3 bsd-style psfl x11 x11-style | ||||
|                 #:select (bsd-3 bsd-style expat psfl x11 x11-style | ||||
|                           gpl2 gpl2+ lgpl2.1+)) | ||||
|   #:use-module ((guix licenses) #:select (zlib) | ||||
|                                 #:renamer (symbol-prefix-proc 'license:)) | ||||
|  | @ -293,6 +293,55 @@ etc. ") | |||
| (define-public python2-babel | ||||
|   (package-with-python2 python-babel)) | ||||
| 
 | ||||
| (define-public python-lockfile | ||||
|   (package | ||||
|     (name "python-lockfile") | ||||
|     (version "0.9.1") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "https://pypi.python.org/packages/source/l/lockfile/" | ||||
|                            "lockfile-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0iwif7i84gwpvrnpv4brshdk8j6l77smvknm8k3bg77mj6f5ini3")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments '(#:test-target "check")) | ||||
|     (home-page "http://code.google.com/p/pylockfile/") | ||||
|     (synopsis "Platform-independent file locking module") | ||||
|     (description | ||||
|      "The lockfile package exports a LockFile class which provides a simple | ||||
| API for locking files.") | ||||
|     (license expat))) | ||||
| 
 | ||||
| (define-public python2-lockfile | ||||
|   (package-with-python2 python-lockfile)) | ||||
| 
 | ||||
| (define-public python-mock | ||||
|   (package | ||||
|     (name "python-mock") | ||||
|     (version "1.0.1") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "https://pypi.python.org/packages/source/m/mock/" | ||||
|                            "mock-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments '(#:test-target "check")) | ||||
|     (home-page "http://code.google.com/m/mock/") | ||||
|     (synopsis "A Python Mocking and Patching Library for Testing") | ||||
|     (description | ||||
|      "Mock is a library for testing in Python.  It allows you to replace parts | ||||
| of your system under test with mock objects and make assertions about how they | ||||
| have been used.") | ||||
|     (license expat))) | ||||
| 
 | ||||
| (define-public python2-mock | ||||
|   (package-with-python2 python-mock)) | ||||
| 
 | ||||
| 
 | ||||
| (define-public python-setuptools | ||||
|   (package | ||||
|  | @ -578,7 +627,10 @@ commands.") | |||
|                     version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd")))) | ||||
|                 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd")) | ||||
|               (patches (map search-patch | ||||
|                             (list "pybugz-stty.patch" | ||||
|                                   "pybugz-encode-error.patch"))))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments | ||||
|      `(#:python ,python-2                         ; SyntaxError with Python 3 | ||||
|  |  | |||
|  | @ -44,14 +44,14 @@ | |||
|   ;; This is QEMU without GUI support. | ||||
|   (package | ||||
|     (name "qemu-headless") | ||||
|     (version "1.7.1") | ||||
|     (version "2.0.0") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://wiki.qemu-project.org/download/qemu-" | ||||
|                                  version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1x5y06zhp0gc97g1sb98vf7dkawg63xywv0mbnpfnbi20jh452fn")))) | ||||
|                "0frsahiw56jr4cqr9m6s383lyj4ar9hfs2wp3y4yr76krah1mk30")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-replace | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -150,7 +150,7 @@ developers using C++ or QML, a CSS & JavaScript like language.") | |||
| 
 | ||||
| (define-public qt-4 | ||||
|   (package (inherit qt) | ||||
|     (version "4.8.5") | ||||
|     (version "4.8.6") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://download.qt-project.org/official_releases/qt/" | ||||
|  | @ -160,10 +160,11 @@ developers using C++ or QML, a CSS & JavaScript like language.") | |||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0f51dbgn1dcck8pqimls2qyf1pfmsmyknh767cvw87c3d218ywpb")) | ||||
|                "0b036iqgmbbv37dgwwfihw3mihjbnw3kb5kaisdy0qi8nn8xs54b")) | ||||
|              (patches (list (search-patch "qt4-tests.patch"))))) | ||||
|     (inputs `(,@(alist-delete "libjpeg" (package-inputs qt)) | ||||
|               ("libjepg" ,libjpeg-8))) | ||||
|               ("libjepg" ,libjpeg-8) | ||||
|               ("libsm" ,libsm))) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|          (alist-replace | ||||
|  |  | |||
|  | @ -17,13 +17,22 @@ | |||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages rdf) | ||||
|   #:use-module ((guix licenses) #:select (lgpl2.0+ lgpl2.1+)) | ||||
|   #:use-module ((guix licenses) #:select (lgpl2.0+ lgpl2.1 lgpl2.1+)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system cmake) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages bdb) | ||||
|   #:use-module (gnu packages boost) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages curl) | ||||
|   #:use-module (gnu packages doxygen) | ||||
|   #:use-module (gnu packages gnupg) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages multiprecision) | ||||
|   #:use-module (gnu packages pcre) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages qt) | ||||
|   #:use-module (gnu packages xml)) | ||||
|  | @ -60,15 +69,107 @@ Turtle 2013, N-Quads, N-Triples 1.1, Atom 1.0, RSS 1.0, GraphViz DOT, | |||
| HTML and JSON.") | ||||
|     (license lgpl2.1+))) ; or any choice of gpl2+ or asl2.0 | ||||
| 
 | ||||
| (define-public clucene | ||||
|   (package | ||||
|     (name "clucene") | ||||
|     (version "2.3.3.4") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://sourceforge/clucene/" | ||||
|                                  "clucene-core-unstable/2.3/clucene-core-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1arffdwivig88kkx685pldr784njm0249k0rb1f1plwavlrw9zfx")) | ||||
|              (patches (list (search-patch "clucene-pkgconfig.patch"))))) | ||||
|     (build-system cmake-build-system) | ||||
|     (inputs | ||||
|      `(("boost" ,boost) ; could also use bundled copy | ||||
|        ("zlib" ,zlib))) | ||||
|     (arguments | ||||
|      `(#:test-target "cl_test" | ||||
|        #:tests? #f)) ; Tests do not compile, as TestIndexSearcher.cpp uses | ||||
|                      ; undeclared usleep. After fixing this, one needs to run | ||||
|                      ; "make test" in addition to "make cl_test", then | ||||
|                      ; SimpleTest fails. | ||||
|                      ; Notice that the library appears to be unmaintained | ||||
|                      ; with no reaction to bug reports. | ||||
|     (home-page "http://clucene.sourceforge.net/") | ||||
|     (synopsis "C text indexing and searching library") | ||||
|     (description "CLucene is a high-performance, scalable, cross platform, | ||||
| full-featured indexing and searching API.  It is a port of the very popular | ||||
| Java Lucene text search engine API to C++.") | ||||
|     (license lgpl2.1))) | ||||
| 
 | ||||
| (define-public rasqal | ||||
|   (package | ||||
|     (name "rasqal") | ||||
|     (version "0.9.32") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://download.librdf.org/source/" name | ||||
|                                  "-" version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "13rfprkk7d74065c7bafyshajwa6lshj7m9l741zlz9viqhh7fpf")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("perl" ,perl) | ||||
|        ("perl-xml-dom" ,perl-xml-dom) ; for the tests | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("libgcrypt" ,libgcrypt) | ||||
|        ("libxml2" ,libxml2) | ||||
|        ("mpfr" ,mpfr) | ||||
|        ("pcre" ,pcre) | ||||
|        ("util-linux" ,util-linux))) | ||||
|     (propagated-inputs | ||||
|      `(("raptor2" ,raptor2))) ; stipulated by rasqal.pc | ||||
|     (arguments | ||||
|      `(#:parallel-tests? #f | ||||
|        ; test failure reported upstream, see | ||||
|        ; http://bugs.librdf.org/mantis/view.php?id=571 | ||||
|        #:tests? #f)) | ||||
|     (home-page "http://librdf.org/rasqal/") | ||||
|     (synopsis "RDF query library") | ||||
|     (description "Rasqal is a C library that handles Resource Description | ||||
| Framework (RDF) query language syntaxes, query construction and execution | ||||
| of queries returning results as bindings, boolean, RDF graphs/triples or | ||||
| syntaxes.  The supported query languages are SPARQL Query 1.0, | ||||
| SPARQL Query 1.1, SPARQL Update 1.1 (no executing) and the Experimental | ||||
| SPARQL extensions (LAQRS).  Rasqal can write binding query results in the | ||||
| SPARQL XML, SPARQL JSON, CSV, TSV, HTML, ASCII tables, RDF/XML and | ||||
| Turtle/N3 and read them in SPARQL XML, RDF/XML and Turtle/N3.") | ||||
|     (license lgpl2.1+))) ; or any choice of gpl2+ or asl2.0 | ||||
| 
 | ||||
| (define-public redland | ||||
|   (package | ||||
|     (name "redland") | ||||
|     (version "1.0.17") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "http://download.librdf.org/source/" name | ||||
|                                  "-" version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "109n0kp39p966dpiasad2bb7q66rwbcb9avjvimw28chnpvlf66y")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("perl" ,perl) ; needed for installation | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("bdb" ,bdb) | ||||
|        ("rasqal" ,rasqal))) | ||||
|     (home-page "http://librdf.org/") | ||||
|     (synopsis "RDF library") | ||||
|     (description "The Redland RDF Library (librdf) provides the RDF API | ||||
| and triple stores.") | ||||
|     (license lgpl2.1+))) ; or any choice of gpl2+ or asl2.0 | ||||
| 
 | ||||
| (define-public soprano | ||||
|   (package | ||||
|     (name "soprano") | ||||
|     (version "2.9.3") | ||||
|     ;; 2.9.4 requires clucene, see | ||||
|     ;; http://www.mailinglistarchive.com/html/lfs-book@linuxfromscratch.org/2013-10/msg00285.html | ||||
|     ;; The stable clucene-0.9.21b fails one of its tests; | ||||
|     ;; in the unstable clucene-2.3.3.4 the binary cl_test is not found. | ||||
|     ;; In any case, the library seems to be unmaintained. | ||||
|     (version "2.9.4") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://sourceforge/soprano/Soprano/" | ||||
|  | @ -76,14 +177,17 @@ HTML and JSON.") | |||
|                                 "soprano-" version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "08gb5d8bgy7vc6qd6r1kkmmc5rli67dlglpjqjlahpnvs26r1cwl")))) | ||||
|                "1rg0x7yg0a1cbnxz7kqk52580wla8jbnj4d4r3j7l7g7ajyny1k4")) | ||||
|              (patches (list (search-patch "soprano-find-clucene.patch"))))) | ||||
|     (build-system cmake-build-system) | ||||
|     ;; FIXME: Add optional dependencies: Redland, odbci, clucene; doxygen | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|      `(("doxygen" ,doxygen) | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("qt" ,qt-4) | ||||
|        ("raptor2" ,raptor2))) | ||||
|      `(("clucene" ,clucene) | ||||
|        ("qt" ,qt-4) | ||||
|        ("rasqal" ,rasqal) | ||||
|        ("redland" ,redland))) | ||||
|     (home-page "http://soprano.sourceforge.net/") | ||||
|     (synopsis "RDF data library for Qt") | ||||
|     (description "Soprano (formerly known as QRDF) is a library which | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ | |||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages acl) | ||||
|   #:use-module (gnu packages which) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|  | @ -49,3 +50,29 @@ by sending only the differences between the source files and the existing | |||
| files in the destination.") | ||||
|    (license gpl3+) | ||||
|    (home-page "http://rsync.samba.org/"))) | ||||
| 
 | ||||
| (define-public librsync | ||||
|   (package | ||||
|     (name "librsync") | ||||
|     (version "0.9.7") | ||||
|        (source (origin | ||||
|             (method url-fetch) | ||||
|             (uri (string-append "mirror://sourceforge/librsync/librsync/" | ||||
|                                 version "/librsync-" version ".tar.gz")) | ||||
|             (sha256 | ||||
|              (base32 | ||||
|               "1mj1pj99mgf1a59q9f2mxjli2fzxpnf55233pc1klxk2arhf8cv6")))) | ||||
|    (build-system gnu-build-system) | ||||
|    (native-inputs | ||||
|     `(("which" ,which) | ||||
|       ("perl" ,perl))) | ||||
|    (arguments '(#:configure-flags '("--enable-shared"))) | ||||
|    (home-page "http://librsync.sourceforge.net/") | ||||
|    (synopsis "Implementation of the rsync remote-delta algorithm") | ||||
|    (description | ||||
|     "Librsync is a free software library that implements the rsync | ||||
| remote-delta algorithm.  This algorithm allows efficient remote updates of a | ||||
| file, without requiring the old and new versions to both be present at the | ||||
| sending end. The library uses a \"streaming\" design similar to that of zlib | ||||
| with the aim of allowing it to be embedded into many different applications.") | ||||
|    (license lgpl2.1+))) | ||||
|  |  | |||
|  | @ -29,13 +29,13 @@ | |||
| (define-public screen | ||||
|   (package | ||||
|     (name "screen") | ||||
|     (version "4.0.3") | ||||
|     (version "4.2.1") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://gnu/screen/screen-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 "0xvckv1ia5pjxk7fs4za6gz2njwmfd54sc464n8ab13096qxbw3q")))) | ||||
|               (base32 "105hp6qdd8rl71p81klmxiz4mlb60kh9r7czayrx40g38x858s2l")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("ncurses", ncurses) | ||||
|  |  | |||
|  | @ -147,12 +147,17 @@ other supporting functions for SDL.") | |||
|               (base32 | ||||
|                "16an9slbb8ci7d89wakkmyfvp7c0cval8xw4hkg0842nhhlp540b")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     ;; FIXME: Add webp | ||||
|     (inputs `(("libpng" ,libpng) | ||||
|               ("libjpeg" ,libjpeg) | ||||
|               ("libtiff" ,libtiff) | ||||
|               ("pkg-config" ,pkg-config))) | ||||
|     (propagated-inputs `(("sdl" ,sdl))) | ||||
|     ;; | ||||
|     ;; libjpeg, libpng, and libtiff are propagated inputs because the | ||||
|     ;; SDL_image headers include the headers of these libraries.  SDL is a | ||||
|     ;; propagated input because the pkg-config file refers to SDL's pkg-config | ||||
|     ;; file. | ||||
|     (propagated-inputs `(("sdl" ,sdl) | ||||
|                          ("libjpeg" ,libjpeg) | ||||
|                          ("libpng" ,libpng) | ||||
|                          ("libtiff" ,libtiff))) | ||||
|     (synopsis "SDL image loading library") | ||||
|     (description "SDL_image is an image file loading library for SDL that | ||||
| supports the following formats: BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Guy Grant <gzg@riseup.net> | ||||
| ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -75,15 +76,8 @@ | |||
|                       ;; "systemd".  Strip that. | ||||
|                       ""))) | ||||
| 		 %standard-phases) | ||||
|        #:configure-flags '("-DUSE_PAM=yes" "-DUSE_CONSOLEKIT=no" | ||||
| 
 | ||||
|                            ;; Don't build libslim.so, because then the build | ||||
|                            ;; system is unable to set the right RUNPATH on the | ||||
|                            ;; 'slim' binary. | ||||
|                            "-DBUILD_SHARED_LIBS=OFF" | ||||
| 
 | ||||
|                            ;; Leave a valid RUNPATH upon install. | ||||
|                            "-DCMAKE_SKIP_BUILD_RPATH=ON") | ||||
|        #:configure-flags '("-DUSE_PAM=yes" | ||||
|                            "-DUSE_CONSOLEKIT=no") | ||||
|        #:tests? #f)) | ||||
|     (home-page "http://slim.berlios.de/") | ||||
|     (synopsis "Desktop-independent graphcal login manager for X11") | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
|  | @ -53,39 +53,10 @@ | |||
|                 "1jyaj9h1iglvn02hrvcchbx8ycjpj8b91h8mi459k7q5jp2xgd9b")))) | ||||
|     (build-system cmake-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags '("-DWITH_GCRYPT=ON" | ||||
| 
 | ||||
|                            ;; Leave a valid RUNPATH upon install. | ||||
|                            "-DCMAKE_SKIP_BUILD_RPATH=ON") | ||||
|      '(#:configure-flags '("-DWITH_GCRYPT=ON") | ||||
| 
 | ||||
|        ;; TODO: Add 'CMockery' and '-DWITH_TESTING=ON' for the test suite. | ||||
|        #:tests? #f | ||||
| 
 | ||||
|        #:modules ((guix build cmake-build-system) | ||||
|                   (guix build utils) | ||||
|                   (guix build rpath)) | ||||
|        #:imported-modules ((guix build gnu-build-system) | ||||
|                            (guix build cmake-build-system) | ||||
|                            (guix build utils) | ||||
|                            (guix build rpath)) | ||||
| 
 | ||||
|        #:phases (alist-cons-after | ||||
|                  'install 'augment-runpath | ||||
|                  (lambda* (#:key outputs #:allow-other-keys) | ||||
|                    ;; libssh_threads.so NEEDs libssh.so, so add $libdir to its | ||||
|                    ;; RUNPATH. | ||||
|                    (define (dereference file) | ||||
|                      (let ((target (false-if-exception (readlink file)))) | ||||
|                        (if target | ||||
|                            (dereference target) | ||||
|                            file))) | ||||
| 
 | ||||
|                    (let* ((out (assoc-ref outputs "out")) | ||||
|                           (lib (string-append out "/lib"))) | ||||
|                      (with-directory-excursion lib | ||||
|                        (augment-rpath (dereference "libssh_threads.so") | ||||
|                                       lib)))) | ||||
|                  %standard-phases))) | ||||
|        #:tests? #f)) | ||||
|     (inputs `(("zlib" ,zlib) | ||||
|                ;; Link against an older gcrypt, because libssh tries to access | ||||
|                ;; fields of 'gcry_thread_cbs' that are now private: | ||||
|  |  | |||
|  | @ -23,6 +23,7 @@ | |||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system perl) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages libpng) | ||||
|   #:use-module (gnu packages libjpeg) | ||||
|   #:use-module (gnu packages perl) | ||||
|  | @ -177,7 +178,8 @@ X11 GUIs.") | |||
|                    version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0jarvplhfvnm0shhdm2a5zczlnk9mkf8jvfjiwyhjrr3cy1gl0w0")))) | ||||
|                "0jarvplhfvnm0shhdm2a5zczlnk9mkf8jvfjiwyhjrr3cy1gl0w0")) | ||||
|              (patches (list (search-patch "perl-tk-x11-discover.patch"))))) | ||||
|     (build-system perl-build-system) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (inputs `(("libx11" ,libx11) | ||||
|  |  | |||
|  | @ -21,7 +21,8 @@ | |||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages version-control) | ||||
|   #:use-module ((guix licenses) #:select (asl2.0 gpl1+ gpl2 gpl2+ gpl3+)) | ||||
|   #:use-module ((guix licenses) | ||||
|                 #:select (asl2.0 gpl1+ gpl2 gpl2+ gpl3+ x11-style)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|  | @ -413,3 +414,24 @@ when a file change has been described in the ChangeLog but the file has not | |||
| been added to the VC.  vc-chlog scans changed files and generates | ||||
| standards-compliant ChangeLog entries based on the changes that it detects.") | ||||
|     (license gpl3+))) | ||||
| 
 | ||||
| (define-public diffstat | ||||
|   (package | ||||
|     (name "diffstat") | ||||
|     (version "1.58") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "ftp://invisible-island.net/diffstat/diffstat-" | ||||
|                     version ".tgz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "14rpf5c05ff30f6vn6pn6pzy0k4g4is5im656ahsxff3k58i7mgs")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (home-page "http://invisible-island.net/diffstat/") | ||||
|     (synopsis "Make histograms from the output of 'diff'") | ||||
|     (description | ||||
|      "diffstat reads the output of 'diff' and displays a histogram of the | ||||
| insertions, deletions, and modifications per-file.  It is useful for reviewing | ||||
| large, complex patch files.") | ||||
|     (license (x11-style "file://COPYING")))) | ||||
|  |  | |||
|  | @ -17,19 +17,37 @@ | |||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu packages video) | ||||
|   #:use-module ((guix licenses) #:select (gpl2+)) | ||||
|   #:use-module ((guix licenses) #:select (gpl2 gpl2+)) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages algebra) | ||||
|   #:use-module (gnu packages avahi) | ||||
|   #:use-module (gnu packages cdrom) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages elf) | ||||
|   #:use-module (gnu packages fontutils) | ||||
|   #:use-module (gnu packages gl) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (gnu packages gnupg) | ||||
|   #:use-module (gnu packages gnutls) | ||||
|   #:use-module (gnu packages libjpeg) | ||||
|   #:use-module (gnu packages libpng) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages lua) | ||||
|   #:use-module (gnu packages mp3) | ||||
|   #:use-module (gnu packages openssl) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages pulseaudio) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages qt) | ||||
|   #:use-module (gnu packages sdl) | ||||
|   #:use-module (gnu packages ssh) | ||||
|   #:use-module (gnu packages version-control) | ||||
|   #:use-module (gnu packages xiph) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages yasm)) | ||||
| 
 | ||||
| (define-public ffmpeg | ||||
|  | @ -192,3 +210,161 @@ | |||
| convert and stream audio and video.  It includes the libavcodec | ||||
| audio/video codec library.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public vlc | ||||
|   (package | ||||
|     (name "vlc") | ||||
|     (version "2.1.4") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append | ||||
|                    "http://download.videolan.org/pub/videolan/vlc/" | ||||
|                    version "/vlc-" version ".tar.xz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1lymhbb2bns73qivdaqanhggjjhyc9fwfgf5ikhng0a74msnqmiy")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("git" ,git) ; needed for a test | ||||
|        ("pkg-config" ,pkg-config))) | ||||
|     ;; FIXME: Add optional inputs once available. | ||||
|     (inputs | ||||
|      `(("alsa-lib" ,alsa-lib) | ||||
|        ("avahi" ,avahi) | ||||
|        ("dbus" ,dbus) | ||||
|        ("flac" ,flac) | ||||
|        ("ffmpeg" ,ffmpeg) | ||||
|        ("fontconfig" ,fontconfig) | ||||
|        ("freetype" ,freetype) | ||||
|        ("gnutls" ,gnutls) | ||||
|        ("libcddb" ,libcddb) | ||||
|        ("libgcrypt" ,libgcrypt) | ||||
|        ("libkate" ,libkate) | ||||
|        ("libmad" ,libmad) | ||||
|        ("libogg" ,libogg) | ||||
|        ("libpng" ,libpng) | ||||
|        ("libsamplerate" ,libsamplerate) | ||||
|        ("libssh2" ,libssh2) | ||||
|        ("libvorbis" ,libvorbis) | ||||
|        ("libtheora" ,libtheora) | ||||
|        ("libxext" ,libxext) | ||||
|        ("libxinerama" ,libxinerama) | ||||
|        ("libxml2" ,libxml2) | ||||
|        ("libxpm" ,libxpm) | ||||
|        ("lua" ,lua-5.1) | ||||
|        ("mesa" ,mesa) | ||||
|        ("opus" ,opus) | ||||
|        ("perl" ,perl) | ||||
|        ("pulseaudio" ,pulseaudio) | ||||
|        ("python" ,python-wrapper) | ||||
|        ("qt" ,qt-4) | ||||
|        ("sdl" ,sdl) | ||||
|        ("sdl-image" ,sdl-image) | ||||
|        ("speex" ,speex) | ||||
|        ("xcb-util-keysyms" ,xcb-util-keysyms))) | ||||
|     (arguments | ||||
|      `(#:configure-flags | ||||
|        `("--disable-a52" ; FIXME: reenable once available | ||||
|          "--disable-mmx" ; FIXME: may be enabled on x86_64 | ||||
|          "--disable-sse" ; 1-4, no separate options available | ||||
|          "--disable-neon" | ||||
|          "--disable-altivec" | ||||
|          ,(string-append "LDFLAGS=-Wl,-rpath -Wl," | ||||
|                          (assoc-ref %build-inputs "ffmpeg") | ||||
|                          "/lib")))) ; needed for the tests | ||||
|     (home-page "https://www.videolan.org/") | ||||
|     (synopsis "Audio and video framework") | ||||
|     (description "VLC is a cross-platform multimedia player and framework | ||||
| that plays most multimedia files as well as DVD, Audio CD, VCD, and various | ||||
| treaming protocols.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public mplayer | ||||
|   (package | ||||
|     (name "mplayer") | ||||
|     (version "1.1.1") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append | ||||
|                    "http://www.mplayerhq.hu/MPlayer/releases/MPlayer-" | ||||
|                    version ".tar.xz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0xlcg7rszrwmw29wqr0plsw5d1rq0hb7vjsq7bmmfsly2z1wg3yf")))) | ||||
|     (build-system gnu-build-system) | ||||
|     ;; FIXME: Add additional inputs once available. | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("alsa-lib" ,alsa-lib) | ||||
|        ("cdparanoia" ,cdparanoia) | ||||
|        ("fontconfig" ,fontconfig) | ||||
|        ("freetype" ,freetype) | ||||
|        ("lame" ,lame) | ||||
|        ("libmpg123" ,mpg123)                      ; audio codec for MP3 | ||||
| ;;        ("giflib" ,giflib) ; uses QuantizeBuffer, requires version >= 5 | ||||
|        ("libjpeg" ,libjpeg) | ||||
|        ("libpng" ,libpng) | ||||
|        ("libtheora" ,libtheora) | ||||
|        ("libvorbis" ,libvorbis) | ||||
|        ("libx11" ,libx11) | ||||
|        ("libxxf86dga" ,libxxf86dga) | ||||
|        ("libxinerama" ,libxinerama) | ||||
|        ("libxv" ,libxv) | ||||
|        ("mesa" ,mesa) | ||||
|        ("perl" ,perl) | ||||
|        ("pulseaudio" ,pulseaudio) | ||||
|        ("python" ,python-wrapper) | ||||
|        ("sdl" ,sdl) | ||||
|        ("speex" ,speex) | ||||
|        ("yasm" ,yasm) | ||||
|        ("zlib" ,zlib))) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; no test target | ||||
|        #:phases | ||||
|          (alist-replace | ||||
|           'configure | ||||
|           ;; configure does not work followed by "SHELL=..." and | ||||
|           ;; "CONFIG_SHELL=..."; set environment variables instead | ||||
|           (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|             (let ((out (assoc-ref outputs "out")) | ||||
|                   (libx11 (assoc-ref inputs "libx11"))) | ||||
|               (substitute* "configure" | ||||
|                 (("#! /bin/sh") (string-append "#!" (which "bash")))) | ||||
|               (setenv "SHELL" (which "bash")) | ||||
|               (setenv "CONFIG_SHELL" (which "bash")) | ||||
|               (zero? (system* | ||||
|                       "./configure" | ||||
|                       (string-append "--extra-cflags=-I" | ||||
|                                      libx11 "/include") ; to detect libx11 | ||||
|                       "--disable-tremor-internal" ; forces external libvorbis | ||||
|                       (string-append "--prefix=" out) | ||||
|                       ;; drop special machine instructions not supported | ||||
|                       ;; on all instances of the target | ||||
|                       ,@(if (string-prefix? "x86_64" | ||||
|                                             (or (%current-target-system) | ||||
|                                                 (%current-system))) | ||||
|                             '() | ||||
|                             '("--disable-3dnow" | ||||
|                               "--disable-3dnowext" | ||||
|                               "--disable-mmx" | ||||
|                               "--disable-mmxext" | ||||
|                               "--disable-sse" | ||||
|                               "--disable-sse2")) | ||||
|                       "--disable-ssse3" | ||||
|                       "--disable-altivec" | ||||
|                       "--disable-armv5te" | ||||
|                       "--disable-armv6" | ||||
|                       "--disable-armv6t2" | ||||
|                       "--disable-armvfp" | ||||
|                       "--disable-neon" | ||||
|                       "--disable-thumb" | ||||
|                       "--disable-iwmmxt")))) | ||||
|           %standard-phases))) | ||||
|     (home-page "http://www.mplayerhq.hu/design7/news.html") | ||||
|     (synopsis "Audio and video player") | ||||
|     (description "MPlayer is a movie player.  It plays most MPEG/VOB, AVI, | ||||
| Ogg/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, RealMedia, Matroska, NUT, | ||||
| NuppelVideo, FLI, YUV4MPEG, FILM, RoQ, PVA files.  One can watch VideoCD, | ||||
| SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") | ||||
|     (license gpl2))) | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ | |||
| (define-public wdiff | ||||
|   (package | ||||
|     (name "wdiff") | ||||
|     (version "1.2.1") | ||||
|     (version "1.2.2") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -36,7 +36,7 @@ | |||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1gb5hpiyikada9bwz63q3g96zs383iskiir0xsqynqnvq1vd4n41")))) | ||||
|         "0sxgg0ms5lhi4aqqvz1rj4s77yi9wymfm3l3gbjfd1qchy66kzrl")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases (alist-cons-before | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> | ||||
| ;;; Copyright © 2013 David Thompson <dthompson2@worcester.edu> | ||||
| ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in> | ||||
|  | @ -25,6 +25,7 @@ | |||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages curl) | ||||
|   #:use-module (gnu packages doxygen) | ||||
|   #:use-module (gnu packages libpng) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages python) | ||||
|  | @ -231,12 +232,13 @@ meaning that audio is compressed in FLAC without any loss in quality.") | |||
|              (base32 | ||||
|               "0s3vr2nxfxlf1k75iqpp4l78yf4gil3f0v778kvlngbchvaq23n4")))) | ||||
|    (build-system gnu-build-system) | ||||
|    ;; FIXME: Add optional inputs doxygen (for documentation) and liboggz | ||||
|    (native-inputs `(("doxygen" ,doxygen) | ||||
|                     ("pkg-config" ,pkg-config))) | ||||
|    ;; FIXME: Add optional input liboggz | ||||
|    (inputs `(("bison" ,bison) | ||||
|              ("libogg" ,libogg) | ||||
|              ("libpng" ,libpng) | ||||
|              ("pkg-config" ,pkg-config) | ||||
|              ("python" ,python-wrapper) | ||||
| ("python" ,python-wrapper) | ||||
|              ("zlib" ,zlib))) | ||||
|    (synopsis "kate, a karaoke and text codec for embedding in ogg") | ||||
|    (description | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; | ||||
|  | @ -1153,10 +1153,11 @@ tracking.") | |||
|           (base32 | ||||
|             "07bzi6xwlhq36f60qfspjbz0qjj7zcgayi1vp4ihgx34kib1vhck")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (propagated-inputs | ||||
|       `(("libice" ,libice))) ; SMlib.h includes ICElib.h | ||||
|     (inputs | ||||
|       `(("xtrans" ,xtrans) | ||||
|         ("util-linux" ,util-linux) | ||||
|         ("libice" ,libice))) | ||||
|         ("util-linux" ,util-linux))) | ||||
|     (native-inputs | ||||
|       `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://www.x.org/wiki/") | ||||
|  | @ -1427,10 +1428,11 @@ tracking.") | |||
|           (base32 | ||||
|             "15291ddhyr54sribwbg8hxx2psgzm5gh0pgkw5yrf3zgvdsa67sm")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (propagated-inputs | ||||
|       `(("xf86dgaproto" ,xf86dgaproto))) | ||||
|     (inputs | ||||
|       `(("libx11" ,libx11) | ||||
|         ("libxext" ,libxext) | ||||
|         ("xf86dgaproto" ,xf86dgaproto))) | ||||
|         ("libxext" ,libxext))) | ||||
|     (native-inputs | ||||
|       `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://www.x.org/wiki/") | ||||
|  | @ -4733,14 +4735,14 @@ icccm: Both client and window-manager helpers for ICCCM.") | |||
| (define-public xterm | ||||
|   (package | ||||
|     (name "xterm") | ||||
|     (version "303") | ||||
|     (version "304") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri                                ; XXX: constant URL! | ||||
|                "http://invisible-island.net/datafiles/release/xterm.tar.gz") | ||||
|               (uri (string-append "ftp://ftp.invisible-island.net/xterm/" | ||||
|                                   "xterm-" version ".tgz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0n7hay16aam9kfn642ri0wj5yzilbjm3l8znxc2p5dx9pn3rkwla")))) | ||||
|                 "19yp5phfzzgydc2yqka4p69ygvfzsd2aa98hbw086xyjlws3kbyk")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:configure-flags '("--enable-wide-chars" "--enable-256-color" | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ | |||
|             service-respawn? | ||||
|             service-start | ||||
|             service-stop | ||||
|             service-inputs | ||||
|             service-activate | ||||
|             service-user-accounts | ||||
|             service-user-groups | ||||
|             service-pam-services)) | ||||
|  | @ -47,16 +47,16 @@ | |||
|                  (default '())) | ||||
|   (respawn?      service-respawn?                 ; Boolean | ||||
|                  (default #t)) | ||||
|   (start         service-start)                   ; expression | ||||
|   (stop          service-stop                     ; expression | ||||
|   (start         service-start)                   ; g-expression | ||||
|   (stop          service-stop                     ; g-expression | ||||
|                  (default #f)) | ||||
|   (inputs        service-inputs                   ; list of inputs | ||||
|                  (default '())) | ||||
|   (user-accounts service-user-accounts            ; list of <user-account> | ||||
|                  (default '())) | ||||
|   (user-groups   service-user-groups              ; list of <user-groups> | ||||
|                  (default '())) | ||||
|   (pam-services  service-pam-services             ; list of <pam-service> | ||||
|                  (default '()))) | ||||
|                  (default '())) | ||||
|   (activate      service-activate                 ; gexp | ||||
|                  (default #f))) | ||||
| 
 | ||||
| ;;; services.scm ends here. | ||||
|  |  | |||
							
								
								
									
										108
									
								
								gnu/services/avahi.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								gnu/services/avahi.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 services avahi) | ||||
|   #:use-module (gnu services) | ||||
|   #:use-module (gnu system shadow) | ||||
|   #:use-module (gnu packages avahi) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix gexp) | ||||
|   #:export (avahi-service)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This module provides service definitions for the Avahi | ||||
| ;;; "zero-configuration" tool set. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define* (configuration-file #:key host-name publish? | ||||
|                              ipv4? ipv6? wide-area? domains-to-browse) | ||||
|   "Return an avahi-daemon configuration file." | ||||
|   (define (bool value) | ||||
|     (if value "yes\n" "no\n")) | ||||
| 
 | ||||
|   (text-file "avahi-daemon.conf" | ||||
|              (string-append | ||||
|               "[server]\n" | ||||
|               (if host-name | ||||
|                   (string-append "host-name=" host-name "\n") | ||||
|                   "") | ||||
| 
 | ||||
|               "browse-domains=" (string-join domains-to-browse) | ||||
|               "\n" | ||||
|               "use-ipv4=" (bool ipv4?) | ||||
|               "use-ipv6=" (bool ipv6?) | ||||
|               "[wide-area]\n" | ||||
|               "enable-wide-area=" (bool wide-area?) | ||||
|               "[publish]\n" | ||||
|               "disable-publishing=" (bool (not publish?))))) | ||||
| 
 | ||||
| (define* (avahi-service #:key (avahi avahi) | ||||
|                         host-name | ||||
|                         (publish? #t) | ||||
|                         (ipv4? #t) (ipv6? #t) | ||||
|                         wide-area? | ||||
|                         (domains-to-browse '())) | ||||
|   "Return a service that runs @command{avahi-daemon}, a system-wide | ||||
| mDNS/DNS-SD responder that allows for service discovery and | ||||
| \"zero-configuration\" host name lookups. | ||||
| 
 | ||||
| If @var{host-name} is different from @code{#f}, use that as the host name to | ||||
| publish for this machine; otherwise, use the machine's actual host name. | ||||
| 
 | ||||
| When @var{publish?} is true, publishing of host names and services is allowed; | ||||
| in particular, avahi-daemon will publish the machine's host name and IP | ||||
| address via mDNS on the local network. | ||||
| 
 | ||||
| When @var{wide-area?} is true, DNS-SD over unicast DNS is enabled. | ||||
| 
 | ||||
| Boolean values @var{ipv4?} and @var{ipv6?} determine whether to use IPv4/IPv6 | ||||
| sockets." | ||||
|   (mlet %store-monad ((config (configuration-file #:host-name host-name | ||||
|                                                   #:publish? publish? | ||||
|                                                   #:ipv4? ipv4? | ||||
|                                                   #:ipv6? ipv6? | ||||
|                                                   #:wide-area? wide-area? | ||||
|                                                   #:domains-to-browse | ||||
|                                                   domains-to-browse))) | ||||
|     (return | ||||
|      (service | ||||
|       (documentation "Run the Avahi mDNS/DNS-SD responder.") | ||||
|       (provision '(avahi-daemon)) | ||||
|       (requirement '(dbus-system networking)) | ||||
| 
 | ||||
|       (start #~(make-forkexec-constructor | ||||
|                 (string-append #$avahi "/sbin/avahi-daemon") | ||||
|                 "--syslog" "-f" #$config)) | ||||
|       (stop #~(make-kill-destructor)) | ||||
|       (activate #~(begin | ||||
|                     (use-modules (guix build utils)) | ||||
|                     (mkdir-p "/var/run/avahi-daemon"))) | ||||
| 
 | ||||
|       (user-groups (list (user-group | ||||
|                           (name "avahi")))) | ||||
|       (user-accounts (list (user-account | ||||
|                             (name "avahi") | ||||
|                             (group "avahi") | ||||
|                             (comment "Avahi daemon user") | ||||
|                             (home-directory "/var/empty") | ||||
|                             (shell | ||||
|                              "/run/current-system/profile/sbin/nologin")))))))) | ||||
| 
 | ||||
| ;;; avahi.scm ends here | ||||
|  | @ -24,11 +24,15 @@ | |||
|   #:use-module ((gnu packages base) | ||||
|                 #:select (glibc-final)) | ||||
|   #:use-module (gnu packages package-management) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (ice-9 format) | ||||
|   #:export (host-name-service | ||||
|   #:export (root-file-system-service | ||||
|             file-system-service | ||||
|             user-processes-service | ||||
|             host-name-service | ||||
|             mingetty-service | ||||
|             nscd-service | ||||
|             syslog-service | ||||
|  | @ -42,14 +46,148 @@ | |||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define (root-file-system-service) | ||||
|   "Return a service whose sole purpose is to re-mount read-only the root file | ||||
| system upon shutdown (aka. cleanly \"umounting\" root.) | ||||
| 
 | ||||
| This service must be the root of the service dependency graph so that its | ||||
| 'stop' action is invoked when dmd is the only process left." | ||||
|   (with-monad %store-monad | ||||
|     (return | ||||
|      (service | ||||
|       (documentation "Take care of the root file system.") | ||||
|       (provision '(root-file-system)) | ||||
|       (start #~(const #t)) | ||||
|       (stop #~(lambda _ | ||||
|                 ;; Return #f if successfully stopped. | ||||
|                 (sync) | ||||
| 
 | ||||
|                 (call-with-blocked-asyncs | ||||
|                  (lambda () | ||||
|                    (let ((null (%make-void-port "w"))) | ||||
|                      ;; Close 'dmd.log'. | ||||
|                      (display "closing log\n") | ||||
|                      ;; XXX: Ideally we'd use 'stop-logging', but that one | ||||
|                      ;; doesn't actually close the port as of dmd 0.1. | ||||
|                      (close-port (@@ (dmd comm) log-output-port)) | ||||
|                      (set! (@@ (dmd comm) log-output-port) null) | ||||
| 
 | ||||
|                      ;; Redirect the default output ports.. | ||||
|                      (set-current-output-port null) | ||||
|                      (set-current-error-port null) | ||||
| 
 | ||||
|                      ;; Close /dev/console. | ||||
|                      (for-each close-fdes '(0 1 2)) | ||||
| 
 | ||||
|                      ;; At this point, there are no open files left, so the | ||||
|                      ;; root file system can be re-mounted read-only. | ||||
|                      (mount #f "/" #f | ||||
|                             (logior MS_REMOUNT MS_RDONLY) | ||||
|                             #:update-mtab? #f) | ||||
| 
 | ||||
|                      #f))))) | ||||
|       (respawn? #f))))) | ||||
| 
 | ||||
| (define* (file-system-service device target type | ||||
|                               #:key (check? #t) options) | ||||
|   "Return a service that mounts DEVICE on TARGET as a file system TYPE with | ||||
| OPTIONS.  When CHECK? is true, check the file system before mounting it." | ||||
|   (with-monad %store-monad | ||||
|     (return | ||||
|      (service | ||||
|       (provision (list (symbol-append 'file-system- (string->symbol target)))) | ||||
|       (requirement '(root-file-system)) | ||||
|       (documentation "Check, mount, and unmount the given file system.") | ||||
|       (start #~(lambda args | ||||
|                  #$(if check? | ||||
|                        #~(check-file-system #$device #$type) | ||||
|                        #~#t) | ||||
|                  (mount #$device #$target #$type 0 #$options) | ||||
|                  #t)) | ||||
|       (stop #~(lambda args | ||||
|                 ;; Normally there are no processes left at this point, so | ||||
|                 ;; TARGET can be safely unmounted. | ||||
|                 (umount #$target) | ||||
|                 #f)))))) | ||||
| 
 | ||||
| (define %do-not-kill-file | ||||
|   ;; Name of the file listing PIDs of processes that must survive when halting | ||||
|   ;; the system.  Typical example is user-space file systems. | ||||
|   "/etc/dmd/do-not-kill") | ||||
| 
 | ||||
| (define* (user-processes-service requirements #:key (grace-delay 2)) | ||||
|   "Return the service that is responsible for terminating all the processes so | ||||
| that the root file system can be re-mounted read-only, just before | ||||
| rebooting/halting.  Processes still running GRACE-DELAY seconds after SIGTERM | ||||
| has been sent are terminated with SIGKILL. | ||||
| 
 | ||||
| The returned service will depend on 'root-file-system' and on all the services | ||||
| listed in REQUIREMENTS. | ||||
| 
 | ||||
| All the services that spawn processes must depend on this one so that they are | ||||
| stopped before 'kill' is called." | ||||
|   (with-monad %store-monad | ||||
|     (return (service | ||||
|              (documentation "When stopped, terminate all user processes.") | ||||
|              (provision '(user-processes)) | ||||
|              (requirement (cons 'root-file-system requirements)) | ||||
|              (start #~(const #t)) | ||||
|              (stop #~(lambda _ | ||||
|                        (define (kill-except omit signal) | ||||
|                          ;; Kill all the processes with SIGNAL except those | ||||
|                          ;; listed in OMIT and the current process. | ||||
|                          (let ((omit (cons (getpid) omit))) | ||||
|                            (for-each (lambda (pid) | ||||
|                                        (unless (memv pid omit) | ||||
|                                          (false-if-exception | ||||
|                                           (kill pid signal)))) | ||||
|                                      (processes)))) | ||||
| 
 | ||||
|                        (define omitted-pids | ||||
|                          ;; List of PIDs that must not be killed. | ||||
|                          (if (file-exists? #$%do-not-kill-file) | ||||
|                              (map string->number | ||||
|                                   (call-with-input-file #$%do-not-kill-file | ||||
|                                     (compose string-tokenize | ||||
|                                              (@ (ice-9 rdelim) read-string)))) | ||||
|                              '())) | ||||
| 
 | ||||
|                        ;; When this happens, all the processes have been | ||||
|                        ;; killed, including 'deco', so DMD-OUTPUT-PORT and | ||||
|                        ;; thus CURRENT-OUTPUT-PORT are dangling. | ||||
|                        (call-with-output-file "/dev/console" | ||||
|                          (lambda (port) | ||||
|                            (display "sending all processes the TERM signal\n" | ||||
|                                     port))) | ||||
| 
 | ||||
|                        (if (null? omitted-pids) | ||||
|                            (begin | ||||
|                              ;; Easy: terminate all of them. | ||||
|                              (kill -1 SIGTERM) | ||||
|                              (sleep #$grace-delay) | ||||
|                              (kill -1 SIGKILL)) | ||||
|                            (begin | ||||
|                              ;; Kill them all except OMITTED-PIDS.  XXX: We | ||||
|                              ;; would like to (kill -1 SIGSTOP) to get a fixed | ||||
|                              ;; list of processes, like 'killall5' does, but | ||||
|                              ;; that seems unreliable. | ||||
|                              (kill-except omitted-pids SIGTERM) | ||||
|                              (sleep #$grace-delay) | ||||
|                              (kill-except omitted-pids SIGKILL) | ||||
|                              (delete-file #$%do-not-kill-file))) | ||||
| 
 | ||||
|                        (display "all processes have been terminated\n") | ||||
|                        #f)) | ||||
|              (respawn? #f))))) | ||||
| 
 | ||||
| (define (host-name-service name) | ||||
|   "Return a service that sets the host name to NAME." | ||||
|   (with-monad %store-monad | ||||
|     (return (service | ||||
|              (documentation "Initialize the machine's host name.") | ||||
|              (provision '(host-name)) | ||||
|              (start `(lambda _ | ||||
|                        (sethostname ,name))) | ||||
|              (start #~(lambda _ | ||||
|                         (sethostname #$name))) | ||||
|              (respawn? #f))))) | ||||
| 
 | ||||
| (define* (mingetty-service tty | ||||
|  | @ -57,8 +195,7 @@ | |||
|                            (motd (text-file "motd" "Welcome.\n")) | ||||
|                            (allow-empty-passwords? #t)) | ||||
|   "Return a service to run mingetty on TTY." | ||||
|   (mlet %store-monad ((mingetty-bin (package-file mingetty "sbin/mingetty")) | ||||
|                       (motd         motd)) | ||||
|   (mlet %store-monad ((motd motd)) | ||||
|     (return | ||||
|      (service | ||||
|       (documentation (string-append "Run mingetty on " tty ".")) | ||||
|  | @ -66,12 +203,12 @@ | |||
| 
 | ||||
|       ;; Since the login prompt shows the host name, wait for the 'host-name' | ||||
|       ;; service to be done. | ||||
|       (requirement '(host-name)) | ||||
|       (requirement '(user-processes host-name)) | ||||
| 
 | ||||
|       (start  `(make-forkexec-constructor ,mingetty-bin "--noclear" ,tty)) | ||||
|       (stop   `(make-kill-destructor)) | ||||
|       (inputs `(("mingetty" ,mingetty) | ||||
|                 ("motd" ,motd))) | ||||
|       (start  #~(make-forkexec-constructor | ||||
|                  (string-append #$mingetty "/sbin/mingetty") | ||||
|                  "--noclear" #$tty)) | ||||
|       (stop   #~(make-kill-destructor)) | ||||
| 
 | ||||
|       (pam-services | ||||
|        ;; Let 'login' be known to PAM.  All the mingetty services will have | ||||
|  | @ -83,16 +220,23 @@ | |||
| 
 | ||||
| (define* (nscd-service #:key (glibc glibc-final)) | ||||
|   "Return a service that runs libc's name service cache daemon (nscd)." | ||||
|   (mlet %store-monad ((nscd (package-file glibc "sbin/nscd"))) | ||||
|   (with-monad %store-monad | ||||
|     (return (service | ||||
|              (documentation "Run libc's name service cache daemon (nscd).") | ||||
|              (provision '(nscd)) | ||||
|              (start `(make-forkexec-constructor ,nscd "-f" "/dev/null" | ||||
|                                                 "--foreground")) | ||||
|              (stop  `(make-kill-destructor)) | ||||
|              (requirement '(user-processes)) | ||||
| 
 | ||||
|              (respawn? #f) | ||||
|              (inputs `(("glibc" ,glibc))))))) | ||||
|              (activate #~(begin | ||||
|                            (use-modules (guix build utils)) | ||||
|                            (mkdir-p "/var/run/nscd"))) | ||||
| 
 | ||||
|              (start | ||||
|               #~(make-forkexec-constructor (string-append #$glibc "/sbin/nscd") | ||||
|                                            "-f" "/dev/null" | ||||
|                                            "--foreground")) | ||||
|              (stop #~(make-kill-destructor)) | ||||
| 
 | ||||
|              (respawn? #f))))) | ||||
| 
 | ||||
| (define (syslog-service) | ||||
|   "Return a service that runs 'syslogd' with reasonable default settings." | ||||
|  | @ -120,21 +264,22 @@ | |||
| ") | ||||
| 
 | ||||
|   (mlet %store-monad | ||||
|       ((syslog.conf (text-file "syslog.conf" contents)) | ||||
|        (syslogd     (package-file inetutils "libexec/syslogd"))) | ||||
|       ((syslog.conf (text-file "syslog.conf" contents))) | ||||
|     (return | ||||
|      (service | ||||
|       (documentation "Run the syslog daemon (syslogd).") | ||||
|       (provision '(syslogd)) | ||||
|       (start `(make-forkexec-constructor ,syslogd "--no-detach" | ||||
|                                          "--rcfile" ,syslog.conf)) | ||||
|       (stop  `(make-kill-destructor)) | ||||
|       (inputs `(("inetutils" ,inetutils) | ||||
|                 ("syslog.conf" ,syslog.conf))))))) | ||||
|       (requirement '(user-processes)) | ||||
|       (start | ||||
|        #~(make-forkexec-constructor (string-append #$inetutils | ||||
|                                                    "/libexec/syslogd") | ||||
|                                     "--no-detach" | ||||
|                                     "--rcfile" #$syslog.conf)) | ||||
|       (stop #~(make-kill-destructor)))))) | ||||
| 
 | ||||
| (define* (guix-build-accounts count #:key | ||||
|                               (group "guixbuild") | ||||
|                               (first-uid 30001) | ||||
|                               (gid 30000) | ||||
|                               (shadow shadow)) | ||||
|   "Return a list of COUNT user accounts for Guix build users, with UIDs | ||||
| starting at FIRST-UID, and under GID." | ||||
|  | @ -143,34 +288,32 @@ starting at FIRST-UID, and under GID." | |||
|                     (lambda (n) | ||||
|                       (user-account | ||||
|                        (name (format #f "guixbuilder~2,'0d" n)) | ||||
|                        (password "!") | ||||
|                        (uid (+ first-uid n -1)) | ||||
|                        (gid gid) | ||||
|                        (group group) | ||||
|                        (comment (format #f "Guix Build User ~2d" n)) | ||||
|                        (home-directory "/var/empty") | ||||
|                        (shell (package-file shadow "sbin/nologin")) | ||||
|                        (inputs `(("shadow" ,shadow))))) | ||||
|                        (shell #~(string-append #$shadow "/sbin/nologin")))) | ||||
|                     1+ | ||||
|                     1)))) | ||||
| 
 | ||||
| (define* (guix-service #:key (guix guix) (builder-group "guixbuild") | ||||
|                        (build-user-gid 30000) (build-accounts 10)) | ||||
|                        (build-accounts 10)) | ||||
|   "Return a service that runs the build daemon from GUIX, and has | ||||
| BUILD-ACCOUNTS user accounts available under BUILD-USER-GID." | ||||
|   (mlet %store-monad ((daemon   (package-file guix "bin/guix-daemon")) | ||||
|                       (accounts (guix-build-accounts build-accounts | ||||
|                                                      #:gid build-user-gid))) | ||||
|   (mlet %store-monad ((accounts (guix-build-accounts build-accounts | ||||
|                                                      #:group builder-group))) | ||||
|     (return (service | ||||
|              (provision '(guix-daemon)) | ||||
|              (start `(make-forkexec-constructor ,daemon | ||||
|                                                 "--build-users-group" | ||||
|                                                 ,builder-group)) | ||||
|              (stop  `(make-kill-destructor)) | ||||
|              (inputs `(("guix" ,guix))) | ||||
|              (requirement '(user-processes)) | ||||
|              (start | ||||
|               #~(make-forkexec-constructor (string-append #$guix | ||||
|                                                           "/bin/guix-daemon") | ||||
|                                            "--build-users-group" | ||||
|                                            #$builder-group)) | ||||
|              (stop #~(make-kill-destructor)) | ||||
|              (user-accounts accounts) | ||||
|              (user-groups (list (user-group | ||||
|                                  (name builder-group) | ||||
|                                  (id build-user-gid) | ||||
|                                  (members (map user-account-name | ||||
|                                                user-accounts))))))))) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										120
									
								
								gnu/services/dbus.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								gnu/services/dbus.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,120 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 services dbus) | ||||
|   #:use-module (gnu services) | ||||
|   #:use-module (gnu system shadow) | ||||
|   #:use-module (gnu packages glib) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix gexp) | ||||
|   #:export (dbus-service)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This module supports the configuration of the D-Bus message bus | ||||
| ;;; (http://dbus.freedesktop.org/).  D-Bus is an inter-process communication | ||||
| ;;; facility.  Its "system bus" is used to allow system services to | ||||
| ;;; communicate and be notified of system-wide events. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define (dbus-configuration-directory dbus services) | ||||
|   "Return a configuration directory for @var{dbus} that includes the | ||||
| @code{etc/dbus-1/system.d} directories of each package listed in | ||||
| @var{services}." | ||||
|   (define build | ||||
|     #~(begin | ||||
|         (use-modules (sxml simple)) | ||||
| 
 | ||||
|         (define (services->sxml services) | ||||
|           ;; Return the SXML 'includedir' clauses for DIRS. | ||||
|           `(busconfig | ||||
|             ,@(map (lambda (dir) | ||||
|                      `(includedir ,(string-append dir | ||||
|                                                   "/etc/dbus-1/system.d"))) | ||||
|                    services))) | ||||
| 
 | ||||
|         (mkdir #$output) | ||||
|         (copy-file (string-append #$dbus "/etc/dbus-1/system.conf") | ||||
|                    (string-append #$output "/system.conf")) | ||||
| 
 | ||||
|         ;; The default 'system.conf' has an <includedir> clause for | ||||
|         ;; 'system.d', so create it. | ||||
|         (mkdir (string-append #$output "/system.d")) | ||||
| 
 | ||||
|         ;; 'system-local.conf' is automatically included by the default | ||||
|         ;; 'system.conf', so this is where we stuff our own things. | ||||
|         (call-with-output-file (string-append #$output "/system-local.conf") | ||||
|           (lambda (port) | ||||
|             (sxml->xml (services->sxml (list #$@services)) | ||||
|                        port))))) | ||||
| 
 | ||||
|   (gexp->derivation "dbus-configuration" build)) | ||||
| 
 | ||||
| (define* (dbus-service services #:key (dbus dbus)) | ||||
|   "Return a service that runs the system bus, using @var{dbus}, with support | ||||
| for @var{services}. | ||||
| 
 | ||||
| @var{services} must be a list of packages that provide an | ||||
| @file{etc/dbus-1/system.d} directory containing additional D-Bus configuration | ||||
| and policy files.  For example, to allow avahi-daemon to use the system bus, | ||||
| @var{services} must be equal to @code{(list avahi)}." | ||||
|   (mlet %store-monad ((conf (dbus-configuration-directory dbus services))) | ||||
|     (return | ||||
|      (service | ||||
|       (documentation "Run the D-Bus system daemon.") | ||||
|       (provision '(dbus-system)) | ||||
|       (requirement '(user-processes)) | ||||
|       (start #~(make-forkexec-constructor | ||||
|                 (string-append #$dbus "/bin/dbus-daemon") | ||||
|                 "--nofork" | ||||
|                 (string-append "--config-file=" #$conf "/system.conf"))) | ||||
|       (stop #~(make-kill-destructor)) | ||||
|       (user-groups (list (user-group | ||||
|                           (name "messagebus")))) | ||||
|       (user-accounts (list (user-account | ||||
|                             (name "messagebus") | ||||
|                             (group "messagebus") | ||||
|                             (comment "D-Bus system bus user") | ||||
|                             (home-directory "/var/run/dbus") | ||||
|                             (shell | ||||
|                              "/run/current-system/profile/sbin/nologin")))) | ||||
|       (activate #~(begin | ||||
|                     (use-modules (guix build utils)) | ||||
| 
 | ||||
|                     (mkdir-p "/var/run/dbus") | ||||
| 
 | ||||
|                     (let ((user (getpwnam "messagebus"))) | ||||
|                       (chown "/var/run/dbus" | ||||
|                              (passwd:uid user) (passwd:gid user))) | ||||
| 
 | ||||
|                     (unless (file-exists? "/etc/machine-id") | ||||
|                       (format #t "creating /etc/machine-id...~%") | ||||
|                       (let ((prog (string-append #$dbus "/bin/dbus-uuidgen"))) | ||||
|                         ;; XXX: We can't use 'system' because the initrd's | ||||
|                         ;; guile system(3) only works when 'sh' is in $PATH. | ||||
|                         (let ((pid (primitive-fork))) | ||||
|                           (if (zero? pid) | ||||
|                               (call-with-output-file "/etc/machine-id" | ||||
|                                 (lambda (port) | ||||
|                                   (close-fdes 1) | ||||
|                                   (dup2 (port->fdes port) 1) | ||||
|                                   (execl prog))) | ||||
|                               (waitpid pid))))))))))) | ||||
| 
 | ||||
| ;;; dbus.scm ends here | ||||
|  | @ -17,6 +17,7 @@ | |||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu services dmd) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (gnu services) | ||||
|   #:use-module (ice-9 match) | ||||
|  | @ -29,52 +30,45 @@ | |||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define (dmd-configuration-file services etc) | ||||
|   "Return the dmd configuration file for SERVICES, that initializes /etc from | ||||
| ETC (the name of a directory in the store) on startup." | ||||
|   (define config | ||||
|     `(begin | ||||
|        (use-modules (ice-9 ftw)) | ||||
| (define (dmd-configuration-file services) | ||||
|   "Return the dmd configuration file for SERVICES." | ||||
|   (define modules | ||||
|     ;; Extra modules visible to dmd.conf. | ||||
|     '((guix build syscalls) | ||||
|       (guix build linux-initrd) | ||||
|       (guix build utils))) | ||||
| 
 | ||||
|        (register-services | ||||
|         ,@(map (lambda (service) | ||||
|                 `(make <service> | ||||
|                    #:docstring ',(service-documentation service) | ||||
|                    #:provides ',(service-provision service) | ||||
|                    #:requires ',(service-requirement service) | ||||
|                    #:respawn? ',(service-respawn? service) | ||||
|                    #:start ,(service-start service) | ||||
|                    #:stop ,(service-stop service))) | ||||
|                services)) | ||||
|   (mlet %store-monad ((modules  (imported-modules modules)) | ||||
|                       (compiled (compiled-modules modules))) | ||||
|     (define config | ||||
|       #~(begin | ||||
|           (eval-when (expand load eval) | ||||
|             (set! %load-path (cons #$modules %load-path)) | ||||
|             (set! %load-compiled-path | ||||
|                   (cons #$compiled %load-compiled-path))) | ||||
| 
 | ||||
|        ;; /etc is a mixture of static and dynamic settings.  Here is where we | ||||
|        ;; initialize it from the static part. | ||||
|        (format #t "populating /etc from ~a...~%" ,etc) | ||||
|        (let ((rm-f (lambda (f) | ||||
|                      (false-if-exception (delete-file f))))) | ||||
|          (rm-f "/etc/static") | ||||
|          (symlink ,etc "/etc/static") | ||||
|          (for-each (lambda (file) | ||||
|                      ;; TODO: Handle 'shadow' specially so that changed | ||||
|                      ;; password aren't lost. | ||||
|                      (let ((target (string-append "/etc/" file)) | ||||
|                            (source (string-append "/etc/static/" file))) | ||||
|                        (rm-f target) | ||||
|                        (symlink source target))) | ||||
|                    (scandir ,etc | ||||
|                             (lambda (file) | ||||
|                               (not (member file '("." "..")))))) | ||||
|           (use-modules (ice-9 ftw) | ||||
|                        (guix build syscalls) | ||||
|                        ((guix build linux-initrd) | ||||
|                         #:select (check-file-system))) | ||||
| 
 | ||||
|          ;; Prevent ETC from being GC'd. | ||||
|          (rm-f "/var/guix/gcroots/etc-directory") | ||||
|          (symlink ,etc "/var/guix/gcroots/etc-directory")) | ||||
|           (register-services | ||||
|            #$@(map (lambda (service) | ||||
|                      #~(make <service> | ||||
|                          #:docstring '#$(service-documentation service) | ||||
|                          #:provides '#$(service-provision service) | ||||
|                          #:requires '#$(service-requirement service) | ||||
|                          #:respawn? '#$(service-respawn? service) | ||||
|                          #:start #$(service-start service) | ||||
|                          #:stop #$(service-stop service))) | ||||
|                    services)) | ||||
| 
 | ||||
|        ;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it. | ||||
|        (setenv "PATH" "/run/current-system/bin") | ||||
|           ;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it. | ||||
|           (setenv "PATH" "/run/current-system/profile/bin") | ||||
| 
 | ||||
|        (format #t "starting services...~%") | ||||
|        (for-each start ',(append-map service-provision services)))) | ||||
|           (format #t "starting services...~%") | ||||
|           (for-each start '#$(append-map service-provision services)))) | ||||
| 
 | ||||
|   (text-file "dmd.conf" (object->string config))) | ||||
|     (gexp->file "dmd.conf" config))) | ||||
| 
 | ||||
| ;;; dmd.scm ends here | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ | |||
|   #:use-module (gnu services) | ||||
|   #:use-module (gnu packages admin) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix monads) | ||||
|   #:export (static-networking-service)) | ||||
| 
 | ||||
|  | @ -41,40 +42,41 @@ true, it must be a string specifying the default network gateway." | |||
|   ;; TODO: Eventually we should do this using Guile's networking procedures, | ||||
|   ;; like 'configure-qemu-networking' does, but the patch that does this is | ||||
|   ;; not yet in stock Guile. | ||||
|   (mlet %store-monad ((ifconfig (package-file inetutils "bin/ifconfig")) | ||||
|                       (route    (package-file net-tools "sbin/route"))) | ||||
|   (with-monad %store-monad | ||||
|     (return | ||||
|      (service | ||||
|       (documentation | ||||
|        (string-append "Set up networking on the '" interface | ||||
|                       "' interface using a static IP address.")) | ||||
|       (provision '(networking)) | ||||
|       (start `(lambda _ | ||||
|                 ;; Return #t if successfully started. | ||||
|                 (and (zero? (system* ,ifconfig ,interface ,ip "up")) | ||||
|                      ,(if gateway | ||||
|                           `(zero? (system* ,route "add" "-net" "default" | ||||
|                                            "gw" ,gateway)) | ||||
|                           #t) | ||||
|                      ,(if (pair? name-servers) | ||||
|                           `(call-with-output-file "/etc/resolv.conf" | ||||
|                              (lambda (port) | ||||
|                                (display | ||||
|                                 "# Generated by 'static-networking-service'.\n" | ||||
|                                 port) | ||||
|                                (for-each (lambda (server) | ||||
|                                            (format port "nameserver ~a~%" | ||||
|                                                    server)) | ||||
|                                          ',name-servers))) | ||||
|                           #t)))) | ||||
|       (stop  `(lambda _ | ||||
|       (start #~(lambda _ | ||||
|                  ;; Return #t if successfully started. | ||||
|                  (and (zero? (system* (string-append #$inetutils | ||||
|                                                      "/bin/ifconfig") | ||||
|                                       #$interface #$ip "up")) | ||||
|                       #$(if gateway | ||||
|                             #~(zero? (system* (string-append #$net-tools | ||||
|                                                              "/sbin/route") | ||||
|                                               "add" "-net" "default" | ||||
|                                               "gw" #$gateway)) | ||||
|                             #t) | ||||
|                       #$(if (pair? name-servers) | ||||
|                             #~(call-with-output-file "/etc/resolv.conf" | ||||
|                                 (lambda (port) | ||||
|                                   (display | ||||
|                                    "# Generated by 'static-networking-service'.\n" | ||||
|                                    port) | ||||
|                                   (for-each (lambda (server) | ||||
|                                               (format port "nameserver ~a~%" | ||||
|                                                       server)) | ||||
|                                             '#$name-servers))) | ||||
|                             #t)))) | ||||
|       (stop #~(lambda _ | ||||
|                 ;; Return #f is successfully stopped. | ||||
|                 (not (and (system* ,ifconfig ,interface "down") | ||||
|                           (system* ,route "del" "-net" "default"))))) | ||||
|       (respawn? #f) | ||||
|       (inputs `(("inetutils" ,inetutils) | ||||
|                 ,@(if gateway | ||||
|                       `(("net-tools" ,net-tools)) | ||||
|                       '()))))))) | ||||
|                 (not (and (system* (string-append #$inetutils "/bin/ifconfig") | ||||
|                                    #$interface "down") | ||||
|                           (system* (string-append #$net-tools "/sbin/route") | ||||
|                                    "del" "-net" "default"))))) | ||||
|       (respawn? #f))))) | ||||
| 
 | ||||
| ;;; networking.scm ends here | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ | |||
|   #:use-module (gnu packages gnustep) | ||||
|   #:use-module (gnu packages admin) | ||||
|   #:use-module (gnu packages bash) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix derivations) | ||||
|   #:export (xorg-start-command | ||||
|  | @ -86,77 +87,42 @@ Section \"Screen\" | |||
|   Device \"Device-vesa\" | ||||
| EndSection")) | ||||
| 
 | ||||
|   (mlet %store-monad ((guile-bin   (package-file guile "bin/guile")) | ||||
|                       (xorg-bin    (package-file xorg-server "bin/X")) | ||||
|                       (dri         (package-file mesa "lib/dri")) | ||||
|                       (xkbcomp-bin (package-file xkbcomp "bin")) | ||||
|                       (xkb-dir     (package-file xkeyboard-config | ||||
|                                                  "share/X11/xkb")) | ||||
|                       (config      (xserver.conf))) | ||||
|     (define builder | ||||
|   (mlet %store-monad ((config (xserver.conf))) | ||||
|     (define script | ||||
|       ;; Write a small wrapper around the X server. | ||||
|       `(let ((out (assoc-ref %outputs "out"))) | ||||
|          (call-with-output-file out | ||||
|            (lambda (port) | ||||
|              (format port "#!~a --no-auto-compile~%!#~%" ,guile-bin) | ||||
|              (write '(begin | ||||
|                        (setenv "XORG_DRI_DRIVER_PATH" ,dri) | ||||
|                        (setenv "XKB_BINDIR" ,xkbcomp-bin) | ||||
|       #~(begin | ||||
|           (setenv "XORG_DRI_DRIVER_PATH" (string-append #$mesa "/lib/dri")) | ||||
|           (setenv "XKB_BINDIR" (string-append #$xkbcomp "/bin")) | ||||
| 
 | ||||
|                        (apply execl | ||||
|           (apply execl (string-append #$xorg-server "/bin/X") | ||||
|                  "-ac" "-logverbose" "-verbose" | ||||
|                  "-xkbdir" (string-append #$xkeyboard-config "/share/X11/xkb") | ||||
|                  "-config" #$config | ||||
|                  "-nolisten" "tcp" "-terminate" | ||||
| 
 | ||||
|                               ,xorg-bin "-ac" "-logverbose" "-verbose" | ||||
|                               "-xkbdir" ,xkb-dir | ||||
|                               "-config" ,(derivation->output-path config) | ||||
|                               "-nolisten" "tcp" "-terminate" | ||||
|                  ;; Note: SLiM and other display managers add the | ||||
|                  ;; '-auth' flag by themselves. | ||||
|                  (cdr (command-line))))) | ||||
| 
 | ||||
|                               ;; Note: SLiM and other display managers add the | ||||
|                               ;; '-auth' flag by themselves. | ||||
|                               (cdr (command-line)))) | ||||
|                     port))) | ||||
|          (chmod out #o555) | ||||
|          #t)) | ||||
| 
 | ||||
|     (mlet %store-monad ((inputs (lower-inputs | ||||
|                                  `(("xorg" ,xorg-server) | ||||
|                                    ("xkbcomp" ,xkbcomp) | ||||
|                                    ("xkeyboard-config" ,xkeyboard-config) | ||||
|                                    ("mesa" ,mesa) | ||||
|                                    ("guile" ,guile) | ||||
|                                    ("xorg.conf" ,config))))) | ||||
|       (derivation-expression "start-xorg" builder | ||||
|                              #:inputs inputs)))) | ||||
|     (gexp->script "start-xorg" script))) | ||||
| 
 | ||||
| (define* (xinitrc #:key | ||||
|                   (guile guile-final) | ||||
|                   (ratpoison ratpoison) | ||||
|                   (windowmaker windowmaker)) | ||||
|   "Return a system-wide xinitrc script that starts the specified X session." | ||||
|   (mlet %store-monad ((guile-bin     (package-file guile "bin/guile")) | ||||
|                       (ratpoison-bin (package-file ratpoison "bin/ratpoison")) | ||||
|                       (wmaker-bin    (package-file windowmaker "bin/wmaker")) | ||||
|                       (inputs        (lower-inputs | ||||
|                                       `(("raptoison" ,ratpoison) | ||||
|                                         ("wmaker" ,windowmaker))))) | ||||
|     (define builder | ||||
|       `(let ((out (assoc-ref %outputs "out"))) | ||||
|          (call-with-output-file out | ||||
|            (lambda (port) | ||||
|              (format port "#!~a --no-auto-compile~%!#~%" ,guile-bin) | ||||
|              (write '(begin | ||||
|                        (use-modules (ice-9 match)) | ||||
|   (define builder | ||||
|     #~(begin | ||||
|         (use-modules (ice-9 match)) | ||||
| 
 | ||||
|                        ;; TODO: Check for ~/.xsession. | ||||
|                        (match (command-line) | ||||
|                          ((_ "ratpoison") | ||||
|                           (execl ,ratpoison-bin)) | ||||
|                          (_ | ||||
|                           (execl ,wmaker-bin)))) | ||||
|                     port))) | ||||
|          (chmod out #o555) | ||||
|          #t)) | ||||
|         ;; TODO: Check for ~/.xsession. | ||||
|         (match (command-line) | ||||
|           ((_ "ratpoison") | ||||
|            (execl (string-append #$ratpoison "/bin/ratpoison"))) | ||||
|           (_ | ||||
|            (execl (string-append #$windowmaker "/bin/wmaker")))))) | ||||
| 
 | ||||
|     (derivation-expression "xinitrc" builder #:inputs inputs))) | ||||
|   (gexp->script "xinitrc" builder)) | ||||
| 
 | ||||
| (define* (slim-service #:key (slim slim) | ||||
|                        (allow-empty-passwords? #t) auto-login? | ||||
|  | @ -173,7 +139,7 @@ When AUTO-LOGIN? is true, log in automatically as DEFAULT-USER." | |||
|     (mlet %store-monad ((startx  (or startx (xorg-start-command))) | ||||
|                         (xinitrc (xinitrc))) | ||||
|       (text-file* "slim.cfg"  " | ||||
| default_path /run/current-system/bin | ||||
| default_path /run/current-system/profile/bin | ||||
| default_xserver " startx " | ||||
| xserver_arguments :0 vt7 | ||||
| xauth_path " xauth "/bin/xauth | ||||
|  | @ -181,7 +147,7 @@ authfile /var/run/slim.auth | |||
| 
 | ||||
| # The login command.  '%session' is replaced by the chosen session name, one | ||||
| # of the names specified in the 'sessions' setting: 'wmaker', 'xfce', etc. | ||||
| login_cmd  exec " xinitrc "%session | ||||
| login_cmd  exec " xinitrc " %session | ||||
| sessions   wmaker,ratpoison | ||||
| 
 | ||||
| halt_cmd " dmd "/sbin/halt | ||||
|  | @ -190,25 +156,19 @@ reboot_cmd " dmd "/sbin/reboot | |||
|       (string-append "auto_login yes\ndefault_user " default-user) | ||||
|       "")))) | ||||
| 
 | ||||
|   (mlet %store-monad ((slim-bin (package-file slim "bin/slim")) | ||||
|                       (bash-bin (package-file bash "bin/bash")) | ||||
|                       (slim.cfg (slim.cfg))) | ||||
|   (mlet %store-monad ((slim.cfg (slim.cfg))) | ||||
|     (return | ||||
|      (service | ||||
|       (documentation "Xorg display server") | ||||
|       (provision '(xorg-server)) | ||||
|       (requirement '(host-name)) | ||||
|       (requirement '(user-processes host-name)) | ||||
|       (start | ||||
|        ;; XXX: Work around the inability to specify env. vars. directly. | ||||
|        `(make-forkexec-constructor | ||||
|          ,bash-bin "-c" | ||||
|          ,(string-append "SLIM_CFGFILE=" (derivation->output-path slim.cfg) | ||||
|                          " " slim-bin | ||||
|                          " -nodaemon"))) | ||||
|       (stop  `(make-kill-destructor)) | ||||
|       (inputs `(("slim" ,slim) | ||||
|                 ("slim.cfg" ,slim.cfg) | ||||
|                 ("bash" ,bash))) | ||||
|        #~(make-forkexec-constructor | ||||
|           (string-append #$bash "/bin/sh") "-c" | ||||
|           (string-append "SLIM_CFGFILE=" #$slim.cfg | ||||
|                          " " #$slim "/bin/slim" " -nodaemon"))) | ||||
|       (stop #~(make-kill-destructor)) | ||||
|       (respawn? #t) | ||||
|       (pam-services | ||||
|        ;; Tell PAM about 'slim'. | ||||
|  |  | |||
							
								
								
									
										535
									
								
								gnu/system.scm
									
										
									
									
									
								
							
							
						
						
									
										535
									
								
								gnu/system.scm
									
										
									
									
									
								
							|  | @ -19,6 +19,7 @@ | |||
| (define-module (gnu system) | ||||
|   #:use-module (guix store) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix derivations) | ||||
|  | @ -33,14 +34,17 @@ | |||
|   #:use-module (gnu system shadow) | ||||
|   #:use-module (gnu system linux) | ||||
|   #:use-module (gnu system linux-initrd) | ||||
|   #:use-module (gnu system file-systems) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:export (operating-system | ||||
|             operating-system? | ||||
| 
 | ||||
|             operating-system-bootloader | ||||
|             operating-system-services | ||||
|             operating-system-user-services | ||||
|             operating-system-packages | ||||
|             operating-system-bootloader-entries | ||||
|             operating-system-host-name | ||||
|             operating-system-kernel | ||||
|             operating-system-initrd | ||||
|  | @ -49,10 +53,11 @@ | |||
|             operating-system-packages | ||||
|             operating-system-timezone | ||||
|             operating-system-locale | ||||
|             operating-system-services | ||||
|             operating-system-file-systems | ||||
| 
 | ||||
|             operating-system-profile-directory | ||||
|             operating-system-derivation)) | ||||
|             operating-system-derivation | ||||
|             operating-system-profile | ||||
|             operating-system-grub.cfg)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -67,12 +72,10 @@ | |||
|   operating-system? | ||||
|   (kernel operating-system-kernel                 ; package | ||||
|           (default linux-libre)) | ||||
|   (bootloader operating-system-bootloader         ; package | ||||
|               (default grub)) | ||||
|   (bootloader-entries operating-system-bootloader-entries ; list | ||||
|                       (default '())) | ||||
|   (initrd operating-system-initrd                 ; monadic derivation | ||||
|           (default (gnu-system-initrd))) | ||||
|   (bootloader operating-system-bootloader)        ; <grub-configuration> | ||||
| 
 | ||||
|   (initrd operating-system-initrd                 ; (list fs) -> M derivation | ||||
|           (default qemu-initrd)) | ||||
| 
 | ||||
|   (host-name operating-system-host-name)          ; string | ||||
| 
 | ||||
|  | @ -84,11 +87,10 @@ | |||
|   (groups operating-system-groups                 ; list of user groups | ||||
|           (default (list (user-group | ||||
|                           (name "root") | ||||
|                           (id 0)) | ||||
|                          (user-group | ||||
|                           (name "users") | ||||
|                           (id 100) | ||||
|                           (members '("guest")))))) | ||||
|                           (id 0))))) | ||||
| 
 | ||||
|   (skeletons operating-system-skeletons           ; list of name/monadic value | ||||
|              (default (default-skeletons))) | ||||
| 
 | ||||
|   (packages operating-system-packages             ; list of (PACKAGE OUTPUT...) | ||||
|             (default (list coreutils              ; or just PACKAGE | ||||
|  | @ -104,9 +106,16 @@ | |||
|   (timezone operating-system-timezone)            ; string | ||||
|   (locale   operating-system-locale)              ; string | ||||
| 
 | ||||
|   (services operating-system-services             ; list of monadic services | ||||
|             (default %base-services))) | ||||
|   (services operating-system-user-services        ; list of monadic services | ||||
|             (default %base-services)) | ||||
| 
 | ||||
|   (pam-services operating-system-pam-services     ; list of PAM services | ||||
|                 (default (base-pam-services))) | ||||
|   (setuid-programs operating-system-setuid-programs | ||||
|                    (default %setuid-programs))    ; list of string-valued gexps | ||||
| 
 | ||||
|   (sudoers operating-system-sudoers               ; /etc/sudoers contents | ||||
|            (default %sudoers-specification))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
|  | @ -119,122 +128,104 @@ | |||
|   "Return a derivation that builds the union of INPUTS.  INPUTS is a list of | ||||
| input tuples." | ||||
|   (define builder | ||||
|     '(begin | ||||
|        (use-modules (guix build union)) | ||||
|     #~(begin | ||||
|         (use-modules (guix build union)) | ||||
| 
 | ||||
|        (setvbuf (current-output-port) _IOLBF) | ||||
|        (setvbuf (current-error-port) _IOLBF) | ||||
|         (define inputs '#$inputs) | ||||
| 
 | ||||
|        (let ((output (assoc-ref %outputs "out")) | ||||
|              (inputs (map cdr %build-inputs))) | ||||
|          (format #t "building union `~a' with ~a packages...~%" | ||||
|                  output (length inputs)) | ||||
|          (union-build output inputs)))) | ||||
|         (setvbuf (current-output-port) _IOLBF) | ||||
|         (setvbuf (current-error-port) _IOLBF) | ||||
| 
 | ||||
|   (mlet %store-monad | ||||
|       ((inputs (sequence %store-monad | ||||
|                          (map (match-lambda | ||||
|                                ((or ((? package? p)) (? package? p)) | ||||
|                                 (mlet %store-monad | ||||
|                                     ((drv (package->derivation p system))) | ||||
|                                   (return `(,name ,drv)))) | ||||
|                                (((? package? p) output) | ||||
|                                 (mlet %store-monad | ||||
|                                     ((drv (package->derivation p system))) | ||||
|                                   (return `(,name ,drv ,output)))) | ||||
|                                (x | ||||
|                                 (return x))) | ||||
|                               inputs)))) | ||||
|     (derivation-expression name builder | ||||
|                            #:system system | ||||
|                            #:inputs inputs | ||||
|                            #:modules '((guix build union)) | ||||
|                            #:guile-for-build guile | ||||
|                            #:local-build? #t))) | ||||
|         (format #t "building union `~a' with ~a packages...~%" | ||||
|                 #$output (length inputs)) | ||||
|         (union-build #$output inputs))) | ||||
| 
 | ||||
| (define* (file-union files | ||||
|                      #:key (inputs '()) (name "file-union")) | ||||
|   (gexp->derivation name builder | ||||
|                     #:system system | ||||
|                     #:modules '((guix build union)) | ||||
|                     #:guile-for-build guile | ||||
|                     #:local-build? #t)) | ||||
| 
 | ||||
| (define* (file-union name files) | ||||
|   "Return a derivation that builds a directory containing all of FILES.  Each | ||||
| item in FILES must be a list where the first element is the file name to use | ||||
| in the new directory, and the second element is the target file. | ||||
| 
 | ||||
| The subset of FILES corresponding to plain store files is automatically added | ||||
| as an inputs; additional inputs, such as derivations, are taken from INPUTS." | ||||
|   (mlet %store-monad ((inputs (lower-inputs inputs))) | ||||
|     (let* ((outputs (append-map (match-lambda | ||||
|                                  ((_ (? derivation? drv)) | ||||
|                                   (list (derivation->output-path drv))) | ||||
|                                  ((_ (? derivation? drv) sub-drv ...) | ||||
|                                   (map (cut derivation->output-path drv <>) | ||||
|                                        sub-drv)) | ||||
|                                  (_ '())) | ||||
|                                 inputs)) | ||||
|            (inputs   (append inputs | ||||
|                              (filter (match-lambda | ||||
|                                       ((_ file) | ||||
|                                        ;; Elements of FILES that are store | ||||
|                                        ;; files and that do not correspond to | ||||
|                                        ;; the output of INPUTS are considered | ||||
|                                        ;; inputs (still here?). | ||||
|                                        (and (direct-store-path? file) | ||||
|                                             (not (member file outputs))))) | ||||
|                                      files)))) | ||||
|       (derivation-expression name | ||||
|                              `(let ((out (assoc-ref %outputs "out"))) | ||||
|                                 (mkdir out) | ||||
|                                 (chdir out) | ||||
|                                 ,@(map (match-lambda | ||||
|                                         ((name target) | ||||
|                                          `(symlink ,target ,name))) | ||||
|                                        files)) | ||||
| 
 | ||||
|                              #:inputs inputs | ||||
|                              #:local-build? #t)))) | ||||
| 
 | ||||
| (define (links inputs) | ||||
|   "Return a directory with symbolic links to all of INPUTS.  This is | ||||
| essentially useful when one wants to keep references to all of INPUTS, be they | ||||
| directories or regular files." | ||||
| in the new directory, and the second element is a gexp denoting the target | ||||
| file." | ||||
|   (define builder | ||||
|     '(begin | ||||
|        (use-modules (srfi srfi-1)) | ||||
|     #~(begin | ||||
|         (mkdir #$output) | ||||
|         (chdir #$output) | ||||
|         #$@(map (match-lambda | ||||
|                  ((target source) | ||||
|                   #~(symlink #$source #$target))) | ||||
|                 files))) | ||||
| 
 | ||||
|        (let ((out (assoc-ref %outputs "out"))) | ||||
|          (mkdir out) | ||||
|          (chdir out) | ||||
|          (fold (lambda (file number) | ||||
|                  (symlink file (number->string number)) | ||||
|                  (+ 1 number)) | ||||
|                0 | ||||
|                (map cdr %build-inputs)) | ||||
|          #t))) | ||||
|   (gexp->derivation name builder)) | ||||
| 
 | ||||
|   (mlet %store-monad ((inputs (lower-inputs inputs))) | ||||
|     (derivation-expression "links" builder | ||||
|                            #:inputs inputs | ||||
|                            #:local-build? #t))) | ||||
|  | ||||
| ;;; | ||||
| ;;; Services. | ||||
| ;;; | ||||
| 
 | ||||
| (define (other-file-system-services os) | ||||
|   "Return file system services for the file systems of OS that are not marked | ||||
| as 'needed-for-boot'." | ||||
|   (define file-systems | ||||
|     (remove (lambda (fs) | ||||
|               (or (file-system-needed-for-boot? fs) | ||||
|                   (string=? "/" (file-system-mount-point fs)))) | ||||
|             (operating-system-file-systems os))) | ||||
| 
 | ||||
|   (sequence %store-monad | ||||
|             (map (match-lambda | ||||
|                   (($ <file-system> device target type flags opts #f check?) | ||||
|                    (file-system-service device target type | ||||
|                                         #:check? check? | ||||
|                                         #:options opts))) | ||||
|                  file-systems))) | ||||
| 
 | ||||
| (define (essential-services os) | ||||
|   "Return the list of essential services for OS.  These are special services | ||||
| that implement part of what's declared in OS are responsible for low-level | ||||
| bookkeeping." | ||||
|   (mlet* %store-monad ((root-fs   (root-file-system-service)) | ||||
|                        (other-fs  (other-file-system-services os)) | ||||
|                        (procs     (user-processes-service | ||||
|                                    (map (compose first service-provision) | ||||
|                                         other-fs))) | ||||
|                        (host-name (host-name-service | ||||
|                                    (operating-system-host-name os)))) | ||||
|     (return (cons* host-name procs root-fs other-fs)))) | ||||
| 
 | ||||
| (define (operating-system-services os) | ||||
|   "Return all the services of OS, including \"internal\" services that do not | ||||
| explicitly appear in OS." | ||||
|   (mlet %store-monad | ||||
|       ((user      (sequence %store-monad (operating-system-user-services os))) | ||||
|        (essential (essential-services os))) | ||||
|     (return (append essential user)))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; /etc. | ||||
| ;;; | ||||
| 
 | ||||
| (define* (etc-directory #:key | ||||
|                         (locale "C") (timezone "Europe/Paris") | ||||
|                         (accounts '()) | ||||
|                         (groups '()) | ||||
|                         (skeletons '()) | ||||
|                         (pam-services '()) | ||||
|                         (profile "/var/run/current-system/profile")) | ||||
|                         (profile "/run/current-system/profile") | ||||
|                         (sudoers "")) | ||||
|   "Return a derivation that builds the static part of the /etc directory." | ||||
|   (mlet* %store-monad | ||||
|       ((services   (package-file net-base "etc/services")) | ||||
|        (protocols  (package-file net-base "etc/protocols")) | ||||
|        (rpc        (package-file net-base "etc/rpc")) | ||||
|        (passwd     (passwd-file accounts)) | ||||
|        (shadow     (passwd-file accounts #:shadow? #t)) | ||||
|        (group      (group-file groups)) | ||||
|        (pam.d      (pam-services->directory pam-services)) | ||||
|       ((pam.d      (pam-services->directory pam-services)) | ||||
|        (sudoers    (text-file "sudoers" sudoers)) | ||||
|        (login.defs (text-file "login.defs" "# Empty for now.\n")) | ||||
|        (shells     (text-file "shells"            ; used by xterm and others | ||||
|                               "\ | ||||
| /bin/sh | ||||
| /run/current-system/bin/sh | ||||
| /run/current-system/bin/bash\n")) | ||||
| /run/current-system/profile/bin/sh | ||||
| /run/current-system/profile/bin/bash\n")) | ||||
|        (issue      (text-file "issue" " | ||||
| This is an alpha preview of the GNU system.  Welcome. | ||||
| 
 | ||||
|  | @ -253,119 +244,259 @@ export LC_ALL=\"" locale "\" | |||
| export TZ=\"" timezone "\" | ||||
| export TZDIR=\"" tzdata "/share/zoneinfo\" | ||||
| 
 | ||||
| export PATH=$HOME/.guix-profile/bin:" profile "/bin:" profile "/sbin | ||||
| export PATH=/run/setuid-programs:/run/current-system/profile/sbin | ||||
| export PATH=$HOME/.guix-profile/bin:/run/current-system/profile/bin:$PATH | ||||
| export CPATH=$HOME/.guix-profile/include:" profile "/include | ||||
| export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib | ||||
| alias ls='ls -p --color' | ||||
| alias ll='ls -l' | ||||
| ")) | ||||
|        (skel      (skeleton-directory skeletons))) | ||||
|     (file-union "etc" | ||||
|                 `(("services" ,#~(string-append #$net-base "/etc/services")) | ||||
|                   ("protocols" ,#~(string-append #$net-base "/etc/protocols")) | ||||
|                   ("rpc" ,#~(string-append #$net-base "/etc/rpc")) | ||||
|                   ("pam.d" ,#~#$pam.d) | ||||
|                   ("login.defs" ,#~#$login.defs) | ||||
|                   ("issue" ,#~#$issue) | ||||
|                   ("skel" ,#~#$skel) | ||||
|                   ("shells" ,#~#$shells) | ||||
|                   ("profile" ,#~#$bashrc) | ||||
|                   ("localtime" ,#~(string-append #$tzdata "/share/zoneinfo/" | ||||
|                                                  #$timezone)) | ||||
|                   ("sudoers" ,#~#$sudoers))))) | ||||
| 
 | ||||
|        (tz-file  (package-file tzdata | ||||
|                                (string-append "share/zoneinfo/" timezone))) | ||||
|        (files -> `(("services" ,services) | ||||
|                    ("protocols" ,protocols) | ||||
|                    ("rpc" ,rpc) | ||||
|                    ("pam.d" ,(derivation->output-path pam.d)) | ||||
|                    ("login.defs" ,login.defs) | ||||
|                    ("issue" ,issue) | ||||
|                    ("shells" ,shells) | ||||
|                    ("profile" ,(derivation->output-path bashrc)) | ||||
|                    ("localtime" ,tz-file) | ||||
|                    ("passwd" ,passwd) | ||||
|                    ("shadow" ,shadow) | ||||
|                    ("group" ,group)))) | ||||
|     (file-union files | ||||
|                 #:inputs `(("net" ,net-base) | ||||
|                            ("pam.d" ,pam.d) | ||||
|                            ("bashrc" ,bashrc) | ||||
|                            ("tzdata" ,tzdata)) | ||||
|                 #:name "etc"))) | ||||
| 
 | ||||
| (define (operating-system-profile-derivation os) | ||||
| (define (operating-system-profile os) | ||||
|   "Return a derivation that builds the default profile of OS." | ||||
|   ;; TODO: Replace with a real profile with a manifest. | ||||
|   (union (operating-system-packages os) | ||||
|          #:name "default-profile")) | ||||
| 
 | ||||
| (define (operating-system-profile-directory os) | ||||
|   "Return the directory name of the default profile of OS." | ||||
|   (mlet %store-monad ((drv (operating-system-profile-derivation os))) | ||||
|     (return (derivation->output-path drv)))) | ||||
| (define %root-account | ||||
|   ;; Default root account. | ||||
|   (user-account | ||||
|    (name "root") | ||||
|    (password "") | ||||
|    (uid 0) (group "root") | ||||
|    (comment "System administrator") | ||||
|    (home-directory "/root"))) | ||||
| 
 | ||||
| (define (operating-system-derivation os) | ||||
|   "Return a derivation that builds OS." | ||||
| (define (operating-system-accounts os) | ||||
|   "Return the user accounts for OS, including an obligatory 'root' account." | ||||
|   (define users | ||||
|     ;; Make sure there's a root account. | ||||
|     (if (find (lambda (user) | ||||
|                 (and=> (user-account-uid user) zero?)) | ||||
|               (operating-system-users os)) | ||||
|         (operating-system-users os) | ||||
|         (cons %root-account (operating-system-users os)))) | ||||
| 
 | ||||
|   (mlet %store-monad ((services (operating-system-services os))) | ||||
|     (return (append users | ||||
|                     (append-map service-user-accounts services))))) | ||||
| 
 | ||||
| (define (operating-system-etc-directory os) | ||||
|   "Return that static part of the /etc directory of OS." | ||||
|   (mlet* %store-monad | ||||
|       ((services (sequence %store-monad | ||||
|                            (cons (host-name-service | ||||
|                                   (operating-system-host-name os)) | ||||
|                                  (operating-system-services os)))) | ||||
|       ((services     (operating-system-services os)) | ||||
|        (pam-services -> | ||||
|                      ;; Services known to PAM. | ||||
|                      (delete-duplicates | ||||
|                       (cons %pam-other-services | ||||
|                             (append-map service-pam-services services)))) | ||||
|                       (append (operating-system-pam-services os) | ||||
|                               (append-map service-pam-services services)))) | ||||
|        (profile-drv (operating-system-profile os)) | ||||
|        (skeletons   (operating-system-skeletons os))) | ||||
|    (etc-directory #:pam-services pam-services | ||||
|                   #:skeletons skeletons | ||||
|                   #:locale (operating-system-locale os) | ||||
|                   #:timezone (operating-system-timezone os) | ||||
|                   #:sudoers (operating-system-sudoers os) | ||||
|                   #:profile profile-drv))) | ||||
| 
 | ||||
|        (bash-file (package-file bash "bin/bash")) | ||||
|        (dmd-file  (package-file (@ (gnu packages admin) dmd) "bin/dmd")) | ||||
|        (accounts -> (cons (user-account | ||||
|                             (name "root") | ||||
|                             (password "") | ||||
|                             (uid 0) (gid 0) | ||||
|                             (comment "System administrator") | ||||
|                             (home-directory "/root")) | ||||
|                           (append (operating-system-users os) | ||||
|                                   (append-map service-user-accounts | ||||
|                                               services)))) | ||||
|        (groups   -> (append (operating-system-groups os) | ||||
|                             (append-map service-user-groups services))) | ||||
| (define %setuid-programs | ||||
|   ;; Default set of setuid-root programs. | ||||
|   (let ((shadow (@ (gnu packages admin) shadow))) | ||||
|     (list #~(string-append #$shadow "/bin/passwd") | ||||
|           #~(string-append #$shadow "/bin/su") | ||||
|           #~(string-append #$inetutils "/bin/ping") | ||||
|           #~(string-append #$sudo "/bin/sudo")))) | ||||
| 
 | ||||
|        (profile-drv (operating-system-profile-derivation os)) | ||||
|        (profile ->  (derivation->output-path profile-drv)) | ||||
|        (etc-drv     (etc-directory #:accounts accounts #:groups groups | ||||
|                                    #:pam-services pam-services | ||||
|                                    #:locale (operating-system-locale os) | ||||
|                                    #:timezone (operating-system-timezone os) | ||||
|                                    #:profile profile-drv)) | ||||
|        (etc     ->  (derivation->output-path etc-drv)) | ||||
|        (dmd-conf  (dmd-configuration-file services etc)) | ||||
| (define %sudoers-specification | ||||
|   ;; Default /etc/sudoers contents: 'root' and all members of the 'wheel' | ||||
|   ;; group can do anything.  See | ||||
|   ;; <http://www.sudo.ws/sudo/man/1.8.10/sudoers.man.html>. | ||||
|   ;; TODO: Add a declarative API. | ||||
|   "root ALL=(ALL) ALL | ||||
| %wheel ALL=(ALL) ALL\n") | ||||
| 
 | ||||
| (define (user-group->gexp group) | ||||
|   "Turn GROUP, a <user-group> object, into a list-valued gexp suitable for | ||||
| 'active-groups'." | ||||
|   #~(list #$(user-group-name group) | ||||
|           #$(user-group-password group) | ||||
|           #$(user-group-id group))) | ||||
| 
 | ||||
|        (boot     (text-file "boot" | ||||
|                             (object->string | ||||
|                              `(execl ,dmd-file "dmd" | ||||
|                                      "--config" ,dmd-conf)))) | ||||
|        (kernel  ->  (operating-system-kernel os)) | ||||
|        (kernel-dir  (package-file kernel)) | ||||
|        (initrd      (operating-system-initrd os)) | ||||
|        (initrd-file -> (string-append (derivation->output-path initrd) | ||||
|                                       "/initrd")) | ||||
| (define (user-account->gexp account) | ||||
|   "Turn ACCOUNT, a <user-account> object, into a list-valued gexp suitable for | ||||
| 'activate-users'." | ||||
|   #~`(#$(user-account-name account) | ||||
|       #$(user-account-uid account) | ||||
|       #$(user-account-group account) | ||||
|       #$(user-account-supplementary-groups account) | ||||
|       #$(user-account-comment account) | ||||
|       #$(user-account-home-directory account) | ||||
|       ,#$(user-account-shell account)             ; this one is a gexp | ||||
|       #$(user-account-password account))) | ||||
| 
 | ||||
| (define (operating-system-activation-script os) | ||||
|   "Return the activation script for OS---i.e., the code that \"activates\" the | ||||
| stateful part of OS, including user accounts and groups, special directories, | ||||
| etc." | ||||
|   (define %modules | ||||
|     '((guix build activation) | ||||
|       (guix build utils) | ||||
|       (guix build linux-initrd))) | ||||
| 
 | ||||
|   (define (service-activations services) | ||||
|     ;; Return the activation scripts for SERVICES. | ||||
|     (let ((gexps (filter-map service-activate services))) | ||||
|       (sequence %store-monad (map (cut gexp->file "activate-service.scm" <>) | ||||
|                                   gexps)))) | ||||
| 
 | ||||
|   (mlet* %store-monad ((services (operating-system-services os)) | ||||
|                        (actions  (service-activations services)) | ||||
|                        (etc      (operating-system-etc-directory os)) | ||||
|                        (modules  (imported-modules %modules)) | ||||
|                        (compiled (compiled-modules %modules)) | ||||
|                        (accounts (operating-system-accounts os))) | ||||
|     (define setuid-progs | ||||
|       (operating-system-setuid-programs os)) | ||||
| 
 | ||||
|     (define user-specs | ||||
|       (map user-account->gexp accounts)) | ||||
| 
 | ||||
|     (define groups | ||||
|       (append (operating-system-groups os) | ||||
|               (append-map service-user-groups services))) | ||||
| 
 | ||||
|     (define group-specs | ||||
|       (map user-group->gexp groups)) | ||||
| 
 | ||||
|     (gexp->file "boot" | ||||
|                 #~(begin | ||||
|                     (eval-when (expand load eval) | ||||
|                       ;; Make sure 'use-modules' below succeeds. | ||||
|                       (set! %load-path (cons #$modules %load-path)) | ||||
|                       (set! %load-compiled-path | ||||
|                             (cons #$compiled %load-compiled-path))) | ||||
| 
 | ||||
|                     (use-modules (guix build activation)) | ||||
| 
 | ||||
|                     ;; Populate /etc. | ||||
|                     (activate-etc #$etc) | ||||
| 
 | ||||
|                     ;; Add users and user groups. | ||||
|                     (setenv "PATH" | ||||
|                             (string-append #$(@ (gnu packages admin) shadow) | ||||
|                                            "/sbin")) | ||||
|                     (activate-users+groups (list #$@user-specs) | ||||
|                                            (list #$@group-specs)) | ||||
| 
 | ||||
|                     ;; Activate setuid programs. | ||||
|                     (activate-setuid-programs (list #$@setuid-progs)) | ||||
| 
 | ||||
|                     ;; Run the services' activation snippets. | ||||
|                     ;; TODO: Use 'load-compiled'. | ||||
|                     (for-each primitive-load '#$actions) | ||||
| 
 | ||||
|                     ;; Set up /run/current-system. | ||||
|                     (activate-current-system))))) | ||||
| 
 | ||||
| (define (operating-system-boot-script os) | ||||
|   "Return the boot script for OS---i.e., the code started by the initrd once | ||||
| we're running in the final root." | ||||
|   (mlet* %store-monad ((services (operating-system-services os)) | ||||
|                        (activate (operating-system-activation-script os)) | ||||
|                        (dmd-conf (dmd-configuration-file services))) | ||||
|     (gexp->file "boot" | ||||
|                 #~(begin | ||||
|                     ;; Activate the system. | ||||
|                     ;; TODO: Use 'load-compiled'. | ||||
|                     (primitive-load #$activate) | ||||
| 
 | ||||
|                     ;; Keep track of the booted system. | ||||
|                     (false-if-exception (delete-file "/run/booted-system")) | ||||
|                     (symlink (readlink "/run/current-system") | ||||
|                              "/run/booted-system") | ||||
| 
 | ||||
|                     ;; Close any remaining open file descriptors to be on the | ||||
|                     ;; safe side.  This must be the very last thing we do, | ||||
|                     ;; because Guile has internal FDs such as 'sleep_pipe' | ||||
|                     ;; that need to be alive. | ||||
|                     (let loop ((fd 3)) | ||||
|                       (when (< fd 1024) | ||||
|                         (false-if-exception (close-fdes fd)) | ||||
|                         (loop (+ 1 fd)))) | ||||
| 
 | ||||
|                     ;; Start dmd. | ||||
|                     (execl (string-append #$dmd "/bin/dmd") | ||||
|                            "dmd" "--config" #$dmd-conf))))) | ||||
| 
 | ||||
| (define (operating-system-root-file-system os) | ||||
|   "Return the root file system of OS." | ||||
|   (find (match-lambda | ||||
|          (($ <file-system> _ "/") #t) | ||||
|          (_ #f)) | ||||
|         (operating-system-file-systems os))) | ||||
| 
 | ||||
| (define (operating-system-initrd-file os) | ||||
|   "Return a gexp denoting the initrd file of OS." | ||||
|   (define boot-file-systems | ||||
|     (filter (match-lambda | ||||
|              (($ <file-system> device "/") | ||||
|               #t) | ||||
|              (($ <file-system> device mount-point type flags options boot?) | ||||
|               boot?)) | ||||
|             (operating-system-file-systems os))) | ||||
| 
 | ||||
|   (mlet %store-monad | ||||
|       ((initrd ((operating-system-initrd os) boot-file-systems))) | ||||
|     (return #~(string-append #$initrd "/initrd")))) | ||||
| 
 | ||||
| (define (operating-system-grub.cfg os) | ||||
|   "Return the GRUB configuration file for OS." | ||||
|   (mlet* %store-monad | ||||
|       ((system      (operating-system-derivation os)) | ||||
|        (root-fs ->  (operating-system-root-file-system os)) | ||||
|        (kernel ->   (operating-system-kernel os)) | ||||
|        (entries ->  (list (menu-entry | ||||
|                            (label (string-append | ||||
|                                    "GNU system with " | ||||
|                                    (package-full-name kernel) | ||||
|                                    " (technology preview)")) | ||||
|                            (linux kernel) | ||||
|                            (linux-arguments `("--root=/dev/sda1" | ||||
|                                               ,(string-append "--load=" boot))) | ||||
|                            (initrd initrd-file)))) | ||||
|        (grub.cfg (grub-configuration-file entries)) | ||||
|        (extras   (links (delete-duplicates | ||||
|                          (append (append-map service-inputs services) | ||||
|                                  (append-map user-account-inputs accounts)))))) | ||||
|     (file-union `(("boot" ,boot) | ||||
|                   ("kernel" ,kernel-dir) | ||||
|                   ("initrd" ,initrd-file) | ||||
|                   ("dmd.conf" ,dmd-conf) | ||||
|                   ("profile" ,profile) | ||||
|                   ("grub.cfg" ,grub.cfg) | ||||
|                   ("etc" ,etc) | ||||
|                   ("system-inputs" ,(derivation->output-path extras))) | ||||
|                 #:inputs `(("kernel" ,kernel) | ||||
|                            ("initrd" ,initrd) | ||||
|                            ("bash" ,bash) | ||||
|                            ("profile" ,profile-drv) | ||||
|                            ("etc" ,etc-drv) | ||||
|                            ("system-inputs" ,extras)) | ||||
|                 #:name "system"))) | ||||
|                            (linux-arguments | ||||
|                             (list (string-append "--root=" | ||||
|                                                  (file-system-device root-fs)) | ||||
|                                   #~(string-append "--system=" #$system) | ||||
|                                   #~(string-append "--load=" #$system | ||||
|                                                    "/boot"))) | ||||
|                            (initrd #~(string-append #$system "/initrd")))))) | ||||
|     (grub-configuration-file (operating-system-bootloader os) entries))) | ||||
| 
 | ||||
| (define (operating-system-derivation os) | ||||
|   "Return a derivation that builds OS." | ||||
|   (mlet* %store-monad | ||||
|       ((profile     (operating-system-profile os)) | ||||
|        (etc         (operating-system-etc-directory os)) | ||||
|        (boot        (operating-system-boot-script os)) | ||||
|        (kernel  ->  (operating-system-kernel os)) | ||||
|        (initrd      (operating-system-initrd-file os))) | ||||
|     (file-union "system" | ||||
|                 `(("boot" ,#~#$boot) | ||||
|                   ("kernel" ,#~#$kernel) | ||||
|                   ("initrd" ,initrd) | ||||
|                   ("profile" ,#~#$profile) | ||||
|                   ("etc" ,#~#$etc))))) | ||||
| 
 | ||||
| ;;; system.scm ends here | ||||
|  |  | |||
							
								
								
									
										72
									
								
								gnu/system/file-systems.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								gnu/system/file-systems.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013, 2014 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 system file-systems) | ||||
|   #:use-module (guix records) | ||||
|   #:export (<file-system> | ||||
|             file-system | ||||
|             file-system? | ||||
|             file-system-device | ||||
|             file-system-mount-point | ||||
|             file-system-type | ||||
|             file-system-needed-for-boot? | ||||
|             file-system-flags | ||||
|             file-system-options | ||||
| 
 | ||||
|             %fuse-control-file-system | ||||
|             %binary-format-file-system)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; Declaring file systems to be mounted. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| ;; File system declaration. | ||||
| (define-record-type* <file-system> file-system | ||||
|   make-file-system | ||||
|   file-system? | ||||
|   (device           file-system-device)           ; string | ||||
|   (mount-point      file-system-mount-point)      ; string | ||||
|   (type             file-system-type)             ; string | ||||
|   (flags            file-system-flags             ; list of symbols | ||||
|                     (default '())) | ||||
|   (options          file-system-options           ; string or #f | ||||
|                     (default #f)) | ||||
|   (needed-for-boot? file-system-needed-for-boot?  ; Boolean | ||||
|                     (default #f)) | ||||
|   (check?           file-system-check?            ; Boolean | ||||
|                     (default #t))) | ||||
| 
 | ||||
| (define %fuse-control-file-system | ||||
|   ;; Control file system for Linux' file systems in user-space (FUSE). | ||||
|   (file-system | ||||
|     (device "fusectl") | ||||
|     (mount-point "/sys/fs/fuse/connections") | ||||
|     (type "fusectl") | ||||
|     (check? #f))) | ||||
| 
 | ||||
| (define %binary-format-file-system | ||||
|   ;; Support for arbitrary executable binary format. | ||||
|   (file-system | ||||
|     (device "binfmt_misc") | ||||
|     (mount-point "/proc/sys/fs/binfmt_misc") | ||||
|     (type "binfmt_misc") | ||||
|     (check? #f))) | ||||
| 
 | ||||
| ;;; file-systems.scm ends here | ||||
|  | @ -22,10 +22,16 @@ | |||
|   #:use-module (guix derivations) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:export (menu-entry | ||||
|   #:export (grub-configuration | ||||
|             grub-configuration? | ||||
|             grub-configuration-device | ||||
| 
 | ||||
|             menu-entry | ||||
|             menu-entry? | ||||
| 
 | ||||
|             grub-configuration-file)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
|  | @ -34,51 +40,61 @@ | |||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define-record-type* <grub-configuration> | ||||
|   grub-configuration make-grub-configuration | ||||
|   grub-configuration? | ||||
|   (grub            grub-configuration-grub           ; package | ||||
|                    (default (@ (gnu packages grub) grub))) | ||||
|   (device          grub-configuration-device)        ; string | ||||
|   (menu-entries    grub-configuration-menu-entries   ; list | ||||
|                    (default '())) | ||||
|   (default-entry   grub-configuration-default-entry  ; integer | ||||
|                    (default 1)) | ||||
|   (timeout         grub-configuration-timeout        ; integer | ||||
|                    (default 5))) | ||||
| 
 | ||||
| (define-record-type* <menu-entry> | ||||
|   menu-entry make-menu-entry | ||||
|   menu-entry? | ||||
|   (label           menu-entry-label) | ||||
|   (linux           menu-entry-linux) | ||||
|   (linux-arguments menu-entry-linux-arguments | ||||
|                    (default '())) | ||||
|   (initrd          menu-entry-initrd))            ; file name of the initrd | ||||
|                    (default '()))          ; list of string-valued gexps | ||||
|   (initrd          menu-entry-initrd))     ; file name of the initrd as a gexp | ||||
| 
 | ||||
| (define* (grub-configuration-file entries | ||||
|                                   #:key (default-entry 1) (timeout 5) | ||||
|                                   (system (%current-system))) | ||||
|   "Return the GRUB configuration file for ENTRIES, a list of | ||||
| <menu-entry> objects, defaulting to DEFAULT-ENTRY and with the given TIMEOUT." | ||||
|   (define (prologue kernel) | ||||
|     (format #f " | ||||
| set default=~a | ||||
| set timeout=~a | ||||
| search.file ~a~%" | ||||
|             default-entry timeout kernel)) | ||||
| (define* (grub-configuration-file config entries | ||||
|                                   #:key (system (%current-system))) | ||||
|   "Return the GRUB configuration file corresponding to CONFIG, a | ||||
| <grub-configuration> object." | ||||
|   (define all-entries | ||||
|     (append entries (grub-configuration-menu-entries config))) | ||||
| 
 | ||||
|   (define (bzImage) | ||||
|     (any (match-lambda | ||||
|           (($ <menu-entry> _ linux) | ||||
|            (package-file linux "bzImage" | ||||
|                          #:system system))) | ||||
|          entries)) | ||||
| 
 | ||||
|   (define entry->text | ||||
|   (define entry->gexp | ||||
|     (match-lambda | ||||
|      (($ <menu-entry> label linux arguments initrd) | ||||
|       (mlet %store-monad ((linux  (package-file linux "bzImage" | ||||
|                                                 #:system system))) | ||||
|         (return (format #f "menuentry ~s { | ||||
|   linux ~a ~a | ||||
|       #~(format port "menuentry ~s { | ||||
|   linux ~a/bzImage ~a | ||||
|   initrd ~a | ||||
| }~%" | ||||
|                         label | ||||
|                         linux (string-join arguments) initrd)))))) | ||||
|                 #$label | ||||
|                 #$linux (string-join (list #$@arguments)) | ||||
|                 #$initrd)))) | ||||
| 
 | ||||
|   (mlet %store-monad ((kernel (bzImage)) | ||||
|                       (body   (sequence %store-monad | ||||
|                                         (map entry->text entries)))) | ||||
|     (text-file "grub.cfg" | ||||
|                (string-append (prologue kernel) | ||||
|                               (string-concatenate body))))) | ||||
|   (define builder | ||||
|     #~(call-with-output-file #$output | ||||
|         (lambda (port) | ||||
|           (format port " | ||||
| set default=~a | ||||
| set timeout=~a | ||||
| search.file ~a/bzImage~%" | ||||
|                   #$(grub-configuration-default-entry config) | ||||
|                   #$(grub-configuration-timeout config) | ||||
|                   #$(any (match-lambda | ||||
|                           (($ <menu-entry> _ linux) | ||||
|                            linux)) | ||||
|                          all-entries)) | ||||
|           #$@(map entry->gexp all-entries)))) | ||||
| 
 | ||||
|   (gexp->derivation "grub.cfg" builder)) | ||||
| 
 | ||||
| ;;; grub.scm ends here | ||||
|  |  | |||
|  | @ -18,19 +18,24 @@ | |||
| 
 | ||||
| (define-module (gnu system linux-initrd) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module ((guix store) | ||||
|                 #:select (%store-prefix)) | ||||
|   #:use-module ((guix derivations) | ||||
|                 #:select (derivation->output-path)) | ||||
|   #:use-module (gnu packages cpio) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (gnu packages guile) | ||||
|   #:use-module ((gnu packages make-bootstrap) | ||||
|                 #:select (%guile-static-stripped)) | ||||
|   #:use-module (gnu system file-systems) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 regex) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:export (expression->initrd | ||||
|             qemu-initrd | ||||
|             gnu-system-initrd)) | ||||
|             qemu-initrd)) | ||||
| 
 | ||||
|  | ||||
| ;;; Commentary: | ||||
|  | @ -49,12 +54,14 @@ | |||
|                              (name "guile-initrd") | ||||
|                              (system (%current-system)) | ||||
|                              (modules '()) | ||||
|                              (to-copy '()) | ||||
|                              (linux #f) | ||||
|                              (linux-modules '())) | ||||
|   "Return a package that contains a Linux initrd (a gzipped cpio archive) | ||||
| containing GUILE and that evaluates EXP upon booting.  LINUX-MODULES is a list | ||||
| of `.ko' file names to be copied from LINUX into the initrd.  MODULES is a | ||||
| list of Guile module names to be embedded in the initrd." | ||||
| of `.ko' file names to be copied from LINUX into the initrd.  TO-COPY is a | ||||
| list of additional derivations or packages to copy to the initrd.  MODULES is | ||||
| a list of Guile module names to be embedded in the initrd." | ||||
| 
 | ||||
|   ;; General Linux overview in `Documentation/early-userspace/README' and | ||||
|   ;; `Documentation/filesystems/ramfs-rootfs-initramfs.txt'. | ||||
|  | @ -63,150 +70,157 @@ list of Guile module names to be embedded in the initrd." | |||
|     ;; Return a regexp that matches STR exactly. | ||||
|     (string-append "^" (regexp-quote str) "$")) | ||||
| 
 | ||||
|   (define builder | ||||
|     `(begin | ||||
|        (use-modules (guix build utils) | ||||
|                     (ice-9 pretty-print) | ||||
|                     (ice-9 popen) | ||||
|                     (ice-9 match) | ||||
|                     (ice-9 ftw) | ||||
|                     (srfi srfi-26) | ||||
|                     (system base compile) | ||||
|                     (rnrs bytevectors) | ||||
|                     ((system foreign) #:select (sizeof))) | ||||
|   (mlet* %store-monad ((source   (imported-modules modules)) | ||||
|                        (compiled (compiled-modules modules))) | ||||
|     (define builder | ||||
|       ;; TODO: Move most of this code to (guix build linux-initrd). | ||||
|       #~(begin | ||||
|           (use-modules (guix build utils) | ||||
|                        (ice-9 pretty-print) | ||||
|                        (ice-9 popen) | ||||
|                        (ice-9 match) | ||||
|                        (ice-9 ftw) | ||||
|                        (srfi srfi-26) | ||||
|                        (system base compile) | ||||
|                        (rnrs bytevectors) | ||||
|                        ((system foreign) #:select (sizeof))) | ||||
| 
 | ||||
|        (let ((guile   (assoc-ref %build-inputs "guile")) | ||||
|              (cpio    (string-append (assoc-ref %build-inputs "cpio") | ||||
|                                      "/bin/cpio")) | ||||
|              (gzip    (string-append (assoc-ref %build-inputs "gzip") | ||||
|                                      "/bin/gzip")) | ||||
|              (modules (assoc-ref %build-inputs "modules")) | ||||
|              (gos     (assoc-ref %build-inputs "modules/compiled")) | ||||
|              (scm-dir (string-append "share/guile/" (effective-version))) | ||||
|              (go-dir  (format #f ".cache/guile/ccache/~a-~a-~a-~a" | ||||
|                               (effective-version) | ||||
|                               (if (eq? (native-endianness) (endianness little)) | ||||
|                                   "LE" | ||||
|                                   "BE") | ||||
|                               (sizeof '*) | ||||
|                               (effective-version))) | ||||
|              (out     (assoc-ref %outputs "out"))) | ||||
|          (mkdir out) | ||||
|          (mkdir "contents") | ||||
|          (with-directory-excursion "contents" | ||||
|            (copy-recursively guile ".") | ||||
|            (call-with-output-file "init" | ||||
|              (lambda (p) | ||||
|                (format p "#!/bin/guile -ds~%!#~%" guile) | ||||
|                (pretty-print ',exp p))) | ||||
|            (chmod "init" #o555) | ||||
|            (chmod "bin/guile" #o555) | ||||
|           (let ((cpio    (string-append #$cpio "/bin/cpio")) | ||||
|                 (gzip    (string-append #$gzip "/bin/gzip")) | ||||
|                 (modules #$source) | ||||
|                 (gos     #$compiled) | ||||
|                 (scm-dir (string-append "share/guile/" (effective-version))) | ||||
|                 (go-dir  (format #f ".cache/guile/ccache/~a-~a-~a-~a" | ||||
|                                  (effective-version) | ||||
|                                  (if (eq? (native-endianness) (endianness little)) | ||||
|                                      "LE" | ||||
|                                      "BE") | ||||
|                                  (sizeof '*) | ||||
|                                  (effective-version)))) | ||||
|             (mkdir #$output) | ||||
|             (mkdir "contents") | ||||
|             (with-directory-excursion "contents" | ||||
|               (copy-recursively #$guile ".") | ||||
|               (call-with-output-file "init" | ||||
|                 (lambda (p) | ||||
|                   (format p "#!/bin/guile -ds~%!#~%" #$guile) | ||||
|                   (pretty-print '#$exp p))) | ||||
|               (chmod "init" #o555) | ||||
|               (chmod "bin/guile" #o555) | ||||
| 
 | ||||
|            ;; Copy Guile modules. | ||||
|            (chmod scm-dir #o777) | ||||
|            (copy-recursively modules scm-dir | ||||
|                              #:follow-symlinks? #t) | ||||
|            (copy-recursively gos (string-append "lib/guile/" | ||||
|                                                 (effective-version) "/ccache") | ||||
|                              #:follow-symlinks? #t) | ||||
|               ;; Copy Guile modules. | ||||
|               (chmod scm-dir #o777) | ||||
|               (copy-recursively modules scm-dir | ||||
|                                 #:follow-symlinks? #t) | ||||
|               (copy-recursively gos (string-append "lib/guile/" | ||||
|                                                    (effective-version) "/ccache") | ||||
|                                 #:follow-symlinks? #t) | ||||
| 
 | ||||
|            ;; Compile `init'. | ||||
|            (mkdir-p go-dir) | ||||
|            (set! %load-path (cons modules %load-path)) | ||||
|            (set! %load-compiled-path (cons gos %load-compiled-path)) | ||||
|            (compile-file "init" | ||||
|                          #:opts %auto-compilation-options | ||||
|                          #:output-file (string-append go-dir "/init.go")) | ||||
|               ;; Compile `init'. | ||||
|               (mkdir-p go-dir) | ||||
|               (set! %load-path (cons modules %load-path)) | ||||
|               (set! %load-compiled-path (cons gos %load-compiled-path)) | ||||
|               (compile-file "init" | ||||
|                             #:opts %auto-compilation-options | ||||
|                             #:output-file (string-append go-dir "/init.go")) | ||||
| 
 | ||||
|            ;; Copy Linux modules. | ||||
|            (let* ((linux      (assoc-ref %build-inputs "linux")) | ||||
|                   (module-dir (and linux | ||||
|                                    (string-append linux "/lib/modules")))) | ||||
|              (mkdir "modules") | ||||
|              ,@(map (lambda (module) | ||||
|                       `(match (find-files module-dir | ||||
|                                           ,(string->regexp module)) | ||||
|                          ((file) | ||||
|                           (format #t "copying '~a'...~%" file) | ||||
|                           (copy-file file (string-append "modules/" | ||||
|                                                          ,module))) | ||||
|                          (() | ||||
|                           (error "module not found" ,module module-dir)) | ||||
|                          ((_ ...) | ||||
|                           (error "several modules by that name" | ||||
|                                  ,module module-dir)))) | ||||
|                     linux-modules)) | ||||
|               ;; Copy Linux modules. | ||||
|               (let* ((linux      #$linux) | ||||
|                      (module-dir (and linux | ||||
|                                       (string-append linux "/lib/modules")))) | ||||
|                 (mkdir "modules") | ||||
|                 #$@(map (lambda (module) | ||||
|                           #~(match (find-files module-dir | ||||
|                                                #$(string->regexp module)) | ||||
|                               ((file) | ||||
|                                (format #t "copying '~a'...~%" file) | ||||
|                                (copy-file file (string-append "modules/" | ||||
|                                                               #$module))) | ||||
|                               (() | ||||
|                                (error "module not found" #$module module-dir)) | ||||
|                               ((_ ...) | ||||
|                                (error "several modules by that name" | ||||
|                                       #$module module-dir)))) | ||||
|                         linux-modules)) | ||||
| 
 | ||||
|            ;; Reset the timestamps of all the files that will make it in the | ||||
|            ;; initrd. | ||||
|            (for-each (cut utime <> 0 0 0 0) | ||||
|                      (find-files "." ".*")) | ||||
|               (let ((store   #$(string-append "." (%store-prefix))) | ||||
|                     (to-copy '#$to-copy)) | ||||
|                 (unless (null? to-copy) | ||||
|                   (mkdir-p store)) | ||||
|                 ;; XXX: Should we do export-references-graph? | ||||
|                 (for-each (lambda (input) | ||||
|                             (let ((target | ||||
|                                    (string-append store "/" | ||||
|                                                   (basename input)))) | ||||
|                               (copy-recursively input target))) | ||||
|                           to-copy)) | ||||
| 
 | ||||
|            (system* cpio "--version") | ||||
|            (let ((pipe (open-pipe* OPEN_WRITE cpio "-o" | ||||
|                                    "-O" (string-append out "/initrd") | ||||
|                                    "-H" "newc" "--null"))) | ||||
|              (define print0 | ||||
|                (let ((len (string-length "./"))) | ||||
|                  (lambda (file) | ||||
|                    (format pipe "~a\0" (string-drop file len))))) | ||||
|               ;; Reset the timestamps of all the files that will make it in the | ||||
|               ;; initrd. | ||||
|               (for-each (cut utime <> 0 0 0 0) | ||||
|                         (find-files "." ".*")) | ||||
| 
 | ||||
|              ;; Note: as per `ramfs-rootfs-initramfs.txt', always add | ||||
|              ;; directory entries before the files that are inside of it: "The | ||||
|              ;; Linux kernel cpio extractor won't create files in a directory | ||||
|              ;; that doesn't exist, so the directory entries must go before | ||||
|              ;; the files that go in those directories." | ||||
|              (file-system-fold (const #t) | ||||
|                                (lambda (file stat result) ; leaf | ||||
|                                  (print0 file)) | ||||
|                                (lambda (dir stat result) ; down | ||||
|                                  (unless (string=? dir ".") | ||||
|                                    (print0 dir))) | ||||
|                                (const #f)         ; up | ||||
|                                (const #f)         ; skip | ||||
|                                (const #f) | ||||
|                                #f | ||||
|                                ".") | ||||
|               (system* cpio "--version") | ||||
|               (let ((pipe (open-pipe* OPEN_WRITE cpio "-o" | ||||
|                                       "-O" (string-append #$output "/initrd") | ||||
|                                       "-H" "newc" "--null"))) | ||||
|                 (define print0 | ||||
|                   (let ((len (string-length "./"))) | ||||
|                     (lambda (file) | ||||
|                       (format pipe "~a\0" (string-drop file len))))) | ||||
| 
 | ||||
|              (and (zero? (close-pipe pipe)) | ||||
|                   (with-directory-excursion out | ||||
|                     (and (zero? (system* gzip "--best" "initrd")) | ||||
|                          (rename-file "initrd.gz" "initrd"))))))))) | ||||
|                 ;; Note: as per `ramfs-rootfs-initramfs.txt', always add | ||||
|                 ;; directory entries before the files that are inside of it: "The | ||||
|                 ;; Linux kernel cpio extractor won't create files in a directory | ||||
|                 ;; that doesn't exist, so the directory entries must go before | ||||
|                 ;; the files that go in those directories." | ||||
|                 (file-system-fold (const #t) | ||||
|                                   (lambda (file stat result) ; leaf | ||||
|                                     (print0 file)) | ||||
|                                   (lambda (dir stat result) ; down | ||||
|                                     (unless (string=? dir ".") | ||||
|                                       (print0 dir))) | ||||
|                                   (const #f)         ; up | ||||
|                                   (const #f)         ; skip | ||||
|                                   (const #f) | ||||
|                                   #f | ||||
|                                   ".") | ||||
| 
 | ||||
|   (mlet* %store-monad | ||||
|       ((source   (imported-modules modules)) | ||||
|        (compiled (compiled-modules modules)) | ||||
|        (inputs   (lower-inputs | ||||
|                   `(("guile" ,guile) | ||||
|                     ("cpio" ,cpio) | ||||
|                     ("gzip" ,gzip) | ||||
|                     ("modules" ,source) | ||||
|                     ("modules/compiled" ,compiled) | ||||
|                     ,@(if linux | ||||
|                           `(("linux" ,linux)) | ||||
|                           '()))))) | ||||
|    (derivation-expression name builder | ||||
|                           #:modules '((guix build utils)) | ||||
|                           #:inputs inputs))) | ||||
|                 (and (zero? (close-pipe pipe)) | ||||
|                      (with-directory-excursion #$output | ||||
|                        (and (zero? (system* gzip "--best" "initrd")) | ||||
|                             (rename-file "initrd.gz" "initrd"))))))))) | ||||
| 
 | ||||
| (define* (qemu-initrd #:key | ||||
|    (gexp->derivation name builder | ||||
|                      #:modules '((guix build utils))))) | ||||
| 
 | ||||
| (define (file-system->spec fs) | ||||
|   "Return a list corresponding to file-system FS that can be passed to the | ||||
| initrd code." | ||||
|   (match fs | ||||
|     (($ <file-system> device mount-point type flags options _ check?) | ||||
|      (list device mount-point type flags options check?)))) | ||||
| 
 | ||||
| (define* (qemu-initrd file-systems | ||||
|                       #:key | ||||
|                       guile-modules-in-chroot? | ||||
|                       volatile-root? | ||||
|                       (mounts `((cifs "/store" ,(%store-prefix)) | ||||
|                                 (cifs "/xchg" "/xchg")))) | ||||
|                       (qemu-networking? #t) | ||||
|                       volatile-root?) | ||||
|   "Return a monadic derivation that builds an initrd for use in a QEMU guest | ||||
| where the store is shared with the host.  MOUNTS is a list of file systems to | ||||
| be mounted atop the root file system, where each item has the form: | ||||
| where the store is shared with the host.  FILE-SYSTEMS is a list of | ||||
| file-systems to be mounted by the initrd, possibly in addition to the root | ||||
| file system specified on the kernel command line via '--root'. | ||||
| 
 | ||||
|     (FILE-SYSTEM-TYPE SOURCE TARGET) | ||||
| When QEMU-NETWORKING? is true, set up networking with the standard QEMU | ||||
| parameters. | ||||
| 
 | ||||
| When VOLATILE-ROOT? is true, the root file system is writable but any changes | ||||
| to it are lost. | ||||
| 
 | ||||
| When GUILE-MODULES-IN-CHROOT? is true, make core Guile modules available in | ||||
| the new root.  This is necessary is the file specified as '--load' needs | ||||
| access to these modules (which is the case if it wants to even just print an | ||||
| exception and backtrace!). | ||||
| 
 | ||||
| When VOLATILE-ROOT? is true, the root file system is writable but any changes | ||||
| to it are lost." | ||||
| exception and backtrace!)." | ||||
|   (define cifs-modules | ||||
|     ;; Modules needed to mount CIFS file systems. | ||||
|     '("md4.ko" "ecb.ko" "cifs.ko")) | ||||
|  | @ -215,35 +229,56 @@ to it are lost." | |||
|     ;; Modules for the 9p paravirtualized file system. | ||||
|     '("9pnet.ko" "9p.ko" "9pnet_virtio.ko")) | ||||
| 
 | ||||
|   (define (file-system-type-predicate type) | ||||
|     (lambda (fs) | ||||
|       (string=? (file-system-type fs) type))) | ||||
| 
 | ||||
|   (define linux-modules | ||||
|     ;; Modules added to the initrd and loaded from the initrd. | ||||
|     `("virtio.ko" "virtio_ring.ko" "virtio_pci.ko" | ||||
|       "virtio_balloon.ko" "virtio_blk.ko" "virtio_net.ko" | ||||
|       ,@(if (assoc-ref mounts 'cifs) | ||||
|       ,@(if (find (file-system-type-predicate "cifs") file-systems) | ||||
|             cifs-modules | ||||
|             '()) | ||||
|       ,@(if (assoc-ref mounts '9p) | ||||
|       ,@(if (find (file-system-type-predicate "9p") file-systems) | ||||
|             virtio-9p-modules | ||||
|             '()) | ||||
|       ,@(if volatile-root? | ||||
|             '("fuse.ko") | ||||
|             '()))) | ||||
| 
 | ||||
|   (define helper-packages | ||||
|     ;; Packages to be copied on the initrd. | ||||
|     `(,@(if (find (lambda (fs) | ||||
|                     (string-prefix? "ext" (file-system-type fs))) | ||||
|                   file-systems) | ||||
|             (list e2fsck/static) | ||||
|             '()) | ||||
|       ,@(if volatile-root? | ||||
|             (list unionfs-fuse/static) | ||||
|             '()))) | ||||
| 
 | ||||
|   (expression->initrd | ||||
|    `(begin | ||||
|       (use-modules (guix build linux-initrd)) | ||||
|    #~(begin | ||||
|        (use-modules (guix build linux-initrd) | ||||
|                     (guix build utils) | ||||
|                     (srfi srfi-26)) | ||||
| 
 | ||||
|       (boot-system #:mounts ',mounts | ||||
|                    #:linux-modules ',linux-modules | ||||
|                    #:qemu-guest-networking? #t | ||||
|                    #:guile-modules-in-chroot? ',guile-modules-in-chroot? | ||||
|                    #:volatile-root? ',volatile-root?)) | ||||
|        (with-output-to-port (%make-void-port "w") | ||||
|          (lambda () | ||||
|            (set-path-environment-variable "PATH" '("bin" "sbin") | ||||
|                                           '#$helper-packages))) | ||||
| 
 | ||||
|        (boot-system #:mounts '#$(map file-system->spec file-systems) | ||||
|                     #:linux-modules '#$linux-modules | ||||
|                     #:qemu-guest-networking? #$qemu-networking? | ||||
|                     #:guile-modules-in-chroot? '#$guile-modules-in-chroot? | ||||
|                     #:volatile-root? '#$volatile-root?)) | ||||
|    #:name "qemu-initrd" | ||||
|    #:modules '((guix build utils) | ||||
|                (guix build linux-initrd)) | ||||
|    #:to-copy helper-packages | ||||
|    #:linux linux-libre | ||||
|    #:linux-modules linux-modules)) | ||||
| 
 | ||||
| (define (gnu-system-initrd) | ||||
|   "Initrd for the GNU system itself, with nothing QEMU-specific." | ||||
|   (qemu-initrd #:guile-modules-in-chroot? #f | ||||
|                #:mounts '())) | ||||
| 
 | ||||
| ;;; linux-initrd.scm ends here | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -21,6 +21,7 @@ | |||
|   #:use-module (guix records) | ||||
|   #:use-module (guix derivations) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|  | @ -28,8 +29,8 @@ | |||
|   #:export (pam-service | ||||
|             pam-entry | ||||
|             pam-services->directory | ||||
|             %pam-other-services | ||||
|             unix-pam-service)) | ||||
|             unix-pam-service | ||||
|             base-pam-services)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -58,58 +59,56 @@ | |||
| (define-record-type* <pam-entry> pam-entry | ||||
|   make-pam-entry | ||||
|   pam-entry? | ||||
|   (control    pam-entry-control)                  ; string | ||||
|   (module     pam-entry-module)                   ; file name | ||||
|   (arguments  pam-entry-arguments                 ; list of strings | ||||
|   (control    pam-entry-control)         ; string | ||||
|   (module     pam-entry-module)          ; file name | ||||
|   (arguments  pam-entry-arguments        ; list of string-valued g-expressions | ||||
|               (default '()))) | ||||
| 
 | ||||
| (define (pam-service->configuration service) | ||||
|   "Return the configuration string for SERVICE, to be dumped in | ||||
| /etc/pam.d/NAME, where NAME is the name of SERVICE." | ||||
|   (define (entry->string type entry) | ||||
|   "Return the derivation building the configuration file for SERVICE, to be | ||||
| dumped in /etc/pam.d/NAME, where NAME is the name of SERVICE." | ||||
|   (define (entry->gexp type entry) | ||||
|     (match entry | ||||
|       (($ <pam-entry> control module (arguments ...)) | ||||
|        (string-append type "  " | ||||
|                       control " " module " " | ||||
|                       (string-join arguments) | ||||
|                       "\n")))) | ||||
|        #~(format #t "~a ~a ~a ~a~%" | ||||
|                  #$type #$control #$module | ||||
|                  (string-join (list #$@arguments)))))) | ||||
| 
 | ||||
|   (match service | ||||
|     (($ <pam-service> name account auth password session) | ||||
|      (string-concatenate | ||||
|       (append (map (cut entry->string "account" <>) account) | ||||
|               (map (cut entry->string "auth" <>) auth) | ||||
|               (map (cut entry->string "password" <>) password) | ||||
|               (map (cut entry->string "session" <>) session)))))) | ||||
|      (define builder | ||||
|        #~(begin | ||||
|            (with-output-to-file #$output | ||||
|              (lambda () | ||||
|                #$@(append (map (cut entry->gexp "account" <>) account) | ||||
|                           (map (cut entry->gexp "auth" <>) auth) | ||||
|                           (map (cut entry->gexp "password" <>) password) | ||||
|                           (map (cut entry->gexp "session" <>) session)) | ||||
|                #t)))) | ||||
| 
 | ||||
|      (gexp->derivation name builder)))) | ||||
| 
 | ||||
| (define (pam-services->directory services) | ||||
|   "Return the derivation to build the configuration directory to be used as | ||||
| /etc/pam.d for SERVICES." | ||||
|   (mlet %store-monad | ||||
|       ((names -> (map pam-service-name services)) | ||||
|        (files (mapm %store-monad | ||||
|                     (match-lambda | ||||
|                      ((and service ($ <pam-service> name)) | ||||
|                       (let ((config (pam-service->configuration service))) | ||||
|                         (text-file (string-append name ".pam") config)))) | ||||
| 
 | ||||
|                     ;; XXX: Eventually, SERVICES may be a list of monadic | ||||
|                     ;; values instead of plain values. | ||||
|                     (map return services)))) | ||||
|        (files (sequence %store-monad | ||||
|                         (map pam-service->configuration | ||||
|                              ;; XXX: Eventually, SERVICES may be a list of | ||||
|                              ;; monadic values instead of plain values. | ||||
|                              services)))) | ||||
|     (define builder | ||||
|       '(begin | ||||
|          (use-modules (ice-9 match)) | ||||
|       #~(begin | ||||
|           (use-modules (ice-9 match)) | ||||
| 
 | ||||
|          (let ((out (assoc-ref %outputs "out"))) | ||||
|            (mkdir out) | ||||
|            (for-each (match-lambda | ||||
|                       ((name . file) | ||||
|                        (symlink file (string-append out "/" name)))) | ||||
|                      %build-inputs) | ||||
|            #t))) | ||||
|           (mkdir #$output) | ||||
|           (for-each (match-lambda | ||||
|                      ((name file) | ||||
|                       (symlink file (string-append #$output "/" name)))) | ||||
|                     '#$(zip names files)))) | ||||
| 
 | ||||
|     (derivation-expression "pam.d" builder | ||||
|                            #:inputs (zip names files)))) | ||||
|     (gexp->derivation "pam.d" builder))) | ||||
| 
 | ||||
| (define %pam-other-services | ||||
|   ;; The "other" PAM configuration, which denies everything (see | ||||
|  | @ -149,7 +148,19 @@ should be the name of a file used as the message-of-the-day." | |||
|                             (pam-entry | ||||
|                              (control "optional") | ||||
|                              (module "pam_motd.so") | ||||
|                              (arguments (list (string-append "motd=" motd))))) | ||||
|                              (arguments | ||||
|                               (list #~(string-append "motd=" #$motd))))) | ||||
|                       (list unix)))))))) | ||||
| 
 | ||||
| (define* (base-pam-services #:key allow-empty-passwords?) | ||||
|   "Return the list of basic PAM services everyone would want." | ||||
|   (cons %pam-other-services | ||||
|         (map (cut unix-pam-service <> | ||||
|                   #:allow-empty-passwords? allow-empty-passwords?) | ||||
|              '("su" "passwd" "sudo" | ||||
|                "useradd" "userdel" "usermod" | ||||
|                "groupadd" "groupdel" "groupmod" | ||||
|                ;; TODO: Add other Shadow programs? | ||||
|                )))) | ||||
| 
 | ||||
| ;;; linux.scm ends here | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -17,25 +17,23 @@ | |||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (gnu system shadow) | ||||
|   #:use-module (guix store) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix monads) | ||||
|   #:use-module ((gnu packages admin) | ||||
|                 #:select (shadow)) | ||||
|   #:use-module (gnu packages bash) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (gnu packages guile-wm) | ||||
|   #:export (user-account | ||||
|             user-account? | ||||
|             user-account-name | ||||
|             user-account-pass | ||||
|             user-account-password | ||||
|             user-account-uid | ||||
|             user-account-gid | ||||
|             user-account-group | ||||
|             user-account-supplementary-groups | ||||
|             user-account-comment | ||||
|             user-account-home-directory | ||||
|             user-account-shell | ||||
|             user-account-inputs | ||||
| 
 | ||||
|             user-group | ||||
|             user-group? | ||||
|  | @ -44,9 +42,8 @@ | |||
|             user-group-id | ||||
|             user-group-members | ||||
| 
 | ||||
|             passwd-file | ||||
|             group-file | ||||
|             guix-build-accounts)) | ||||
|             default-skeletons | ||||
|             skeleton-directory)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -58,68 +55,66 @@ | |||
|   user-account make-user-account | ||||
|   user-account? | ||||
|   (name           user-account-name) | ||||
|   (password       user-account-pass (default "")) | ||||
|   (uid            user-account-uid) | ||||
|   (gid            user-account-gid) | ||||
|   (password       user-account-password (default #f)) | ||||
|   (uid            user-account-uid (default #f)) | ||||
|   (group          user-account-group)             ; number | string | ||||
|   (supplementary-groups user-account-supplementary-groups | ||||
|                         (default '()))            ; list of strings | ||||
|   (comment        user-account-comment (default "")) | ||||
|   (home-directory user-account-home-directory) | ||||
|   (shell          user-account-shell              ; monadic value | ||||
|                   (default (package-file bash "bin/bash"))) | ||||
|   (inputs         user-account-inputs (default `(("bash" ,bash))))) | ||||
|   (shell          user-account-shell              ; gexp | ||||
|                   (default #~(string-append #$bash "/bin/bash")))) | ||||
| 
 | ||||
| (define-record-type* <user-group> | ||||
|   user-group make-user-group | ||||
|   user-group? | ||||
|   (name           user-group-name) | ||||
|   (password       user-group-password (default #f)) | ||||
|   (id             user-group-id) | ||||
|   (id             user-group-id (default #f)) | ||||
|   (members        user-group-members (default '()))) | ||||
| 
 | ||||
| (define (group-file groups) | ||||
|   "Return a /etc/group file for GROUPS, a list of <user-group> objects." | ||||
|   (define contents | ||||
|     (let loop ((groups groups) | ||||
|                (result '())) | ||||
|       (match groups | ||||
|         ((($ <user-group> name _ gid (users ...)) rest ...) | ||||
|          ;; XXX: Ignore the group password. | ||||
|          (loop rest | ||||
|                (cons (string-append name "::" (number->string gid) | ||||
|                                     ":" (string-join users ",")) | ||||
|                      result))) | ||||
|         (() | ||||
|          (string-join (reverse result) "\n" 'suffix))))) | ||||
| (define (default-skeletons) | ||||
|   "Return the default skeleton files for /etc/skel.  These files are copied by | ||||
| 'useradd' in the home directory of newly created user accounts." | ||||
|   (define copy-guile-wm | ||||
|     #~(begin | ||||
|         (use-modules (guix build utils)) | ||||
|         (copy-file (car (find-files #$guile-wm "wm-init-sample.scm")) | ||||
|                    #$output))) | ||||
| 
 | ||||
|   (text-file "group" contents)) | ||||
|   (mlet %store-monad ((bashrc (text-file "bashrc" "\ | ||||
| # Allow non-login shells such as an xterm to get things right. | ||||
| test -f /etc/profile && source /etc/profile\n")) | ||||
|                       (guile-wm (gexp->derivation "guile-wm" copy-guile-wm | ||||
|                                                   #:modules | ||||
|                                                   '((guix build utils)))) | ||||
|                       (xdefaults (text-file "Xdefaults" "\ | ||||
| XTerm*utf8: always | ||||
| XTerm*metaSendsEscape: true\n")) | ||||
|                       (gdbinit   (text-file "gdbinit" "\ | ||||
| # Tell GDB where to look for separate debugging files. | ||||
| set debug-file-directory ~/.guix-profile/lib/debug\n"))) | ||||
|     (return `((".bashrc" ,bashrc) | ||||
|               (".Xdefaults" ,xdefaults) | ||||
|               (".guile-wm" ,guile-wm) | ||||
|               (".gdbinit" ,gdbinit))))) | ||||
| 
 | ||||
| (define* (passwd-file accounts #:key shadow?) | ||||
|   "Return a password file for ACCOUNTS, a list of <user-account> objects.  If | ||||
| SHADOW? is true, then it is a /etc/shadow file, otherwise it is a /etc/passwd | ||||
| file." | ||||
|   ;; XXX: The resulting file is world-readable, so beware when SHADOW? is #t! | ||||
|   (define (contents) | ||||
|     (with-monad %store-monad | ||||
|       (let loop ((accounts accounts) | ||||
|                  (result   '())) | ||||
|         (match accounts | ||||
|           ((($ <user-account> name pass uid gid comment home-dir mshell) | ||||
|             rest ...) | ||||
|            (mlet %store-monad ((shell mshell)) | ||||
|              (loop rest | ||||
|                    (cons (if shadow? | ||||
|                              (string-append name | ||||
|                                             ":"    ; XXX: use (crypt PASS …)? | ||||
|                                             ":::::::") | ||||
|                              (string-append name | ||||
|                                             ":" "x" | ||||
|                                             ":" (number->string uid) | ||||
|                                             ":" (number->string gid) | ||||
|                                             ":" comment ":" home-dir ":" shell)) | ||||
|                          result)))) | ||||
|           (() | ||||
|            (return (string-join (reverse result) "\n" 'suffix))))))) | ||||
| (define (skeleton-directory skeletons) | ||||
|   "Return a directory containing SKELETONS, a list of name/derivation pairs." | ||||
|   (gexp->derivation "skel" | ||||
|                     #~(begin | ||||
|                         (use-modules (ice-9 match)) | ||||
| 
 | ||||
|   (mlet %store-monad ((contents (contents))) | ||||
|     (text-file (if shadow? "shadow" "passwd") contents))) | ||||
|                         (mkdir #$output) | ||||
|                         (chdir #$output) | ||||
| 
 | ||||
|                         ;; Note: copy the skeletons instead of symlinking | ||||
|                         ;; them like 'file-union' does, because 'useradd' | ||||
|                         ;; would just copy the symlinks as is. | ||||
|                         (for-each (match-lambda | ||||
|                                    ((target source) | ||||
|                                     (copy-file source target))) | ||||
|                                   '#$skeletons) | ||||
|                         #t))) | ||||
| 
 | ||||
| ;;; shadow.scm ends here | ||||
|  |  | |||
|  | @ -19,6 +19,7 @@ | |||
| (define-module (gnu system vm) | ||||
|   #:use-module (guix config) | ||||
|   #:use-module (guix store) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix derivations) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix monads) | ||||
|  | @ -41,6 +42,7 @@ | |||
|   #:use-module (gnu system linux) | ||||
|   #:use-module (gnu system linux-initrd) | ||||
|   #:use-module (gnu system grub) | ||||
|   #:use-module (gnu system file-systems) | ||||
|   #:use-module (gnu system) | ||||
|   #:use-module (gnu services) | ||||
| 
 | ||||
|  | @ -52,7 +54,8 @@ | |||
|             qemu-image | ||||
|             system-qemu-image | ||||
|             system-qemu-image/shared-store | ||||
|             system-qemu-image/shared-store-script)) | ||||
|             system-qemu-image/shared-store-script | ||||
|             system-disk-image)) | ||||
| 
 | ||||
|  | ||||
| ;;; Commentary: | ||||
|  | @ -81,19 +84,34 @@ input tuple.  The output file name is when building for SYSTEM." | |||
|       ((input (and (? string?) (? store-path?) file)) | ||||
|        (return `(,input . ,file)))))) | ||||
| 
 | ||||
| ;; An alias to circumvent name clashes. | ||||
| (define %imported-modules imported-modules) | ||||
| (define %linux-vm-file-systems | ||||
|   ;; File systems mounted for 'derivation-in-linux-vm'.  The store and /xchg | ||||
|   ;; directory are shared with the host over 9p. | ||||
|   (list (file-system | ||||
|           (mount-point (%store-prefix)) | ||||
|           (device "store") | ||||
|           (type "9p") | ||||
|           (needed-for-boot? #t) | ||||
|           (options "trans=virtio") | ||||
|           (check? #f)) | ||||
|         (file-system | ||||
|           (mount-point "/xchg") | ||||
|           (device "xchg") | ||||
|           (type "9p") | ||||
|           (needed-for-boot? #t) | ||||
|           (options "trans=virtio") | ||||
|           (check? #f)))) | ||||
| 
 | ||||
| (define* (expression->derivation-in-linux-vm name exp | ||||
|                                              #:key | ||||
|                                              (system (%current-system)) | ||||
|                                              (inputs '()) | ||||
|                                              (linux linux-libre) | ||||
|                                              initrd | ||||
|                                              (qemu qemu-headless) | ||||
|                                              (env-vars '()) | ||||
|                                              (imported-modules | ||||
|                                              (modules | ||||
|                                               '((guix build vm) | ||||
|                                                 (guix build install) | ||||
|                                                 (guix build linux-initrd) | ||||
|                                                 (guix build utils))) | ||||
|                                              (guile-for-build | ||||
|  | @ -102,222 +120,240 @@ input tuple.  The output file name is when building for SYSTEM." | |||
|                                              (make-disk-image? #f) | ||||
|                                              (references-graphs #f) | ||||
|                                              (memory-size 256) | ||||
|                                              (disk-image-format "qcow2") | ||||
|                                              (disk-image-size | ||||
|                                               (* 100 (expt 2 20)))) | ||||
|   "Evaluate EXP in a QEMU virtual machine running LINUX with INITRD (a | ||||
| derivation).  In the virtual machine, EXP has access to all of INPUTS from the | ||||
| derivation).  In the virtual machine, EXP has access to all its inputs from the | ||||
| store; it should put its output files in the `/xchg' directory, which is | ||||
| copied to the derivation's output when the VM terminates.  The virtual machine | ||||
| runs with MEMORY-SIZE MiB of memory. | ||||
| 
 | ||||
| When MAKE-DISK-IMAGE? is true, then create a QEMU disk image of | ||||
| DISK-IMAGE-SIZE bytes and return it. | ||||
| When MAKE-DISK-IMAGE? is true, then create a QEMU disk image of type | ||||
| DISK-IMAGE-FORMAT (e.g., 'qcow2' or 'raw'), of DISK-IMAGE-SIZE bytes and | ||||
| return it. | ||||
| 
 | ||||
| IMPORTED-MODULES is the set of modules imported in the execution environment | ||||
| of EXP. | ||||
| MODULES is the set of modules imported in the execution environment of EXP. | ||||
| 
 | ||||
| When REFERENCES-GRAPHS is true, it must be a list of file name/store path | ||||
| pairs, as for `derivation'.  The files containing the reference graphs are | ||||
| made available under the /xchg CIFS share." | ||||
|   ;; FIXME: Add #:modules parameter, for the 'use-modules' form. | ||||
| 
 | ||||
|   (define input-alist | ||||
|     (map input->name+output inputs)) | ||||
| 
 | ||||
|   (define builder | ||||
|     ;; Code that launches the VM that evaluates EXP. | ||||
|     `(let () | ||||
|        (use-modules (guix build utils) | ||||
|                     (guix build vm)) | ||||
| 
 | ||||
|        (let ((linux   (string-append (assoc-ref %build-inputs "linux") | ||||
|                                      "/bzImage")) | ||||
|              (initrd  (string-append (assoc-ref %build-inputs "initrd") | ||||
|                                      "/initrd")) | ||||
|              (loader  (assoc-ref %build-inputs "loader")) | ||||
|              (graphs  ',(match references-graphs | ||||
|                           (((graph-files . _) ...) graph-files) | ||||
|                           (_ #f)))) | ||||
| 
 | ||||
|          (set-path-environment-variable "PATH" '("bin") | ||||
|                                         (map cdr %build-inputs)) | ||||
| 
 | ||||
|          (load-in-linux-vm loader | ||||
|                            #:output (assoc-ref %outputs "out") | ||||
|                            #:linux linux #:initrd initrd | ||||
|                            #:memory-size ,memory-size | ||||
|                            #:make-disk-image? ,make-disk-image? | ||||
|                            #:disk-image-size ,disk-image-size | ||||
|                            #:references-graphs graphs)))) | ||||
| 
 | ||||
|   (mlet* %store-monad | ||||
|       ((input-alist  (sequence %store-monad input-alist)) | ||||
|        (module-dir   (%imported-modules imported-modules)) | ||||
|        (compiled     (compiled-modules imported-modules)) | ||||
|        (exp* ->      `(let ((%build-inputs ',input-alist)) | ||||
|                         ,exp)) | ||||
|        (user-builder (text-file "builder-in-linux-vm" | ||||
|                                 (object->string exp*))) | ||||
|        (loader       (text-file* "linux-vm-loader" ; XXX: use 'sexp-file' | ||||
|                                  "(begin (set! %load-path (cons \"" | ||||
|                                  module-dir "\" %load-path)) " | ||||
|                                  "(set! %load-compiled-path (cons \"" | ||||
|                                  compiled "\" %load-compiled-path))" | ||||
|                                  "(primitive-load \"" user-builder "\"))")) | ||||
|       ((module-dir   (imported-modules modules)) | ||||
|        (compiled     (compiled-modules modules)) | ||||
|        (user-builder (gexp->file "builder-in-linux-vm" exp)) | ||||
|        (loader       (gexp->file "linux-vm-loader" | ||||
|                                  #~(begin | ||||
|                                      (set! %load-path | ||||
|                                            (cons #$module-dir %load-path)) | ||||
|                                      (set! %load-compiled-path | ||||
|                                            (cons #$compiled | ||||
|                                                  %load-compiled-path)) | ||||
|                                      (primitive-load #$user-builder)))) | ||||
|        (coreutils -> (car (assoc-ref %final-inputs "coreutils"))) | ||||
|        (initrd       (if initrd                   ; use the default initrd? | ||||
|                          (return initrd) | ||||
|                          (qemu-initrd #:guile-modules-in-chroot? #t | ||||
|                                       #:mounts `((9p "store" ,(%store-prefix)) | ||||
|                                                  (9p "xchg" "/xchg"))))) | ||||
|        (inputs       (lower-inputs `(("qemu" ,qemu) | ||||
|                                      ("linux" ,linux) | ||||
|                                      ("initrd" ,initrd) | ||||
|                                      ("coreutils" ,coreutils) | ||||
|                                      ("builder" ,user-builder) | ||||
|                                      ("loader" ,loader) | ||||
|                                      ,@inputs)))) | ||||
|     (derivation-expression name builder | ||||
|                            ;; TODO: Require the "kvm" feature. | ||||
|                            #:system system | ||||
|                            #:inputs inputs | ||||
|                            #:env-vars env-vars | ||||
|                            #:modules (delete-duplicates | ||||
|                                       `((guix build utils) | ||||
|                                         (guix build vm) | ||||
|                                         (guix build linux-initrd) | ||||
|                                         ,@imported-modules)) | ||||
|                            #:guile-for-build guile-for-build | ||||
|                            #:references-graphs references-graphs))) | ||||
|                          (qemu-initrd %linux-vm-file-systems | ||||
|                                       #:guile-modules-in-chroot? #t)))) | ||||
| 
 | ||||
|     (define builder | ||||
|       ;; Code that launches the VM that evaluates EXP. | ||||
|       #~(begin | ||||
|           (use-modules (guix build utils) | ||||
|                        (guix build vm)) | ||||
| 
 | ||||
|           (let ((inputs  '#$(list qemu coreutils)) | ||||
|                 (linux   (string-append #$linux "/bzImage")) | ||||
|                 (initrd  (string-append #$initrd "/initrd")) | ||||
|                 (loader  #$loader) | ||||
|                 (graphs  '#$(match references-graphs | ||||
|                               (((graph-files . _) ...) graph-files) | ||||
|                               (_ #f)))) | ||||
| 
 | ||||
|             (set-path-environment-variable "PATH" '("bin") inputs) | ||||
| 
 | ||||
|             (load-in-linux-vm loader | ||||
|                               #:output #$output | ||||
|                               #:linux linux #:initrd initrd | ||||
|                               #:memory-size #$memory-size | ||||
|                               #:make-disk-image? #$make-disk-image? | ||||
|                               #:disk-image-format #$disk-image-format | ||||
|                               #:disk-image-size #$disk-image-size | ||||
|                               #:references-graphs graphs)))) | ||||
| 
 | ||||
|     (gexp->derivation name builder | ||||
|                       ;; TODO: Require the "kvm" feature. | ||||
|                       #:system system | ||||
|                       #:env-vars env-vars | ||||
|                       #:modules modules | ||||
|                       #:guile-for-build guile-for-build | ||||
|                       #:references-graphs references-graphs))) | ||||
| 
 | ||||
| (define* (qemu-image #:key | ||||
|                      (name "qemu-image") | ||||
|                      (system (%current-system)) | ||||
|                      (qemu qemu-headless) | ||||
|                      (disk-image-size (* 100 (expt 2 20))) | ||||
|                      (disk-image-format "qcow2") | ||||
|                      (file-system-type "ext4") | ||||
|                      grub-configuration | ||||
|                      (initialize-store? #f) | ||||
|                      (populate #f) | ||||
|                      (register-closures? #t) | ||||
|                      (inputs '()) | ||||
|                      (inputs-to-copy '())) | ||||
|   "Return a bootable, stand-alone QEMU image.  The returned image is a full | ||||
| disk image, with a GRUB installation that uses GRUB-CONFIGURATION as its | ||||
| configuration file (GRUB-CONFIGURATION must be the name of a file in the VM.) | ||||
|                      copy-inputs?) | ||||
|   "Return a bootable, stand-alone QEMU image of type DISK-IMAGE-FORMAT (e.g., | ||||
| 'qcow2' or 'raw'), with a root partition of type FILE-SYSTEM-TYPE.  The | ||||
| returned image is a full disk image, with a GRUB installation that uses | ||||
| GRUB-CONFIGURATION as its configuration file (GRUB-CONFIGURATION must be the | ||||
| name of a file in the VM.) | ||||
| 
 | ||||
| INPUTS-TO-COPY is a list of inputs (as for packages) whose closure is copied | ||||
| into the image being built.  When INITIALIZE-STORE? is true, initialize the | ||||
| store database in the image so that Guix can be used in the image. | ||||
| 
 | ||||
| POPULATE is a list of directives stating directories or symlinks to be created | ||||
| in the disk image partition.  It is evaluated once the image has been | ||||
| populated with INPUTS-TO-COPY.  It can be used to provide additional files, | ||||
| such as /etc files." | ||||
| INPUTS is a list of inputs (as for packages).  When COPY-INPUTS? is true, copy | ||||
| all of INPUTS into the image being built.  When REGISTER-CLOSURES? is true, | ||||
| register INPUTS in the store database of the image so that Guix can be used in | ||||
| the image." | ||||
|   (mlet %store-monad | ||||
|       ((graph (sequence %store-monad | ||||
|                         (map input->name+output inputs-to-copy)))) | ||||
|       ((graph (sequence %store-monad (map input->name+output inputs)))) | ||||
|    (expression->derivation-in-linux-vm | ||||
|     "qemu-image" | ||||
|     `(let () | ||||
|        (use-modules (guix build vm) | ||||
|                     (guix build utils)) | ||||
|     name | ||||
|     #~(begin | ||||
|         (use-modules (guix build vm) | ||||
|                      (guix build utils)) | ||||
| 
 | ||||
|        (set-path-environment-variable "PATH" '("bin" "sbin") | ||||
|                                       (map cdr %build-inputs)) | ||||
|         (let ((inputs | ||||
|                '#$(append (list qemu parted grub e2fsprogs util-linux) | ||||
|                           (map (compose car (cut assoc-ref %final-inputs <>)) | ||||
|                                '("sed" "grep" "coreutils" "findutils" "gawk")) | ||||
|                           (if register-closures? (list guix) '()))) | ||||
| 
 | ||||
|        (let ((graphs ',(match inputs-to-copy | ||||
|                          (((names . _) ...) | ||||
|                           names)))) | ||||
|          (initialize-hard-disk #:grub.cfg ,grub-configuration | ||||
|                                #:closures-to-copy graphs | ||||
|                                #:disk-image-size ,disk-image-size | ||||
|                                #:initialize-store? ,initialize-store? | ||||
|                                #:directives ',populate) | ||||
|          (reboot))) | ||||
|               ;; This variable is unused but allows us to add INPUTS-TO-COPY | ||||
|               ;; as inputs. | ||||
|               (to-register | ||||
|                 '#$(map (match-lambda | ||||
|                          ((name thing) thing) | ||||
|                          ((name thing output) `(,thing ,output))) | ||||
|                         inputs))) | ||||
| 
 | ||||
|           (set-path-environment-variable "PATH" '("bin" "sbin") inputs) | ||||
| 
 | ||||
|           (let ((graphs '#$(match inputs | ||||
|                              (((names . _) ...) | ||||
|                               names)))) | ||||
|             (initialize-hard-disk "/dev/vda" | ||||
|                                   #:grub.cfg #$grub-configuration | ||||
|                                   #:closures graphs | ||||
|                                   #:copy-closures? #$copy-inputs? | ||||
|                                   #:register-closures? #$register-closures? | ||||
|                                   #:disk-image-size #$disk-image-size | ||||
|                                   #:file-system-type #$file-system-type) | ||||
|             (reboot)))) | ||||
|     #:system system | ||||
|     #:inputs `(("parted" ,parted) | ||||
|                ("grub" ,grub) | ||||
|                ("e2fsprogs" ,e2fsprogs) | ||||
| 
 | ||||
|                ;; For shell scripts. | ||||
|                ("sed" ,(car (assoc-ref %final-inputs "sed"))) | ||||
|                ("grep" ,(car (assoc-ref %final-inputs "grep"))) | ||||
|                ("coreutils" ,(car (assoc-ref %final-inputs "coreutils"))) | ||||
|                ("findutils" ,(car (assoc-ref %final-inputs "findutils"))) | ||||
|                ("gawk" ,(car (assoc-ref %final-inputs "gawk"))) | ||||
|                ("util-linux" ,util-linux) | ||||
| 
 | ||||
|                ,@(if initialize-store? | ||||
|                      `(("guix" ,guix)) | ||||
|                      '()) | ||||
| 
 | ||||
|                ,@inputs-to-copy) | ||||
|     #:make-disk-image? #t | ||||
|     #:disk-image-size disk-image-size | ||||
|     #:disk-image-format disk-image-format | ||||
|     #:references-graphs graph))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Stand-alone VM image. | ||||
| ;;; VM and disk images. | ||||
| ;;; | ||||
| 
 | ||||
| (define (operating-system-build-gid os) | ||||
|   "Return as a monadic value the group id for build users of OS, or #f." | ||||
|   (anym %store-monad | ||||
|         (lambda (service) | ||||
|           (and (equal? '(guix-daemon) | ||||
|                        (service-provision service)) | ||||
|                (match (service-user-groups service) | ||||
|                  ((group) | ||||
|                   (user-group-id group))))) | ||||
|         (operating-system-services os))) | ||||
| (define* (system-disk-image os | ||||
|                             #:key | ||||
|                             (file-system-type "ext4") | ||||
|                             (disk-image-size (* 900 (expt 2 20))) | ||||
|                             (volatile? #t)) | ||||
|   "Return the derivation of a disk image of DISK-IMAGE-SIZE bytes of the | ||||
| system described by OS.  Said image can be copied on a USB stick as is.  When | ||||
| VOLATILE? is true, the root file system is made volatile; this is useful | ||||
| to USB sticks meant to be read-only." | ||||
|   (define file-systems-to-keep | ||||
|     (remove (lambda (fs) | ||||
|               (string=? (file-system-mount-point fs) "/")) | ||||
|             (operating-system-file-systems os))) | ||||
| 
 | ||||
| (define (operating-system-default-contents os) | ||||
|   "Return a list of directives suitable for 'system-qemu-image' describing the | ||||
| basic contents of the root file system of OS." | ||||
|   (define (user-directories user) | ||||
|     (let ((home (user-account-home-directory user)) | ||||
|           ;; XXX: Deal with automatically allocated ids. | ||||
|           (uid  (or (user-account-uid user) 0)) | ||||
|           (gid  (or (user-account-gid user) 0)) | ||||
|           (root (string-append "/var/guix/profiles/per-user/" | ||||
|                                (user-account-name user)))) | ||||
|       `((directory ,root ,uid ,gid) | ||||
|         (directory ,home ,uid ,gid)))) | ||||
|   (let ((os (operating-system (inherit os) | ||||
|               ;; Since this is meant to be used on real hardware, don't set up | ||||
|               ;; QEMU networking. | ||||
|               (initrd (cut qemu-initrd <> | ||||
|                            #:volatile-root? volatile? | ||||
|                            #:qemu-networking? #f)) | ||||
| 
 | ||||
|   (mlet* %store-monad ((os-drv    (operating-system-derivation os)) | ||||
|                        (os-dir -> (derivation->output-path os-drv)) | ||||
|                        (build-gid (operating-system-build-gid os)) | ||||
|                        (profile   (operating-system-profile-directory os))) | ||||
|     (return `((directory ,(%store-prefix) 0 ,(or build-gid 0)) | ||||
|               (directory "/etc") | ||||
|               (directory "/var/log")                     ; for dmd | ||||
|               (directory "/var/run/nscd") | ||||
|               (directory "/var/guix/gcroots") | ||||
|               ("/var/guix/gcroots/system" -> ,os-dir) | ||||
|               (directory "/run") | ||||
|               ("/run/current-system" -> ,profile) | ||||
|               (directory "/bin") | ||||
|               ("/bin/sh" -> "/run/current-system/bin/bash") | ||||
|               (directory "/tmp") | ||||
|               (directory "/var/guix/profiles/per-user/root" 0 0) | ||||
|               ;; Force our own root file system. | ||||
|               (file-systems (cons (file-system | ||||
|                                     (mount-point "/") | ||||
|                                     (device "/dev/sda1") | ||||
|                                     (type file-system-type)) | ||||
|                                   file-systems-to-keep))))) | ||||
| 
 | ||||
|               (directory "/root" 0 0)             ; an exception | ||||
|               ,@(append-map user-directories | ||||
|                             (operating-system-users os)))))) | ||||
|     (mlet* %store-monad ((os-drv   (operating-system-derivation os)) | ||||
|                          (grub.cfg (operating-system-grub.cfg os))) | ||||
|       (qemu-image #:grub-configuration grub.cfg | ||||
|                   #:disk-image-size disk-image-size | ||||
|                   #:disk-image-format "raw" | ||||
|                   #:file-system-type file-system-type | ||||
|                   #:copy-inputs? #t | ||||
|                   #:register-closures? #t | ||||
|                   #:inputs `(("system" ,os-drv) | ||||
|                              ("grub.cfg" ,grub.cfg)))))) | ||||
| 
 | ||||
| (define* (system-qemu-image os | ||||
|                             #:key (disk-image-size (* 900 (expt 2 20)))) | ||||
|   "Return the derivation of a QEMU image of DISK-IMAGE-SIZE bytes of the GNU | ||||
| system as described by OS." | ||||
|   (mlet* %store-monad | ||||
|       ((os-drv      (operating-system-derivation os)) | ||||
|        (os-dir   -> (derivation->output-path os-drv)) | ||||
|        (grub.cfg -> (string-append os-dir "/grub.cfg")) | ||||
|        (populate    (operating-system-default-contents os))) | ||||
|     (qemu-image  #:grub-configuration grub.cfg | ||||
|                  #:populate populate | ||||
|                  #:disk-image-size disk-image-size | ||||
|                  #:initialize-store? #t | ||||
|                  #:inputs-to-copy `(("system" ,os-drv))))) | ||||
|                             #:key | ||||
|                             (file-system-type "ext4") | ||||
|                             (disk-image-size (* 900 (expt 2 20)))) | ||||
|   "Return the derivation of a freestanding QEMU image of DISK-IMAGE-SIZE bytes | ||||
| of the GNU system as described by OS." | ||||
|   (define file-systems-to-keep | ||||
|     ;; Keep only file systems other than root and not normally bound to real | ||||
|     ;; devices. | ||||
|     (remove (lambda (fs) | ||||
|               (let ((target (file-system-mount-point fs)) | ||||
|                     (source (file-system-device fs))) | ||||
|                 (or (string=? target "/") | ||||
|                     (string-prefix? "/dev/" source)))) | ||||
|             (operating-system-file-systems os))) | ||||
| 
 | ||||
|   (let ((os (operating-system (inherit os) | ||||
|               ;; Force our own root file system. | ||||
|               (file-systems (cons (file-system | ||||
|                                     (mount-point "/") | ||||
|                                     (device "/dev/sda1") | ||||
|                                     (type file-system-type)) | ||||
|                                   file-systems-to-keep))))) | ||||
|     (mlet* %store-monad | ||||
|         ((os-drv      (operating-system-derivation os)) | ||||
|          (grub.cfg    (operating-system-grub.cfg os))) | ||||
|       (qemu-image  #:grub-configuration grub.cfg | ||||
|                    #:disk-image-size disk-image-size | ||||
|                    #:file-system-type file-system-type | ||||
|                    #:inputs `(("system" ,os-drv) | ||||
|                               ("grub.cfg" ,grub.cfg)) | ||||
|                    #:copy-inputs? #t)))) | ||||
| 
 | ||||
| (define (virtualized-operating-system os) | ||||
|   "Return an operating system based on OS suitable for use in a virtualized | ||||
| environment with the store shared with the host." | ||||
|   (operating-system (inherit os) | ||||
|     (initrd (cut qemu-initrd <> #:volatile-root? #t)) | ||||
|     (file-systems (cons* (file-system | ||||
|                            (mount-point "/") | ||||
|                            (device "/dev/vda1") | ||||
|                            (type "ext4")) | ||||
|                          (file-system | ||||
|                            (mount-point (%store-prefix)) | ||||
|                            (device "store") | ||||
|                            (type "9p") | ||||
|                            (needed-for-boot? #t) | ||||
|                            (options "trans=virtio") | ||||
|                            (check? #f)) | ||||
| 
 | ||||
|                          ;; Remove file systems that conflict with those | ||||
|                          ;; above, or that are normally bound to real devices. | ||||
|                          (remove (lambda (fs) | ||||
|                                    (let ((target (file-system-mount-point fs)) | ||||
|                                          (source (file-system-device fs))) | ||||
|                                      (or (string=? target (%store-prefix)) | ||||
|                                          (string=? target "/") | ||||
|                                          (string-prefix? "/dev/" source)))) | ||||
|                                  (operating-system-file-systems os)))))) | ||||
| 
 | ||||
| (define* (system-qemu-image/shared-store | ||||
|           os | ||||
|  | @ -326,13 +362,14 @@ system as described by OS." | |||
| with the host." | ||||
|   (mlet* %store-monad | ||||
|       ((os-drv      (operating-system-derivation os)) | ||||
|        (os-dir   -> (derivation->output-path os-drv)) | ||||
|        (grub.cfg -> (string-append os-dir "/grub.cfg")) | ||||
|        (populate    (operating-system-default-contents os))) | ||||
|     ;; TODO: Initialize the database so Guix can be used in the guest. | ||||
|        (grub.cfg    (operating-system-grub.cfg os))) | ||||
|     (qemu-image #:grub-configuration grub.cfg | ||||
|                 #:populate populate | ||||
|                 #:disk-image-size disk-image-size))) | ||||
|                 #:disk-image-size disk-image-size | ||||
|                 #:inputs `(("system" ,os-drv)) | ||||
| 
 | ||||
|                 ;; XXX: Passing #t here is too slow, so let it off by default. | ||||
|                 #:register-closures? #f | ||||
|                 #:copy-inputs? #f))) | ||||
| 
 | ||||
| (define* (system-qemu-image/shared-store-script | ||||
|           os | ||||
|  | @ -341,47 +378,28 @@ with the host." | |||
|           (graphic? #t)) | ||||
|   "Return a derivation that builds a script to run a virtual machine image of | ||||
| OS that shares its store with the host." | ||||
|   (let* ((initrd (qemu-initrd #:mounts `((9p "store" ,(%store-prefix))) | ||||
|                               #:volatile-root? #t)) | ||||
|          (os     (operating-system (inherit os) (initrd initrd)))) | ||||
|   (mlet* %store-monad | ||||
|       ((os ->  (virtualized-operating-system os)) | ||||
|        (os-drv (operating-system-derivation os)) | ||||
|        (image  (system-qemu-image/shared-store os))) | ||||
|     (define builder | ||||
|       (mlet %store-monad ((image  (system-qemu-image/shared-store os)) | ||||
|                           (qemu   (package-file qemu | ||||
|                                                 "bin/qemu-system-x86_64")) | ||||
|                           (bash   (package-file bash "bin/sh")) | ||||
|                           (kernel (package-file (operating-system-kernel os) | ||||
|                                                 "bzImage")) | ||||
|                           (initrd initrd) | ||||
|                           (os-drv (operating-system-derivation os))) | ||||
|         (return `(let ((out (assoc-ref %outputs "out"))) | ||||
|                    (call-with-output-file out | ||||
|                      (lambda (port) | ||||
|                        (display | ||||
|                         (string-append "#!" ,bash " | ||||
| exec " ,qemu " -enable-kvm -no-reboot -net nic,model=virtio \ | ||||
|   -virtfs local,path=" ,(%store-prefix) ",security_model=none,mount_tag=store \ | ||||
|       #~(call-with-output-file #$output | ||||
|           (lambda (port) | ||||
|             (display | ||||
|              (string-append "#!" #$bash "/bin/sh | ||||
| exec " #$qemu "/bin/qemu-system-x86_64 -enable-kvm -no-reboot -net nic,model=virtio \ | ||||
|   -virtfs local,path=" #$(%store-prefix) ",security_model=none,mount_tag=store \ | ||||
|   -net user \ | ||||
|   -kernel " ,kernel " -initrd " | ||||
|   ,(string-append (derivation->output-path initrd) "/initrd") " \ | ||||
| -append \"" ,(if graphic? "" "console=ttyS0 ") | ||||
| "--load=" ,(derivation->output-path os-drv) "/boot --root=/dev/vda1\" \ | ||||
|   -drive file=" ,(derivation->output-path image) | ||||
|   -kernel " #$(operating-system-kernel os) "/bzImage \ | ||||
|   -initrd " #$os-drv "/initrd \ | ||||
| -append \"" #$(if graphic? "" "console=ttyS0 ") | ||||
|   "--system=" #$os-drv " --load=" #$os-drv "/boot --root=/dev/vda1\" \ | ||||
|   -serial stdio \ | ||||
|   -drive file=" #$image | ||||
|   ",if=virtio,cache=writeback,werror=report,readonly\n") | ||||
|                         port))) | ||||
|                    (chmod out #o555) | ||||
|                    #t)))) | ||||
|              port) | ||||
|             (chmod port #o555)))) | ||||
| 
 | ||||
|     (mlet %store-monad ((image   (system-qemu-image/shared-store os)) | ||||
|                         (initrd  initrd) | ||||
|                         (qemu    (package->derivation qemu)) | ||||
|                         (bash    (package->derivation bash)) | ||||
|                         (os      (operating-system-derivation os)) | ||||
|                         (builder builder)) | ||||
|       (derivation-expression "run-vm.sh" builder | ||||
|                              #:inputs `(("qemu" ,qemu) | ||||
|                                         ("image" ,image) | ||||
|                                         ("bash" ,bash) | ||||
|                                         ("initrd" ,initrd) | ||||
|                                         ("os" ,os)))))) | ||||
|     (gexp->derivation "run-vm.sh" builder))) | ||||
| 
 | ||||
| ;;; vm.scm ends here | ||||
|  |  | |||
							
								
								
									
										6
									
								
								guix.scm
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								guix.scm
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2012, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -26,8 +26,10 @@ | |||
|       '(base32 | ||||
|         build-system | ||||
|         derivations | ||||
|         ftp-client | ||||
|         download | ||||
|         ftp-client | ||||
|         gexp | ||||
|         monads | ||||
|         packages | ||||
|         store | ||||
|         utils)) | ||||
|  |  | |||
							
								
								
									
										219
									
								
								guix/build/activation.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								guix/build/activation.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,219 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013, 2014 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 activation) | ||||
|   #:use-module (guix build utils) | ||||
|   #:use-module (guix build linux-initrd) | ||||
|   #:use-module (ice-9 ftw) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:export (activate-users+groups | ||||
|             activate-etc | ||||
|             activate-setuid-programs | ||||
|             activate-current-system)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This module provides "activation" helpers.  Activation is the process that | ||||
| ;;; consists in setting up system-wide files and directories so that an | ||||
| ;;; 'operating-system' configuration becomes active. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define* (add-group name #:key gid password | ||||
|                     (log-port (current-error-port))) | ||||
|   "Add NAME as a user group, with the given numeric GID if specified." | ||||
|   ;; Use 'groupadd' from the Shadow package. | ||||
|   (format log-port "adding group '~a'...~%" name) | ||||
|   (let ((args `(,@(if gid `("-g" ,(number->string gid)) '()) | ||||
|                 ,@(if password `("-p" ,password) '()) | ||||
|                 ,name))) | ||||
|     (zero? (apply system* "groupadd" args)))) | ||||
| 
 | ||||
| (define* (add-user name group | ||||
|                    #:key uid comment home shell password | ||||
|                    (supplementary-groups '()) | ||||
|                    (log-port (current-error-port))) | ||||
|   "Create an account for user NAME part of GROUP, with the specified | ||||
| properties.  Return #t on success." | ||||
|   (format log-port "adding user '~a'...~%" name) | ||||
| 
 | ||||
|   (if (and uid (zero? uid)) | ||||
| 
 | ||||
|       ;; 'useradd' fails with "Cannot determine your user name" if the root | ||||
|       ;; account doesn't exist.  Thus, for bootstrapping purposes, create that | ||||
|       ;; one manually. | ||||
|       (begin | ||||
|         (call-with-output-file "/etc/shadow" | ||||
|           (cut format <> "~a::::::::~%" name)) | ||||
|         (call-with-output-file "/etc/passwd" | ||||
|           (cut format <> "~a:x:~a:~a:~a:~a:~a~%" | ||||
|                name "0" "0" comment home shell)) | ||||
|         (chmod "/etc/shadow" #o600) | ||||
|         #t) | ||||
| 
 | ||||
|       ;; Use 'useradd' from the Shadow package. | ||||
|       (let ((args `(,@(if uid `("-u" ,(number->string uid)) '()) | ||||
|                     "-g" ,(if (number? group) (number->string group) group) | ||||
|                     ,@(if (pair? supplementary-groups) | ||||
|                           `("-G" ,(string-join supplementary-groups ",")) | ||||
|                           '()) | ||||
|                     ,@(if comment `("-c" ,comment) '()) | ||||
|                     ,@(if home | ||||
|                           (if (file-exists? home) | ||||
|                               `("-d" ,home)     ; avoid warning from 'useradd' | ||||
|                               `("-d" ,home "--create-home")) | ||||
|                           '()) | ||||
|                     ,@(if shell `("-s" ,shell) '()) | ||||
|                     ,@(if password `("-p" ,password) '()) | ||||
|                     ,name))) | ||||
|         (zero? (apply system* "useradd" args))))) | ||||
| 
 | ||||
| (define (activate-users+groups users groups) | ||||
|   "Make sure the accounts listed in USERS and the user groups listed in GROUPS | ||||
| are all available. | ||||
| 
 | ||||
| Each item in USERS is a list of all the characteristics of a user account; | ||||
| each item in GROUPS is a tuple with the group name, group password or #f, and | ||||
| numeric gid or #f." | ||||
|   (define (touch file) | ||||
|     (call-with-output-file file (const #t))) | ||||
| 
 | ||||
|   (define activate-user | ||||
|     (match-lambda | ||||
|      ((name uid group supplementary-groups comment home shell password) | ||||
|       (unless (false-if-exception (getpwnam name)) | ||||
|         (let ((profile-dir (string-append "/var/guix/profiles/per-user/" | ||||
|                                           name))) | ||||
|           (add-user name group | ||||
|                     #:uid uid | ||||
|                     #:supplementary-groups supplementary-groups | ||||
|                     #:comment comment | ||||
|                     #:home home | ||||
|                     #:shell shell | ||||
|                     #:password password) | ||||
| 
 | ||||
|           ;; Create the profile directory for the new account. | ||||
|           (let ((pw (getpwnam name))) | ||||
|             (mkdir-p profile-dir) | ||||
|             (chown profile-dir (passwd:uid pw) (passwd:gid pw)))))))) | ||||
| 
 | ||||
|   ;; 'groupadd' aborts if the file doesn't already exist. | ||||
|   (touch "/etc/group") | ||||
| 
 | ||||
|   ;; Create the root account so we can use 'useradd' and 'groupadd'. | ||||
|   (activate-user (find (match-lambda | ||||
|                         ((name (? zero?) _ ...) #t) | ||||
|                         (_ #f)) | ||||
|                        users)) | ||||
| 
 | ||||
|   ;; Then create the groups. | ||||
|   (for-each (match-lambda | ||||
|              ((name password gid) | ||||
|               (add-group name #:gid gid #:password password))) | ||||
|             groups) | ||||
| 
 | ||||
|   ;; Finally create the other user accounts. | ||||
|   (for-each activate-user users)) | ||||
| 
 | ||||
| (define (activate-etc etc) | ||||
|   "Install ETC, a directory in the store, as the source of static files for | ||||
| /etc." | ||||
| 
 | ||||
|   ;; /etc is a mixture of static and dynamic settings.  Here is where we | ||||
|   ;; initialize it from the static part. | ||||
| 
 | ||||
|   (format #t "populating /etc from ~a...~%" etc) | ||||
|   (let ((rm-f (lambda (f) | ||||
|                 (false-if-exception (delete-file f))))) | ||||
|     (rm-f "/etc/static") | ||||
|     (symlink etc "/etc/static") | ||||
|     (for-each (lambda (file) | ||||
|                 ;; TODO: Handle 'shadow' specially so that changed | ||||
|                 ;; password aren't lost. | ||||
|                 (let ((target (string-append "/etc/" file)) | ||||
|                       (source (string-append "/etc/static/" file))) | ||||
|                   (rm-f target) | ||||
|                   (symlink source target))) | ||||
|               (scandir etc | ||||
|                        (lambda (file) | ||||
|                          (not (member file '("." "..")))) | ||||
| 
 | ||||
|                        ;; The default is 'string-locale<?', but we don't have | ||||
|                        ;; it when run from the initrd's statically-linked | ||||
|                        ;; Guile. | ||||
|                        string<?)) | ||||
| 
 | ||||
|     ;; Prevent ETC from being GC'd. | ||||
|     (rm-f "/var/guix/gcroots/etc-directory") | ||||
|     (symlink etc "/var/guix/gcroots/etc-directory"))) | ||||
| 
 | ||||
| (define %setuid-directory | ||||
|   ;; Place where setuid programs are stored. | ||||
|   "/run/setuid-programs") | ||||
| 
 | ||||
| (define (activate-setuid-programs programs) | ||||
|   "Turn PROGRAMS, a list of file names, into setuid programs stored under | ||||
| %SETUID-DIRECTORY." | ||||
|   (define (make-setuid-program prog) | ||||
|     (let ((target (string-append %setuid-directory | ||||
|                                  "/" (basename prog)))) | ||||
|       (catch 'system-error | ||||
|         (lambda () | ||||
|           (link prog target)) | ||||
|         (lambda args | ||||
|           ;; Perhaps PROG and TARGET live in a different file system, so copy | ||||
|           ;; PROG. | ||||
|           (copy-file prog target))) | ||||
|       (chown target 0 0) | ||||
|       (chmod target #o6555))) | ||||
| 
 | ||||
|   (format #t "setting up setuid programs in '~a'...~%" | ||||
|           %setuid-directory) | ||||
|   (if (file-exists? %setuid-directory) | ||||
|       (for-each (compose delete-file | ||||
|                          (cut string-append %setuid-directory "/" <>)) | ||||
|                 (scandir %setuid-directory | ||||
|                          (lambda (file) | ||||
|                            (not (member file '("." "..")))) | ||||
|                          string<?)) | ||||
|       (mkdir-p %setuid-directory)) | ||||
| 
 | ||||
|   (for-each make-setuid-program programs)) | ||||
| 
 | ||||
| (define %current-system | ||||
|   ;; The system that is current (a symlink.)  This is not necessarily the same | ||||
|   ;; as the system we booted (aka. /run/booted-system) because we can re-build | ||||
|   ;; a new system configuration and activate it, without rebooting. | ||||
|   "/run/current-system") | ||||
| 
 | ||||
| (define (boot-time-system) | ||||
|   "Return the '--system' argument passed on the kernel command line." | ||||
|   (find-long-option "--system" (linux-command-line))) | ||||
| 
 | ||||
| (define* (activate-current-system #:optional (system (boot-time-system))) | ||||
|   "Atomically make SYSTEM the current system." | ||||
|   (format #t "making '~a' the current system...~%" system) | ||||
| 
 | ||||
|   ;; Atomically make SYSTEM current. | ||||
|   (let ((new (string-append %current-system ".new"))) | ||||
|     (symlink system new) | ||||
|     (rename-file new %current-system))) | ||||
| 
 | ||||
| ;;; activation.scm ends here | ||||
|  | @ -1,6 +1,7 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> | ||||
| ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -48,6 +49,10 @@ | |||
| 
 | ||||
|     (let ((args `(,srcdir | ||||
|                   ,(string-append "-DCMAKE_INSTALL_PREFIX=" out) | ||||
|                   ;; add input libraries to rpath | ||||
|                   "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE" | ||||
|                   ;; add (other) libraries of the project itself to rpath | ||||
|                   ,(string-append "-DCMAKE_INSTALL_RPATH=" out "/lib") | ||||
|                   ,@configure-flags))) | ||||
|       (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH")) | ||||
|       (setenv "CMAKE_INCLUDE_PATH" (getenv "CPATH")) | ||||
|  |  | |||
|  | @ -167,8 +167,6 @@ which is not available during bootstrap." | |||
| 
 | ||||
|           ;; Buffer input and output on this port. | ||||
|           (setvbuf s _IOFBF) | ||||
|           ;; Enlarge the receive buffer. | ||||
|           (setsockopt s SOL_SOCKET SO_RCVBUF (* 12 1024)) | ||||
| 
 | ||||
|           (if (eq? 'https (uri-scheme uri)) | ||||
|               (tls-wrap s) | ||||
|  | @ -307,7 +305,10 @@ on success." | |||
|                uri) | ||||
|        #f))) | ||||
| 
 | ||||
|   (setvbuf (current-output-port) _IOLBF) | ||||
|   ;; Make this unbuffered so 'progress-proc' works as expected.  _IOLBF means | ||||
|   ;; '\n', not '\r', so it's not appropriate here. | ||||
|   (setvbuf (current-output-port) _IONBF) | ||||
| 
 | ||||
|   (setvbuf (current-error-port) _IOLBF) | ||||
| 
 | ||||
|   (let try ((uri uri)) | ||||
|  |  | |||
|  | @ -31,6 +31,11 @@ | |||
|                     #:key (git-command "git")) | ||||
|   "Fetch COMMIT from URL into DIRECTORY.  COMMIT must be a valid Git commit | ||||
| identifier.  Return #t on success, #f otherwise." | ||||
| 
 | ||||
|   ;; Disable TLS certificate verification.  The hash of the checkout is known | ||||
|   ;; in advance anyway. | ||||
|   (setenv "GIT_SSL_NO_VERIFY" "true") | ||||
| 
 | ||||
|   (and (zero? (system* git-command "clone" url directory)) | ||||
|        (with-directory-excursion directory | ||||
|          (system* git-command "tag" "-l") | ||||
|  |  | |||
|  | @ -1,31 +0,0 @@ | |||
| ;;; 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 (guix build gnome) | ||||
|   #:export (gir-directory)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; Tools commonly used when building GNOME programs. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define (gir-directory inputs pkg-name) | ||||
|   "Return the GIR directory name for PKG-NAME found from INPUTS." | ||||
|   (string-append (assoc-ref inputs pkg-name) | ||||
|                  "/share/gir-1.0")) | ||||
							
								
								
									
										122
									
								
								guix/build/install.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								guix/build/install.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,122 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013, 2014 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 install) | ||||
|   #:use-module (guix build utils) | ||||
|   #:use-module (guix build install) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:export (install-grub | ||||
|             populate-root-file-system | ||||
|             reset-timestamps | ||||
|             register-closure)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This module supports the installation of the GNU system on a hard disk. | ||||
| ;;; It is meant to be used both in a build environment (in derivations that | ||||
| ;;; build VM images), and on the bare metal (when really installing the | ||||
| ;;; system.) | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define* (install-grub grub.cfg device mount-point) | ||||
|   "Install GRUB with GRUB.CFG on DEVICE, which is assumed to be mounted on | ||||
| MOUNT-POINT." | ||||
|   (let* ((target (string-append mount-point "/boot/grub/grub.cfg")) | ||||
|          (pivot  (string-append target ".new"))) | ||||
|     (mkdir-p (dirname target)) | ||||
| 
 | ||||
|     ;; Copy GRUB.CFG instead of just symlinking it since it's not a GC root. | ||||
|     ;; Do that atomically. | ||||
|     (copy-file grub.cfg pivot) | ||||
|     (rename-file pivot target) | ||||
| 
 | ||||
|     (unless (zero? (system* "grub-install" "--no-floppy" | ||||
|                             "--boot-directory" | ||||
|                             (string-append mount-point "/boot") | ||||
|                             device)) | ||||
|       (error "failed to install GRUB")))) | ||||
| 
 | ||||
| (define (evaluate-populate-directive directive target) | ||||
|   "Evaluate DIRECTIVE, an sexp describing a file or directory to create under | ||||
| directory TARGET." | ||||
|   (let loop ((directive directive)) | ||||
|     (match directive | ||||
|       (('directory name) | ||||
|        (mkdir-p (string-append target name))) | ||||
|       (('directory name uid gid) | ||||
|        (let ((dir (string-append target name))) | ||||
|          (mkdir-p dir) | ||||
|          (chown dir uid gid))) | ||||
|       (('directory name uid gid mode) | ||||
|        (loop `(directory ,name ,uid ,gid)) | ||||
|        (chmod (string-append target name) mode)) | ||||
|       ((new '-> old) | ||||
|        (symlink old (string-append target new)))))) | ||||
| 
 | ||||
| (define (directives store) | ||||
|   "Return a list of directives to populate the root file system that will host | ||||
| STORE." | ||||
|   `((directory ,store 0 0) | ||||
|     (directory "/etc") | ||||
|     (directory "/var/log")                          ; for dmd | ||||
|     (directory "/var/guix/gcroots") | ||||
|     (directory "/var/empty")                        ; for no-login accounts | ||||
|     (directory "/var/run") | ||||
|     (directory "/run") | ||||
|     ("/var/guix/gcroots/booted-system" -> "/run/booted-system") | ||||
|     ("/var/guix/gcroots/current-system" -> "/run/current-system") | ||||
|     (directory "/bin") | ||||
|     ("/bin/sh" -> "/run/current-system/profile/bin/bash") | ||||
|     (directory "/tmp" 0 0 #o1777)                 ; sticky bit | ||||
|     (directory "/var/guix/profiles/per-user/root" 0 0) | ||||
| 
 | ||||
|     (directory "/root" 0 0)                       ; an exception | ||||
|     (directory "/home" 0 0))) | ||||
| 
 | ||||
| (define (populate-root-file-system target) | ||||
|   "Make the essential non-store files and directories on TARGET.  This | ||||
| includes /etc, /var, /run, /bin/sh, etc." | ||||
|   (for-each (cut evaluate-populate-directive <> target) | ||||
|             (directives (%store-directory)))) | ||||
| 
 | ||||
| (define (reset-timestamps directory) | ||||
|   "Reset the timestamps of all the files under DIRECTORY, so that they appear | ||||
| as created and modified at the Epoch." | ||||
|   (display "clearing file timestamps...\n") | ||||
|   (for-each (lambda (file) | ||||
|               (let ((s (lstat file))) | ||||
|                 ;; XXX: Guile uses libc's 'utime' function (not 'futime'), so | ||||
|                 ;; the timestamp of symlinks cannot be changed, and there are | ||||
|                 ;; symlinks here pointing to /gnu/store, which is the host, | ||||
|                 ;; read-only store. | ||||
|                 (unless (eq? (stat:type s) 'symlink) | ||||
|                   (utime file 0 0 0 0)))) | ||||
|             (find-files directory ""))) | ||||
| 
 | ||||
| (define (register-closure store closure) | ||||
|   "Register CLOSURE in STORE, where STORE is the directory name of the target | ||||
| store and CLOSURE is the name of a file containing a reference graph as used | ||||
| by 'guix-register'.  As a side effect, this resets timestamps on store files." | ||||
|   (let ((status (system* "guix-register" "--prefix" store | ||||
|                          closure))) | ||||
|     (unless (zero? status) | ||||
|       (error "failed to register store items" closure)))) | ||||
| 
 | ||||
| ;;; install.scm ends here | ||||
|  | @ -28,10 +28,11 @@ | |||
|   #:use-module (guix build utils) | ||||
|   #:export (mount-essential-file-systems | ||||
|             linux-command-line | ||||
|             find-long-option | ||||
|             make-essential-device-nodes | ||||
|             configure-qemu-networking | ||||
|             mount-qemu-smb-share | ||||
|             mount-qemu-9p | ||||
|             check-file-system | ||||
|             mount-file-system | ||||
|             bind-mount | ||||
|             load-linux-module* | ||||
|             device-number | ||||
|  | @ -63,12 +64,30 @@ | |||
|     (mkdir (scope "sys"))) | ||||
|   (mount "none" (scope "sys") "sysfs")) | ||||
| 
 | ||||
| (define (move-essential-file-systems root) | ||||
|   "Move currently mounted essential file systems to ROOT." | ||||
|   (for-each (lambda (dir) | ||||
|               (let ((target (string-append root dir))) | ||||
|                 (unless (file-exists? target) | ||||
|                   (mkdir target)) | ||||
|                 (mount dir target "" MS_MOVE))) | ||||
|             '("/proc" "/sys"))) | ||||
| 
 | ||||
| (define (linux-command-line) | ||||
|   "Return the Linux kernel command line as a list of strings." | ||||
|   (string-tokenize | ||||
|    (call-with-input-file "/proc/cmdline" | ||||
|      get-string-all))) | ||||
| 
 | ||||
| (define (find-long-option option arguments) | ||||
|   "Find OPTION among ARGUMENTS, where OPTION is something like \"--load\". | ||||
| Return the value associated with OPTION, or #f on failure." | ||||
|   (let ((opt (string-append option "="))) | ||||
|     (and=> (find (cut string-prefix? opt <>) | ||||
|                  arguments) | ||||
|            (lambda (arg) | ||||
|              (substring arg (+ 1 (string-index arg #\=))))))) | ||||
| 
 | ||||
| (define* (make-essential-device-nodes #:key (root "/")) | ||||
|   "Make essential device nodes under ROOT/dev." | ||||
|   ;; The hand-made udev! | ||||
|  | @ -115,6 +134,10 @@ | |||
|                   (device-number 4 n)) | ||||
|            (loop (+ 1 n))))) | ||||
| 
 | ||||
|   ;; Serial line. | ||||
|   (mknod (scope "dev/ttyS0") 'char-special #o660 | ||||
|          (device-number 4 64)) | ||||
| 
 | ||||
|   ;; Pseudo ttys. | ||||
|   (mknod (scope "dev/ptmx") 'char-special #o666 | ||||
|          (device-number 5 2)) | ||||
|  | @ -143,7 +166,18 @@ | |||
|   (symlink "/proc/self/fd" (scope "dev/fd")) | ||||
|   (symlink "/proc/self/fd/0" (scope "dev/stdin")) | ||||
|   (symlink "/proc/self/fd/1" (scope "dev/stdout")) | ||||
|   (symlink "/proc/self/fd/2" (scope "dev/stderr"))) | ||||
|   (symlink "/proc/self/fd/2" (scope "dev/stderr")) | ||||
| 
 | ||||
|   ;; Loopback devices. | ||||
|   (let loop ((i 0)) | ||||
|     (when (< i 8) | ||||
|       (mknod (scope (string-append "dev/loop" (number->string i))) | ||||
|              'block-special #o660 | ||||
|              (device-number 7 i)) | ||||
|       (loop (+ 1 i)))) | ||||
| 
 | ||||
|   ;; File systems in user space (FUSE). | ||||
|   (mknod (scope "dev/fuse") 'char-special #o666 (device-number 10 229))) | ||||
| 
 | ||||
| (define %host-qemu-ipv4-address | ||||
|   (inet-pton AF_INET "10.0.2.10")) | ||||
|  | @ -167,33 +201,13 @@ networking values.)  Return #t if INTERFACE is up, #f otherwise." | |||
| 
 | ||||
|     (logand (network-interface-flags sock interface) IFF_UP))) | ||||
| 
 | ||||
| (define (mount-qemu-smb-share share mount-point) | ||||
|   "Mount QEMU's CIFS/SMB SHARE at MOUNT-POINT. | ||||
| 
 | ||||
| Vanilla QEMU's `-smb' option just exports a /qemu share, whereas our | ||||
| `qemu-with-multiple-smb-shares' package exports the /xchg and /store shares | ||||
|  (the latter allows the store to be shared between the host and guest.)" | ||||
| 
 | ||||
|   (format #t "mounting QEMU's SMB share `~a'...\n" share) | ||||
|   (let ((server "10.0.2.4")) | ||||
|     (mount (string-append "//" server share) mount-point "cifs" 0 | ||||
|            (string->pointer "guest,sec=none")))) | ||||
| 
 | ||||
| (define (mount-qemu-9p source mount-point) | ||||
|   "Mount QEMU's 9p file system from SOURCE at MOUNT-POINT. | ||||
| 
 | ||||
| This uses the 'virtio' transport, which requires the various virtio Linux | ||||
| modules to be loaded." | ||||
| 
 | ||||
|   (format #t "mounting QEMU's 9p share '~a'...\n" source) | ||||
|   (let ((server "10.0.2.4")) | ||||
|     (mount source mount-point "9p" 0 | ||||
|            (string->pointer "trans=virtio")))) | ||||
| ;; Linux mount flags, from libc's <sys/mount.h>. | ||||
| (define MS_RDONLY 1) | ||||
| (define MS_BIND 4096) | ||||
| (define MS_MOVE 8192) | ||||
| 
 | ||||
| (define (bind-mount source target) | ||||
|   "Bind-mount SOURCE at TARGET." | ||||
|   (define MS_BIND 4096)                           ; from libc's <sys/mount.h> | ||||
| 
 | ||||
|   (mount source target "" MS_BIND)) | ||||
| 
 | ||||
| (define (load-linux-module* file) | ||||
|  | @ -208,6 +222,165 @@ modules to be loaded." | |||
| the last argument of `mknod'." | ||||
|   (+ (* major 256) minor)) | ||||
| 
 | ||||
| (define (pidof program) | ||||
|   "Return the PID of the first presumed instance of PROGRAM." | ||||
|   (let ((program (basename program))) | ||||
|     (find (lambda (pid) | ||||
|             (let ((exe (format #f "/proc/~a/exe" pid))) | ||||
|               (and=> (false-if-exception (readlink exe)) | ||||
|                      (compose (cut string=? program <>) basename)))) | ||||
|           (filter-map string->number (scandir "/proc"))))) | ||||
| 
 | ||||
| (define* (mount-root-file-system root type | ||||
|                                  #:key volatile-root? (unionfs "unionfs")) | ||||
|   "Mount the root file system of type TYPE at device ROOT.  If VOLATILE-ROOT? | ||||
| is true, mount ROOT read-only and make it a union with a writable tmpfs using | ||||
| UNIONFS." | ||||
|   (define (mark-as-not-killable pid) | ||||
|     ;; Tell the 'user-processes' dmd service that PID must be kept alive when | ||||
|     ;; shutting down. | ||||
|     (mkdir-p "/root/etc/dmd") | ||||
|     (let ((port (open-file "/root/etc/dmd/do-not-kill" "a"))) | ||||
|       (chmod port #o600) | ||||
|       (write pid port) | ||||
|       (newline port) | ||||
|       (close-port port))) | ||||
| 
 | ||||
|   (catch #t | ||||
|     (lambda () | ||||
|       (if volatile-root? | ||||
|           (begin | ||||
|             (mkdir-p "/real-root") | ||||
|             (mount root "/real-root" type MS_RDONLY) | ||||
|             (mkdir-p "/rw-root") | ||||
|             (mount "none" "/rw-root" "tmpfs") | ||||
| 
 | ||||
|             ;; We want read-write /dev nodes. | ||||
|             (make-essential-device-nodes #:root "/rw-root") | ||||
| 
 | ||||
|             ;; Make /root a union of the tmpfs and the actual root. | ||||
|             (unless (zero? (system* unionfs "-o" | ||||
|                                     "cow,allow_other,use_ino,suid,dev" | ||||
|                                     "/rw-root=RW:/real-root=RO" | ||||
|                                     "/root")) | ||||
|               (error "unionfs failed")) | ||||
| 
 | ||||
|             ;; Make sure unionfs remains alive till the end.  Because | ||||
|             ;; 'fuse_daemonize' doesn't tell the PID of the forked daemon, we | ||||
|             ;; have to resort to 'pidof' here. | ||||
|             (mark-as-not-killable (pidof unionfs))) | ||||
|           (begin | ||||
|             (check-file-system root type) | ||||
|             (mount root "/root" type)))) | ||||
|     (lambda args | ||||
|       (format (current-error-port) "exception while mounting '~a': ~s~%" | ||||
|               root args) | ||||
|       (start-repl))) | ||||
| 
 | ||||
|   (copy-file "/proc/mounts" "/root/etc/mtab")) | ||||
| 
 | ||||
| (define (check-file-system device type) | ||||
|   "Run a file system check of TYPE on DEVICE." | ||||
|   (define fsck | ||||
|     (string-append "fsck." type)) | ||||
| 
 | ||||
|   (let ((status (system* fsck "-v" "-p" device))) | ||||
|     (match (status:exit-val status) | ||||
|       (0 | ||||
|        #t) | ||||
|       (1 | ||||
|        (format (current-error-port) "'~a' corrected errors on ~a; continuing~%" | ||||
|                fsck device)) | ||||
|       (2 | ||||
|        (format (current-error-port) "'~a' corrected errors on ~a; rebooting~%" | ||||
|                fsck device) | ||||
|        (sleep 3) | ||||
|        (reboot)) | ||||
|       (code | ||||
|        (format (current-error-port) "'~a' exited with code ~a on ~a; spawning REPL~%" | ||||
|                fsck code device) | ||||
|        (start-repl))))) | ||||
| 
 | ||||
| (define* (mount-file-system spec #:key (root "/root")) | ||||
|   "Mount the file system described by SPEC under ROOT.  SPEC must have the | ||||
| form: | ||||
| 
 | ||||
|   (DEVICE MOUNT-POINT TYPE (FLAGS ...) OPTIONS CHECK?) | ||||
| 
 | ||||
| DEVICE, MOUNT-POINT, and TYPE must be strings; OPTIONS can be a string or #f; | ||||
| FLAGS must be a list of symbols.  CHECK? is a Boolean indicating whether to | ||||
| run a file system check." | ||||
|   (define flags->bit-mask | ||||
|     (match-lambda | ||||
|      (('read-only rest ...) | ||||
|       (or MS_RDONLY (flags->bit-mask rest))) | ||||
|      (('bind-mount rest ...) | ||||
|       (or MS_BIND (flags->bit-mask rest))) | ||||
|      (() | ||||
|       0))) | ||||
| 
 | ||||
|   (match spec | ||||
|     ((source mount-point type (flags ...) options check?) | ||||
|      (let ((mount-point (string-append root "/" mount-point))) | ||||
|        (when check? | ||||
|          (check-file-system source type)) | ||||
|        (mkdir-p mount-point) | ||||
|        (mount source mount-point type (flags->bit-mask flags) | ||||
|               (if options | ||||
|                   (string->pointer options) | ||||
|                   %null-pointer)) | ||||
| 
 | ||||
|        ;; Update /etc/mtab. | ||||
|        (mkdir-p (string-append root "/etc")) | ||||
|        (let ((port (open-file (string-append root "/etc/mtab") "a"))) | ||||
|          (format port "~a ~a ~a ~a 0 0~%" | ||||
|                  source mount-point type options) | ||||
|          (close-port port)))))) | ||||
| 
 | ||||
| (define (switch-root root) | ||||
|   "Switch to ROOT as the root file system, in a way similar to what | ||||
| util-linux' switch_root(8) does." | ||||
|   (move-essential-file-systems root) | ||||
|   (chdir root) | ||||
| 
 | ||||
|   ;; Since we're about to 'rm -rf /', try to make sure we're on an initrd. | ||||
|   ;; TODO: Use 'statfs' to check the fs type, like klibc does. | ||||
|   (when (or (not (file-exists? "/init")) (directory-exists? "/home")) | ||||
|     (format (current-error-port) | ||||
|             "The root file system is probably not an initrd; \ | ||||
| bailing out.~%root contents: ~s~%" (scandir "/")) | ||||
|     (force-output (current-error-port)) | ||||
|     (exit 1)) | ||||
| 
 | ||||
|   ;; Delete files from the old root, without crossing mount points (assuming | ||||
|   ;; there are no mount points in sub-directories.)  That means we're leaving | ||||
|   ;; the empty ROOT directory behind us, but that's OK. | ||||
|   (let ((root-device (stat:dev (stat "/")))) | ||||
|     (for-each (lambda (file) | ||||
|                 (unless (member file '("." "..")) | ||||
|                   (let* ((file   (string-append "/" file)) | ||||
|                          (device (stat:dev (lstat file)))) | ||||
|                     (when (= device root-device) | ||||
|                       (delete-file-recursively file))))) | ||||
|               (scandir "/"))) | ||||
| 
 | ||||
|   ;; Make ROOT the new root. | ||||
|   (mount root "/" "" MS_MOVE) | ||||
|   (chroot ".") | ||||
|   (chdir "/") | ||||
| 
 | ||||
|   (when (file-exists? "/dev/console") | ||||
|     ;; Close the standard file descriptors since they refer to the old | ||||
|     ;; /dev/console, and reopen them. | ||||
|     (let ((console (open-file "/dev/console" "r+b0"))) | ||||
|       (for-each close-fdes '(0 1 2)) | ||||
| 
 | ||||
|       (dup2 (fileno console) 0) | ||||
|       (dup2 (fileno console) 1) | ||||
|       (dup2 (fileno console) 2) | ||||
| 
 | ||||
|       (close-port console)))) | ||||
| 
 | ||||
| (define* (boot-system #:key | ||||
|                       (linux-modules '()) | ||||
|                       qemu-guest-networking? | ||||
|  | @ -220,9 +393,10 @@ QEMU-GUEST-NETWORKING? is true, mounting the file systems specified in MOUNTS, | |||
| and finally booting into the new root if any.  The initrd supports kernel | ||||
| command-line options '--load', '--root', and '--repl'. | ||||
| 
 | ||||
| MOUNTS must be a list of elements of the form: | ||||
| Mount the root file system, specified by the '--root' command-line argument, | ||||
| if any. | ||||
| 
 | ||||
|   (FILE-SYSTEM-TYPE SOURCE TARGET) | ||||
| MOUNTS must be a list suitable for 'mount-file-system'. | ||||
| 
 | ||||
| When GUILE-MODULES-IN-CHROOT? is true, make core Guile modules available in | ||||
| the new root. | ||||
|  | @ -238,21 +412,25 @@ to it are lost." | |||
|             (resolve (string-append "/root" target))) | ||||
|           file))) | ||||
| 
 | ||||
|   (define MS_RDONLY 1) | ||||
|   (define root-mount-point? | ||||
|     (match-lambda | ||||
|      ((device "/" _ ...) #t) | ||||
|      (_ #f))) | ||||
| 
 | ||||
|   (define root-fs-type | ||||
|     (or (any (match-lambda | ||||
|               ((device "/" type _ ...) type) | ||||
|               (_ #f)) | ||||
|              mounts) | ||||
|         "ext4")) | ||||
| 
 | ||||
|   (display "Welcome, this is GNU's early boot Guile.\n") | ||||
|   (display "Use '--repl' for an initrd REPL.\n\n") | ||||
| 
 | ||||
|   (mount-essential-file-systems) | ||||
|   (let* ((args    (linux-command-line)) | ||||
|          (option  (lambda (opt) | ||||
|                     (let ((opt (string-append opt "="))) | ||||
|                       (and=> (find (cut string-prefix? opt <>) | ||||
|                                    args) | ||||
|                              (lambda (arg) | ||||
|                                (substring arg (+ 1 (string-index arg #\=)))))))) | ||||
|          (to-load (option "--load")) | ||||
|          (root    (option "--root"))) | ||||
|          (to-load (find-long-option "--load" args)) | ||||
|          (root    (find-long-option "--root" args))) | ||||
| 
 | ||||
|     (when (member "--repl" args) | ||||
|       (start-repl)) | ||||
|  | @ -273,55 +451,17 @@ to it are lost." | |||
|     (unless (file-exists? "/root") | ||||
|       (mkdir "/root")) | ||||
|     (if root | ||||
|         (catch #t | ||||
|           (lambda () | ||||
|             (if volatile-root? | ||||
|                 (begin | ||||
|                   ;; XXX: For lack of a union file system... | ||||
|                   (mkdir-p "/real-root") | ||||
|                   (mount root "/real-root" "ext3" MS_RDONLY) | ||||
|                   (mount "none" "/root" "tmpfs") | ||||
| 
 | ||||
|                   ;; XXX: 'copy-recursively' cannot deal with device nodes, so | ||||
|                   ;; explicitly avoid /dev. | ||||
|                   (for-each (lambda (file) | ||||
|                               (unless (string=? "dev" file) | ||||
|                                 (copy-recursively (string-append "/real-root/" | ||||
|                                                                  file) | ||||
|                                                   (string-append "/root/" | ||||
|                                                                  file) | ||||
|                                                   #:log (%make-void-port | ||||
|                                                          "w")))) | ||||
|                             (scandir "/real-root" | ||||
|                                      (lambda (file) | ||||
|                                        (not (member file '("." "..")))))) | ||||
| 
 | ||||
|                   ;; TODO: Unmount /real-root. | ||||
|                   ) | ||||
|                 (mount root "/root" "ext3"))) | ||||
|           (lambda args | ||||
|             (format (current-error-port) "exception while mounting '~a': ~s~%" | ||||
|                     root args) | ||||
|             (start-repl))) | ||||
|         (mount-root-file-system root root-fs-type | ||||
|                                 #:volatile-root? volatile-root?) | ||||
|         (mount "none" "/root" "tmpfs")) | ||||
| 
 | ||||
|     (mount-essential-file-systems #:root "/root") | ||||
| 
 | ||||
|     (unless (file-exists? "/root/dev") | ||||
|       (mkdir "/root/dev") | ||||
|       (make-essential-device-nodes #:root "/root")) | ||||
| 
 | ||||
|     ;; Mount the specified file systems. | ||||
|     (for-each (match-lambda | ||||
|                (('cifs source target) | ||||
|                 (let ((target (string-append "/root/" target))) | ||||
|                   (mkdir-p target) | ||||
|                   (mount-qemu-smb-share source target))) | ||||
|                (('9p source target) | ||||
|                 (let ((target (string-append "/root/" target))) | ||||
|                   (mkdir-p target) | ||||
|                   (mount-qemu-9p source target)))) | ||||
|               mounts) | ||||
|     (for-each mount-file-system | ||||
|               (remove root-mount-point? mounts)) | ||||
| 
 | ||||
|     (when guile-modules-in-chroot? | ||||
|       ;; Copy the directories that contain .scm and .go files so that the | ||||
|  | @ -338,9 +478,8 @@ to it are lost." | |||
| 
 | ||||
|     (if to-load | ||||
|         (begin | ||||
|           (switch-root "/root") | ||||
|           (format #t "loading '~a'...\n" to-load) | ||||
|           (chdir "/root") | ||||
|           (chroot "/root") | ||||
| 
 | ||||
|           ;; Obviously this has to be done each time we boot.  Do it from here | ||||
|           ;; so that statfs(2) returns DEVPTS_SUPER_MAGIC like libc's getpt(3) | ||||
|  | @ -351,10 +490,12 @@ to it are lost." | |||
|           (catch #t | ||||
|             (lambda () | ||||
|               (primitive-load to-load)) | ||||
|             (lambda args | ||||
|               (start-repl)) | ||||
|             (lambda args | ||||
|               (format (current-error-port) "'~a' raised an exception: ~s~%" | ||||
|                       to-load args) | ||||
|               (start-repl))) | ||||
|               (display-backtrace (make-stack #t) (current-error-port)))) | ||||
|           (format (current-error-port) | ||||
|                   "boot program '~a' terminated, rebooting~%" | ||||
|                   to-load) | ||||
|  |  | |||
							
								
								
									
										183
									
								
								guix/build/syscalls.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								guix/build/syscalls.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,183 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 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 syscalls) | ||||
|   #:use-module (system foreign) | ||||
|   #:use-module (rnrs bytevectors) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (ice-9 rdelim) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 ftw) | ||||
|   #:export (errno | ||||
|             MS_RDONLY | ||||
|             MS_REMOUNT | ||||
|             MS_BIND | ||||
|             MS_MOVE | ||||
|             mount | ||||
|             umount | ||||
|             processes)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This module provides bindings to libc's syscall wrappers.  It uses the | ||||
| ;;; FFI, and thus requires a dynamically-linked Guile.  (For statically-linked | ||||
| ;;; Guile, we instead apply 'guile-linux-syscalls.patch'.) | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define %libc-errno-pointer | ||||
|   ;; Glibc's 'errno' pointer. | ||||
|   (let ((errno-loc (dynamic-func "__errno_location" (dynamic-link)))) | ||||
|     (and errno-loc | ||||
|          (let ((proc (pointer->procedure '* errno-loc '()))) | ||||
|            (proc))))) | ||||
| 
 | ||||
| (define errno | ||||
|   (if %libc-errno-pointer | ||||
|       (let ((bv (pointer->bytevector %libc-errno-pointer (sizeof int)))) | ||||
|         (lambda () | ||||
|           "Return the current errno." | ||||
|           ;; XXX: We assume that nothing changes 'errno' while we're doing all this. | ||||
|           ;; In particular, that means that no async must be running here. | ||||
| 
 | ||||
|           ;; Use one of the fixed-size native-ref procedures because they are | ||||
|           ;; optimized down to a single VM instruction, which reduces the risk | ||||
|           ;; that we fiddle with 'errno' (needed on Guile 2.0.5, libc 2.11.) | ||||
|           (let-syntax ((ref (lambda (s) | ||||
|                               (syntax-case s () | ||||
|                                 ((_ bv) | ||||
|                                  (case (sizeof int) | ||||
|                                    ((4) | ||||
|                                     #'(bytevector-s32-native-ref bv 0)) | ||||
|                                    ((8) | ||||
|                                     #'(bytevector-s64-native-ref bv 0)) | ||||
|                                    (else | ||||
|                                     (error "unsupported 'int' size" | ||||
|                                            (sizeof int))))))))) | ||||
|             (ref bv)))) | ||||
|       (lambda () 0))) | ||||
| 
 | ||||
| (define (augment-mtab source target type options) | ||||
|   "Augment /etc/mtab with information about the given mount point." | ||||
|   (let ((port (open-file "/etc/mtab" "a"))) | ||||
|     (format port "~a ~a ~a ~a 0 0~%" | ||||
|             source target type (or options "rw")) | ||||
|     (close-port port))) | ||||
| 
 | ||||
| (define (read-mtab port) | ||||
|   "Read an mtab-formatted file from PORT, returning a list of tuples." | ||||
|   (let loop ((result '())) | ||||
|     (let ((line (read-line port))) | ||||
|       (if (eof-object? line) | ||||
|           (reverse result) | ||||
|           (loop (cons (string-tokenize line) result)))))) | ||||
| 
 | ||||
| (define (remove-from-mtab target) | ||||
|   "Remove mount point TARGET from /etc/mtab." | ||||
|   (define entries | ||||
|     (remove (match-lambda | ||||
|              ((device mount-point type options freq passno) | ||||
|               (string=? target mount-point)) | ||||
|              (_ #f)) | ||||
|             (call-with-input-file "/etc/fstab" read-mtab))) | ||||
| 
 | ||||
|   (call-with-output-file "/etc/fstab" | ||||
|     (lambda (port) | ||||
|       (for-each (match-lambda | ||||
|                  ((device mount-point type options freq passno) | ||||
|                   (format port "~a ~a ~a ~a ~a ~a~%" | ||||
|                           device mount-point type options freq passno))) | ||||
|                 entries)))) | ||||
| 
 | ||||
| ;; Linux mount flags, from libc's <sys/mount.h>. | ||||
| (define MS_RDONLY      1) | ||||
| (define MS_REMOUNT    32) | ||||
| (define MS_BIND     4096) | ||||
| (define MS_MOVE     8192) | ||||
| 
 | ||||
| (define mount | ||||
|   (let* ((ptr  (dynamic-func "mount" (dynamic-link))) | ||||
|          (proc (pointer->procedure int ptr `(* * * ,unsigned-long *)))) | ||||
|     (lambda* (source target type #:optional (flags 0) options | ||||
|                      #:key (update-mtab? #t)) | ||||
|       "Mount device SOURCE on TARGET as a file system TYPE.  Optionally, FLAGS | ||||
| may be a bitwise-or of the MS_* <sys/mount.h> constants, and OPTIONS may be a | ||||
| string.  When FLAGS contains MS_REMOUNT, SOURCE and TYPE are ignored.  When | ||||
| UPDATE-MTAB? is true, update /etc/mtab.  Raise a 'system-error' exception on | ||||
| error." | ||||
|       (let ((ret (proc (if source | ||||
|                            (string->pointer source) | ||||
|                            %null-pointer) | ||||
|                        (string->pointer target) | ||||
|                        (if type | ||||
|                            (string->pointer type) | ||||
|                            %null-pointer) | ||||
|                        flags | ||||
|                        (if options | ||||
|                            (string->pointer options) | ||||
|                            %null-pointer))) | ||||
|             (err (errno))) | ||||
|         (unless (zero? ret) | ||||
|           (throw 'system-error "mount" "mount ~S on ~S: ~A" | ||||
|                  (list source target (strerror err)) | ||||
|                  (list err))) | ||||
|         (when update-mtab? | ||||
|           (augment-mtab source target type options)))))) | ||||
| 
 | ||||
| (define umount | ||||
|   (let* ((ptr  (dynamic-func "umount2" (dynamic-link))) | ||||
|          (proc (pointer->procedure int ptr `(* ,int)))) | ||||
|     (lambda* (target #:optional (flags 0) | ||||
|                      #:key (update-mtab? #t)) | ||||
|       "Unmount TARGET.  Optionally FLAGS may be one of the MNT_* or UMOUNT_* | ||||
| constants from <sys/mount.h>." | ||||
|       (let ((ret (proc (string->pointer target) flags)) | ||||
|             (err (errno))) | ||||
|         (unless (zero? ret) | ||||
|           (throw 'system-error "umount" "~S: ~A" | ||||
|                  (list target (strerror err)) | ||||
|                  (list err))) | ||||
|         (when update-mtab? | ||||
|           (remove-from-mtab target)))))) | ||||
| 
 | ||||
| (define (kernel? pid) | ||||
|   "Return #t if PID designates a \"kernel thread\" rather than a normal | ||||
| user-land process." | ||||
|   (let ((stat (call-with-input-file (format #f "/proc/~a/stat" pid) | ||||
|                 (compose string-tokenize read-string)))) | ||||
|     ;; See proc.txt in Linux's documentation for the list of fields. | ||||
|     (match stat | ||||
|       ((pid tcomm state ppid pgrp sid tty_nr tty_pgrp flags min_flt | ||||
|             cmin_flt maj_flt cmaj_flt utime stime cutime cstime | ||||
|             priority nice num_thread it_real_value start_time | ||||
|             vsize rss rsslim | ||||
|             (= string->number start_code) (= string->number end_code) _ ...) | ||||
|        ;; Got this obscure trick from sysvinit's 'killall5' program. | ||||
|        (and (zero? start_code) (zero? end_code)))))) | ||||
| 
 | ||||
| (define (processes) | ||||
|   "Return the list of live processes." | ||||
|   (sort (filter-map (lambda (file) | ||||
|                       (let ((pid (string->number file))) | ||||
|                         (and pid | ||||
|                              (not (kernel? pid)) | ||||
|                              pid))) | ||||
|                     (scandir "/proc")) | ||||
|         <)) | ||||
| 
 | ||||
| ;;; syscalls.scm ends here | ||||
Some files were not shown because too many files have changed in this diff Show more
		Reference in a new issue