aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2015, 2018-2019, 2021, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
;;;
;;; 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 (tests builders)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix build-system)
  #:use-module (guix build-system gnu)
  #:use-module (guix build gnu-build-system)
  #:use-module (guix build utils)
  #:use-module (guix build-system python)
  #:use-module (guix store)
  #:use-module (guix monads)
  #:use-module (guix utils)
  #:use-module (guix base32)
  #:use-module (guix derivations)
  #:use-module (gcrypt hash)
  #:use-module ((guix hash) #:select (file-hash*))
  #:use-module (guix tests)
  #:use-module (guix tests git)
  #:use-module (guix packages)
  #:use-module (gnu packages bootstrap)
  #:use-module ((ice-9 ftw) #:select (scandir))
  #:use-module (ice-9 match)
  #:use-module (ice-9 textual-ports)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-11)
  #:use-module (srfi srfi-34)
  #:use-module (srfi srfi-64))

;; Test the higher-level builders.

(define %store
  (open-connection-for-tests))

(define url-fetch*
  (store-lower url-fetch))

;; Globally disable grafts because they can trigger early builds.
(%graft? #f)


(test-begin "builders")

(unless (network-reachable?) (test-skip 1))
(test-assert "url-fetch"
  (let* ((url      '("http://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz"
                     "ftp://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz"))
         (hash     (nix-base32-string->bytevector
                    "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))
         (drv      (url-fetch* %store url 'sha256 hash
                               #:guile %bootstrap-guile))
         (out-path (derivation->output-path drv)))
    (and (build-derivations %store (list drv))
         (file-exists? out-path)
         (valid-path? %store out-path))))

(test-assert "url-fetch, file"
  (let* ((file (search-path %load-path "guix.scm"))
         (hash (call-with-input-file file port-sha256))
         (out  (url-fetch* %store file 'sha256 hash)))
    (and (file-exists? out)
         (valid-path? %store out))))

(test-assert "url-fetch, file URI"
  (let* ((file (search-path %load-path "guix.scm"))
         (hash (call-with-input-file file port-sha256))
         (out  (url-fetch* %store
                           (string-append "file://" (canonicalize-path file))
                           'sha256 hash)))
    (and (file-exists? out)
         (valid-path? %store out))))

(test-equal "git-fetch, file URI"
  '("." ".." "a.txt" "b.scm")
  (let ((nonce (random-text)))
    (with-temporary-git-repository directory
        `((add "a.txt" ,nonce)
          (add "b.scm" "#t")
          (commit "Commit.")
          (tag "v1.0.0" "The tag."))
      (run-with-store %store
        (mlet* %store-monad ((hash
                              -> (file-hash* directory
                                             #:algorithm (hash-algorithm sha256)
                                             #:recursive? #t))
                             (drv (git-fetch
                                   (git-reference
                                    (url (string-append "file://" directory))
                                    (commit "v1.0.0"))
                                   'sha256 hash
                                   "git-fetch-test")))
          (mbegin %store-monad
            (built-derivations (list drv))
            (return (scandir (derivation->output-path drv)))))))))

(test-assert "gnu-build-system"
  (build-system? gnu-build-system))

(define unpack (assoc-ref %standard-phases 'unpack))

(define compressors '(("gzip"  . "gz")
                      ("xz"    . "xz")
                      ("bzip2" . "bz2")
                      (#f      . #f)))

(for-each
 (match-lambda
   ((comp . ext)

    (unless (net2017-06-23gnu: higan: Update to 103....* gnu/packages/games.scm (higan): Update to 103.

Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
Rutger Helling
2017-06-22gnu: Add retux....* gnu/packages/games.scm (retux): New variable.
Kei Kebreau
2017-06-22gnu: higan: Update to 102....* gnu/packages/games.scm (higan): Update to 102.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Rutger Helling
2017-06-20gnu: openttd: Add 'install-data' phase....* gnu/packages/games.scm (openttd)[arguments]: Add it.
[native-inputs]: Add openttd-opengfx.
Kei Kebreau
2017-06-20gnu: Add openttd-opengfx....* gnu/packages/games.scm (openttd-opengfx): New variable.
Kei Kebreau
2017-06-20gnu: Move contents of zip module into compression module....* gnu/packages/zip.scm (zip, unzip, zziplib, perl-zip): Move to...
* gnu/packages/compression.scm: ...here.
* gnu/packages/zip.scm: Delete file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Unregister deleted file.
* po/packages/POTFILES.in: Unregister deleted file.
* gnu/packages/{audio, avr, bioinformatics, busybox, cdrom, ci, compression,
docbook, documentation, fonts, fpga, game-development, games, gl, gnome,
gnuzilla, graphics, guile, haskell, image, java, kodi, ldc, libreoffice,
markup, maths, mc, monitoring, music, php, pretty-print, python, scheme,
smalltalk, statistics, synergy, tex, textutils, video, web-browsers, xml,
zip}.scm, guix/build-system/{ant, font}.scm, guix/{download, packages}.scm:
Adapt module import.
Arun Isaac
ine (check-build-success store p)
  (unless store (test-skip 1))
  (test-assert (string-append "python-build-system: " (package-name p))
    (let* ((drv (package-derivation store p)))
      (build-derivations store (list drv)))))

(define (check-build-failure store p)
  (unless store (test-skip 1))
  (test-assert (string-append "python-build-system: " (package-name p))
    (let ((drv (package-derivation store p)))
      (guard (c ((store-protocol-error? c)
                 (pk 'failure c #t)))             ;good!
        (build-derivations store (list drv))
        #f))))                                    ;bad: it should have failed

(with-external-store store
  (for-each (lambda (p) (check-build-success store p))
            (list
             python-dummy-ok
             python-dummy-no-setuptools))
  (for-each (lambda (p) (check-build-failure store p))
            (list
             python-dummy-fail-requirements
             python-dummy-fail-import
             python-dummy-fail-console-script)))

(test-end "builders")