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
81
82
83
84
85
86
87
88
89
90
91
| | ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 ng0 <ng0@crash.cx>
;;;
;;; 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 (guix build vim-build-system)
#:use-module ((guix build gnu-build-system) #:prefix gnu:)
#:use-module (guix build utils)
#:use-module (srfi srfi-11)
#:export (%standard-phases
%default-exclude
vim-build))
;; Commentary:
;;
;; Builder-side code of the build procedure for vim packages.
;;
;; Code:
;; These are the default inclusion/exclusion regexps for the install phase.
(define %default-exclude '("^.github$" "^.*\\.md$" "LICENSE" "COPYING"
"^.*README.*$" "^\\.travis\\.yml$"
"^.*Makefile.*$"))
(define gnu:unpack (assoc-ref gnu:%standard-phases 'unpack))
(define (store-file->vim-source-file file)
"Convert FILE, a store file name for an Vim source file, into a file
name that has been stripped of the hash and version number."
(let ((suffix ".vim"))
(let-values (((name version)
(package-name->name+version
(basename
(strip-store-file-name file) suffix))))
(string-append name suffix))))
(define* (unpack #:key source #:allow-other-keys)
"Unpack SOURCE into the build directory. SOURCE may be a compressed
archive, a directory or a '.vim' file."
(if (string-suffix? ".vim" source)
(begin
(mkdir "source")
(chdir "source")
(copy-file source (store-file->vim-source-file source))
#t)
(gnu:unpack #:source source)))
;; FIXME: Files like README.md and other, more unpredictable file names,
;; are currently being installed. Because there is no concept of a
;; standardized build-system in Vim extensions, we have to find a long-term
;; solution to exclusion of files that are not used at runtime.
(define* (install #:key outputs
(exclude %default-exclude)
#:allow-other-keys)
"Install the package contents."
(let* ((out (assoc-ref outputs "out"))
(source (getcwd))
(vimfiles (string-append out "/share/vim/vimfiles")))
(for-each delete-file-recursively
(find-files source "^\\.git$"))
(for-each delete-file-recursively
(find-files source "^\\.gitignore$"))
(mkdir out)
(copy-recursively "." vimfiles)
#t))
(define %standard-phases
(modify-phases gnu:%standard-phases
(replace 'unpack unpack)
(delete 'configure)
(delete 'check)
(delete 'build)
(replace 'install install)))
(define* (vim-build #:key inputs (phases %standard-phases)
#:allow-other-keys #:rest args)
"Build the given vim package, applying all of PHASES in order."
(apply gnu:gnu-build #:inputs inputs #:phases phases args))
|