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-2025 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
|