makefile.w32-in 12 KB
Newer Older
1 2
# -*- Makefile -*- for GNU Emacs on the Microsoft W32 API.
# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
Glenn Morris's avatar
Glenn Morris committed
3
#    2008, 2009, 2010 Free Software Foundation, Inc.
Andrew Innes's avatar
Andrew Innes committed
4
#
5
# Top level makefile for building GNU Emacs on Windows NT
Andrew Innes's avatar
Andrew Innes committed
6
#
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# This file is part of GNU Emacs.

# GNU Emacs 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.

# GNU Emacs 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 GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.

Andrew Innes's avatar
Andrew Innes committed
22

23 24 25
# FIXME: This file uses DOS EOLs.  Convert to Unix after 22.1 is out
#        (and remove or replace this comment).

26 27
VERSION		= 24.0.50

Andrew Innes's avatar
Andrew Innes committed
28
TRES		= $(BLD)/emacs.res
29
CLIENTRES	= $(BLD)/emacsclient.res
Andrew Innes's avatar
Andrew Innes committed
30

31 32
XMFLAGS		=

Andrew Innes's avatar
Andrew Innes committed
33 34 35 36
ALL		= addpm ddeclient runemacs cmdproxy addsection preprep

.PHONY: $(ALL)

37 38

addpm:		  stamp_BLD $(BLD)/addpm.exe
Andrew Innes's avatar
Andrew Innes committed
39 40
$(BLD)/addpm.exe: $(BLD)/addpm.$(O)
		  $(LINK) $(LINK_OUT)$@ \
41 42
		  $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) \
		  $(USER32) $(OLE32) $(UUID) $(SHELL32)
Andrew Innes's avatar
Andrew Innes committed
43

44
ddeclient:	  stamp_BLD $(BLD)/ddeclient.exe
Andrew Innes's avatar
Andrew Innes committed
45 46 47 48
$(BLD)/ddeclient.exe: $(BLD)/ddeclient.$(O)
		  $(LINK) $(LINK_OUT)$@ \
		  $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)

49
cmdproxy:	  stamp_BLD $(BLD)/cmdproxy.exe
Andrew Innes's avatar
Andrew Innes committed
50 51 52 53
$(BLD)/cmdproxy.exe: $(BLD)/cmdproxy.$(O)
		  $(LINK) $(LINK_OUT)$@ \
		  $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)

54
addsection:	  stamp_BLD $(BLD)/addsection.exe
Andrew Innes's avatar
Andrew Innes committed
55 56 57 58
$(BLD)/addsection.exe: $(BLD)/addsection.$(O)
		  $(LINK) $(LINK_OUT)$@ \
		  $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(USER32)

59
preprep:	  stamp_BLD $(BLD)/preprep.exe
Andrew Innes's avatar
Andrew Innes committed
60 61 62 63 64 65 66 67
$(BLD)/preprep.exe: $(BLD)/preprep.$(O)
		  $(LINK) $(LINK_OUT)$@ \
		  $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS)

#
# The resource file.  NT 3.10 requires the use of cvtres; even though
# it is not necessary on later versions, it is still ok to use it.
#
68
$(TRES):	emacs.rc icons/emacs.ico emacs.manifest stamp_BLD
69 70 71 72
		$(RC) $(RC_OUT)$(TRES) emacs.rc

$(CLIENTRES):	emacsclient.rc stamp_BLD
		$(RC) $(RC_OUT)$(CLIENTRES) emacsclient.rc
Andrew Innes's avatar
Andrew Innes committed
73

74
runemacs:	  stamp_BLD $(BLD)/runemacs.exe
Andrew Innes's avatar
Andrew Innes committed
75 76 77 78 79 80 81
$(BLD)/runemacs.exe: $(BLD)/runemacs.$(O) $(TRES)
		  $(LINK) $(LINK_OUT)$@ $(SUBSYSTEM_WINDOWS) \
		  $(LINK_FLAGS) $(ALL_DEPS) $(BASE_LIBS) $(ADVAPI32) $(USER32)

which-sh:
	@echo Using $(THE_SHELL) as shell.

82 83 84 85 86
# These depend on stamp_BLD to make sure the $(BLD) directory is created
# before the compilation begins, even if Make runs several commands
# in parallel under "make -j".
#
$(BLD)/addpm.$(O) $(BLD)/ddeclient.$(O) $(BLD)/runemacs.$(O) $(BLD)/cmdproxy.$(O) $(BLD)/addsection.$(O) $(BLD)/preprep.$(O): stamp_BLD
87

Andrew Innes's avatar
Andrew Innes committed
88 89 90
#
# Build emacs
#
91
all:	which-sh stamp_BLD $(ALL) $(CLIENTRES) maybe-bootstrap all-other-dirs-$(MAKETYPE)
Andrew Innes's avatar
Andrew Innes committed
92

93
all-other-dirs-nmake: addsection
Andrew Innes's avatar
Andrew Innes committed
94
	cd ..\lib-src
95
	$(MAKE) $(MFLAGS) all
Andrew Innes's avatar
Andrew Innes committed
96
	cd ..\src
97
	$(MAKE) $(MFLAGS) all
Andrew Innes's avatar
Andrew Innes committed
98
	cd ..\lisp
99
	$(MAKE) $(MFLAGS) all
Andrew Innes's avatar
Andrew Innes committed
100
	cd ..\leim
101
	$(MAKE) $(MFLAGS) all
Andrew Innes's avatar
Andrew Innes committed
102 103
	cd ..\nt

104
all-other-dirs-gmake: addsection
105 106 107 108
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src all
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src all
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp all
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim all
Andrew Innes's avatar
Andrew Innes committed
109 110 111 112 113

recompile:	recompile-$(MAKETYPE)

recompile-nmake:
	cd ..\lisp
114
	$(MAKE) $(MFLAGS) recompile
Andrew Innes's avatar
Andrew Innes committed
115 116 117
	cd ..\nt

recompile-gmake:
118
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp recompile
Andrew Innes's avatar
Andrew Innes committed
119 120 121 122 123 124 125 126

#### Bootstrapping.

### This is meant for Emacs maintainers only.  It first cleans the
### lisp subdirectory, removing all compiled Lisp files.  Then a
### special emacs executable is built from Lisp sources, which is then
### used to compile Lisp files.  The last step is a "normal" make.

127 128 129 130 131 132
maybe-bootstrap: maybe-bootstrap-$(SHELLTYPE)

# dummy target to force other targets to be evaluated.
doit:

maybe-bootstrap-CMD:	doit
133
	@echo .
134 135
	@if not EXIST ..\lisp\abbrev.elc echo Essential Lisp files seem to be missing.  You should either
	@if not EXIST ..\lisp\abbrev.elc echo do 'make bootstrap' or create 'lisp/abbrev.elc' somehow
136
	@echo .
137 138 139 140 141 142 143 144 145 146 147
	@if not EXIST ..\lisp\abbrev.elc exit -1

maybe-bootstrap-SH: doit
	@if [ ! -f ../lisp/abbrev.elc ] ; then \
	  echo; \
	  echo "Essential Lisp files seem to be missing.  You should either"; \
	  echo "do \`make bootstrap' or create \`lisp/abbrev.elc' somehow.";  \
	  echo; \
	  exit -1; \
	fi

148 149 150
# Bootstrap depends on cmdproxy because some Lisp functions
# loaded during bootstrap may need to run shell commands.
bootstrap:	addsection cmdproxy bootstrap-$(MAKETYPE)
151
	$(MAKE) $(MFLAGS) $(XMFLAGS) all
Andrew Innes's avatar
Andrew Innes committed
152

153
bootstrap-nmake: addsection cmdproxy
Andrew Innes's avatar
Andrew Innes committed
154 155 156 157 158
	cd ..\lisp
	$(MAKE) $(MFLAGS) bootstrap-clean
	cd ..\src
	$(MAKE) $(MFLAGS) clean
	cd ..\lib-src
159
	$(MAKE) $(MFLAGS) clean
Andrew Innes's avatar
Andrew Innes committed
160 161 162
	cd ..\src
	$(MAKE) $(MFLAGS) bootstrap
	$(MAKE) $(MFLAGS) bootstrap-clean
163
	cd ..\nt
164
	$(CP) $(BLD)/cmdproxy.exe ../bin
Andrew Innes's avatar
Andrew Innes committed
165
	cd ..\lisp
166
	$(MAKE) $(MFLAGS) SHELL=$(SHELLTYPE) bootstrap
167 168
	cd ..\lib-src
	$(MAKE) $(MFLAGS) DOC
Andrew Innes's avatar
Andrew Innes committed
169 170
	cd ..\nt

171
bootstrap-gmake: addsection cmdproxy
172 173 174
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean
175
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap
176
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean
177
	$(CP) $(BLD)/cmdproxy.exe ../bin
178 179
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src DOC
Andrew Innes's avatar
Andrew Innes committed
180 181 182 183 184 185 186 187 188 189

bootstrap-clean: bootstrap-clean-$(MAKETYPE)

bootstrap-clean-nmake:
	cd ..\src
	$(MAKE) $(MFLAGS) bootstrap-clean
	cd ..\lisp
	$(MAKE) $(MFLAGS) bootstrap-clean

bootstrap-clean-gmake:
190 191
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src bootstrap-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp bootstrap-clean
Andrew Innes's avatar
Andrew Innes committed
192 193 194 195 196 197 198 199 200 201

$(INSTALL_DIR):
	- mkdir "$(INSTALL_DIR)"

$(INSTALL_DIR)/bin: $(INSTALL_DIR)
	- mkdir "$(INSTALL_DIR)/bin"

#
# Build and install emacs in INSTALL_DIR
#
202 203 204 205 206
.PHONY: install-bin install-shortcuts

install: install-bin install-shortcuts

install-bin: all $(INSTALL_DIR)/bin install-other-dirs-$(MAKETYPE)
Andrew Innes's avatar
Andrew Innes committed
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
	- $(CP) $(BLD)/addpm.exe $(INSTALL_DIR)/bin
	- $(CP) $(BLD)/ddeclient.exe $(INSTALL_DIR)/bin
	- $(CP) $(BLD)/cmdproxy.exe $(INSTALL_DIR)/bin
	- $(CP) $(BLD)/runemacs.exe $(INSTALL_DIR)/bin
	- $(DEL) ../same-dir.tst
	- $(DEL) $(INSTALL_DIR)/same-dir.tst
	echo SameDirTest > "$(INSTALL_DIR)/same-dir.tst"
	- mkdir "$(INSTALL_DIR)/etc"
	- mkdir "$(INSTALL_DIR)/info"
	- mkdir "$(INSTALL_DIR)/lock"
	- mkdir "$(INSTALL_DIR)/data"
	- mkdir "$(INSTALL_DIR)/site-lisp"
	- mkdir "$(INSTALL_DIR)/etc/icons"
	$(IFNOTSAMEDIR) $(CP) ../site-lisp/subdirs.el $(INSTALL_DIR)/site-lisp $(ENDIF)
	$(IFNOTSAMEDIR) $(CP_DIR) ../etc $(INSTALL_DIR) $(ENDIF)
	- $(CP_DIR) icons $(INSTALL_DIR)/etc
	$(IFNOTSAMEDIR) $(CP_DIR) ../info $(INSTALL_DIR) $(ENDIF)
224 225
	$(IFNOTSAMEDIR) $(CP) ../COPYING $(INSTALL_DIR) $(ENDIF)
	- $(CP) ../COPYING $(INSTALL_DIR)/bin
Andrew Innes's avatar
Andrew Innes committed
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
	- $(DEL) ../same-dir.tst
	- $(DEL) $(INSTALL_DIR)/same-dir.tst

install-other-dirs-nmake:
	cd ..\lib-src
	$(MAKE) $(MFLAGS) install
	cd ..\src
	$(MAKE) $(MFLAGS) install
	cd ..\lisp
	$(MAKE) $(MFLAGS) install
	cd ..\leim
	$(MAKE) $(MFLAGS) install
	cd ..\nt

install-other-dirs-gmake:
241 242 243 244
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src install
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src install
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp install
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim install
Andrew Innes's avatar
Andrew Innes committed
245

246 247 248 249 250 251 252 253
install-shortcuts:
	"$(INSTALL_DIR)/bin/addpm" -q

dist: install-bin 
	$(CP) $(DIST_FILES) $(INSTALL_DIR)/bin
	$(CP) README.W32 $(INSTALL_DIR)
	$(COMSPEC)$(ComSpec) /c $(ARGQUOTE)zipdist.bat $(INSTALL_DIR) $(VERSION)$(ARGQUOTE)

254
force-info:
255
# Note that doc/emacs/makefile knows how to
256 257
# put the info files in $(infodir),
# so we can do ok running make in the build dir.
258 259 260
info: force-info info-$(MAKETYPE)

info-nmake:
261
	cd ..\doc\emacs
262
	$(MAKE) $(MFLAGS) info
263
	cd ..\misc
264
	$(MAKE) $(MFLAGS) info
265
	cd ..\lispref
266
	$(MAKE) $(MFLAGS) info
267
	cd ..\lispintro
268
	$(MAKE) $(MFLAGS) info
269
	cd $(MAKEDIR)
270 271

info-gmake:
272 273 274 275
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs info
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc info
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref info
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro info
Andrew Innes's avatar
Andrew Innes committed
276 277
#
# Maintenance
278
#
Andrew Innes's avatar
Andrew Innes committed
279
clean:	clean-other-dirs-$(MAKETYPE)
280
	- $(DEL) $(COMPILER_TEMP_FILES)
Andrew Innes's avatar
Andrew Innes committed
281
	- $(DEL_TREE) $(OBJDIR)
Eli Zaretskii's avatar
Eli Zaretskii committed
282
	- $(DEL) stamp_BLD
Andrew Innes's avatar
Andrew Innes committed
283 284 285 286 287 288 289
	- $(DEL) ../etc/DOC ../etc/DOC-X

clean-other-dirs-nmake:
	cd ..\lib-src
	$(MAKE) $(MFLAGS) clean
	cd ..\src
	$(MAKE) $(MFLAGS) clean
290
	cd ..\doc\lispintro
291
	$(MAKE) $(MFLAGS) clean
292
	cd ..\doc\lispref
293
	$(MAKE) $(MFLAGS) clean
Andrew Innes's avatar
Andrew Innes committed
294 295
	cd ..\leim
	$(MAKE) $(MFLAGS) clean
296 297 298
	cd ..\doc\emacs
	$(MAKE) $(MFLAGS) clean
	cd ..\doc\misc
299
	$(MAKE) $(MFLAGS) clean
Andrew Innes's avatar
Andrew Innes committed
300 301 302
	cd ..\nt

clean-other-dirs-gmake:
303 304 305
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim clean
306 307 308 309
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref clean
Andrew Innes's avatar
Andrew Innes committed
310 311 312 313 314 315 316 317 318

cleanall-other-dirs-nmake:
	cd ..\lib-src
	$(MAKE) $(MFLAGS) cleanall
	cd ..\src
	$(MAKE) $(MFLAGS) cleanall
	cd ..\nt

cleanall-other-dirs-gmake:
319 320
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src cleanall
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src cleanall
Andrew Innes's avatar
Andrew Innes committed
321

322 323
# We used to delete *~ here, but that might inadvertently remove
# precious files if it happens to match their short 8+3 aliases.
Andrew Innes's avatar
Andrew Innes committed
324 325 326 327 328 329
cleanall: clean cleanall-other-dirs-$(MAKETYPE)
	 - $(DEL_TREE) obj
	 - $(DEL_TREE) obj-spd
	 - $(DEL_TREE) oo
	 - $(DEL_TREE) oo-spd

330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
top-distclean:
	- $(DEL) $(COMPILER_TEMP_FILES)
	- $(DEL_TREE) obj
	- $(DEL_TREE) obj-spd
	- $(DEL_TREE) oo
	- $(DEL_TREE) oo-spd
	- $(DEL) stamp_BLD
	- $(DEL) ../etc/DOC ../etc/DOC-X
	- $(DEL) config.log Makefile

distclean: distclean-other-dirs-$(MAKETYPE) top-distclean

distclean-other-dirs-nmake:
	cd ..\lib-src
	$(MAKE) $(MFLAGS) distclean
	cd ..\src
	$(MAKE) $(MFLAGS) distclean
	cd ..\lisp
	$(MAKE) $(MFLAGS) distclean
	cd ..\leim
	$(MAKE) $(MFLAGS) distclean
	cd ..\doc\emacs
	$(MAKE) $(MFLAGS) distclean
	cd ..\doc\misc
	$(MAKE) $(MFLAGS) distclean
	cd ..\doc\lispintro
	$(MAKE) $(MFLAGS) distclean
	cd ..\doc\lispref
	$(MAKE) $(MFLAGS) distclean
	cd ..\nt

distclean-other-dirs-gmake:
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src distclean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src distclean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp distclean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim distclean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs distclean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc distclean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro distclean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref distclean

maintainer-clean: maintainer-clean-other-dirs-$(MAKETYPE) top-distclean

maintainer-clean-other-dirs-nmake:
	cd ..\lib-src
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\src
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\lisp
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\leim
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\doc\emacs
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\doc\misc
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\doc\lispintro
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\doc\lispref
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..\nt

maintainer-clean-other-dirs-gmake:
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lib-src maintainer-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../src maintainer-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lisp maintainer-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim maintainer-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs maintainer-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc maintainer-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro maintainer-clean
	$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref maintainer-clean

Andrew Innes's avatar
Andrew Innes committed
402 403
realclean: cleanall
	- $(DEL_TREE) ../bin