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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
SHELL = /bin/sh
EMACS ?= emacs
FILES = $(filter-out evil-test-helpers.el evil-tests.el evil-pkg.el,$(wildcard evil*.el))
VERSION := $(shell sed -ne '/define-package/,$$p' evil-pkg.el | sed -ne '/^\s*"[[:digit:]]\+\(\.[[:digit:]]\+\)*"\s*$$/ s/^.*"\(.*\)".*$$/\1/p')
ELPAPKG = evil-$(VERSION)
PROFILER =
DOC = doc
TAG =
LIBS = -L lib
ELCFILES = $(FILES:.el=.elc)
.PHONY: all compile compile-batch docstrings doc clean tests test emacs term terminal profiler indent elpa version
# Byte-compile Evil.
all: compile
compile: $(ELCFILES)
.depend: $(FILES)
@echo Compute dependencies
@rm -f .depend
@for f in $(FILES); do \
sed -n "s/ *(require '\(evil-[^)]*\).*)/$${f}c: \1.elc/p" $$f >> .depend;\
done
-include .depend
$(ELCFILES): %.elc: %.el
$(EMACS) --batch -Q -L . $(LIBS) -f batch-byte-compile $<
# Byte-compile all files in one batch. This is faster than
# compiling each file in isolation, but also less stringent.
compile-batch: clean
$(EMACS) --batch -Q -L . $(LIBS) -f batch-byte-compile ${FILES}
# Documentation.
docstrings:
@$(EMACS) --script scripts/evil-extract-docstrings
doc: docstrings
@$(MAKE) -C doc texinfo
info: doc
@$(MAKE) -C doc info
# Delete byte-compiled files etc.
clean:
rm -f *~
rm -f \#*\#
rm -f *.elc
rm -f .depend
@$(MAKE) -C doc clean
# Run tests.
# The TAG variable may specify a test tag or a test name:
# make test TAG=repeat
# This will only run tests pertaining to the repeat system.
test:
$(EMACS) -nw -Q --batch -L . $(LIBS) -l evil-tests.el \
--eval "(evil-tests-initialize '(${TAG}) '(${PROFILER}))"
# Byte-compile Evil and run all tests.
tests: compile
$(EMACS) -nw -Q -L . $(LIBS) -l evil-tests.el \
--eval "(evil-tests-initialize '(${TAG}) '(${PROFILER}))"
rm -f *.elc .depend
# Load Evil in a fresh instance of Emacs and run all tests.
emacs:
$(EMACS) -Q -L . $(LIBS) -l goto-chg.el -l evil-tests.el \
--eval "(evil-mode 1)" \
--eval "(evil-tests-initialize '(${TAG}) '(${PROFILER}) t)"
# Load Evil in a terminal Emacs and run all tests.
term: terminal
terminal:
$(EMACS) -nw -Q -L . $(LIBS) -l goto-chg.el -l evil-tests.el \
--eval "(evil-mode 1)" \
--eval "(evil-tests-initialize '(${TAG}) '(${PROFILER}) t)"
# Run all tests with profiler.
profiler:
$(EMACS) --batch -Q -L . $(LIBS) -l goto-chg.el -l evil-tests.el \
--eval "(evil-tests-initialize '(${TAG}) (or '(${PROFILER}) t))"
# Re-indent all Evil code.
# Loads Evil into memory in order to indent macros properly.
# Also removes trailing whitespace, tabs and extraneous blank lines.
indent: clean
$(EMACS) --batch --eval '(setq vc-handled-backends nil)' ${FILES} evil-tests.el -Q -L . $(LIBS) -l evil-tests.el \
--eval "(dolist (buffer (reverse (buffer-list))) \
(when (buffer-file-name buffer) \
(set-buffer buffer) \
(message \"Indenting %s\" (current-buffer)) \
(setq-default indent-tabs-mode nil) \
(untabify (point-min) (point-max)) \
(indent-region (point-min) (point-max)) \
(delete-trailing-whitespace) \
(untabify (point-min) (point-max)) \
(goto-char (point-min)) \
(while (re-search-forward \"\\n\\\\{3,\\\\}\" nil t) \
(replace-match \"\\n\\n\")) \
(when (buffer-modified-p) (save-buffer 0))))"
# Create an ELPA package.
elpa:
@echo "Creating ELPA package $(ELPAPKG).tar"
@rm -rf ${ELPAPKG}
@mkdir ${ELPAPKG}
@cp $(FILES) COPYING evil-pkg.el ${ELPAPKG}
@tar cf ${ELPAPKG}.tar ${ELPAPKG}
@rm -rf ${ELPAPKG}
# Change the version using make VERSION=x.y.z
version:
@$(EMACS) --script scripts/evilupdate "${VERSION}"
# Change the version using make VERSION=x.y.z, but do not post to the newsgroup
nversion:
@$(EMACS) --script scripts/evilupdate nonews "${VERSION}"
|