-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
104 lines (88 loc) · 2.78 KB
/
Makefile
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
92
93
94
95
96
97
98
99
100
101
102
103
104
# Copyright (C) 2019 Serghei Iakovlev
#
# This file is not part of GNU Emacs.
#
# License
#
# This file 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.
#
# This file 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 this file; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
SHELL := $(shell which bash)
ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
EMACS = emacs
CASK = cask
EMACSFLAGS ?=
TESTFLAGS ?=
PKGDIR := $(shell EMACS=$(EMACS) $(CASK) package-directory)
# File lists
SRCS = bnf-mode.el
OBJS = $(SRCS:.el=.elc)
.SILENT: ; # no need for @
.ONESHELL: ; # recipes execute in same shell
.NOTPARALLEL: ; # wait for this target to finish
.EXPORT_ALL_VARIABLES: ; # send all vars to shell
Makefile: ; # skip prerequisite discovery
# Run make help by default
.DEFAULT_GOAL = help
# Internal variables
EMACSBATCH = $(EMACS) -Q --batch -L . $(EMACSFLAGS)
RUNEMACS =
# Program availability
HAVE_CASK := $(shell sh -c "command -v $(CASK)")
ifndef HAVE_CASK
$(warning "$(CASK) is not available. Please run make help")
RUNEMACS = $(EMACSBATCH)
else
RUNEMACS = $(CASK) exec $(EMACSBATCH)
endif
%.elc: %.el $(PKGDIR)
$(RUNEMACS) -f batch-byte-compile $<
$(PKGDIR): Cask
$(CASK) install
touch $(PKGDIR)
# Public targets
.PHONY: .title
.title:
$(info BNF Mode $(shell cat $(ROOT_DIR)/$(SRCS) | grep ";; Version:" | awk -F': ' '{print $$2}'))
$(info )
.PHONY: init
init: $(PKGDIR)
.PHONY: checkdoc
checkdoc:
$(EMACSBATCH) --eval '(checkdoc-file "$(SRCS)")'
.PHONY: build
build: $(OBJS)
.PHONY: test
test:
$(CASK) exec ert-runner $(TESTFLAGS)
.PHONY: clean
clean:
$(CASK) clean-elc
.PHONY: help
help: .title
echo 'Run `make init` first to install and update all local dependencies.'
echo ''
echo 'Available targets:'
echo ' help: Show this help and exit'
echo ' init: Initialise the project (has to be launched first)'
echo ' checkdoc: Checks BNF Mode code for errors in documentation'
echo ' build: Byte compile BNF Mode package'
echo ' test: Run the non-interactive unit test suite'
echo ' clean: Remove all byte compiled Elisp files'
echo ''
echo 'Available programs:'
echo ' $(CASK): $(if $(HAVE_CASK),yes,no)'
echo ''
echo 'You need $(CASK) to develop BNF Mode. See http://cask.readthedocs.io/ for more.'
echo ''