[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
09/97: guix: Add lint-checker for packages which should be no inputs at
From: |
Hartmut Goebel |
Subject: |
09/97: guix: Add lint-checker for packages which should be no inputs at all. |
Date: |
Tue, 18 Oct 2016 20:13:16 +0000 (UTC) |
htgoebel pushed a commit to branch wip-python-build-system
in repository guix.
commit 024a606b49943e15fa83284d422a58d4b94e5e8e
Author: Hartmut Goebel <address@hidden>
Date: Wed Sep 28 11:36:35 2016 +0200
guix: Add lint-checker for packages which should be no inputs at all.
Also refactor some common code into a new function.
Examples for these pacakges are python(2)-setuptools and python(2)-pip,
which
are installed together with python itself.
* guix/scripts/lint.scm (warn-if-package-has-input): New procedure.
(check-inputs-should-be-native package): Use it; rename and clean-up
variables. (check-inputs-should-not-be-an-input-at-all): New procedure.
(%checkers) Add it.
* doc/guix.texi (Python Modules): Document it.
* tests/lint.scm: ("inputs: python-setuptools should not be an input at all
(input)", "inputs: python-setuptools should not be an input at all
(native-input)" "inputs: python-setuptools should not be an input at all
(propagated-input)"): Add tests.
---
doc/guix.texi | 3 ++-
guix/scripts/lint.scm | 63 +++++++++++++++++++++++++++++++++++--------------
tests/lint.scm | 34 ++++++++++++++++++++++++++
3 files changed, 81 insertions(+), 19 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index a856e57..be6518d 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12405,7 +12405,8 @@ following check list to determine which dependency goes
where.
@item
We currently package Python 2 with @code{setuptools} and @code{pip}
installed like Python 3.4 has per default. Thus you don't need to
-specify either of these as an input.
+specify either of these as an input. @command{guix lint} will warn you
+if you do.
@item
Python dependencies required at run time go into
diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm
index b3ec6d6..042c679 100644
--- a/guix/scripts/lint.scm
+++ b/guix/scripts/lint.scm
@@ -4,6 +4,7 @@
;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <address@hidden>
;;; Copyright © 2015, 2016 Mathieu Lirzin <address@hidden>
;;; Copyright © 2016 Danny Milosavljevic <address@hidden>
+;;; Copyright © 2016 Hartmut Goebel <address@hidden>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -59,6 +60,7 @@
#:export (guix-lint
check-description-style
check-inputs-should-be-native
+ check-inputs-should-not-be-an-input-at-all
check-patch-file-names
check-synopsis-style
check-derivation
@@ -213,34 +215,55 @@ by two spaces; possible infraction~p at ~{~a~^, ~}")
(format #f (_ "invalid description: ~s") description)
'description))))
+(define (warn-if-package-has-input linted inputs-to-check input-names message)
+ ;; Emit a warning MESSAGE if some of the inputs named in INPUT-NAMES are
+ ;; contained in INPUTS-TO-CHECK, which are assumed to be inputs of package
+ ;; LINTED.
+ (match inputs-to-check
+ (((labels packages . outputs) ...)
+ (for-each (lambda (package output)
+ (when (package? package)
+ (let ((input (string-append
+ (package-name package)
+ (if (> (length output) 0)
+ (string-append ":" (car output))
+ ""))))
+ (when (member input input-names)
+ (emit-warning linted
+ (format #f (_ message) input)
+ 'inputs-to-check)))))
+ packages outputs))))
+
(define (check-inputs-should-be-native package)
;; Emit a warning if some inputs of PACKAGE are likely to belong to its
;; native inputs.
- (let ((linted package)
+ (let ((message "'~a' should probably be a native input")
(inputs (package-inputs package))
- (native-inputs
+ (input-names
'("pkg-config"
"extra-cmake-modules"
"glib:bin"
"intltool"
"itstool"
"qttools")))
- (match inputs
- (((labels packages . outputs) ...)
- (for-each (lambda (package output)
- (when (package? package)
- (let ((input (string-append
- (package-name package)
- (if (> (length output) 0)
- (string-append ":" (car output))
- ""))))
- (when (member input native-inputs)
- (emit-warning linted
- (format #f (_ "'~a' should probably \
-be a native input")
- input)
- 'inputs)))))
- packages outputs)))))
+ (warn-if-package-has-input package inputs input-names message)))
+
+(define (check-inputs-should-not-be-an-input-at-all package)
+ ;; Emit a warning if some inputs of PACKAGE are likely to should not be
+ ;; an input at all.
+ (let ((message "'~a' should probably not be an input at all")
+ (inputs (package-inputs package))
+ (input-names
+ '("python-setuptools"
+ "python2-setuptools"
+ "python-pip"
+ "python2-pip")))
+ (warn-if-package-has-input package (package-inputs package)
+ input-names message)
+ (warn-if-package-has-input package (package-native-inputs package)
+ input-names message)
+ (warn-if-package-has-input package (package-propagated-inputs package)
+ input-names message)))
(define (package-name-regexp package)
"Return a regexp that matches PACKAGE's name as a word at the beginning of a
@@ -810,6 +833,10 @@ them for PACKAGE."
(description "Identify inputs that should be native inputs")
(check check-inputs-should-be-native))
(lint-checker
+ (name 'inputs-should-not-be-input)
+ (description "Identify inputs that should be inputs at all")
+ (check check-inputs-should-not-be-an-input-at-all))
+ (lint-checker
(name 'patch-file-names)
(description "Validate file names and availability of patches")
(check check-patch-file-names))
diff --git a/tests/lint.scm b/tests/lint.scm
index d692b42..148e162 100644
--- a/tests/lint.scm
+++ b/tests/lint.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2014, 2015, 2016 Eric Bavier <address@hidden>
;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <address@hidden>
;;; Copyright © 2015, 2016 Mathieu Lirzin <address@hidden>
+;;; Copyright © 2016 Hartmut Goebel <address@hidden>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -33,6 +34,7 @@
#:use-module (gnu packages)
#:use-module (gnu packages glib)
#:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages python)
#:use-module (web server)
#:use-module (web server http)
#:use-module (web response)
@@ -346,6 +348,38 @@ string) on HTTP requests."
(check-inputs-should-be-native pkg)))
"'glib:bin' should probably be a native input")))
+(test-assert
+ "inputs: python-setuptools should not be an input at all (input)"
+ (->bool
+ (string-contains
+ (with-warnings
+ (let ((pkg (dummy-package "x"
+ (inputs `(("python-setuptools" ,python-setuptools))))))
+ (check-inputs-should-not-be-an-input-at-all pkg)))
+ "'python-setuptools' should probably not be an input at all")))
+
+(test-assert
+ "inputs: python-setuptools should not be an input at all (native-input)"
+ (->bool
+ (string-contains
+ (with-warnings
+ (let ((pkg (dummy-package "x"
+ (native-inputs
+ `(("python-setuptools" ,python-setuptools))))))
+ (check-inputs-should-not-be-an-input-at-all pkg)))
+ "'python-setuptools' should probably not be an input at all")))
+
+(test-assert
+ "inputs: python-setuptools should not be an input at all
(propagated-input)"
+ (->bool
+ (string-contains
+ (with-warnings
+ (let ((pkg (dummy-package "x"
+ (propagated-inputs
+ `(("python-setuptools" ,python-setuptools))))))
+ (check-inputs-should-not-be-an-input-at-all pkg)))
+ "'python-setuptools' should probably not be an input at all")))
+
(test-assert "patches: file names"
(->bool
(string-contains
- 07/97: guix: python-build-system: Delete .egg-info file created in phase check., (continued)
- 07/97: guix: python-build-system: Delete .egg-info file created in phase check., Hartmut Goebel, 2016/10/18
- 04/97: guix: python-build-system: Import setuptools before calling `setup.py'., Hartmut Goebel, 2016/10/18
- 02/97: gnu: ensure pip and setuptools are installed even for Python 2., Hartmut Goebel, 2016/10/18
- 05/97: guix: python-build-system: Add option "#:use-setuptools?" (default true)., Hartmut Goebel, 2016/10/18
- 06/97: guix: python-build-system: Add helpers for getting and setting PYTHONPATH., Hartmut Goebel, 2016/10/18
- 10/97: lint: more packages to probably be a native input., Hartmut Goebel, 2016/10/18
- 17/97: gnu: Remove needless inputs python-pip and python2-pip., Hartmut Goebel, 2016/10/18
- 20/97: gnu: python-pytest: Propagate input "python-py"., Hartmut Goebel, 2016/10/18
- 19/97: gnu: scons: Do not use setuptools for building., Hartmut Goebel, 2016/10/18
- 08/97: gnu: python-2.7: Add all guix prefixes in PYTHONPATH to site-prefixes., Hartmut Goebel, 2016/10/18
- 09/97: guix: Add lint-checker for packages which should be no inputs at all.,
Hartmut Goebel <=
- 21/97: gnu: python-pytest-cov: Use upstream options for testing., Hartmut Goebel, 2016/10/18
- 25/97: inputs -> propagated-inputs: special, Hartmut Goebel, 2016/10/18
- 14/97: gnu: Remove python-setuptools and python2-setuptools from inputs (part 3), Hartmut Goebel, 2016/10/18
- 26/97: gnu: python-sphinx-rtd-theme: Remove inputs., Hartmut Goebel, 2016/10/18
- 32/97: gnu: python-h5py: Remove needless "python2-variant" property., Hartmut Goebel, 2016/10/18
- 24/97: gnu: Fix inputs in python.scm, part 2: native-inputs -> propagated-inputs., Hartmut Goebel, 2016/10/18
- 18/97: gnu: Remove work-arounds for bug 20765 (ensure uncompressed eggs)., Hartmut Goebel, 2016/10/18
- 34/97: gnu: python-fixture: Correct inputs., Hartmut Goebel, 2016/10/18
- 23/97: gnu: Fix inputs in python.scm, part 2: inputs -> native-inputs., Hartmut Goebel, 2016/10/18
- 28/97: make native-inputs: simple ones: one nose, docuitls, phinx, tests, …, Hartmut Goebel, 2016/10/18