upstream
[emacs.git] / msdos / mainmake.v2
blob1aea06d2a4d0dc4852903d2a1c0494df0b77b82f
1 # Top-level Makefile for Emacs under MS-DOS/DJGPP v2.0 or higher. -*-makefile-*-
3 # Copyright (C) 1996-2011 Free Software Foundation, Inc.
5 # This file is part of GNU Emacs.
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.
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.
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/>.
20 # make all      to compile and build Emacs.
21 # make install  to install it (installs in-place, in `bin' subdir of top dir).
22 # make TAGS     to update tags tables.
24 # make clean  or  make mostlyclean
25 #      Delete all files from the current directory that are normally
26 #      created by building the program.  Don't delete the files that
27 #      record the configuration.  Also preserve files that could be made
28 #      by building, but normally aren't because the distribution comes
29 #      with them.
31 #      Delete `.dvi' files here if they are not part of the distribution.
33 # make distclean
34 #      Delete all files from the current directory that are created by
35 #      configuring or building the program.  If you have unpacked the
36 #      source and built the program without creating any other files,
37 #      `make distclean' should leave only the files that were in the
38 #      distribution.
40 # make maintainer-clean
41 #      Delete everything from the current directory that can be
42 #      reconstructed with this Makefile.  This typically includes
43 #      everything deleted by distclean, plus more: *.elc files,
44 #      C source files produced by Bison, tags tables, info files,
45 #      and so on.
47 # make extraclean
48 #      Still more severe - delete backup and autosave files, too.
50 # This gork is required for those who use a Unix-style shell, and
51 # have SHELL in the environment pointing to it.  Here we force
52 # Make to use COMMAND.COM instead.  This Makefile won't work otherwise.
53 # (The /xyzzy directory is used to minimize the chance that someone
54 # actually has such a directory with an incompatible command.com.  We
55 # used to have /dos there, but some Windows installations have an old
56 # version of DOS stashed in that directory, and command.com from there
57 # won't run on Windows, complaining about "Incorrect DOS version".
58 # Make will look up PATH for the shell executable, so the directory name
59 # is not important.)
60 SHELL=/xyzzy/command
61 MAKESHELL=/xyzzy/command
63 # Generate a full pathname of the top-level installation directory
64 top_srcdir := $(subst \,/,$(shell cd))
66 # Q: Do we need to bootstrap?
67 # A: Only if we find admin/admin.el, i.e. we are building out of 
68 #    a VCS-checkout (not a release) and src/b-emacs.exe does not exist.
69 #    This avoids building a bootstrap-emacs and recompiling Lisp files
70 #    when building a pretest/release tarball.
71 boot :=
72 ifneq ($(wildcard admin/admin.el),)
73 ifeq ($(wildcard src/b-emacs.exe),)
74 boot := b-emacs.exe
75 endif
76 endif
78 # Subdirectories to run Make.  `lisp' is not included because the
79 # compiled lisp files are part of the distribution.  (If we are
80 # bootstrapping, the src target will run Make in `lisp' as well.)
81 # leim is not included because it is part of the src target.
82 all:    lib lib-src src emacs misc lispref lispintro
84 lib: FRC
85         cd lib
86         $(MAKE) top_srcdir=${top_srcdir} all
87         cd ..
89 lib-src: lib FRC
90         cd lib-src
91         $(MAKE) top_srcdir=${top_srcdir} all
92         cd ..
94 # Pass to src/Makefile.in an additional BOOTSTRAPEMACS variable which
95 # is either set to b-emacs.exe (in case bootstrap-emacs has not been
96 # constructed yet) or the empty string (otherwise).
97 # src/Makefile.in uses it to implement conditional dependencies, so that
98 # files that need bootstrap-emacs to be built do not additionally need
99 # to be kept fresher than b-emacs.exe.  Otherwise changing a single
100 # file src/foo.c forces dumping a new bootstrap-emacs, then re-byte-compiling
101 # all preloaded elisp files, and only then dump the actual src/emacs, which
102 # is not wrong, but is overkill in 99.99% of the cases.
103 src: lib lib-src FRC
104         cd src
105         $(MAKE) top_srcdir=${top_srcdir} BOOTSTRAPEMACS="${boot}" all
106         djecho -s '/-geometry/s,^.*,set environment HOME $(top_srcdir),' \
107                   '/environment *TERM/s/^.*/set environment TERM internal/' \
108                >gdb.sed
109         sed -f gdb.sed _gdbinit >gdb.tmp
110         djecho -a gdb.tmp -s 'set environment USER root' \
111                              'set environment NAME root' \
112                              'set environment USERNAME root' \
113                              'set environment EMACSPATH $(top_srcdir)/bin' \
114                              'set environment SHELL $(subst \,/,$(COMSPEC))' \
115                              'set environment PATH $(subst \,/,$(PATH))'
116         update gdb.tmp gdb.ini
117         rm -f gdb.tmp gdb.sed
118         cd ..
119         if exist src\bootlisp redir $(MAKE) -C lisp top_srcdir=${top_srcdir}
120         rm -f src/bootlisp
121         if exist leim\Makefile redir $(MAKE) -C leim top_srcdir=${top_srcdir}
123 info: emacs misc lispref lispintro
125 emacs misc lispref lispintro:   FRC
126         cd doc/$@
127         $(MAKE) top_srcdir=${top_srcdir} info
128         cd ../..
130 install: all
131         if not exist bin\nul md bin
132         cd lib-src
133         command.com /c >/dev/null for %p in (hexl etags ctags ebrowse) do\
134            if exist %p.exe mv -f %p.exe ../bin
135         if exist fns.el update fns.el ../bin/fns.el
136         cd ..
137         cd src
138         mv -f emacs.exe ../bin/
139         cd ..
140         djecho -s "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)" \
141                   "    (normal-top-level-add-subdirs-to-load-path))" \
142             > ./subdirs.el
143         if not exist .\site-lisp\subdirs.el \
144            update ./subdirs.el ./site-lisp/subdirs.el
145         rm -f ./subdirs.el
147 FRC:
149 # We cannot use [a-zA-Z]* like the mainline distribution does, because
150 # that causes all file names to be returned in upper-case on DOS...
151 # Must use `find' to filter out loaddefs files; ignore errors if `find'
152 # is not available or is an MS `find'.
153 # The "cd $(CURDIR)" gork is for when `find' fails and leaves us inside
154 # `lisp' or one of its subdirectories.
155 TAGS tags:      lib-src FRC
156         cd lib-src
157         if exist etags.exe mv -f etags.exe ../bin
158         cd ..
159         - find $(CURDIR)/lisp -iname "*.el" -a -! -( -iname "*loaddefs.el" -o -iname "ldefs-boot.el" -) | ./bin/etags -o lisp/TAGS -
160         cd $(CURDIR)
161         cd src
162         ../bin/etags --include=../lisp/TAGS \
163          --regex='/[    ]*DEFVAR_[A-Z_  (]+"\([^"]+\)"/' \
164          $(CURDIR)/src/*.c $(CURDIR)/src/*.h \
165          $(CURDIR)/src/s/msdos.h $(CURDIR)/src/m/intel386.h
166         cd ..
167         ./bin/etags --include=src/TAGS
169 check:
170         @echo "We don't have any tests for GNU Emacs yet."
172 clean mostlyclean:
173         cd lib
174         $(MAKE) $(MFLAGS) $@
175         cd ..
176         cd lib-src
177         $(MAKE) $(MFLAGS) $@
178         cd ..
179         cd src
180         $(MAKE) $(MFLAGS) $@
181         cd ..
182         cd doc
183         cd emacs
184         -$(MAKE) $(MFLAGS) $@
185         cd ..
186         cd misc
187         -$(MAKE) $(MFLAGS) $@
188         cd ..
189         cd lispref
190         -$(MAKE) $(MFLAGS) $@
191         cd ..
192         cd lispintro
193         -$(MAKE) $(MFLAGS) $@
194         cd ..
195         cd ..
196         cd leim
197         if exist Makefile redir $(MAKE) $(MFLAGS) $@
198         cd ..
200 top_distclean=rm -f Makefile */Makefile src/_gdbinit
202 distclean maintainer-clean: FRC
203         cd src
204         $(MAKE) $(MFLAGS) $@
205         if exist bootlisp rm -f bootlisp
206         cd ..
207         cd lib
208         $(MAKE) $(MFLAGS) $@
209         cd ..
210         cd lib-src
211         $(MAKE) $(MFLAGS) $@
212         cd ..
213         cd doc
214         cd emacs
215         -$(MAKE) $(MFLAGS) $@
216         cd ..
217         cd misc
218         -$(MAKE) $(MFLAGS) $@
219         cd ..
220         cd lispref
221         -$(MAKE) $(MFLAGS) $@
222         cd ..
223         cd lispintro
224         -$(MAKE) $(MFLAGS) $@
225         cd ..
226         cd ..
227         cd leim
228         if exist Makefile redir $(MAKE) $(MFLAGS) $@
229         cd ..
230         cd lisp
231         $(MAKE) $(MFLAGS) $@
232         cd ..
233         ${top_distclean}
235 extraclean:
236         cd src
237         $(MAKE) $(MFLAGS) $@
238         cd ..
239         cd lib
240         $(MAKE) $(MFLAGS) $@
241         cd ..
242         cd lib-src
243         $(MAKE) $(MFLAGS) $@
244         cd ..
245         cd doc
246         cd emacs
247         -$(MAKE) $(MFLAGS) $@
248         cd ..
249         cd misc
250         -$(MAKE) $(MFLAGS) $@
251         cd ..
252         cd lispref
253         -$(MAKE) $(MFLAGS) $@
254         cd ..
255         cd lispintro
256         -$(MAKE) $(MFLAGS) $@
257         cd ..
258         cd ..
259         cd leim
260         if exist Makefile redir $(MAKE) $(MFLAGS) $@
261         cd ..
262         cd lisp
263         $(MAKE) $(MFLAGS) $@
264         cd ..
265         ${top_distclean}
266         -rm -f *~ #*
268 .PHONY: bootstrap
270 bootstrap-clean: FRC
271         cd lib
272         $(MAKE) $(MFLAGS) $@
273         cd ..
274         cd src
275         $(MAKE) $(MFLAGS) $@
276         cd ..
277         cd lib-src
278         $(MAKE) $(MFLAGS) maintainer-clean
279         cd ..
280         cd doc
281         cd emacs
282         -$(MAKE) $(MFLAGS) maintainer-clean
283         cd ../misc
284         -$(MAKE) $(MFLAGS) maintainer-clean
285         cd ../lispref
286         -$(MAKE) $(MFLAGS) maintainer-clean
287         cd ../lispintro
288         -$(MAKE) $(MFLAGS) maintainer-clean
289         cd ..
290         cd ..
291         cd leim
292         $(MAKE) $(MFLAGS) maintainer-clean
293         cd ..
294         cd lisp
295         $(MAKE) $(MFLAGS) bootstrap-clean
296         cd ..
297         ${top_bootclean}
299 bootstrap: bootstrap-clean FRC
300         command.com /e:2048 /c config msdos
301         $(MAKE) $(MFLAGS) info all