diff options
| -rw-r--r-- | doc/guix.texi | 17 | ||||
| -rw-r--r-- | guix/profiles.scm | 18 | ||||
| -rw-r--r-- | tests/profiles.scm | 13 |
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] | ||
| 9841 | Given @var{build-system}, a variable referring to a build system value | ||
| 9842 | suitable for the @code{build-system} field in the @code{package} record | ||
| 9843 | type, return a manifest providing all the packages required by the build | ||
| 9844 | system, for @var{system}, optionally when cross-compiling to | ||
| 9845 | @var{target}. | ||
| 9846 | |||
| 9847 | In order to be able to use a build system variable, the corresponding | ||
| 9848 | module 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 | ||
| 471 | variable 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)) |
