summary refs log tree commit diff
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
parent927ff2c379bbab184a7b783d5cec91e53ceaa7e2 (diff)
downloadguix-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.
-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)