diff options
-rw-r--r-- | guix/build/ruby-build-system.scm | 19 |
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) |