rekado pushed a commit to branch master
in repository guix.
commit 049cff91acd3ace275c3f2af97755812af023c6b
Author: Ricardo Wurmus <[email protected]>
AuthorDate: Fri Feb 17 22:25:27 2023 +0100
import/cran: Add generic way to detect needed libraries.
* guix/import/cran.scm (needed-libraries-in-directory): New procedure.
(libraries-pattern, packages-for-matches): New variables.
---
guix/import/cran.scm | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index ebd340ecfa..75caecb620 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -55,6 +55,7 @@
#:use-module (guix ui)
#:use-module (guix upstream)
#:use-module (guix packages)
+ #:use-module (guix sets)
#:use-module (gnu packages)
#:export (%input-style
@@ -475,6 +476,50 @@ the given REGEXP."
zlib linker flag."
(files-match-pattern? dir "-lz" "(Makevars.*|configure.*)"))
+(define packages-for-matches
+ '(("-lcrypto" . "openssl")
+ ("-lcurl" . "curl")
+ ("-lgit2" . "libgit2")
+ ("-lpcre" . "pcre2")
+ ("-lssh" . "openssh")
+ ("-lssl" . "openssl")
+ ("-ltbb" . "tbb")
+ ("-lz" . "zlib")
+ ("gsl-config" . "gsl")
+ ("xml2-config" . "libxml2")
+ ("CURL_LIBS" . "curl")))
+
+(define libraries-pattern
+ (make-regexp
+ (string-append "("
+ (string-join
+ (map (compose regexp-quote first) packages-for-matches) "|")
+ ")")))
+
+(define (needed-libraries-in-directory dir)
+ "Return a list of package names that correspond to libraries that are
+referenced in build system files."
+ (set->list
+ (fold
+ (lambda (file packages)
+ (call-with-input-file file
+ (lambda (port)
+ (let loop ((packages packages))
+ (let ((line (read-line port)))
+ (cond
+ ((eof-object? line) packages)
+ (else
+ (loop
+ (fold (lambda (match acc)
+ (or (and=> (assoc-ref packages-for-matches
+ (match:substring match))
+ (cut set-insert <> acc))
+ acc))
+ packages
+ (list-matches libraries-pattern line))))))))))
+ (set)
+ (find-files dir "(Makevars.in*|configure.*)"))))
+
(define (directory-needs-pkg-config? dir)
"Return #T if any of the Makevars files in the src directory DIR reference
the pkg-config tool."