;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Ricardo Wurmus ;;; ;;; 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 . (define-module (test-cran) #:use-module (guix import cran) #:use-module (guix tests) #:use-module (srfi srfi-1) #:use-module (srfi srfi-64) #:use-module (srfi srfi-26) #:use-module (ice-9 match)) (define description " Package: My-Example Type: Package Title: Example package Version: 1.2.3 Date: 2015-12-10 Author: Ricardo Wurmus Maintainer: Guix Schmeeks URL: http://gnu.org/s/my-example Description: This is a long description spanning multiple lines: and it could confuse the parser that there is a colon : on the lines. And: this line continues the description. biocViews: 0 SystemRequirements: Cairo (>= 0) Depends: A C++11 compiler. Version 4.6.* of g++ (as currently in Rtools) is insufficient; versions 4.8.*, 4.9.* or later will be fine. License: GPL (>= 3) Imports: Rcpp (>= 0.11.5), proto, Scales LinkingTo: Rcpp, BH NeedsCompilation: yes Repository: CRAN Date/Publication: 2015-07-14 14:15:16 ") (define description-alist ((@@ (guix import cran) description->alist) description)) (define simple-alist '(("Key" . "Value") ("SimpleList" . "R, Rcpp, something, whatever") ("BadList" . "This is not a real list, you know?") ("List" . "R (>= 2.2), BH (for no reason), GenomicRanges"))) (test-begin "cran") (test-assert "description->alist: contains all valid keys" (let ((keys '("Package" "Type" "Title" "Version" "Date" "Author" "Maintainer" "URL" "Description" "SystemRequirements" "Depends" "License" "Imports" "biocViews" "LinkingTo" "NeedsCompilation" "Repository" "Date/Publication"))) (lset= string=? keys (map car description-alist)))) (test-equal "listify: return empty list if key cannot be found" '() ((@@ (guix import cran) listify) simple-alist "Letters")) (test-equal "listify: split comma-separated value into elements" '("R" "Rcpp" "something" "whatever") ((@@ (guix import cran) listify) simple-alist "SimpleList")) (test-equal "listify: strip off parentheses" '("R" "BH" "GenomicRanges") ((@@ (guix import cran) listify) simple-alist "List")) (test-equal "listify: ignore values that are no lists" '() ((@@ (guix import cran) listify) simple-alist "BadList")) (test-assert "description->package" ;; Replace network resources with sample data. (mock ((guix build download) url-fetch (lambda* (url file-name #:key (mirrors '())) (with-output-to-file file-name (lambda () (display (match url ("mirror://cran/src/contrib/My-Example_1.2.3.tar.gz" "source") (_ (error "Unexpected URL: " url)))))))) (match ((@@ (guix import cran) description->package) 'cran description-alist) (('package ('name "r-my-example") ('version "1.2.3") ('source ('origin ('method 'url-fetch) ('uri ('cran-uri "My-Example" 'version)) ('sha256 ('base32 (? string? hash))))) ('properties ('quasiquote (('upstream-name . "My-Example")))) ('build-system 'r-build-system) ('inputs ('quasiquote (("cairo" ('unquote 'cairo))))) ('propagated-inputs ('quasiquote (("r-bh" ('unquote 'r-bh)) ("r-proto" ('unquote 'r-proto)) ("r-rcpp" ('unquote 'r-rcpp)) ("r-scales" ('unquote 'r-scales))))) ('home-page "http://gnu.org/s/my-example") ('synopsis "Example package") ('description "This is a long description spanning multiple lines: \ and it could confuse the parser that there is a colon : on the \ lines. And: this line continues the description.") ('license 'gpl3+))) (x (begin (format #t "~s\n" x) (pk 'fail x #f)))))) (test-end "cran") (exit (= (test-runner-fail-count (test-runner-current)) 0)) 51c152bb38cc9e635'>services: Add 'description' fields....* gnu/services/admin.scm (rottlog-service-type) (tailon-service-type): Add 'description' field. * gnu/services/audio.scm (mpd-service-type): Likewise. * gnu/services/avahi.scm (avahi-service-type): Likewise. * gnu/services/ssh.scm (lsh-service-type) (openssh-service-type, dropbear-service-type): Likewise. Ludovic Courtès 2017-08-31services: mpd: Remove the mpd-file field....Since MPD switches user, the pid-file must be in a writable dir. This is now always /var/run/mpd/(user)/pid. * gnu/services/audio.scm (mpd-service-type): Add a activation-service extension. (<mpd-configuration>)[pid-file]: Remove. (mpd-service): Rename to... (mpd-shepherd-service): ... this. (mpd-file-name, mpd-service-activation): New procedure. * doc/guix.texi (Audio Services): Document the changes. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Peter Mikkelsen 2017-08-13gnu: Add mpd service....* doc/guix.texi: Add documentation. * gnu/services/audio.scm (<mpd-configuration>): New record type. (mpd-service-type): New service type. * gnu/tests/audio.scm: New file. * gnu/local.mk: Add new files. Signed-off-by: Christopher Baines <mail@cbaines.net> Peter Mikkelsen