summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/build/ruby-build-system.scm17
1 files changed, 10 insertions, 7 deletions
diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm
index 49400b204d..63c94765f7 100644
--- a/guix/build/ruby-build-system.scm
+++ b/guix/build/ruby-build-system.scm
@@ -143,13 +143,16 @@ GEM-FLAGS are passed to the 'gem' invokation, if present."
          (gem-dir (string-append vendor-dir "/gems/" gem-name)))
     (setenv "GEM_VENDOR" vendor-dir)
 
-    (or (apply invoke "gem" "install" gem-file
-               "--verbose"
-               "--local" "--ignore-dependencies" "--vendor"
-               ;; Executables should go into /bin, not
-               ;; /lib/ruby/gems.
-               "--bindir" (string-append out "/bin")
-               gem-flags)
+    (or (zero?
+          ;; 'zero? system*' allows the custom error handling to function as
+          ;; expected, while 'invoke' raises its own exception.
+         (apply system* "gem" "install" gem-file
+                "--verbose"
+                "--local" "--ignore-dependencies" "--vendor"
+                ;; Executables should go into /bin, not
+                ;; /lib/ruby/gems.
+                "--bindir" (string-append out "/bin")
+                gem-flags))
         (begin
           (let ((failed-output-dir (string-append (getcwd) "/out")))
             (mkdir failed-output-dir)