;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Julien Lepiller ;;; Copyright © 2021 Xinglu Chen ;;; Copyright © 2021 Sarah Morgensen ;;; ;;; 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-opam) #:use-module (guix import opam) #:use-module (guix base32) #:use-module (gcrypt hash) #:use-module (guix tests) #:use-module ((guix build syscalls) #:select (mkdtemp!)) #:use-module ((guix build utils) #:select (delete-file-recursively mkdir-p which)) #:use-module ((guix utils) #:select (call-with-temporary-output-file)) #:use-module (srfi srfi-1) #:use-module (srfi srfi-64) #:use-module (web uri) #:use-module (ice-9 match) #:use-module (ice-9 peg)) (define test-opam-file "opam-version: \"2.0\" version: \"1.0.0\" maintainer: \"Alice Doe\" authors: [ \"Alice Doe\" \"John Doe\" ] homepage: \"https://example.org/\" bug-reports: \"https://example.org/bugs\" dev-repo: \"https://example.org/git\" build: [ [\"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\"] ] build-test: [ [\"ocaml\" \"pkg/pkg.ml\" \"build\" \"--pinned\" \"%{pinned}%\" \"--tests\" \"true\"] ] depends: [ \"alcotest\" {test & >= \"0.7.2\"} \"ocamlbuild\" {build & >= \"0.9.2\"} \"zarith\" {>= \"0.7\"} ] synopsis: \"Some example package\" description: \"\"\" This package is just an example.\"\"\" license: \"BSD-3-Clause\" url { src: \"https://example.org/foo-1.0.0.tar.gz\" checksum: \"md5=74c6e897658e820006106f45f736381f\" }") (define test-source-hash "") (define test-repo (mkdtemp! "/tmp/opam-repo.XXXXXX")) (test-begin "opam") (test-assert "opam->guix-package" (mock ((guix import opam) get-opam-repository (const test-repo)) (mock ((guix import utils) url-fetch (lambda (url file-name) (match url ("https://example.org/foo-1.0.0.tar.gz" (begin (mkdir-p "foo-1.0.0") (system* "tar" "czvf" file-name "foo-1.0.0/") (delete-file-recursively "foo-1.0.0") (set! test-source-hash (call-with-input-file file-name port-sha256)))) (_ (error "Unexpected URL: " url))))) (let ((my-package (string-append test-repo "/packages/foo/foo.1.0.0"))) (mkdir-p my-package) (with-output-to-file (string-append my-package "/opam") (lambda _ (format #t "~a" test-opam-file)))) (match (opam->guix-package "foo" #:repo (list test-repo)) (('package ('name "ocaml-foo") ('version "1.0.0") ('source ('origin ('method 'url-fetch) ('uri "https://example.org/foo-1.0.0.tar.gz") ('sha256 ('base32 (? string? hash))))) ('build-system 'ocaml-build-system) ('propagated-inputs ('list 'ocaml-zarith)) ('native-inputs ('list 'ocaml-alcotest 'ocamlbuild)) ('home-page "https://example.org/") ('synopsis "Some example package") ('description "This package is just an example.") ('license 'license:bsd-3)) (string=? (bytevector->nix-base32-string test-source-hash) hash)) (x (pk 'fail x #f)))))) ;; Test the opam file parser ;; We fold over some test cases. Each case is a pair of the string to parse and the ;; expected result. (define (test-opam-syntax name pattern test-cases) (test-assert name (fold (lambda (test acc) (display test) (newline) (match test ((str . expected) (and acc (let ((result (peg:tree (match-pattern pattern str)))) (if (equal? result expected) #t 2018-03-07linux-initrd: Add a hint for the missing module error....
    a>...* gnu/system/mapped-devices.scm (check-device-initrd-modules): Move to... * gnu/system/linux-initrd.scm (check-device-initrd-modules): ... here. New procedure. * po/guix/POTFILES.in: Add it. * guix/scripts/system.scm (check-initrd-modules)[check-device]: Remove. Use 'check-device-initrd-modules' instead. Ludovic Courtès 2018-03-03linux-initrd: Add virtio modules to '%base-initrd-modules'....Fixes a regression in installation tests, whereby 'guix system init' would report that virtio modules are missing for the target devices. In practice virtio modules were always available since 'base-initrd' was always called with #:virtio? #t. This commit simply moves them to '%base-initrd-modules' so that 'guix system' knows they're available. Reported by Danny Milosavljevic <dannym@scratchpost.org> at <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30629#112>. * gnu/system/linux-initrd.scm (default-initrd-modules): Add virtio modules. (base-initrd): Remove #:virtio? and 'virtio-modules'. * gnu/system/vm.scm (expression->derivation-in-linux-vm) (system-qemu-image, virtualized-operating-system): Remove uses of #:virtio?. * doc/guix.texi (Initial RAM Disk): Update 'base-initrd' doc. Ludovic Courtès 2018-03-03linux-initrd: 'file-system-modules' returns the right module list....