summaryrefslogtreecommitdiff
path: root/guix.scm
blob: 12460396cca70dba46d143140c369f566b353167 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
(use-modules (guix packages)
             (guix gexp)
             (guix store)
             (guix monads)
             (guix derivations)
             (gnu packages base)
             (gnu packages compression)
             (gnu packages emacs)
             (gnu packages gettext)
             (gnu packages gnupg)
             (gnu packages guile)
             (gnu packages guile-xyz)
             (gnu packages version-control))

(let ((local-repo
       (local-file ".git" "disfluid.git" #:recursive? #t))
      (bootstrap-script
       (computed-file
        "bootstrap.scm"
        #~(call-with-output-file #$output
            (lambda (port)
              (write
               '((@ (disfluid build bootstrap) main)
                 #:emacs #$(file-append emacs "/bin/emacs")
                 #:hall #$(file-append guile-hall "/bin/hall")
                 #:git #$(file-append git "/bin/git")
                 #:mkdir #$(file-append coreutils "/bin/mkdir")
                 #:which #$(file-append which "/bin/which")
                 #:autoreconf #$(file-append coreutils "/bin/true"))
               port))))))
  (run-with-store (open-connection)
    (mlet %store-monad
        ((guix.scm
          (gexp->derivation
              "guix.scm"
            (with-imported-modules '((guix build utils))
              #~(begin
                  (use-modules (guix build utils))
                  (set-path-environment-variable "PATH" '("bin") (list #$guile-3.0))
                  (invoke #$(file-append git "/bin/git") "clone" #$local-repo ".")
                  (delete-file "guix.scm")
                  (setenv "HOME" (getcwd))
                  (invoke #$(file-append guile-3.0 "/bin/guile") "-L" "." "-s" #$bootstrap-script)
                  (invoke #$(file-append guile-hall "/bin/hall") "guix" "-x")
                  (copy-file "guix.scm" #$output)))))
         (snapshot.tar.gz
          (gexp->derivation
              "disfluid-snapshot.tar.gz"
            (with-imported-modules '((guix build utils))
              #~(begin
                  (use-modules (guix build utils))
                  (set-path-environment-variable "PATH" '("bin") (list #$gzip))
                  (invoke #$(file-append git "/bin/git") "clone" #$local-repo ".")
                  (invoke #$(file-append git "/bin/git") "archive" "-o" #$output "HEAD"))))))
      (mlet %store-monad
          ((built (built-derivations (list guix.scm snapshot.tar.gz))))
        (let ((base (load (derivation->output-path guix.scm))))
          (return
           (package
             (inherit base)
             (arguments
              `(#:phases
                (modify-phases %standard-phases
                  (replace 'bootstrap
                    (lambda* (#:key inputs #:allow-other-keys)
                      (chdir "..")
                      (setenv "HOME" (getcwd))
                      (invoke "guile" "./bootstrap"))))))
             (native-inputs
              `(,@(package-native-inputs base)
                ("guile-hall" ,guile-hall)
                ("emacs" ,emacs)
                ("gettext" ,gnu-gettext)
                ("autoconf-archive" ,autoconf-archive)))
             (source (derivation->output-path snapshot.tar.gz))
             (synopsis
              (format #f "[SNAPSHOT]: ~a" (package-synopsis base)))
             (description
              (format #f "~a\n\nThis package version is @strong{not} released yet."
                      (package-description base))))))))))