summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Bavier <bavier@member.fsf.org>2016-04-15 23:52:19 -0500
committerEric Bavier <bavier@member.fsf.org>2016-04-25 18:31:45 -0500
commitb77d17d023257625af1281d49e8043a03289edaf (patch)
tree0dbfc79efd8b6d610e3fdcd61ac8be3e732155ac
parent5cd25aad3cdb6c970a76542e328a3beba8c1f2c9 (diff)
import: cpan: check version bounds on core modules.
Modules may be removed from Perl's core, so we must check for a removal version. * guix/import/cpan.scm (cpan-module->sexp)[core-module?]: Also check version upper bound.
-rw-r--r--guix/import/cpan.scm35
1 files changed, 25 insertions, 10 deletions
diff --git a/guix/import/cpan.scm b/guix/import/cpan.scm
index c80d568101..ad61ee7916 100644
--- a/guix/import/cpan.scm
+++ b/guix/import/cpan.scm
@@ -26,6 +26,7 @@
#:use-module (json)
#:use-module (guix hash)
#:use-module (guix store)
+ #:use-module (guix utils)
#:use-module (guix base32)
#:use-module ((guix download) #:select (download-to-store))
#:use-module (guix import utils)
@@ -121,16 +122,30 @@ META."
(define version
(assoc-ref meta "version"))
- (define (core-module? name)
- (and (force %corelist)
- (parameterize ((current-error-port (%make-void-port "w")))
- (let* ((corelist (open-pipe* OPEN_READ (force %corelist) name)))
- (let loop ((line (read-line corelist)))
- (if (eof-object? line)
- (begin (close-pipe corelist) #f)
- (if (string-contains line "first released with perl")
- (begin (close-pipe corelist) #t)
- (loop (read-line corelist)))))))))
+ (define core-module?
+ (let ((perl-version (package-version perl))
+ (rx (make-regexp
+ (string-append "released with perl v?([0-9\\.]*)"
+ "(.*and removed from v?([0-9\\.]*))?"))))
+ (lambda (name)
+ (define (version-between? lower version upper)
+ (and (version>=? version lower)
+ (or (not upper)
+ (version>? upper version))))
+ (and (force %corelist)
+ (parameterize ((current-error-port (%make-void-port "w")))
+ (let* ((corelist (open-pipe* OPEN_READ (force %corelist) name)))
+ (let loop ()
+ (let ((line (read-line corelist)))
+ (if (eof-object? line)
+ (begin (close-pipe corelist) #f)
+ (or (and=> (regexp-exec rx line)
+ (lambda (m)
+ (let ((first (match:substring m 1))
+ (last (match:substring m 3)))
+ (version-between?
+ first perl-version last))))
+ (loop)))))))))))
(define (convert-inputs phases)
;; Convert phase dependencies into a list of name/variable pairs.