aboutsummaryrefslogtreecommitdiff
path: root/genenetwork/development-helper.scm
blob: 7602eb098bd7bc639f9407831dc9f80ffb030cc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
;;; genenetwork-machines --- Guix configuration for genenetwork machines
;;; Copyright © 2022, 2023 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2022 Frederick Muriuki Muriithi <fredmanglis@gmail.com>
;;;
;;; This file is part of genenetwork-machines.
;;;
;;; genenetwork-machines is free software: you can redistribute it
;;; and/or modify it under the terms of the GNU General Public License
;;; as published by the Free Software Foundation, either version 3 of
;;; the License, or (at your option) any later version.
;;;
;;; genenetwork-machines is distributed in the hope that it will be
;;; useful, but WITHOUT ANY WARRANTY; without even the implied
;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
;;; See the GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with genenetwork-machines.  If not, see
;;; <https://www.gnu.org/licenses/>.

(define-module (genenetwork development-helper)
  #:use-module (ice-9 match)
  #:use-module (guix gexp)
  #:use-module (guix profiles)
  #:use-module (guix search-paths)
  #:use-module (forge build utils))

(define (command-in-source-gexp source profile command)
  "Return a G-expression that runs COMMAND in PROFILE and with SOURCE
as the current directory. SOURCE and PROFILE are store items. COMMAND
is a list of strings specifying the command to be executed."
  (with-imported-modules '((guix build utils))
    (with-profile profile
      #~(begin
          (use-modules (rnrs exceptions)
                       (guix build utils))

          (chdir #$source)
          (guard (condition ((invoke-error? condition)
                             (format (current-error-port)
                                     "`~a~{ ~a~}' failed with exit status ~a~%"
                                     (invoke-error-program condition)
                                     (invoke-error-arguments condition)
                                     (invoke-error-exit-status condition))
                             (exit #f)))
            (apply invoke '#$command))
          (mkdir-p #$output)))))

(define (asdf-test-gexp source profile system asd-files)
  "Return a G-expression that tests SYSTEM using asdf after loading
ASD-FILES. SOURCE is the source code under test. PROFILE is a profile
with all necessary dependencies. SOURCE and PROFILE are both store
items."
  (with-imported-modules '((guix build lisp-utils)
                           (guix build utils))
    (with-profile profile
      #~(begin
          (use-modules (guix build lisp-utils)
                       (guix build utils))

          (chdir #$source)
          (setenv "HOME" "/tmp")
          (parameterize ((%lisp "sbcl")
                         (%lisp-type "sbcl"))
            (test-system #$system '#$asd-files #f))
          (mkdir-p #$output)))))