@@ -24,12 +24,16 @@ INSTALL_INFO = install-info
24
24
# This is particularly useful when EMACS is set in ~/.bash_profile
25
25
#
26
26
EMACS := $(shell which "$${EMACS}" || which "emacs")
27
+ EMACS_VERSION := $(shell "$(EMACS ) " -Q --batch --eval '(princ emacs-version) ')
27
28
28
29
EFLAGS = --eval "(add-to-list 'load-path (expand-file-name \"tests/compat\") 'append)" \
29
30
--eval "(when (< emacs-major-version 24) \
30
31
(setq byte-compile-warnings '(not cl-functions)))" \
31
32
--eval '(setq byte-compile-error-on-warn t)' \
32
- --eval '(when (not (version< emacs-version "24.4")) (setq load-prefer-newer t))'
33
+ --eval '(when (not (version< emacs-version "24.4")) (setq load-prefer-newer t))' \
34
+ --eval '(defun byte-compile-dest-file (filename) \
35
+ (concat (file-name-directory filename) "build-" emacs-version "/" \
36
+ (file-name-nondirectory filename) "c"))'
33
37
34
38
BATCH = $(EMACS ) $(EFLAGS ) --batch -Q -L .
35
39
@@ -75,17 +79,13 @@ ELFILES = \
75
79
haskell-utils.el \
76
80
inf-haskell.el
77
81
78
- ELCFILES = $(ELFILES:.el=.elc )
82
+ ELCHECKS := $(shell echo tests/* -tests.el)
83
+
79
84
AUTOLOADS = haskell-mode-autoloads.el
80
85
81
86
PKG_DIST_FILES = $(ELFILES ) logo.svg NEWS haskell-mode.info dir
82
- ELCHECKS =$(addprefix check-, $(ELFILES:.el= ) )
83
-
84
- % .elc : % .el
85
- @$(BATCH ) \
86
- -f batch-byte-compile $* .el
87
87
88
- .PHONY : all compile info clean check $( ELCHECKS ) elpa package check-emacs-version
88
+ .PHONY : all compile info clean check check-emacs-version
89
89
90
90
all : check-emacs-version compile $(AUTOLOADS ) info
91
91
@@ -100,20 +100,30 @@ check-emacs-version :
100
100
(message \" 3. make EMACS=/path/to/emacs\") \
101
101
(kill-emacs 2))"
102
102
103
- compile : $(ELCFILES )
104
-
105
- $(ELCHECKS ) : check-% : % .el % .elc
106
- @$(BATCH ) --eval ' (when (check-declare-file "$*.el") (error "check-declare failed"))'
107
- @if [ -f " $( < :%.el=tests/%-tests.el) " ]; then \
108
- $(BATCH ) -l " $( < :%.el=tests/%-tests.el) " -f ert-run-tests-batch-and-exit; \
103
+ compile : build-$(EMACS_VERSION )
104
+
105
+ build-$(EMACS_VERSION ) : $(ELFILES )
106
+ if [ ! -d $@ ]; then mkdir $@ ; fi
107
+ $(BATCH ) -f batch-byte-compile-if-not-done $^
108
+
109
+ check-% : tests/% -tests.el
110
+ $(BATCH ) -l " $<" -f ert-run-tests-batch-and-exit;
111
+
112
+ check : $(ELCHECKS ) build-$(EMACS_VERSION )
113
+ $(BATCH ) --eval " (when (>= emacs-major-version 24) \
114
+ (require 'undercover) \
115
+ (undercover \"*.el\" ( :exclude \"haskell-mode-pkg.el\")))" \
116
+ $(patsubst %,-l %,$(ELCHECKS)) \
117
+ -f ert-run-tests-batch-and-exit
118
+ @TAB=$$(echo "\t"); \
119
+ if grep -Hn "[ $${TAB}]\+\$$" *.el; then \
120
+ echo "Some files contain whitespace at the end of lines, correct it"; \
121
+ exit 3; \
109
122
fi
110
- @echo " --"
111
-
112
- check : $(ELCHECKS )
113
123
@echo "checks passed!"
114
124
115
125
clean :
116
- $(RM ) $( ELCFILES ) $(AUTOLOADS ) $(AUTOLOADS:.el=.elc ) haskell-mode.info dir
126
+ $(RM ) -r build- $( EMACS_VERSION ) $(AUTOLOADS ) $(AUTOLOADS:.el=.elc ) haskell-mode.info dir
117
127
118
128
info : haskell-mode.info dir
119
129
@@ -158,7 +168,7 @@ doc/html : doc/html/index.html \
158
168
deploy-manual : doc/html
159
169
cd doc && ./deploy-manual.sh
160
170
161
- $(AUTOLOADS ) : $(ELFILES ) haskell-mode.elc
171
+ $(AUTOLOADS ) : $(ELFILES )
162
172
$(BATCH ) \
163
173
--eval ' (setq make-backup-files nil)' \
164
174
--eval ' (setq generated-autoload-file "$(CURDIR)/$@")' \
0 commit comments