Correct buggy dispatch logic.
[bpt/emacs.git] / nt / makefile.w32-in
CommitLineData
bd6766d3 1# -*- Makefile -*- for GNU Emacs on the Microsoft W32 API.\r
b65d8176 2# Copyright (C) 2000, 2001, 2002, 2003, 2004,\r
6d344054 3# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.\r
8af54a64
AI
4#\r
5# Top level makefile for building GNU Emacs on Windows NT\r
6#\r
7# This file is part of GNU Emacs.\r
177c0ea7 8#\r
8af54a64
AI
9# GNU Emacs is free software; you can redistribute it and/or modify\r
10# it under the terms of the GNU General Public License as published by\r
4a9f99bd 11# the Free Software Foundation; either version 3, or (at your option)\r
8af54a64 12# any later version.\r
177c0ea7 13#\r
8af54a64
AI
14# GNU Emacs is distributed in the hope that it will be useful,\r
15# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
17# GNU General Public License for more details.\r
177c0ea7 18#\r
8af54a64
AI
19# You should have received a copy of the GNU General Public License\r
20# along with GNU Emacs; see the file COPYING. If not, write to\r
364c38d3
LK
21# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\r
22# Boston, MA 02110-1301, USA.\r
8af54a64 23\r
7e5f4e57
EZ
24# FIXME: This file uses DOS EOLs. Convert to Unix after 22.1 is out\r
25# (and remove or replace this comment).\r
26\r
8af54a64 27TRES = $(BLD)/emacs.res\r
99e0bf59 28CLIENTRES = $(BLD)/emacsclient.res\r
8af54a64 29\r
b47342e3
EZ
30XMFLAGS =\r
31\r
8af54a64
AI
32ALL = addpm ddeclient runemacs cmdproxy addsection preprep\r
33\r
34.PHONY: $(ALL)\r
35\r
b47342e3
EZ
36\r
37addpm: stamp_BLD $(BLD)/addpm.exe\r
8af54a64
AI
38$(BLD)/addpm.exe: $(BLD)/addpm.$(O)\r
39 $(LINK) $(LINK_OUT)$@ \\r
40 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)\r
41\r
b47342e3 42ddeclient: stamp_BLD $(BLD)/ddeclient.exe\r
8af54a64
AI
43$(BLD)/ddeclient.exe: $(BLD)/ddeclient.$(O)\r
44 $(LINK) $(LINK_OUT)$@ \\r
45 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)\r
46\r
b47342e3 47cmdproxy: stamp_BLD $(BLD)/cmdproxy.exe\r
8af54a64
AI
48$(BLD)/cmdproxy.exe: $(BLD)/cmdproxy.$(O)\r
49 $(LINK) $(LINK_OUT)$@ \\r
50 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)\r
51\r
b47342e3 52addsection: stamp_BLD $(BLD)/addsection.exe\r
8af54a64
AI
53$(BLD)/addsection.exe: $(BLD)/addsection.$(O)\r
54 $(LINK) $(LINK_OUT)$@ \\r
55 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)\r
56\r
b47342e3 57preprep: stamp_BLD $(BLD)/preprep.exe\r
8af54a64
AI
58$(BLD)/preprep.exe: $(BLD)/preprep.$(O)\r
59 $(LINK) $(LINK_OUT)$@ \\r
60 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS)\r
61\r
62#\r
63# The resource file. NT 3.10 requires the use of cvtres; even though\r
64# it is not necessary on later versions, it is still ok to use it.\r
65#\r
480a77b5 66$(TRES): emacs.rc icons/emacs.ico emacs.manifest stamp_BLD\r
99e0bf59
JR
67 $(RC) $(RC_OUT)$(TRES) emacs.rc\r
68\r
69$(CLIENTRES): emacsclient.rc stamp_BLD\r
70 $(RC) $(RC_OUT)$(CLIENTRES) emacsclient.rc\r
8af54a64 71\r
b47342e3 72runemacs: stamp_BLD $(BLD)/runemacs.exe\r
8af54a64
AI
73$(BLD)/runemacs.exe: $(BLD)/runemacs.$(O) $(TRES)\r
74 $(LINK) $(LINK_OUT)$@ $(SUBSYSTEM_WINDOWS) \\r
75 $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)\r
76\r
77which-sh:\r
78 @echo Using $(THE_SHELL) as shell.\r
79\r
b47342e3
EZ
80# These depend on stamp_BLD to make sure the $(BLD) directory is created\r
81# before the compilation begins, even if Make runs several commands\r
82# in parallel under "make -j".\r
83#\r
84$(BLD)/addpm.$(O) $(BLD)/ddeclient.$(O) $(BLD)/runemacs.$(O) $(BLD)/cmdproxy.$(O) $(BLD)/addsection.$(O) $(BLD)/preprep.$(O): stamp_BLD\r
32d0013e 85\r
8af54a64
AI
86#\r
87# Build emacs\r
88#\r
4cbb903f 89all: which-sh stamp_BLD $(ALL) $(CLIENTRES) maybe-bootstrap all-other-dirs-$(MAKETYPE)\r
8af54a64 90\r
32d0013e 91all-other-dirs-nmake: addsection\r
8af54a64 92 cd ..\lib-src\r
d572c005 93 $(MAKE) $(MFLAGS) all\r
8af54a64 94 cd ..\src\r
d572c005 95 $(MAKE) $(MFLAGS) all\r
8af54a64 96 cd ..\lisp\r
d572c005 97 $(MAKE) $(MFLAGS) all\r
8af54a64 98 cd ..\leim\r
d572c005 99 $(MAKE) $(MFLAGS) all\r
8af54a64
AI
100 cd ..\nt\r
101\r
32d0013e 102all-other-dirs-gmake: addsection\r
b47342e3
EZ
103 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src all\r
104 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src all\r
105 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp all\r
106 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim all\r
8af54a64
AI
107\r
108recompile: recompile-$(MAKETYPE)\r
109\r
110recompile-nmake:\r
111 cd ..\lisp\r
d572c005 112 $(MAKE) $(MFLAGS) recompile\r
8af54a64
AI
113 cd ..\nt\r
114\r
115recompile-gmake:\r
b47342e3 116 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp recompile\r
8af54a64
AI
117\r
118#### Bootstrapping.\r
119\r
120### This is meant for Emacs maintainers only. It first cleans the\r
121### lisp subdirectory, removing all compiled Lisp files. Then a\r
122### special emacs executable is built from Lisp sources, which is then\r
123### used to compile Lisp files. The last step is a "normal" make.\r
124\r
c3c57777
JR
125maybe-bootstrap: maybe-bootstrap-$(SHELLTYPE)\r
126\r
127# dummy target to force other targets to be evaluated.\r
128doit:\r
129\r
130maybe-bootstrap-CMD: doit\r
d5ef6196 131 @echo .\r
c3c57777
JR
132 @if not EXIST ..\lisp\abbrev.elc echo Essential Lisp files seem to be missing. You should either\r
133 @if not EXIST ..\lisp\abbrev.elc echo do 'make bootstrap' or create 'lisp/abbrev.elc' somehow\r
d5ef6196 134 @echo .\r
c3c57777
JR
135 @if not EXIST ..\lisp\abbrev.elc exit -1\r
136\r
137maybe-bootstrap-SH: doit\r
138 @if [ ! -f ../lisp/abbrev.elc ] ; then \\r
139 echo; \\r
140 echo "Essential Lisp files seem to be missing. You should either"; \\r
141 echo "do \`make bootstrap' or create \`lisp/abbrev.elc' somehow."; \\r
142 echo; \\r
143 exit -1; \\r
144 fi\r
145\r
f37b8e41
EZ
146# Bootstrap depends on cmdproxy because some Lisp functions\r
147# loaded during bootstrap may need to run shell commands.\r
148bootstrap: addsection cmdproxy bootstrap-$(MAKETYPE)\r
55b5878d 149 $(MAKE) $(MFLAGS) $(XMFLAGS) all\r
8af54a64 150\r
f37b8e41 151bootstrap-nmake: addsection cmdproxy\r
8af54a64
AI
152 cd ..\lisp\r
153 $(MAKE) $(MFLAGS) bootstrap-clean\r
154 cd ..\src\r
155 $(MAKE) $(MFLAGS) clean\r
156 cd ..\lib-src\r
dc728514 157 $(MAKE) $(MFLAGS) clean\r
8af54a64
AI
158 cd ..\src\r
159 $(MAKE) $(MFLAGS) bootstrap\r
160 $(MAKE) $(MFLAGS) bootstrap-clean\r
128c1013 161 cd ..\nt\r
f37b8e41 162 $(CP) $(BLD)/cmdproxy.exe ../bin\r
8af54a64 163 cd ..\lisp\r
73dfa0bf 164 $(MAKE) $(MFLAGS) SHELL=$(SHELLTYPE) bootstrap\r
dc728514
JB
165 cd ..\lib-src\r
166 $(MAKE) $(MFLAGS) DOC\r
8af54a64
AI
167 cd ..\nt\r
168\r
f37b8e41 169bootstrap-gmake: addsection cmdproxy\r
b47342e3
EZ
170 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean\r
171 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean\r
172 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean\r
d572c005 173 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap\r
b47342e3 174 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean\r
f37b8e41 175 $(CP) $(BLD)/cmdproxy.exe ../bin\r
b47342e3
EZ
176 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap\r
177 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src DOC\r
8af54a64
AI
178\r
179bootstrap-clean: bootstrap-clean-$(MAKETYPE)\r
180\r
181bootstrap-clean-nmake:\r
182 cd ..\src\r
183 $(MAKE) $(MFLAGS) bootstrap-clean\r
184 cd ..\lisp\r
185 $(MAKE) $(MFLAGS) bootstrap-clean\r
186\r
187bootstrap-clean-gmake:\r
b47342e3
EZ
188 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean\r
189 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean\r
8af54a64
AI
190\r
191$(INSTALL_DIR):\r
192 - mkdir "$(INSTALL_DIR)"\r
193\r
194$(INSTALL_DIR)/bin: $(INSTALL_DIR)\r
195 - mkdir "$(INSTALL_DIR)/bin"\r
196\r
197#\r
198# Build and install emacs in INSTALL_DIR\r
199#\r
200install: all $(INSTALL_DIR)/bin install-other-dirs-$(MAKETYPE)\r
201 - $(CP) $(BLD)/addpm.exe $(INSTALL_DIR)/bin\r
202 - $(CP) $(BLD)/ddeclient.exe $(INSTALL_DIR)/bin\r
203 - $(CP) $(BLD)/cmdproxy.exe $(INSTALL_DIR)/bin\r
204 - $(CP) $(BLD)/runemacs.exe $(INSTALL_DIR)/bin\r
f8985061 205 - "$(INSTALL_DIR)/bin/addpm" -q\r
8af54a64
AI
206 - $(DEL) ../same-dir.tst\r
207 - $(DEL) $(INSTALL_DIR)/same-dir.tst\r
208 echo SameDirTest > "$(INSTALL_DIR)/same-dir.tst"\r
209 - mkdir "$(INSTALL_DIR)/etc"\r
210 - mkdir "$(INSTALL_DIR)/info"\r
211 - mkdir "$(INSTALL_DIR)/lock"\r
212 - mkdir "$(INSTALL_DIR)/data"\r
213 - mkdir "$(INSTALL_DIR)/site-lisp"\r
214 - mkdir "$(INSTALL_DIR)/etc/icons"\r
215 $(IFNOTSAMEDIR) $(CP) ../site-lisp/subdirs.el $(INSTALL_DIR)/site-lisp $(ENDIF)\r
216 $(IFNOTSAMEDIR) $(CP_DIR) ../etc $(INSTALL_DIR) $(ENDIF)\r
217 - $(CP_DIR) icons $(INSTALL_DIR)/etc\r
218 $(IFNOTSAMEDIR) $(CP_DIR) ../info $(INSTALL_DIR) $(ENDIF)\r
da3ef617
JR
219 $(IFNOTSAMEDIR) $(CP) ../COPYING $(INSTALL_DIR) $(ENDIF)\r
220 - $(CP) ../COPYING $(INSTALL_DIR)/bin\r
8af54a64
AI
221 - $(DEL) ../same-dir.tst\r
222 - $(DEL) $(INSTALL_DIR)/same-dir.tst\r
223\r
224install-other-dirs-nmake:\r
225 cd ..\lib-src\r
226 $(MAKE) $(MFLAGS) install\r
227 cd ..\src\r
228 $(MAKE) $(MFLAGS) install\r
229 cd ..\lisp\r
230 $(MAKE) $(MFLAGS) install\r
231 cd ..\leim\r
232 $(MAKE) $(MFLAGS) install\r
233 cd ..\nt\r
234\r
235install-other-dirs-gmake:\r
b47342e3
EZ
236 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src install\r
237 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src install\r
238 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp install\r
239 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim install\r
8af54a64 240\r
fd1f2f1e 241force-info:\r
d038b84d 242# Note that doc/emacs/makefile knows how to\r
fd1f2f1e
JR
243# put the info files in $(infodir),\r
244# so we can do ok running make in the build dir.\r
5eb3d2a5
JR
245info: force-info info-$(MAKETYPE)\r
246\r
247info-nmake:\r
d038b84d 248 cd ..\doc\emacs\r
5eb3d2a5 249 $(MAKE) $(MFLAGS) info\r
059d1e66 250 cd ..\misc\r
5eb3d2a5 251 $(MAKE) $(MFLAGS) info\r
059d1e66 252 cd ..\lispref\r
d038b84d 253 $(MAKE) $(MFLAGS) info\r
059d1e66 254 cd ..\lispintro\r
5eb3d2a5 255 $(MAKE) $(MFLAGS) info\r
059d1e66 256 cd $(MAKEDIR)\r
5eb3d2a5
JR
257\r
258info-gmake:\r
d038b84d
GM
259 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs info\r
260 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc info\r
261 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref info\r
262 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro info\r
8af54a64
AI
263#\r
264# Maintenance\r
177c0ea7 265#\r
8af54a64 266clean: clean-other-dirs-$(MAKETYPE)\r
f37b8e41 267 - $(DEL) $(COMPILER_TEMP_FILES)\r
8af54a64 268 - $(DEL_TREE) $(OBJDIR)\r
e313b518 269 - $(DEL) stamp_BLD\r
8af54a64
AI
270 - $(DEL) ../etc/DOC ../etc/DOC-X\r
271\r
272clean-other-dirs-nmake:\r
273 cd ..\lib-src\r
274 $(MAKE) $(MFLAGS) clean\r
275 cd ..\src\r
276 $(MAKE) $(MFLAGS) clean\r
d038b84d 277 cd ..\doc\lispintro\r
fd1f2f1e 278 $(MAKE) $(MFLAGS) clean\r
d038b84d 279 cd ..\doc\lispref\r
fd1f2f1e 280 $(MAKE) $(MFLAGS) clean\r
8af54a64
AI
281 cd ..\leim\r
282 $(MAKE) $(MFLAGS) clean\r
d038b84d
GM
283 cd ..\doc\emacs\r
284 $(MAKE) $(MFLAGS) clean\r
285 cd ..\doc\misc\r
fd1f2f1e 286 $(MAKE) $(MFLAGS) clean\r
8af54a64
AI
287 cd ..\nt\r
288\r
289clean-other-dirs-gmake:\r
b47342e3
EZ
290 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean\r
291 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean\r
b47342e3 292 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim clean\r
cc48598c
JR
293 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs clean\r
294 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc clean\r
295 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro clean\r
296 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref clean\r
8af54a64
AI
297\r
298cleanall-other-dirs-nmake:\r
299 cd ..\lib-src\r
300 $(MAKE) $(MFLAGS) cleanall\r
301 cd ..\src\r
302 $(MAKE) $(MFLAGS) cleanall\r
303 cd ..\nt\r
304\r
305cleanall-other-dirs-gmake:\r
b47342e3
EZ
306 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src cleanall\r
307 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src cleanall\r
8af54a64 308\r
f37b8e41
EZ
309# We used to delete *~ here, but that might inadvertently remove\r
310# precious files if it happens to match their short 8+3 aliases.\r
8af54a64
AI
311cleanall: clean cleanall-other-dirs-$(MAKETYPE)\r
312 - $(DEL_TREE) obj\r
313 - $(DEL_TREE) obj-spd\r
314 - $(DEL_TREE) oo\r
315 - $(DEL_TREE) oo-spd\r
316\r
cc48598c
JR
317top-distclean:\r
318 - $(DEL) $(COMPILER_TEMP_FILES)\r
319 - $(DEL_TREE) obj\r
320 - $(DEL_TREE) obj-spd\r
321 - $(DEL_TREE) oo\r
322 - $(DEL_TREE) oo-spd\r
323 - $(DEL) stamp_BLD\r
324 - $(DEL) ../etc/DOC ../etc/DOC-X\r
325 - $(DEL) config.log Makefile\r
326\r
327distclean: distclean-other-dirs-$(MAKETYPE) top-distclean\r
328\r
329distclean-other-dirs-nmake:\r
330 cd ..\lib-src\r
331 $(MAKE) $(MFLAGS) distclean\r
332 cd ..\src\r
333 $(MAKE) $(MFLAGS) distclean\r
334 cd ..\lisp\r
335 $(MAKE) $(MFLAGS) distclean\r
336 cd ..\leim\r
337 $(MAKE) $(MFLAGS) distclean\r
338 cd ..\doc\emacs\r
339 $(MAKE) $(MFLAGS) distclean\r
340 cd ..\doc\misc\r
341 $(MAKE) $(MFLAGS) distclean\r
342 cd ..\doc\lispintro\r
343 $(MAKE) $(MFLAGS) distclean\r
344 cd ..\doc\lispref\r
345 $(MAKE) $(MFLAGS) distclean\r
346 cd ..\nt\r
347\r
348distclean-other-dirs-gmake:\r
349 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src distclean\r
350 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src distclean\r
351 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp distclean\r
352 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim distclean\r
353 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs distclean\r
354 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc distclean\r
355 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro distclean\r
356 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref distclean\r
357\r
358maintainer-clean: maintainer-clean-other-dirs-$(MAKETYPE) top-distclean\r
359\r
360maintainer-clean-other-dirs-nmake:\r
361 cd ..\lib-src\r
362 $(MAKE) $(MFLAGS) maintainer-clean\r
363 cd ..\src\r
364 $(MAKE) $(MFLAGS) maintainer-clean\r
365 cd ..\lisp\r
366 $(MAKE) $(MFLAGS) maintainer-clean\r
367 cd ..\leim\r
368 $(MAKE) $(MFLAGS) maintainer-clean\r
369 cd ..\doc\emacs\r
370 $(MAKE) $(MFLAGS) maintainer-clean\r
371 cd ..\doc\misc\r
372 $(MAKE) $(MFLAGS) maintainer-clean\r
373 cd ..\doc\lispintro\r
374 $(MAKE) $(MFLAGS) maintainer-clean\r
375 cd ..\doc\lispref\r
376 $(MAKE) $(MFLAGS) maintainer-clean\r
377 cd ..\nt\r
378\r
379maintainer-clean-other-dirs-gmake:\r
380 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src maintainer-clean\r
381 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src maintainer-clean\r
382 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp maintainer-clean\r
383 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim maintainer-clean\r
384 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs maintainer-clean\r
385 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc maintainer-clean\r
386 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro maintainer-clean\r
387 $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref maintainer-clean\r
388\r
8af54a64
AI
389realclean: cleanall\r
390 - $(DEL_TREE) ../bin\r