summaryrefslogtreecommitdiff
path: root/guix/import
diff options
context:
space:
mode:
Diffstat (limited to 'guix/import')
-rw-r--r--guix/import/cran.scm10
-rw-r--r--guix/import/opam.scm58
-rw-r--r--guix/import/utils.scm4
3 files changed, 48 insertions, 24 deletions
diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index d6baa6b5e5..1d25a5125e 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -29,6 +29,7 @@
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-34)
+ #:use-module (srfi srfi-35)
#:use-module (ice-9 receive)
#:use-module (web uri)
#:use-module (guix memoization)
@@ -142,9 +143,9 @@ package definition."
(define %cran-url "https://cran.r-project.org/web/packages/")
(define %bioconductor-url "https://bioconductor.org/packages/")
-;; The latest Bioconductor release is 3.11. Bioconductor packages should be
+;; The latest Bioconductor release is 3.12. Bioconductor packages should be
;; updated together.
-(define %bioconductor-version "3.11")
+(define %bioconductor-version "3.12")
(define* (bioconductor-packages-list-url #:optional type)
(string-append "https://bioconductor.org/packages/"
@@ -585,7 +586,10 @@ s-expression corresponding to that package, or #f on failure."
((bioconductor)
;; Retry import from CRAN
(cran->guix-package package-name #:repo 'cran))
- (else (values #f '()))))))))
+ (else
+ (raise (condition
+ (&message
+ (message "couldn't find meta-data for R package")))))))))))
(define* (cran-recursive-import package-name #:key (repo 'cran))
(recursive-import package-name
diff --git a/guix/import/opam.scm b/guix/import/opam.scm
index 867812124d..670973b193 100644
--- a/guix/import/opam.scm
+++ b/guix/import/opam.scm
@@ -120,12 +120,29 @@
(define-peg-pattern condition-string all (and QUOTE (* STRCHR) QUOTE))
(define-peg-pattern condition-var all (+ (or (range #\a #\z) "-" ":")))
-(define (get-opam-repository)
+(define* (get-opam-repository #:optional repo)
"Update or fetch the latest version of the opam repository and return the
path to the repository."
- (receive (location commit _)
- (update-cached-checkout "https://github.com/ocaml/opam-repository")
- location))
+ (let ((url (cond
+ ((or (not repo) (equal? repo 'opam))
+ "https://github.com/ocaml/opam-repository")
+ ((string-prefix? "coq-" (symbol->string repo))
+ "https://github.com/coq/opam-coq-archive")
+ ((equal? repo 'coq) "https://github.com/coq/opam-coq-archive")
+ (else (throw 'unknown-repository repo)))))
+ (receive (location commit _)
+ (update-cached-checkout url)
+ (cond
+ ((or (not repo) (equal? repo 'opam))
+ location)
+ ((equal? repo 'coq)
+ (string-append location "/released"))
+ ((string-prefix? "coq-" (symbol->string repo))
+ (string-append location "/" (substring (symbol->string repo) 4)))
+ (else location)))))
+
+;; Prevent Guile 3 from inlining this procedure so we can mock it in tests.
+(set! get-opam-repository get-opam-repository)
(define (latest-version versions)
"Find the most recent version from a list of versions."
@@ -161,6 +178,7 @@ path to the repository."
(substitute-char
(cond
((equal? name "ocamlfind") "ocaml-findlib")
+ ((equal? name "coq") name)
((string-prefix? "ocaml" name) name)
((string-prefix? "conf-" name) (substring name 5))
(else (string-append "ocaml-" name)))
@@ -235,12 +253,15 @@ path to the repository."
(equal? "ocaml" name))
names)))
-(define (depends->inputs depends)
+(define (filter-dependencies depends)
+ "Remove implicit dependencies from the list of dependencies in @var{depends}."
(filter (lambda (name)
- (and (not (equal? "" name))
- (not (equal? "ocaml" name))
- (not (equal? "ocamlfind" name))))
- (map dependency->input depends)))
+ (and (not (member name '("" "ocaml" "ocamlfind" "dune" "jbuilder")))
+ (not (string-prefix? "base-" name))))
+ depends))
+
+(define (depends->inputs depends)
+ (filter-dependencies (map dependency->input depends)))
(define (depends->native-inputs depends)
(filter (lambda (name) (not (equal? "" name)))
@@ -261,18 +282,19 @@ path to the repository."
(substring version 1)
version)))))
-(define* (opam->guix-package name #:key (repository (get-opam-repository)) version)
+(define* (opam->guix-package name #:key (repo 'opam) version)
"Import OPAM package NAME from REPOSITORY (a directory name) or, if
REPOSITORY is #f, from the official OPAM repository. Return a 'package' sexp
or #f on failure."
- (and-let* ((opam-file (opam-fetch name repository))
+ (and-let* ((opam-file (opam-fetch name (get-opam-repository repo)))
(version (assoc-ref opam-file "version"))
- (opam-content (pk (assoc-ref opam-file "metadata")))
+ (opam-content (assoc-ref opam-file "metadata"))
(url-dict (metadata-ref opam-content "url"))
(source-url (or (metadata-ref url-dict "src")
(metadata-ref url-dict "archive")))
(requirements (metadata-ref opam-content "depends"))
- (dependencies (dependency-list->names requirements))
+ (names (dependency-list->names requirements))
+ (dependencies (filter-dependencies names))
(native-dependencies (depends->native-inputs requirements))
(inputs (dependency-list->inputs (depends->inputs requirements)))
(native-inputs (dependency-list->inputs
@@ -282,10 +304,7 @@ or #f on failure."
(lambda (name)
(not (member name '("dune" "jbuilder"))))
native-dependencies))))
- ;; If one of these are required at build time, it means we
- ;; can use the much nicer dune-build-system.
- (let ((use-dune? (or (member "dune" (append dependencies native-dependencies))
- (member "jbuilder" (append dependencies native-dependencies)))))
+ (let ((use-dune? (member "dune" names)))
(call-with-temporary-output-file
(lambda (temp port)
(and (url-fetch source-url temp)
@@ -322,10 +341,11 @@ or #f on failure."
(not (member name '("dune" "jbuilder"))))
dependencies))))))))
-(define (opam-recursive-import package-name)
+(define* (opam-recursive-import package-name #:key repo)
(recursive-import package-name
#:repo->guix-package opam->guix-package
- #:guix-name ocaml-name->guix-name))
+ #:guix-name ocaml-name->guix-name
+ #:repo repo))
(define (guix-name->opam-name name)
(if (string-prefix? "ocaml-" name)
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 7de95349cd..e227c2e42d 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -275,9 +275,9 @@ version. If APPEND-VERSION?/string is a string, append this string."
(cond
((string? append-version?/string)
(string-append name "-" append-version?/string))
- ((= append-version?/string #t)
+ ((eq? append-version?/string #t)
(string-append name "-" (version-major+minor version)))
- ((#t) version)))
+ (else name)))
,guix-package))))
(define (build-system-modules)