~ruther/guix-local

82b0e27de109b38ed44f67434a96460c4a7f9217 — Maxime Devos 5 years ago e2ad110
lint: tests-true: Check if tests are enabled when cross-compiling.

* guix/lint.scm (check-tests-true): New linter.
(%local-checkers)[tests-true]: Add it.
* tests/lint.scm ("tests-true: #:tests? must not be set to #t")
("tests-true: absent #:tests? is acceptable")
("tests-true: #:tests? #f is acceptable")
("tests-true: #:tests? #t acceptable when compiling natively"): Test it.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2 files changed, 49 insertions(+), 0 deletions(-)

M guix/lint.scm
M tests/lint.scm
M guix/lint.scm => guix/lint.scm +26 -0
@@ 12,6 12,7 @@
;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 96,6 97,7 @@
            check-archival
            check-profile-collisions
            check-haskell-stackage
            check-tests-true

            lint-warning
            lint-warning?


@@ 191,6 193,26 @@
                     #:field 'name)))
     (else '()))))

(define (check-tests-true package)
  "Check whether PACKAGE explicitly requests to run tests, which is
superfluous when building natively and incorrect when cross-compiling."
  (define (tests-explicitly-enabled?)
    (apply (lambda* (#:key tests? #:allow-other-keys)
             (eq? tests? #t))
           (package-arguments package)))
  (if (and (tests-explicitly-enabled?)
           ;; Some packages, e.g. gnutls, set #:tests?
           ;; differently depending on whether it is being
           ;; cross-compiled.
           (parameterize ((%current-target-system "aarch64-linux-gnu"))
             (tests-explicitly-enabled?)))
      (list (make-warning package
                          ;; TRANSLATORS: #:tests? and #t are Scheme constants
                          ;; and must not be translated.
                          (G_ "#:tests? must not be explicitly set to #t")
                          #:field 'arguments))
      '()))

(define (properly-starts-sentence? s)
  (string-match "^[(\"'`[:upper:][:digit:]]" s))



@@ 1525,6 1547,10 @@ them for PACKAGE."
     (description "Validate package names")
     (check       check-name))
   (lint-checker
     (name        'tests-true)
     (description "Check if tests are explicitly enabled")
     (check       check-tests-true))
   (lint-checker
     (name        'description)
     (description "Validate package descriptions")
     (check       check-description-style))

M tests/lint.scm => tests/lint.scm +23 -0
@@ 277,6 277,29 @@
   (let ((pkg (dummy-package "under_score")))
     (check-name pkg))))

(test-equal "tests-true: #:tests? must not be set to #t"
  "#:tests? must not be explicitly set to #t"
  (single-lint-warning-message
   (let ((pkg (dummy-package "x" (arguments '(#:tests? #t)))))
     (check-tests-true pkg))))

(test-equal "tests-true: absent #:tests? is acceptable"
  '()
  (let ((pkg (dummy-package "x")))
    (check-tests-true pkg)))

(test-equal "tests-true: #:tests? #f is acceptable"
  '()
  (let ((pkg (dummy-package "x" (arguments '(#:tests? #f)))))
    (check-tests-true pkg)))

(test-equal "tests-true: #:tests? #t acceptable when compiling natively"
  '()
  (let ((pkg (dummy-package "x"
                            (arguments
                             `(#:tests? ,(not (%current-target-system)))))))
    (check-tests-true pkg)))

(test-equal "inputs: pkg-config is probably a native input"
  "'pkg-config' should probably be a native input"
  (single-lint-warning-message