diff --git a/guix/import/cran.scm b/guix/import/cran.scm index 01fb8552f9..fe69cb87f7 100644 --- a/guix/import/cran.scm +++ b/guix/import/cran.scm @@ -552,10 +552,23 @@ (define (needed-libraries-in-directory dir) (set) (find-files dir "(Makevars(.in.*)?|configure.*)")))) -;; A pattern matching "library" or "require" statements, capturing the first -;; argument. +;; A pattern matching package imports. It detects uses of "library" or +;; "require", capturing the first argument; it also detects direct access of +;; namespaces via "::" or ":::", capturing the namespace. (define import-pattern - (make-regexp "^ *(require|library)\\(\"?([^, \")]+)")) + (make-regexp + (string-append + ;; Ignore leading spaces, but don't capture commented expressions. + "(^ *" + ;; Quiet imports + "(suppressPackageStartupMessages\\()?" + ;; the actual import statement. + "(require|library)\\(\"?([^, \")]+)" + ;; Or perhaps... + "|" + ;; ...direct namespace access. + " *([A-Za-z0-9]+):::?" + ")"))) (define (needed-test-inputs-in-directory dir) "Return a set of R package names that are found in library import @@ -581,8 +594,10 @@ (define (needed-test-inputs-in-directory dir) (else (loop (fold (lambda (match acc) - (let ((imported (match:substring match 2))) - (if (or (string=? imported package-directory-name) + (let ((imported (or (match:substring match 4) + (match:substring match 5)))) + (if (or (not imported) + (string=? imported package-directory-name) (member imported default-r-packages)) acc (set-insert imported acc)))) @@ -623,8 +638,9 @@ (define (needed-vignettes-inputs-in-directory dir) (else (loop (fold (lambda (match acc) - (let ((imported (match:substring match 2))) - (if (or (string=? imported package-directory-name) + (let ((imported (match:substring match 4))) + (if (or (not imported) + (string=? imported package-directory-name) (member imported default-r-packages)) acc (set-insert imported acc))))