Hi, As bug#60200 [1], the issue is one that many of us often hit: packages with several versions and when the highest one is not the default.
Other said, build systems use some version for compiler and tools but Guix can also offer more recent versions for these very same compilers and tools. It leads to the issue when selecting the name of a compiler or tool (command line or manifest). The user does not get the ones used as default by build system. In addition to [1], another example: --8<---------------cut here---------------start------------->8--- $ guix shell ocaml ocaml-ppxlib -- ocaml --version The OCaml toplevel, version 5.0.0 --8<---------------cut here---------------end--------------->8--- But the OCaml libraries are built using OCaml compiler v4.14, thus it leads to error as: --8<---------------cut here---------------start------------->8--- Error: /gnu/store/vglxlc8riynj1g937clvwv8yg40lln6z-profile/lib/ocaml/site-lib/ppxlib/ppxlib.cmi is not a compiled interface for this version of OCaml. It seems to be for an older version of OCaml. --8<---------------cut here---------------end--------------->8--- For other cases, such issue is avoided by appending the suffix -next to package name; as with ghc-next, python-numpy-next, emacs-next, etc. Personally, I find the -next trick useful because the package name reflects that it is not the default. However, it can be annoying to update manifest files when this -next is becoming default. Well, what do people think about this Lars’s patch?
diff --git a/gnu/packages.scm b/gnu/packages.scm index 61345f75a9..7e5a6d49c2 100644 --- a/gnu/packages.scm +++ b/gnu/packages.scm @@ -356,20 +356,24 @@ (define cache (find-packages-by-name/direct name version)))) (define (find-best-packages-by-name name version) - "If version is #f, return the list of packages named NAME with the highest -version numbers; otherwise, return the list of packages named NAME and at -VERSION." + "If version is #f, return the list of packages named NAME with only +packages marked default? or, if none exist, the highest version numbers; +otherwise, return the list of packages named NAME and at VERSION." (if version (find-packages-by-name name version) (match (find-packages-by-name name) (() '()) ((matches ...) - ;; Return the subset of MATCHES with the higher version number. - (let ((highest (package-version (first matches)))) - (take-while (lambda (p) - (string=? (package-version p) highest)) - matches)))))) + ;; Return the subset of MATCHES which are marked default or those with + ;; the higher version number. + (let ((highest (package-version (first matches))) + (default (filter (lambda (p) (assoc-ref (package-properties p) 'default?)) matches))) + (if (not (null? default)) + default + (take-while (lambda (p) + (string=? (package-version p) highest)) + matches))))))) ;; Prevent Guile 3 from inlining this procedure so we can mock it in tests. (set! find-best-packages-by-name find-best-packages-by-name) diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index b4566b41cc..2d5e0add26 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -3855,7 +3855,10 @@ (define* (make-gcc-toolchain gcc ("libc-static" ,libc "static")))))) (define-public gcc-toolchain - (make-gcc-toolchain gcc-final)) + (let ((parent (make-gcc-toolchain gcc-final))) + (package + (inherit parent) + (properties (alist-cons 'default? #t (package-properties parent)))))) (define-public gcc-toolchain-4.8 (make-gcc-toolchain gcc-4.8))
1: <http://issues.guix.gnu.org/msgid/y6bsqpbk7bgw5...@noor.fritz.box> Cheers, simon