1
@echo off
2
rem   ----------------------------------------------------------------------
3
rem   Configuration script for MSDOS
4
rem   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003
5
rem   2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
6
7
rem   This file is part of GNU Emacs.
8
9
rem   GNU Emacs is free software: you can redistribute it and/or modify
10
rem   it under the terms of the GNU General Public License as published by
11
rem   the Free Software Foundation, either version 3 of the License, or
12
rem   (at your option) any later version.
13
14
rem   GNU Emacs is distributed in the hope that it will be useful,
15
rem   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
rem   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
rem   GNU General Public License for more details.
18
19
rem   You should have received a copy of the GNU General Public License
20
rem   along with GNU Emacs.  If not, see http://www.gnu.org/licenses/.
21
22
rem   ----------------------------------------------------------------------
23
rem   YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
24
rem
25
rem   + msdos version 3 or better.
26
rem   + DJGPP version 1.12maint1 or later (version 2.03 or later recommended).
27
rem   + make utility that allows breaking of the 128 chars limit on
28
rem     command lines.  ndmake (as of version 4.5) won't work due to a
29
rem     line length limit.  The make that comes with DJGPP does work (and is
30
rem     recommended).
31
rem   + rm, mv, and cp (from GNU file utilities).
32
rem   + sed (you can use the port that comes with DJGPP).
33
rem
34
rem   You should be able to get all the above utilities from the DJGPP FTP
35
rem   site, ftp.delorie.com, in the directory "pub/djgpp/current/v2gnu".
36
rem   ----------------------------------------------------------------------
37
set X11=
38
set nodebug=
39
set djgpp_ver=
40
set sys_malloc=
41
if "%1" == "" goto usage
42
rem   ----------------------------------------------------------------------
43
rem   See if their environment is large enough.  We need 28 bytes.
44
set $foo$=789012345678901234567
45
if not "%$foo$%" == "789012345678901234567" goto SmallEnv
46
set $foo$=
47
:again
48
if "%1" == "" goto usage
49
if "%1" == "--with-x" goto withx
50
if "%1" == "--no-debug" goto nodebug
51
if "%1" == "msdos" goto msdos
52
if "%1" == "--with-system-malloc" goto sysmalloc
53
:usage
54
echo Usage: config [--no-debug] [--with-system-malloc] [--with-x] msdos
55
echo [Read the script before you run it.]
56
goto end
57
rem   ----------------------------------------------------------------------
58
:withx
59
set X11=Y
60
shift
61
goto again
62
rem   ----------------------------------------------------------------------
63
:nodebug
64
set nodebug=Y
65
shift
66
goto again
67
rem   ----------------------------------------------------------------------
68
:sysmalloc
69
set sys_malloc=Y
70
shift
71
goto again
72
rem   ----------------------------------------------------------------------
73
:msdos
74
Echo Checking whether 'sed' is available...
75
sed -e "w junk.$$$" <Nul
76
If Exist junk.$$$ Goto sedOk
77
Echo To configure 'Emacs' you need to have 'sed'!
78
Goto End
79
:sedOk
80
Echo Checking whether 'rm' is available...
81
rm -f junk.$$$
82
If Not Exist junk.$$$ Goto rmOk
83
Echo To configure 'Emacs' you need to have 'rm'!
84
Goto End
85
:rmOk
86
Echo Checking whether 'mv' is available...
87
rm -f junk.1 junk.2
88
echo foo >junk.1
89
mv junk.1 ./junk.2
90
If Exist junk.2 Goto mvOk
91
Echo To configure 'Emacs' you need to have 'mv'!
92
rm -f junk.1
93
Goto End
94
:mvOk
95
rm -f junk.2
96
Echo Checking whether 'gcc' is available...
97
echo main(){} >junk.c
98
gcc -c junk.c
99
if exist junk.o goto gccOk
100
Echo To configure 'Emacs' you need to have 'gcc'!
101
rm -f junk.c
102
Goto End
103
:gccOk
104
rm -f junk.c junk.o junk junk.exe
105
Echo Checking what version of DJGPP is installed...
106
If Not "%DJGPP%" == "" goto djgppOk
107
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
108
Goto End
109
:djgppOk
110
echo int main()           >junk.c
111
echo #ifdef __DJGPP__    >>junk.c
112
echo {return (__DJGPP__)*10;} >>junk.c
113
echo #else               >>junk.c
114
echo #ifdef __GO32__     >>junk.c
115
echo {return 10;}         >>junk.c
116
echo #else               >>junk.c
117
echo {return 0;}         >>junk.c
118
echo #endif              >>junk.c
119
echo #endif              >>junk.c
120
gcc -o junk junk.c
121
if not exist junk.exe coff2exe junk
122
junk
123
If ErrorLevel 10 Goto go32Ok
124
rm -f junk.c junk junk.exe
125
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
126
Goto End
127
:go32Ok
128
set djgpp_ver=1
129
If ErrorLevel 20 set djgpp_ver=2
130
rm -f junk.c junk junk.exe
131
rem The v1.x build does not need djecho
132
if "%DJGPP_VER%" == "1" Goto djechoOk
133
rem DJECHO is used by the top-level Makefile in the v2.x build
134
Echo Checking whether 'djecho' is available...
135
redir -o Nul -eo djecho -o junk.$$$ foo
136
If Exist junk.$$$ Goto djechoOk
137
Echo To build 'Emacs' you need the 'djecho.exe' program!
138
Echo 'djecho.exe' is part of 'djdevNNN.zip' basic DJGPP development kit.
139
Echo Versions of DJGPP before 2.02 called this program 'echo.exe'.
140
Echo Either unpack 'djecho.exe' from the 'djdevNNN.zip' archive,
141
Echo or, if you have 'echo.exe', copy it to 'djecho.exe'.
142
Echo Then run CONFIG.BAT again with the same arguments you did now.
143
Goto End
144
:djechoOk
145
rm -f junk.$$$
146
Echo Configuring for DJGPP Version %DJGPP_VER% ...
147
Rem   ----------------------------------------------------------------------
148
Echo Configuring the source directory...
149
cd src
150
151
rem   Create "epaths.h"
152
sed -f ../msdos/sed4.inp <epaths.in >epaths.tmp
153
update epaths.tmp epaths.h >nul
154
rm -f epaths.tmp
155
156
rem   Create "config.h"
157
rm -f config.h2 config.tmp
158
sed -e '' config.in > config.tmp
159
if "%X11%" == "" goto src4
160
sed -f ../msdos/sed2x.inp <config.in >config.tmp
161
:src4
162
if "%DJGPP_VER%" == "2" Goto src41
163
sed -f ../msdos/sed2.inp <config.tmp >config.h2
164
goto src42
165
:src41
166
sed -f ../msdos/sed2v2.inp <config.tmp >config.h2
167
:src42
168
Rem See if DECL_ALIGN can be supported with this GCC
169
rm -f junk.c junk.o junk junk.exe
170
echo struct { int i; char *p; } __attribute__((__aligned__(8))) foo;  >junk.c
171
rem Two percent signs because it is a special character for COMMAND.COM/CMD
172
rem Filter thru Sed because "&" is special for CMD.EXE
173
echo int main(void) { return (unsigned long)"&"foo %% 8; } | sed "s/.&./\&/"         >>junk.c
174
gcc -o junk junk.c
175
if not exist junk.exe coff2exe junk
176
junk
177
If Not ErrorLevel 1 Goto alignOk
178
Echo WARNING: Your GCC does not support 8-byte aligned variables.
179
Echo WARNING: Therefore Emacs cannot support buffers larger than 128MB.
180
rem The following line disables DECL_ALIGN which in turn disables USE_LSB_TAG
181
rem For details see lisp.h where it defines USE_LSB_TAG
182
echo #define NO_DECL_ALIGN >>config.h2
183
:alignOk
184
Rem See if they requested a SYSTEM_MALLOC build
185
if "%sys_malloc%" == "" Goto cfgDone
186
rm -f config.tmp
187
ren config.h2 config.tmp
188
sed -f ../msdos/sedalloc.inp <config.tmp >config.h2
189
190
:cfgDone
191
rm -f junk.c junk junk.exe
192
update config.h2 config.h >nul
193
rm -f config.tmp config.h2
194
195
rem   On my system dir.h gets in the way.  It's a VMS file so who cares.
196
if exist dir.h ren dir.h vmsdir.h
197
198
rem   Create "makefile" from "makefile.in".
199
rm -f Makefile junk.c
200
sed -e "1,/== start of cpp stuff ==/s@^# .*$@@" <Makefile.in >junk.c
201
If "%DJGPP_VER%" == "1" Goto mfV1
202
gcc -E -traditional junk.c | sed -f ../msdos/sed1v2.inp >Makefile
203
goto mfDone
204
:mfV1
205
gcc -E -traditional junk.c | sed -f ../msdos/sed1.inp >Makefile
206
:mfDone
207
rm -f junk.c
208
209
if "%X11%" == "" goto src5
210
mv Makefile makefile.tmp
211
sed -f ../msdos/sed1x.inp <makefile.tmp >Makefile
212
rm -f makefile.tmp
213
:src5
214
215
if "%nodebug%" == "" goto src6
216
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
217
sed -e "/^LDFLAGS *=/s/=/=-s/" <makefile.tmp >Makefile
218
rm -f makefile.tmp
219
:src6
220
cd ..
221
rem   ----------------------------------------------------------------------
222
Echo Configuring the library source directory...
223
cd lib-src
224
rem   Create "makefile" from "makefile.in".
225
sed -e "1,/== start of cpp stuff ==/s@^#[ 	].*$@@" <Makefile.in >junk.c
226
gcc -E -traditional -I. -I../src junk.c | sed -e "s/^ /	/" -e "/^#/d" -e "/^[ 	]*$/d" >makefile.new
227
If "%DJGPP_VER%" == "2" goto libsrc-v2
228
sed -f ../msdos/sed3.inp <makefile.new >Makefile
229
Goto libsrc2
230
:libsrc-v2
231
sed -f ../msdos/sed3v2.inp <makefile.new >Makefile
232
:libsrc2
233
rm -f makefile.new junk.c
234
if "%nodebug%" == "" goto libsrc3
235
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
236
sed -e "/^ALL_CFLAGS *=/s/=/= -s/" <makefile.tmp >Makefile
237
rm -f makefile.tmp
238
:libsrc3
239
cd ..
240
rem   ----------------------------------------------------------------------
241
if "%X11%" == "" goto oldx1
242
Echo Configuring the oldxmenu directory...
243
cd oldxmenu
244
sed -f ../msdos/sed5x.inp <Makefile.in >Makefile
245
if "%nodebug%" == "" goto oldx2
246
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
247
mv -f makefile.tmp Makefile
248
:oldx2
249
cd ..
250
:oldx1
251
rem   ----------------------------------------------------------------------
252
Echo Configuring the doc directory, expect one "File not found" message...
253
cd doc
254
Rem The two variants for lispintro below is for when the shell
255
Rem supports long file names but DJGPP does not
256
for %%d in (emacs lispref lispintro lispintr misc) do sed -f ../msdos/sed6.inp < %%d\Makefile.in > %%d\Makefile
257
cd ..
258
rem   ----------------------------------------------------------------------
259
Echo Configuring the lisp directory...
260
cd lisp
261
sed -f ../msdos/sedlisp.inp < Makefile.in > Makefile
262
cd ..
263
rem   ----------------------------------------------------------------------
264
If not Exist leim\quail\latin-pre.el goto maindir
265
Echo Configuring the leim directory...
266
cd leim
267
sed -f ../msdos/sedleim.inp < Makefile.in > Makefile
268
cd ..
269
rem   ----------------------------------------------------------------------
270
:maindir
271
Echo Configuring the main directory...
272
If Exist .dir-locals.el update .dir-locals.el _dir-locals.el
273
If Exist src\.dbxinit update src/.dbxinit src/_dbxinit
274
If "%DJGPP_VER%" == "1" goto mainv1
275
Echo Looking for the GDB init file...
276
If Exist src\.gdbinit update src/.gdbinit src/_gdbinit
277
If Exist src\_gdbinit goto gdbinitOk
278
Echo ERROR:
279
Echo I cannot find the GDB init file.  It was called ".gdbinit" in
280
Echo the Emacs distribution, but was probably renamed to some other
281
Echo name without the leading dot when you untarred the archive.
282
Echo It should be in the "src/" subdirectory.  Please make sure this
283
Echo file exists and is called "_gdbinit" with a leading underscore.
284
Echo Then run CONFIG.BAT again with the same arguments you did now.
285
goto End
286
:gdbinitOk
287
Echo Looking for the GDB init file...found
288
copy msdos\mainmake.v2 Makefile >nul
289
:mainv1
290
If "%DJGPP_VER%" == "1" copy msdos\mainmake Makefile >nul
291
rem   ----------------------------------------------------------------------
292
goto End
293
:SmallEnv
294
echo Your environment size is too small.  Please enlarge it and run me again.
295
echo For example, type "command.com /e:2048" to have 2048 bytes available.
296
set $foo$=
297
:end
298
set X11=
299
set nodebug=
300
set djgpp_ver=
301
set sys_malloc=
302
303
goto skipArchTag
304
   arch-tag: 2d2fed23-4dc6-4006-a2e4-49daf0031f33
305
:skipArchTag