mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
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.
This commit is contained in:
parent
271c0bfcf2
commit
049cff91ac
1 changed files with 45 additions and 0 deletions
|
@ -55,6 +55,7 @@ (define-module (guix import cran)
|
|||
#: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 @@ (define (directory-needs-zlib? dir)
|
|||
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."
|
||||
|
|
Loading…
Reference in a new issue