summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi17
-rw-r--r--guix/profiles.scm18
-rw-r--r--tests/profiles.scm13
3 files changed, 48 insertions, 0 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index d3abbf29351..c25a30701f9 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -9837,6 +9837,23 @@ line, which can often be more convenient.
9837 9837
9838@c TODO: specifications->package, etc. 9838@c TODO: specifications->package, etc.
9839 9839
9840@deffn {Procedure} build-system->manifest build-system [system] [#:target]
9841Given @var{build-system}, a variable referring to a build system value
9842suitable for the @code{build-system} field in the @code{package} record
9843type, return a manifest providing all the packages required by the build
9844system, for @var{system}, optionally when cross-compiling to
9845@var{target}.
9846
9847In order to be able to use a build system variable, the corresponding
9848module must be loaded, as in the following example:
9849
9850@lisp
9851(use-modules (guix build-system cmake))
9852
9853(build-system->manifest cmake-build-system)
9854@end lisp
9855@end deffn
9856
9840 9857
9841@node Build Systems 9858@node Build Systems
9842@section Build Systems 9859@section Build Systems
diff --git a/guix/profiles.scm b/guix/profiles.scm
index e5f8337a504..51dd0648f7a 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -127,6 +127,7 @@
127 package->manifest-entry 127 package->manifest-entry
128 package->development-manifest 128 package->development-manifest
129 packages->manifest 129 packages->manifest
130 build-system->manifest
130 ca-certificate-bundle 131 ca-certificate-bundle
131 %default-profile-hooks 132 %default-profile-hooks
132 %manifest-format-version 133 %manifest-format-version
@@ -462,6 +463,23 @@ argument and returning an alist."
462 packages) 463 packages)
463 manifest-entry=?))) 464 manifest-entry=?)))
464 465
466(define* (build-system->manifest build-system
467 #:optional
468 (system (%current-system))
469 #:key target)
470 "Return a manifest containing the list of packages pulled by BUILD-SYSTEM, a
471variable that defines a build system suitable for the PACKAGE record type."
472 (let ((empty-package (package
473 (name "empty")
474 (version "1")
475 (source #f)
476 (build-system build-system)
477 (home-page #f)
478 (synopsis #f)
479 (description #f)
480 (license #f))))
481 (package->development-manifest empty-package system #:target target)))
482
465(define %manifest-format-version 483(define %manifest-format-version
466 ;; The current manifest format version. 484 ;; The current manifest format version.
467 4) 485 4)
diff --git a/tests/profiles.scm b/tests/profiles.scm
index f63c0773cb3..55e7146a7a0 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -1,6 +1,7 @@
1;;; GNU Guix --- Functional package management for GNU 1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013-2023 Ludovic Courtès <ludo@gnu.org> 2;;; Copyright © 2013-2023 Ludovic Courtès <ludo@gnu.org>
3;;; Copyright © 2014 Alex Kost <alezost@gmail.com> 3;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
4;;; Copyright © 2026 Simon Tournier <zimon.toutoune@gmail.com>
4;;; 5;;;
5;;; This file is part of GNU Guix. 6;;; This file is part of GNU Guix.
6;;; 7;;;
@@ -271,6 +272,18 @@
271 (manifest-pattern (name name)))) 272 (manifest-pattern (name name))))
272 '("gcc" "binutils" "glibc" "coreutils" "grep" "sed")))) 273 '("gcc" "binutils" "glibc" "coreutils" "grep" "sed"))))
273 274
275(test-assert "build-system->manifest"
276 (let* ((package packages:hello)
277 (development-manifest (package->development-manifest package))
278 (build-system-manifest (build-system->manifest (package-build-system
279 package)))
280 (development-entries (manifest-entries development-manifest))
281 (build-system-entries (manifest-entries build-system-manifest)))
282 (and (eqv? (length development-entries)
283 (length build-system-entries))
284 (null? (lset-difference manifest-entry=?
285 development-entries build-system-entries)))))
286
274(test-assertm "profile-derivation" 287(test-assertm "profile-derivation"
275 (mlet* %store-monad 288 (mlet* %store-monad
276 ((entry -> (package->manifest-entry %bootstrap-guile)) 289 ((entry -> (package->manifest-entry %bootstrap-guile))