Commit | Line | Data |
---|---|---|
bbece175 GM |
1 | ### @configure_input@ |
2 | ||
ba318903 | 3 | # Copyright (C) 2010-2014 Free Software Foundation, Inc. |
d221e780 CO |
4 | |
5 | # This file is part of GNU Emacs. | |
6 | ||
7 | # GNU Emacs is free software: you can redistribute it and/or modify | |
8 | # it under the terms of the GNU General Public License as published by | |
9 | # the Free Software Foundation, either version 3 of the License, or | |
10 | # (at your option) any later version. | |
11 | ||
12 | # GNU Emacs is distributed in the hope that it will be useful, | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | # GNU General Public License for more details. | |
16 | ||
17 | # You should have received a copy of the GNU General Public License | |
18 | # along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | |
19 | ||
50b13cde | 20 | SHELL = @SHELL@ |
d221e780 CO |
21 | |
22 | srcdir = @srcdir@ | |
d221e780 | 23 | VPATH = $(srcdir) |
d221e780 | 24 | |
0845be75 | 25 | SEPCHAR = @SEPCHAR@ |
2df10228 | 26 | |
009111d6 GM |
27 | # Empty for all systems except MinGW, where xargs needs an explicit |
28 | # limitation. | |
29 | XARGS_LIMIT = @XARGS_LIMIT@ | |
30 | ||
67fb4e6a GM |
31 | # We never change directory before running Emacs, so a relative file |
32 | # name is fine, and makes life easier. If we need to change | |
33 | # directory, we can use emacs --chdir. | |
34 | EMACS = ../../src/emacs | |
d221e780 CO |
35 | |
36 | # Command line flags for Emacs. | |
2df10228 GM |
37 | # Apparently MSYS bash would convert "-L :" to "-L ;" anyway, |
38 | # but we might as well be explicit. | |
0845be75 | 39 | EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)" |
d221e780 | 40 | |
67bb589e | 41 | # Extra flags to pass to the byte compiler. |
d221e780 | 42 | BYTE_COMPILE_EXTRA_FLAGS = |
d221e780 CO |
43 | |
44 | # The actual Emacs command run in the targets below. | |
8b77446f | 45 | # Prevent any setting of EMACSLOADPATH in user environment causing problems. |
17e0445b | 46 | emacs = EMACSLOADPATH= LC_ALL=C EMACS_TEST_DIRECTORY=$(srcdir) "$(EMACS)" $(EMACSOPT) |
d221e780 CO |
47 | |
48 | # Common command to find subdirectories | |
6b4ac03e GM |
49 | setwins=for file in `find $(srcdir) -type d -print`; do \ |
50 | case $$file in $(srcdir)*/data* | $(srcdir)*/flymake* ) ;; \ | |
f8ccce03 | 51 | *) wins="$$wins$${wins:+ }$$file" ;; \ |
d221e780 CO |
52 | esac; \ |
53 | done | |
54 | ||
67bb589e | 55 | .PHONY: all check |
d221e780 | 56 | |
67bb589e | 57 | all: check |
d221e780 | 58 | |
67bb589e | 59 | # The compilation stuff is copied from lisp/Makefile - see comments there. |
d221e780 CO |
60 | |
61 | .SUFFIXES: .elc .el | |
62 | ||
d221e780 CO |
63 | .el.elc: |
64 | @echo Compiling $< | |
2d748773 | 65 | @$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $< |
d221e780 | 66 | |
67bb589e | 67 | |
67fb4e6a | 68 | .PHONY: compile-targets compile-main compile-clean |
d221e780 | 69 | |
d221e780 CO |
70 | # TARGETS is set dynamically in the recursive call from `compile-main'. |
71 | compile-targets: $(TARGETS) | |
72 | ||
73 | # Compile all the Elisp files that need it. Beware: it approximates | |
74 | # `no-byte-compile', so watch out for false-positives! | |
67fb4e6a | 75 | compile-main: compile-clean |
2d748773 | 76 | @$(setwins); \ |
d221e780 CO |
77 | els=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \ |
78 | for el in $$els; do \ | |
79 | test -f $$el || continue; \ | |
80 | test ! -f $${el}c && GREP_OPTIONS= grep '^;.*no-byte-compile: t' $$el > /dev/null && continue; \ | |
81 | echo "$${el}c"; \ | |
009111d6 | 82 | done | xargs $(XARGS_LIMIT) echo | \ |
d221e780 CO |
83 | while read chunk; do \ |
84 | $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \ | |
85 | done | |
86 | ||
d221e780 CO |
87 | # Erase left-over .elc files that do not have a corresponding .el file. |
88 | compile-clean: | |
2d748773 | 89 | @$(setwins); \ |
d221e780 CO |
90 | elcs=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.elc |g'`; \ |
91 | for el in $$(echo $$elcs | sed -e 's/\.elc/\.el/g'); do \ | |
92 | if test -f "$$el" -o \! -f "$${el}c"; then :; else \ | |
93 | echo rm "$${el}c"; \ | |
94 | rm "$${el}c"; \ | |
95 | fi \ | |
96 | done | |
97 | ||
67bb589e GM |
98 | |
99 | .PHONY: bootstrap-clean distclean maintainer-clean | |
d221e780 CO |
100 | |
101 | bootstrap-clean: | |
1f43ed41 | 102 | -cd $(srcdir) && rm -f *.elc */*.elc */*/*.elc */*/*/*.elc |
d221e780 CO |
103 | |
104 | distclean: | |
1f43ed41 | 105 | rm -f Makefile |
d221e780 CO |
106 | |
107 | maintainer-clean: distclean bootstrap-clean | |
108 | ||
67bb589e | 109 | |
d221e780 | 110 | check: compile-main |
2d748773 | 111 | @$(setwins); \ |
d221e780 CO |
112 | pattern=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \ |
113 | for el in $$pattern; do \ | |
114 | test -f $$el || continue; \ | |
115 | args="$$args -l $$el"; \ | |
116 | els="$$els $$el"; \ | |
117 | done; \ | |
118 | echo Testing $$els; \ | |
2d748773 | 119 | $(emacs) $$args -f ert-run-tests-batch-and-exit |
d221e780 CO |
120 | |
121 | # Makefile ends here. |