;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 ng0 ;;; ;;; 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 . (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-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) #: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))