aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/build/ruby-build-system.scm19
1 files changed, 15 insertions, 4 deletions
diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm
index 95793f77b8..c2d2766279 100644
--- a/guix/build/ruby-build-system.scm
+++ b/guix/build/ruby-build-system.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2015 Pjotr Prins <pjotr.public01@thebird.nl>
-;;; Copyright © 2015 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2015, 2016 Ben Woodcroft <donttrustben@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -69,6 +69,16 @@ directory."
(define (first-gemspec)
(first-matching-file "\\.gemspec$"))
+(define* (replace-git-ls-files #:key source #:allow-other-keys)
+ "Many gemspec files downloaded from outside rubygems.org use `git ls-files`
+to list of the files to be included in the built gem. However, since this
+operation is not deterministic, we replace it with `find`."
+ (when (not (gem-archive? source))
+ (let ((gemspec (first-gemspec)))
+ (substitute* gemspec
+ (("`git ls-files`") "`find . -type f |sort`"))))
+ #t)
+
(define* (extract-gemspec #:key source #:allow-other-keys)
"Remove the original gemspec, if present, and replace it with a new one.
This avoids issues with upstream gemspecs requiring tools such as git to
@@ -162,11 +172,12 @@ GEM-FLAGS are passed to the 'gem' invokation, if present."
(define %standard-phases
(modify-phases gnu:%standard-phases
(delete 'configure)
+ (replace 'unpack unpack)
(add-before 'build 'extract-gemspec extract-gemspec)
+ (add-after 'extract-gemspec 'replace-git-ls-files replace-git-ls-files)
(replace 'build build)
- (replace 'unpack unpack)
- (replace 'install install)
- (replace 'check check)))
+ (replace 'check check)
+ (replace 'install install)))
(define* (ruby-build #:key inputs (phases %standard-phases)
#:allow-other-keys #:rest args)