config.bat 10.3 KB
Newer Older
Richard M. Stallman's avatar
Richard M. Stallman committed
1 2 3
@echo off
rem   ----------------------------------------------------------------------
rem   Configuration script for MSDOS
Glenn Morris's avatar
Glenn Morris committed
4
rem   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003
Glenn Morris's avatar
Glenn Morris committed
5
rem   2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
6

Richard M. Stallman's avatar
Richard M. Stallman committed
7 8
rem   This file is part of GNU Emacs.

9
rem   GNU Emacs is free software: you can redistribute it and/or modify
Richard M. Stallman's avatar
Richard M. Stallman committed
10
rem   it under the terms of the GNU General Public License as published by
11 12
rem   the Free Software Foundation, either version 3 of the License, or
rem   (at your option) any later version.
Richard M. Stallman's avatar
Richard M. Stallman committed
13 14 15 16 17 18 19

rem   GNU Emacs is distributed in the hope that it will be useful,
rem   but WITHOUT ANY WARRANTY; without even the implied warranty of
rem   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
rem   GNU General Public License for more details.

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

Richard M. Stallman's avatar
Richard M. Stallman committed
22 23 24
rem   ----------------------------------------------------------------------
rem   YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
rem
25
rem   + msdos version 3 or better.
Eli Zaretskii's avatar
Eli Zaretskii committed
26
rem   + DJGPP version 1.12maint1 or later (version 2.03 or later recommended).
27 28
rem   + make utility that allows breaking of the 128 chars limit on
rem     command lines.  ndmake (as of version 4.5) won't work due to a
Eli Zaretskii's avatar
Eli Zaretskii committed
29
rem     line length limit.  The make that comes with DJGPP does work.
30 31
rem   + rm and mv (from GNU file utilities).
rem   + sed (you can use the port that comes with DJGPP).
32
rem
Eli Zaretskii's avatar
Eli Zaretskii committed
33 34
rem   You should be able to get all the above utilities from the DJGPP FTP
rem   site, ftp.delorie.com, in the directory "pub/djgpp/current/v2gnu".
Richard M. Stallman's avatar
Richard M. Stallman committed
35
rem   ----------------------------------------------------------------------
Morten Welinder's avatar
Morten Welinder committed
36 37
set X11=
set nodebug=
38
set djgpp_ver=
39 40 41 42 43 44
if "%1" == "" goto usage
rem   ----------------------------------------------------------------------
rem   See if their environment is large enough.  We need 28 bytes.
set $foo$=789012345678901234567
if not "%$foo$%" == "789012345678901234567" goto SmallEnv
set $foo$=
Morten Welinder's avatar
Morten Welinder committed
45 46 47 48
:again
if "%1" == "" goto usage
if "%1" == "--with-x" goto withx
if "%1" == "--no-debug" goto nodebug
Richard M. Stallman's avatar
Richard M. Stallman committed
49 50
if "%1" == "msdos" goto msdos
:usage
Morten Welinder's avatar
Morten Welinder committed
51 52
echo Usage: config [--with-x] [--no-debug] msdos
echo [Read the script before you run it.]
Richard M. Stallman's avatar
Richard M. Stallman committed
53 54
goto end
rem   ----------------------------------------------------------------------
Morten Welinder's avatar
Morten Welinder committed
55 56 57 58
:withx
set X11=Y
shift
goto again
59
rem   ----------------------------------------------------------------------
Morten Welinder's avatar
Morten Welinder committed
60 61 62 63
:nodebug
set nodebug=Y
shift
goto again
Richard M. Stallman's avatar
Richard M. Stallman committed
64
rem   ----------------------------------------------------------------------
Morten Welinder's avatar
Morten Welinder committed
65
:msdos
66 67
Echo Checking whether 'sed' is available...
sed -e "w junk.$$$" <Nul
Morten Welinder's avatar
Morten Welinder committed
68
If Exist junk.$$$ Goto sedOk
69
Echo To configure 'Emacs' you need to have 'sed'!
Morten Welinder's avatar
Morten Welinder committed
70 71
Goto End
:sedOk
72
Echo Checking whether 'rm' is available...
Morten Welinder's avatar
Morten Welinder committed
73 74
rm -f junk.$$$
If Not Exist junk.$$$ Goto rmOk
75
Echo To configure 'Emacs' you need to have 'rm'!
Morten Welinder's avatar
Morten Welinder committed
76 77
Goto End
:rmOk
78
Echo Checking whether 'mv' is available...
Morten Welinder's avatar
Morten Welinder committed
79 80
rm -f junk.1 junk.2
echo foo >junk.1
81
mv junk.1 ./junk.2
Morten Welinder's avatar
Morten Welinder committed
82
If Exist junk.2 Goto mvOk
83
Echo To configure 'Emacs' you need to have 'mv'!
Morten Welinder's avatar
Morten Welinder committed
84 85 86 87
rm -f junk.1
Goto End
:mvOk
rm -f junk.2
88
Echo Checking whether 'gcc' is available...
Morten Welinder's avatar
Morten Welinder committed
89 90 91
echo main(){} >junk.c
gcc -c junk.c
if exist junk.o goto gccOk
92
Echo To configure 'Emacs' you need to have 'gcc'!
Morten Welinder's avatar
Morten Welinder committed
93 94 95
rm -f junk.c
Goto End
:gccOk
96
rm -f junk.c junk.o junk junk.exe
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
Echo Checking what version of DJGPP is installed...
If Not "%DJGPP%" == "" goto djgppOk
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
Goto End
:djgppOk
echo int main()           >junk.c
echo #ifdef __DJGPP__    >>junk.c
echo {return (__DJGPP__)*10;} >>junk.c
echo #else               >>junk.c
echo #ifdef __GO32__     >>junk.c
echo {return 10;}         >>junk.c
echo #else               >>junk.c
echo {return 0;}         >>junk.c
echo #endif              >>junk.c
echo #endif              >>junk.c
112 113
gcc -o junk junk.c
if not exist junk.exe coff2exe junk
114 115 116 117 118 119
junk
If ErrorLevel 10 Goto go32Ok
rm -f junk.c junk junk.exe
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
Goto End
:go32Ok
120 121
set djgpp_ver=1
If ErrorLevel 20 set djgpp_ver=2
122
rm -f junk.c junk junk.exe
123 124 125
rem The v1.x build does not need djecho
if "%DJGPP_VER%" == "1" Goto djechoOk
rem DJECHO is used by the top-level Makefile in the v2.x build
126 127 128 129 130 131 132 133 134 135 136 137
Echo Checking whether 'djecho' is available...
redir -o Nul -eo djecho -o junk.$$$ foo
If Exist junk.$$$ Goto djechoOk
Echo To build 'Emacs' you need the 'djecho.exe' program!
Echo 'djecho.exe' is part of 'djdevNNN.zip' basic DJGPP development kit.
Echo Versions of DJGPP before 2.02 called this program 'echo.exe'.
Echo Either unpack 'djecho.exe' from the 'djdevNNN.zip' archive,
Echo or, if you have 'echo.exe', copy it to 'djecho.exe'.
Echo Then run CONFIG.BAT again with the same arguments you did now.
Goto End
:djechoOk
rm -f junk.$$$
138
Echo Configuring for DJGPP Version %DJGPP_VER% ...
Morten Welinder's avatar
Morten Welinder committed
139
Rem   ----------------------------------------------------------------------
Richard M. Stallman's avatar
Richard M. Stallman committed
140 141 142
Echo Configuring the source directory...
cd src

143 144 145 146
rem   Create "epaths.h"
sed -f ../msdos/sed4.inp <epaths.in >epaths.tmp
update epaths.tmp epaths.h >nul
rm -f epaths.tmp
Richard M. Stallman's avatar
Richard M. Stallman committed
147 148

rem   Create "config.h"
Morten Welinder's avatar
Morten Welinder committed
149
rm -f config.h2 config.tmp
150
sed -e '' config.in > config.tmp
151
if "%X11%" == "" goto src4
152
sed -f ../msdos/sed2x.inp <config.in >config.tmp
153
:src4
Eli Zaretskii's avatar
Eli Zaretskii committed
154
if "%DJGPP_VER%" == "2" Goto src41
Morten Welinder's avatar
Morten Welinder committed
155
sed -f ../msdos/sed2.inp <config.tmp >config.h2
Eli Zaretskii's avatar
Eli Zaretskii committed
156 157 158 159
goto src42
:src41
sed -f ../msdos/sed2v2.inp <config.tmp >config.h2
:src42
160 161 162
Rem See if DECL_ALIGN can be supported with this GCC
rm -f junk.c junk.o junk junk.exe
echo struct { int i; char *p; } __attribute__((__aligned__(8))) foo;  >junk.c
163 164 165
rem Two percent signs because it is a special character for COMMAND.COM/CMD
rem Filter thru Sed because "&" is special for CMD.EXE
echo int main(void) { return (unsigned long)"&"foo %% 8; } | sed "s/.&./\&/"         >>junk.c
166 167 168 169 170 171 172 173
gcc -o junk junk.c
if not exist junk.exe coff2exe junk
junk
If Not ErrorLevel 1 Goto alignOk
Echo WARNING: Your GCC does not support 8-byte aligned variables.
Echo WARNING: Therefore Emacs cannot support buffers larger than 128MB.
rem The following line disables DECL_ALIGN which in turn disables USE_LSB_TAG
rem For details see lisp.h where it defines USE_LSB_TAG
174
echo #define NO_DECL_ALIGN >>config.h2
175 176
:alignOk
rm -f junk.c junk junk.exe
Morten Welinder's avatar
Morten Welinder committed
177 178
update config.h2 config.h >nul
rm -f config.tmp config.h2
Richard M. Stallman's avatar
Richard M. Stallman committed
179 180 181 182

rem   On my system dir.h gets in the way.  It's a VMS file so who cares.
if exist dir.h ren dir.h vmsdir.h

183
rem   Create "makefile" from "makefile.in".
184
rm -f Makefile junk.c
185
sed -e "1,/== start of cpp stuff ==/s@^# .*$@@" <Makefile.in >junk.c
186
If "%DJGPP_VER%" == "1" Goto mfV1
187
gcc -E -traditional junk.c | sed -f ../msdos/sed1v2.inp >Makefile
188 189
goto mfDone
:mfV1
190
gcc -E -traditional junk.c | sed -f ../msdos/sed1.inp >Makefile
191
:mfDone
192
rm -f junk.c
193

Morten Welinder's avatar
Morten Welinder committed
194
if "%X11%" == "" goto src5
195 196
mv Makefile makefile.tmp
sed -f ../msdos/sed1x.inp <makefile.tmp >Makefile
Morten Welinder's avatar
Morten Welinder committed
197 198 199 200
rm -f makefile.tmp
:src5

if "%nodebug%" == "" goto src6
201
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
202
sed -e "/^LDFLAGS *=/s/=/=-s/" <makefile.tmp >Makefile
203
rm -f makefile.tmp
Morten Welinder's avatar
Morten Welinder committed
204
:src6
Richard M. Stallman's avatar
Richard M. Stallman committed
205 206 207 208 209
cd ..
rem   ----------------------------------------------------------------------
Echo Configuring the library source directory...
cd lib-src
rem   Create "makefile" from "makefile.in".
210
sed -e "1,/== start of cpp stuff ==/s@^#[ 	].*$@@" <Makefile.in >junk.c
211
gcc -E -traditional -I. -I../src junk.c | sed -e "s/^ /	/" -e "/^#/d" -e "/^[ 	]*$/d" >makefile.new
212
If "%DJGPP_VER%" == "2" goto libsrc-v2
213
sed -f ../msdos/sed3.inp <makefile.new >Makefile
214 215
Goto libsrc2
:libsrc-v2
216
sed -f ../msdos/sed3v2.inp <makefile.new >Makefile
217
:libsrc2
Morten Welinder's avatar
Morten Welinder committed
218
rm -f makefile.new junk.c
219
if "%nodebug%" == "" goto libsrc3
220
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
221
sed -e "/^ALL_CFLAGS *=/s/=/= -s/" <makefile.tmp >Makefile
222 223
rm -f makefile.tmp
:libsrc3
Morten Welinder's avatar
Morten Welinder committed
224 225 226 227 228
cd ..
rem   ----------------------------------------------------------------------
if "%X11%" == "" goto oldx1
Echo Configuring the oldxmenu directory...
cd oldxmenu
229
sed -f ../msdos/sed5x.inp <Makefile.in >Makefile
Morten Welinder's avatar
Morten Welinder committed
230
if "%nodebug%" == "" goto oldx2
231
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
232
mv -f makefile.tmp Makefile
Morten Welinder's avatar
Morten Welinder committed
233
:oldx2
Richard M. Stallman's avatar
Richard M. Stallman committed
234
cd ..
Morten Welinder's avatar
Morten Welinder committed
235
:oldx1
Richard M. Stallman's avatar
Richard M. Stallman committed
236
rem   ----------------------------------------------------------------------
237 238 239
Echo Configuring the doc directory...
cd doc
Rem The two variants for lispintro below is for when the shell
240
Rem supports long file names but DJGPP does not
241
for %%d in (emacs lispref lispintro lispintr misc) do sed -f ../msdos/sed6.inp < %%d\Makefile.in > %%d\Makefile
242 243
cd ..
rem   ----------------------------------------------------------------------
244 245 246 247 248
Echo Configuring the lisp directory...
cd lisp
sed -f ../msdos/sedlisp.inp < Makefile.in > Makefile
cd ..
rem   ----------------------------------------------------------------------
Eli Zaretskii's avatar
Eli Zaretskii committed
249 250 251 252 253 254 255
If not Exist leim\quail\latin-pre.el goto maindir
Echo Configuring the leim directory...
cd leim
sed -f ../msdos/sedleim.inp < Makefile.in > Makefile
cd ..
rem   ----------------------------------------------------------------------
:maindir
Richard M. Stallman's avatar
Richard M. Stallman committed
256
Echo Configuring the main directory...
257 258
If "%DJGPP_VER%" == "1" goto mainv1
Echo Looking for the GDB init file...
259
If Exist src\.gdbinit update src/.gdbinit src/_gdbinit
260 261 262 263 264 265 266 267 268 269 270
If Exist src\_gdbinit goto gdbinitOk
Echo ERROR:
Echo I cannot find the GDB init file.  It was called ".gdbinit" in
Echo the Emacs distribution, but was probably renamed to some other
Echo name without the leading dot when you untarred the archive.
Echo It should be in the "src/" subdirectory.  Please make sure this
Echo file exists and is called "_gdbinit" with a leading underscore.
Echo Then run CONFIG.BAT again with the same arguments you did now.
goto End
:gdbinitOk
Echo Looking for the GDB init file...found
271
copy msdos\mainmake.v2 Makefile >nul
272
:mainv1
273
If "%DJGPP_VER%" == "1" copy msdos\mainmake Makefile >nul
Richard M. Stallman's avatar
Richard M. Stallman committed
274
rem   ----------------------------------------------------------------------
275 276 277 278 279
goto End
:SmallEnv
echo Your environment size is too small.  Please enlarge it and run me again.
echo For example, type "command.com /e:2048" to have 2048 bytes available.
set $foo$=
Richard M. Stallman's avatar
Richard M. Stallman committed
280
:end
281
set X11=
Morten Welinder's avatar
Morten Welinder committed
282
set nodebug=
283
set djgpp_ver=
284 285 286 287

goto skipArchTag
   arch-tag: 2d2fed23-4dc6-4006-a2e4-49daf0031f33
:skipArchTag