summaryrefslogtreecommitdiff
path: root/msdos/mainmake.v2
blob: 4a1e10b336f073ebddffe2cc6c8c3089eed55e7a (plain)
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
# Top-level Makefile for Emacs under MS-DOS/DJGPP v2.0 or higher. -*-makefile-*-

# Copyright (C) 1996-2023 Free Software Foundation, Inc.

# 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 <https://www.gnu.org/licenses/>.

# make all	to compile and build Emacs.
# make install	to install it (installs in-place, in `bin' subdir of top dir).
# make TAGS	to update tags tables.
#
# make clean  or  make mostlyclean
#      Delete all files from the current directory that are normally
#      created by building the program.	 Don't delete the files that
#      record the configuration.  Also preserve files that could be made
#      by building, but normally aren't because the distribution comes
#      with them.
#
#      Delete `.dvi' files here if they are not part of the distribution.
#
# make distclean
#      Delete all files from the current directory that are created by
#      configuring or building the program.  If you have unpacked the
#      source and built the program without creating any other files,
#      `make distclean' should leave only the files that were in the
#      distribution.
#
# make maintainer-clean
#      Delete everything from the current directory that can be
#      reconstructed with this Makefile.  This typically includes
#      everything deleted by distclean, plus more: *.elc files,
#      C source files produced by Bison, tags tables, info files,
#      and so on.
#
# make extraclean
#      Still more severe - delete backup and autosave files, too.

# This gork is required for those who use a Unix-style shell, and
# have SHELL in the environment pointing to it.  Here we force
# Make to use COMMAND.COM instead.  This Makefile won't work otherwise.
# (The /xyzzy directory is used to minimize the chance that someone
# actually has such a directory with an incompatible command.com.  We
# used to have /dos there, but some Windows installations have an old
# version of DOS stashed in that directory, and command.com from there
# won't run on Windows, complaining about "Incorrect DOS version".
# Make will look up PATH for the shell executable, so the directory name
# is not important.)
SHELL=/xyzzy/command
MAKESHELL=/xyzzy/command

# Generate a full pathname of the top-level installation directory
top_srcdir := $(subst \,/,$(shell cd))

# Q: Do we need to bootstrap?
# A: Only if we find msdos/autogen/Makefile.in, i.e. we are building out of
#    a VCS-checkout (not a release), and src/b-emacs.exe does not exist.
#    This avoids building a bootstrap-emacs and recompiling Lisp files
#    when building a pretest/release tarball.  Recompiling Lisp files
#    is BAD because lisp/Makefile.in requires a Unixy shell.
boot :=
ifneq ($(wildcard msdos/autogen/Makefile.in),)
ifeq ($(wildcard src/b-emacs.exe),)
boot := b-emacs.exe
endif
endif

# Subdirectories to run Make.  `lisp' is not included because the
# compiled lisp files are part of the distribution.  (If we are
# bootstrapping, the src target will run Make in `lisp' as well.)
# leim is not included because it is part of the src target.
all:	lib lib-src src emacs misc lispref lispintro

lib: FRC
	cd lib
	$(MAKE) top_srcdir=${top_srcdir} all
	cd ..

lib-src: lib FRC
	cd lib-src
	$(MAKE) top_srcdir=${top_srcdir} all
	cd ..

# Pass to src/Makefile.in an additional BOOTSTRAPEMACS variable which
# is either set to b-emacs.exe (in case bootstrap-emacs has not been
# constructed yet) or the empty string (otherwise).
# src/Makefile.in uses it to implement conditional dependencies, so that
# files that need bootstrap-emacs to be built do not additionally need
# to be kept fresher than b-emacs.exe.  Otherwise changing a single
# file src/foo.c forces dumping a new bootstrap-emacs, then re-byte-compiling
# all preloaded elisp files, and only then dump the actual src/emacs, which
# is not wrong, but is overkill in 99.99% of the cases.
src: lib lib-src FRC
	cd src
	$(MAKE) top_srcdir=${top_srcdir} BOOTSTRAPEMACS="${boot}" all
	djecho -s '/-geometry/s,^.*,set environment HOME $(top_srcdir),' \
	          '/environment *TERM/s/^.*/set environment TERM internal/' \
	       >gdb.sed
	sed -f gdb.sed _gdbinit >gdb.tmp
	djecho -a gdb.tmp -s 'set environment USER root' \
	                     'set environment NAME root' \
	                     'set environment USERNAME root' \
	                     'set environment EMACSPATH $(top_srcdir)/bin' \
	                     'set environment SHELL $(subst \,/,$(COMSPEC))' \
	                     'set environment PATH $(subst \,/,$(PATH))'
	update gdb.tmp gdb.ini
	rm -f gdb.tmp gdb.sed
	cd ..
	if exist src\bootlisp redir $(MAKE) -C lisp top_srcdir=${top_srcdir}
	rm -f src/bootlisp
	if exist leim\Makefile redir $(MAKE) -C leim top_srcdir=${top_srcdir}

info: emacs misc lispref lispintro

emacs misc lispref lispintro:	FRC
	cd doc/$@
	$(MAKE) top_srcdir=${top_srcdir} info
	cd ../..

install: all
	if not exist bin\nul md bin
	cd lib-src
	command.com /c >/dev/null for %p in (hexl etags ctags ebrowse) do\
	   if exist %p.exe mv -f %p.exe ../bin
	cd ..
	cd src
	mv -f emacs.exe ../bin/
	cd ..
	djecho -s "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)" \
	          "    (normal-top-level-add-subdirs-to-load-path))" \
	    > ./subdirs.el
	if not exist .\site-lisp\subdirs.el \
	   update ./subdirs.el ./site-lisp/subdirs.el
	rm -f ./subdirs.el

FRC:

# We cannot use [a-zA-Z]* like the mainline distribution does, because
# that causes all file names to be returned in upper-case on DOS...
# Must use `find' to filter out loaddefs files; ignore errors if `find'
# is not available or is an MS `find'.
# The "cd $(CURDIR)" gork is for when `find' fails and leaves us inside
# `lisp' or one of its subdirectories.
TAGS tags:	lib-src FRC
	cd lib-src
	if exist etags.exe mv -f etags.exe ../bin
	cd ..
	- find $(CURDIR)/lisp -iname "*.el" -a -! -( -iname "*loaddefs.el" -o -iname "ldefs-boot.el" -) | ./bin/etags -o lisp/TAGS -
	cd $(CURDIR)
	cd src
	../bin/etags --include=../lisp/TAGS \
	 --regex='/[ 	]*DEFVAR_[A-Z_ 	(]+"\([^"]+\)"/' \
	 $(CURDIR)/src/*.c $(CURDIR)/src/*.h
	cd ..
	./bin/etags --include=src/TAGS

check:
	@echo "We don't have any tests for GNU Emacs yet."

clean mostlyclean:
	cd lib
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd lib-src
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd src
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd doc
	cd emacs
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd misc
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd lispref
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd lispintro
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd ..
	cd leim
	if exist Makefile redir $(MAKE) $(MFLAGS) $@
	cd ..

top_distclean=rm -f Makefile */Makefile src/_gdbinit

distclean maintainer-clean: FRC
	cd src
	$(MAKE) $(MFLAGS) $@
	if exist bootlisp rm -f bootlisp
	cd ..
	cd lib
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd lib-src
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd doc
	cd emacs
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd misc
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd lispref
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd lispintro
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd ..
	cd leim
	if exist Makefile redir $(MAKE) $(MFLAGS) $@
	cd ..
	cd lisp
	$(MAKE) $(MFLAGS) $@
	cd ..
	${top_distclean}

extraclean:
	cd src
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd lib
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd lib-src
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd doc
	cd emacs
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd misc
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd lispref
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd lispintro
	-$(MAKE) $(MFLAGS) $@
	cd ..
	cd ..
	cd leim
	if exist Makefile redir $(MAKE) $(MFLAGS) $@
	cd ..
	cd lisp
	$(MAKE) $(MFLAGS) $@
	cd ..
	${top_distclean}
	-rm -f *~ #*

.PHONY: bootstrap

bootstrap-clean: FRC
	cd lib
	-$(MAKE) $(MFLAGS) maintainer-clean
	cd ..
	cd src
	$(MAKE) $(MFLAGS) $@
	cd ..
	cd lib-src
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..
	cd doc
	cd emacs
	-$(MAKE) $(MFLAGS) maintainer-clean
	cd ../misc
	-$(MAKE) $(MFLAGS) maintainer-clean
	cd ../lispref
	-$(MAKE) $(MFLAGS) maintainer-clean
	cd ../lispintro
	-$(MAKE) $(MFLAGS) maintainer-clean
	cd ..
	cd ..
	cd leim
	$(MAKE) $(MFLAGS) maintainer-clean
	cd ..
	cd lisp
	$(MAKE) $(MFLAGS) bootstrap-clean
	cd ..
	${top_bootclean}

bootstrap: bootstrap-clean FRC
	command.com /e:2048 /c config msdos
	$(MAKE) $(MFLAGS) info all