guix-commits
[Top][All Lists]
Advanced

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

05/06: services: shepherd: Cross-compilation fix.


From: guix-commits
Subject: 05/06: services: shepherd: Cross-compilation fix.
Date: Sat, 25 Apr 2020 09:33:28 -0400 (EDT)

janneke pushed a commit to branch wip-hurd-vm
in repository guix.

commit cc9259a87c46cfa0dc2c59dc425b3656c9eecb13
Author: Jan (janneke) Nieuwenhuizen <address@hidden>
AuthorDate: Sat Apr 25 15:20:04 2020 +0200

    services: shepherd: Cross-compilation fix.
    
    Fixes <https://bugs.gnu.org/40839>.
    Reported by Jan (janneke) Nieuwenhuizen <address@hidden>
    Fix suggested by Mathieu Othacehe <address@hidden>
    
    * gnu/services/shepherd.scm (scm->go): Use `with-target' when 
cross-compiling.
---
 gnu/services/shepherd.scm | 40 ++++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 16 deletions(-)

diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 2f30c6c..ca4edd8 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -25,6 +25,7 @@
   #:use-module (guix store)
   #:use-module (guix records)
   #:use-module (guix derivations)                 ;imported-modules, etc.
+  #:use-module (guix utils)
   #:use-module (gnu services)
   #:use-module (gnu services herd)
   #:use-module (gnu packages admin)
@@ -260,22 +261,29 @@ stored."
 (define (scm->go file)
   "Compile FILE, which contains code to be loaded by shepherd's config file,
 and return the resulting '.go' file."
-  (with-extensions (list shepherd)
-    (computed-file (string-append (basename (scheme-file-name file) ".scm")
-                                  ".go")
-                   #~(begin
-                       (use-modules (system base compile))
-
-                       ;; Do the same as the Shepherd's 'load-in-user-module'.
-                       (let ((env (make-fresh-user-module)))
-                         (module-use! env (resolve-interface '(oop goops)))
-                         (module-use! env (resolve-interface '(shepherd 
service)))
-                         (compile-file #$file #:output-file #$output
-                                       #:env env)))
-
-                   ;; It's faster to build locally than to download.
-                   #:options '(#:local-build? #t
-                               #:substitutable? #f))))
+  (let ((target (%current-target-system)))
+    (with-extensions (list shepherd)
+      (computed-file (string-append (basename (scheme-file-name file) ".scm")
+                                    ".go")
+                     #~(begin
+                         (use-modules (system base compile)
+                                      (system base target))
+
+                         ;; Do the same as the Shepherd's 
'load-in-user-module'.
+                         (let ((env (make-fresh-user-module)))
+                           (module-use! env (resolve-interface '(oop goops)))
+                           (module-use! env (resolve-interface '(shepherd 
service)))
+                           (if #$target
+                               (with-target #$target
+                                 (lambda _
+                                   (compile-file #$file #:output-file #$output
+                                                 #:env env)))
+                               (compile-file #$file #:output-file #$output
+                                             #:env env))))
+
+                     ;; It's faster to build locally than to download.
+                     #:options '(#:local-build? #t
+                                 #:substitutable? #f)))))
 
 (define (shepherd-configuration-file services)
   "Return the shepherd configuration file for SERVICES."



reply via email to

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