unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
blob 039d35acd4469619c3c21f667e9389ed0d5322b1 3201 bytes (raw)
name: build-aux/build-self.scm 	 # note: path name is non-authoritative(*)

 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix 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.
;;;
;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (build-self)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-19)
  #:use-module (ice-9 match)
  #:export (build))

;;; Commentary:
;;;
;;; When loaded, this module returns a monadic procedure of at least one
;;; argument: the source tree to build.  It returns a derivation that
;;; builds it.
;;;
;;; This file uses modules provided by the already-installed Guix.  Those
;;; modules may be arbitrarily old compared to the version we want to
;;; build.  Because of that, it must rely on the smallest set of features
;;; that are likely to be provided by the (guix) and (gnu) modules, and by
;;; Guile itself, forever and ever.
;;;
;;; Code:

;; Use our very own Guix modules.
(eval-when (compile load eval)

  ;; Ignore any available .go, and force recompilation.  This is because our
  ;; checkout in the store has mtime set to the epoch, and thus .go files look
  ;; newer, even though they may not correspond.
  (set! %fresh-auto-compile #t)

  (and=> (assoc-ref (current-source-location) 'filename)
         (lambda (file)
           (let ((dir (string-append (dirname file) "/../..")))
             (set! %load-path (cons dir %load-path))))))

(define (date-version-string)
  "Return the current date and hour in UTC timezone, for use as a poor
person's version identifier."
  ;; XXX: Last resort when the Git commit id is missing.
  (date->string (current-date 0) "~Y~m~d.~H"))

;; The procedure below is our return value.
(define* (build source
                #:key verbose? (version (date-version-string))
                #:allow-other-keys
                #:rest rest)
  "Return a derivation that unpacks SOURCE into STORE and compiles Scheme
files."
  ;; FIXME: Closures in (guix scripts pull) have already cached old values of
  ;; (guix …), so they keep referring to the "old" world, with different
  ;; record types than the one we get after reloading (because record types
  ;; are "generative".)
  (let ((reload-guix (module-ref (resolve-interface '(guix self))
                                 'reload-guix)))
    (reload-guix))                                ;cross fingers!

  (let ((guix-derivation (module-ref (resolve-interface '(guix self))
                                     'guix-derivation)))
    (guix-derivation source version)))

;; This file is loaded by 'guix pull'; return it the build procedure.
build

;;; build-self.scm ends here

debug log:

solving 039d35acd ...
found 039d35acd in https://yhetil.org/guix-bugs/87y3nw6tjh.fsf@gnu.org/
found ed8ff5f4c in https://git.savannah.gnu.org/cgit/guix.git
preparing index
index prepared:
100644 ed8ff5f4cebabc90b49938216b872da97b9a7bcf	build-aux/build-self.scm

applying [1/1] https://yhetil.org/guix-bugs/87y3nw6tjh.fsf@gnu.org/
diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index ed8ff5f4c..039d35acd 100644

Checking patch build-aux/build-self.scm...
Applied patch build-aux/build-self.scm cleanly.

index at:
100644 039d35acd4469619c3c21f667e9389ed0d5322b1	build-aux/build-self.scm

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).