guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] build: ruby: Add gitify phase.


From: David Thompson
Subject: [PATCH] build: ruby: Add gitify phase.
Date: Tue, 24 Feb 2015 22:20:27 -0500
User-agent: Notmuch/0.18.2 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-pc-linux-gnu)

This patch solves a blocking issue for packaging a very large number of
Ruby gems, which is that the build process assumes you are working out
of a git repository.

>From 7828651066c6a6eb338ca5343456228f0edbeafa Mon Sep 17 00:00:00 2001
From: David Thompson <address@hidden>
Date: Mon, 23 Feb 2015 18:18:59 -0500
Subject: [PATCH] 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.
---
 guix/build-system/ruby.scm       | 32 +++++++++++++++++---------------
 guix/build/ruby-build-system.scm | 21 ++++++++++++++++-----
 2 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm
index d2dd6a4..08301ec 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 2b3ba7c..933788c 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)
-- 
2.1.4

-- 
David Thompson
Web Developer - Free Software Foundation - http://fsf.org
GPG Key: 0FF1D807
Support the FSF: https://fsf.org/donate

reply via email to

[Prev in Thread] Current Thread [Next in Thread]