summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2015-02-23 18:18:59 -0500
committerDavid Thompson <dthompson2@worcester.edu>2015-03-02 17:33:53 -0500
commit7e7c6a1ac06a8e04acbdc9bbfe9ccc039d188977 (patch)
treeb5e7a942da6f360713288d5866113bb05095a607 /guix
parent927ff2c379bbab184a7b783d5cec91e53ceaa7e2 (diff)
downloadguix-patches-7e7c6a1ac06a8e04acbdc9bbfe9ccc039d188977.tar
guix-patches-7e7c6a1ac06a8e04acbdc9bbfe9ccc039d188977.tar.gz
build: ruby: Add gitify phase.
* guix/build-system/ruby.scm (lower): Add git as implicit input. * guix/build/ruby-build-system.scm (gitify): New procedure. (%standard-phases): Add gitify phase.
Diffstat (limited to 'guix')
-rw-r--r--guix/build-system/ruby.scm32
-rw-r--r--guix/build/ruby-build-system.scm21
2 files changed, 33 insertions, 20 deletions
diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm
index d2dd6a48cc..08301ec609 100644
--- a/guix/build-system/ruby.scm
+++ b/guix/build-system/ruby.scm
@@ -43,22 +43,24 @@
(define private-keywords
'(#:source #:target #:ruby #:inputs #:native-inputs))
- (and (not target) ;XXX: no cross-compilation
- (bag
- (name name)
- (system system)
- (host-inputs `(,@(if source
- `(("source" ,source))
- '())
- ,@inputs
+ (let ((version-control (resolve-interface '(gnu packages version-control))))
+ (and (not target) ;XXX: no cross-compilation
+ (bag
+ (name name)
+ (system system)
+ (host-inputs `(,@(if source
+ `(("source" ,source))
+ '())
+ ,@inputs
- ;; Keep the standard inputs of 'gnu-build-system'.
- ,@(standard-packages)))
- (build-inputs `(("ruby" ,ruby)
- ,@native-inputs))
- (outputs outputs)
- (build ruby-build)
- (arguments (strip-keyword-arguments private-keywords arguments)))))
+ ;; Keep the standard inputs of 'gnu-build-system'.
+ ,@(standard-packages)))
+ (build-inputs `(("ruby" ,ruby)
+ ("git" ,(module-ref version-control 'git))
+ ,@native-inputs))
+ (outputs outputs)
+ (build ruby-build)
+ (arguments (strip-keyword-arguments private-keywords arguments))))))
(define* (ruby-build store name inputs
#:key
diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm
index 2b3ba7c8cd..933788cf90 100644
--- a/guix/build/ruby-build-system.scm
+++ b/guix/build/ruby-build-system.scm
@@ -39,6 +39,14 @@ directory."
((file-name . _) file-name)
(() (error "No files matching pattern: " pattern))))
+;; Most gemspecs assume that builds are taking place within a git repository
+;; by include calls to 'git ls-files'. In order for these gemspecs to work
+;; as-is, every file in the source tree is added to the staging area.
+(define gitify
+ (lambda _
+ (and (zero? (system* "git" "init"))
+ (zero? (system* "git" "add" ".")))))
+
(define build
(lambda _
(zero? (system* "gem" "build" (first-matching-file "\\.gemspec$")))))
@@ -62,13 +70,16 @@ directory."
(first-matching-file "\\.gem$")))))
(define %standard-phases
- (alist-replace
- 'build build
+ (alist-cons-after
+ 'unpack 'gitify gitify
(alist-replace
- 'install install
+ 'build build
(alist-replace
- 'check check
- (alist-delete 'configure gnu:%standard-phases)))))
+ 'install install
+ (alist-replace
+ 'check check
+ (alist-delete
+ 'configure gnu:%standard-phases))))))
(define* (ruby-build #:key inputs (phases %standard-phases)
#:allow-other-keys #:rest args)