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