;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2018, 2019, 2021 Ludovic Courtès ;;; Copyright © 2021 Lars-Dominik Braun ;;; ;;; 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 (tests builders) #:use-module (guix download) #:use-module (guix build-system) #:use-module
aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017, 2019 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 (test-search-paths)
  #:use-module (guix search-paths)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-64))

(define %top-srcdir
  (dirname (search-path %load-path "guix.scm")))


(test-begin "search-paths")

(test-equal "evaluate-search-paths, separator is #f"
  (string-append %top-srcdir
                 "/gnu/packages/aux-files/linux-libre")

  ;; The following search path spec should evaluate to a single item: the
  ;; first directory that matches the "-linux$" pattern in
  ;; gnu/packages/bootstrap.
  (let ((spec (search-path-specification
               (variable "CHBOUIB")
               (files '("gnu/packages/aux-files"))
               (file-type 'directory)
               (separator #f)
               (file-pattern "^linux"))))
    (match (evaluate-search-paths (list spec)
                                  (list %top-srcdir))
      (((spec* . value))
       (and (eq? spec* spec) value)))))

(test-end "search-paths")
compressors) ;;; ;;; Test the sanity-check phase of the Python build system. ;;; (define* (make-python-dummy name #:key (setup-py-extra "") (init-py "") (use-setuptools? #t)) (dummy-package (string-append "python-dummy-" name) (version "0.1") (build-system python-build-system) (arguments `(#:tests? #f #:use-setuptools? ,use-setuptools? #:phases (modify-phases %standard-phases (replace 'unpack (lambda _ (mkdir-p "dummy") (with-output-to-file "dummy/__init__.py" (lambda _ (display ,init-py))) (with-output-to-file "setup.py" (lambda _ (format #t "\ ~a setup( name='dummy-~a', version='0.1', packages=['dummy'], ~a )" (if ,use-setuptools? "from setuptools import setup" "from distutils.core import setup") ,name ,setup-py-extra)))))))))) (define python-dummy-ok (make-python-dummy "ok")) ;; distutil won't install any metadata, so make sure our script does not fail ;; on a otherwise fine package. (define python-dummy-no-setuptools (make-python-dummy "no-setuptools" #:use-setuptools? #f)) (define python-dummy-fail-requirements (make-python-dummy "fail-requirements" #:setup-py-extra "install_requires=['nonexistent'],")) (define python-dummy-fail-import (make-python-dummy "fail-import" #:init-py "import nonexistent")) (define python-dummy-fail-console-script (make-python-dummy "fail-console-script" #:setup-py-extra (string-append "entry_points={'console_scripts': " "['broken = dummy:nonexistent']},"))) (define (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")