summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--build-aux/hydra/gnu-system.scm3
-rw-r--r--guix/packages.scm6
-rw-r--r--tests/packages.scm8
3 files changed, 15 insertions, 2 deletions
diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm
index 01e2859f1a..b1432f6660 100644
--- a/build-aux/hydra/gnu-system.scm
+++ b/build-aux/hydra/gnu-system.scm
@@ -204,8 +204,7 @@ all its dependencies, and ready to be installed on non-GuixSD distributions.")
 valid."
       (cond ((member package base-packages)
              #f)
-            ((member system
-                     (package-transitive-supported-systems package))
+            ((supported-package? package system)
              (package-job store (job-name package) package system))
             (else
              #f)))))
diff --git a/guix/packages.scm b/guix/packages.scm
index 8ebe8d06b5..fde46d5d6a 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -95,6 +95,7 @@
             package-grafts
 
             %supported-systems
+            supported-package?
 
             &package-error
             package-error?
@@ -581,6 +582,11 @@ supported by its dependencies."
         (package-supported-systems package)
         (bag-direct-inputs (package->bag package))))
 
+(define* (supported-package? package #:optional (system (%current-system)))
+  "Return true if PACKAGE is supported on SYSTEM--i.e., if PACKAGE and all its
+dependencies are known to build on SYSTEM."
+  (member system (package-transitive-supported-systems package)))
+
 (define (bag-direct-inputs bag)
   "Same as 'package-direct-inputs', but applied to a bag."
   (append (bag-build-inputs bag)
diff --git a/tests/packages.scm b/tests/packages.scm
index 3007b50b92..91910324fe 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -166,6 +166,14 @@
               `("does-not-exist" "foobar" ,@%supported-systems)))))
     (package-transitive-supported-systems p)))
 
+(test-assert "supported-package?"
+  (let ((p (dummy-package "foo"
+             (build-system gnu-build-system)
+             (supported-systems '("x86_64-linux" "does-not-exist")))))
+    (and (supported-package? p "x86_64-linux")
+         (not (supported-package? p "does-not-exist"))
+         (not (supported-package? p "i686-linux")))))
+
 (test-skip (if (not %store) 8 0))
 
 (test-assert "package-source-derivation, file"