config.bat 14.5 KB
Newer Older
1 2 3
@echo off
rem   ----------------------------------------------------------------------
rem   Configuration script for MSDOS
4
rem   Copyright (C) 1994-1999, 2001-2019 Free Software Foundation, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17 18

rem   This file is part of GNU Emacs.

rem   GNU Emacs is free software: you can redistribute it and/or modify
rem   it under the terms of the GNU General Public License as published by
rem   the Free Software Foundation, either version 3 of the License, or
rem   (at your option) any later version.

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
19
rem   along with GNU Emacs.  If not, see https://www.gnu.org/licenses/.
20 21

rem   ----------------------------------------------------------------------
22 23 24 25 26 27
rem   YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
rem
rem   + msdos version 3 or better.
rem   + DJGPP version 2.02 or later (version 2.03 or later recommended).
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
28
rem     line length limit.  The DJGPP port of make works (and is
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
rem     recommended).
rem   + rm, mv, and cp (from GNU file utilities).
rem   + sed (you can use the port that comes with DJGPP).
rem
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".
rem   ----------------------------------------------------------------------
set X11=
set nodebug=
set djgpp_ver=
set sys_malloc=
set libxml=
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$=
:again
if "%1" == "" goto usage
if "%1" == "--with-x" goto withx
if "%1" == "--no-debug" goto nodebug
if "%1" == "msdos" goto msdos
if "%1" == "--with-system-malloc" goto sysmalloc
:usage
echo Usage: config [--no-debug] [--with-system-malloc] [--with-x] msdos
echo [Read the script before you run it.]
goto end
rem   ----------------------------------------------------------------------
:withx
set X11=Y
shift
goto again
rem   ----------------------------------------------------------------------
:nodebug
set nodebug=Y
shift
goto again
rem   ----------------------------------------------------------------------
:sysmalloc
set sys_malloc=Y
shift
goto again
rem   ----------------------------------------------------------------------
:msdos
Echo Checking whether 'sed' is available...
sed -e "w junk.$$$" <Nul
If Exist junk.$$$ Goto sedOk
Echo To configure 'Emacs' you need to have 'sed'!
Goto End
:sedOk
Echo Checking whether 'rm' is available...
rm -f junk.$$$
If Not Exist junk.$$$ Goto rmOk
Echo To configure 'Emacs' you need to have 'rm'!
Goto End
:rmOk
Echo Checking whether 'mv' is available...
rm -f junk.1 junk.2
echo foo >junk.1
mv junk.1 ./junk.2
If Exist junk.2 Goto mvOk
Echo To configure 'Emacs' you need to have 'mv'!
rm -f junk.1
Goto End
:mvOk
rm -f junk.2
Echo Checking whether 'gcc' is available...
echo main(){} >junk.c
gcc -c junk.c
if exist junk.o goto gccOk
Echo To configure 'Emacs' you need to have 'gcc'!
rm -f junk.c
Goto End
:gccOk
rm -f junk.c junk.o junk junk.exe
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
109 110 111 112 113 114 115
:djgppOk
echo int main()           >junk.c
echo #ifdef __DJGPP__    >>junk.c
echo {return (__DJGPP__)*10 + (__DJGPP_MINOR__);} >>junk.c
echo #else               >>junk.c
echo #ifdef __GO32__     >>junk.c
echo {return 10;}         >>junk.c
116 117 118 119 120 121 122 123 124 125
echo #else               >>junk.c
echo {return 0;}         >>junk.c
echo #endif              >>junk.c
echo #endif              >>junk.c
gcc -o junk junk.c
if not exist junk.exe coff2exe junk
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!
126 127 128 129 130 131 132 133
Goto End
:go32Ok
set djgpp_ver=2
If Not ErrorLevel 22 Echo To build 'Emacs' you need DJGPP v2.02 or later!
If Not ErrorLevel 22 Goto End
rm -f junk.c junk junk.exe
rem DJECHO is used by the top-level Makefile in the v2.x build
Echo Checking whether 'djecho' is available...
134
redir -o Nul -eo djecho -o junk.$$$ foo
135 136 137 138 139 140
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 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.
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
Goto End
:djechoOk
rm -f junk.$$$
Echo Configuring for DJGPP Version %DJGPP_VER% ...
Rem   ----------------------------------------------------------------------
Echo Configuring the source directory...
cd src

rem   Create "epaths.h"
sed -f ../msdos/sed4.inp <epaths.in >epaths.tmp
update epaths.tmp epaths.h >nul
rm -f epaths.tmp

rem   Create "config.h"
rm -f config.h2 config.tmp
Eli Zaretskii's avatar
Eli Zaretskii committed
156
if exist config.in sed -e '' config.in > config.tmp
157
if exist ..\msdos\autogen\config.in sed -e '' ../msdos/autogen/config.in > config.tmp
158
if "%X11%" == "" goto src4
Eli Zaretskii's avatar
Eli Zaretskii committed
159
if exist config.in sed -f ../msdos/sed2x.inp < config.in > config.tmp
160
if exist ..\msdos\autogen\config.in sed -f ../msdos/sed2x.inp < ..\msdos\autogen\config.in > config.tmp
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
:src4
sed -f ../msdos/sed2v2.inp <config.tmp >config.h2
Rem See if they have libxml2 later than v2.2.0 installed
Echo Checking whether libxml2 v2.2.1 or later is installed ...
rm -f junk.c junk.o junk junk.exe
rem Use djecho here because we need to quote brackets
djecho "#include <libxml/xmlversion.h>"             >junk.c
djecho "int main()"                                 >>junk.c
djecho "{return (LIBXML_VERSION > 20200 ? 0 : 1);}" >>junk.c
redir -o Nul -eo gcc -I/dev/env/DJDIR/include/libxml2 -o junk junk.c
if not exist junk Goto xmlDone
if not exist junk.exe coff2exe junk
junk
If ErrorLevel 1 Goto xmlDone
Echo Configuring with libxml2 ...
sed -e "/#undef HAVE_LIBXML2/s/^.*$/#define HAVE_LIBXML2 1/" <config.h2 >config.h3
Eli Zaretskii's avatar
Eli Zaretskii committed
177
sed -e "/#define EMACS_CONFIG_FEATURES/s/^.*$/#define EMACS_CONFIG_FEATURES \"LIBXML2\"/" <config.h3 >config.h2
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
set libxml=1
:xmlDone
rm -f junk.c junk junk.exe
Rem See if they requested a SYSTEM_MALLOC build
if "%sys_malloc%" == "" Goto cfgDone
rm -f config.tmp
ren config.h2 config.tmp
sed -f ../msdos/sedalloc.inp <config.tmp >config.h2

:cfgDone
rm -f junk.c junk junk.exe
update config.h2 config.h >nul
rm -f config.tmp config.h2

rem   Create "makefile" from "makefile.in".
rm -f Makefile makefile.tmp
Eli Zaretskii's avatar
Eli Zaretskii committed
194
copy Makefile.in+deps.mk makefile.tmp
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
sed -f ../msdos/sed1v2.inp <makefile.tmp >Makefile
rm -f makefile.tmp

if "%X11%" == "" goto src5
mv Makefile makefile.tmp
sed -f ../msdos/sed1x.inp <makefile.tmp >Makefile
rm -f makefile.tmp
:src5

if "%sys_malloc%" == "" goto src5a
sed -e "/^GMALLOC_OBJ *=/s/gmalloc.o//" <Makefile >makefile.tmp
sed -e "/^VMLIMIT_OBJ *=/s/vm-limit.o//" <makefile.tmp >makefile.tmp2
sed -e "/^RALLOC_OBJ *=/s/ralloc.o//" <makefile.tmp2 >Makefile
rm -f makefile.tmp makefile.tmp2
:src5a

if "%nodebug%" == "" goto src6
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
sed -e "/^LDFLAGS *=/s/=/=-s/" <makefile.tmp >Makefile
rm -f makefile.tmp
:src6

if "%libxml%" == "" goto src7
sed -e "/^LIBXML2_LIBS *=/s/=/= -lxml2 -lz -liconv/" <Makefile >makefile.tmp
sed -e "/^LIBXML2_CFLAGS *=/s|=|= -I/dev/env/DJDIR/include/libxml2|" <makefile.tmp >Makefile
rm -f makefile.tmp
:src7
Eli Zaretskii's avatar
Eli Zaretskii committed
222 223 224 225
Rem Create .d files for new files in src/
If Not Exist deps\stamp mkdir deps
for %%f in (*.c) do @call ..\msdos\depfiles.bat %%f
echo deps-stamp > deps\stamp
226 227 228 229 230
cd ..
rem   ----------------------------------------------------------------------
Echo Configuring the library source directory...
cd lib-src
sed -f ../msdos/sed3v2.inp <Makefile.in >Makefile
Eli Zaretskii's avatar
Eli Zaretskii committed
231 232 233 234
mv Makefile makefile.tmp
sed -n -e "/^AC_INIT/s/[^,]*, \([^,]*\).*/@set emver=\1/p" ../configure.ac > emver.bat
call emver.bat
sed -e "s/@version@/%emver%/g" <makefile.tmp >Makefile
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
if "%X11%" == "" goto libsrc2a
mv Makefile makefile.tmp
sed -f ../msdos/sed3x.inp <makefile.tmp >Makefile
rm -f makefile.tmp
:libsrc2a
if "%nodebug%" == "" goto libsrc3
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
sed -e "/^ALL_CFLAGS *=/s/=/= -s/" <makefile.tmp >Makefile
rm -f makefile.tmp
:libsrc3
cd ..
rem   ----------------------------------------------------------------------
if "%X11%" == "" goto oldx1
Echo Configuring the oldxmenu directory...
cd oldxmenu
sed -f ../msdos/sed5x.inp <Makefile.in >Makefile
if "%nodebug%" == "" goto oldx2
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
mv -f makefile.tmp Makefile
:oldx2
cd ..
:oldx1
rem   ----------------------------------------------------------------------
Echo Configuring the doc directory, expect one "File not found" message...
cd doc
Eli Zaretskii's avatar
Eli Zaretskii committed
260 261 262 263
Rem Rename files like djtar on plain DOS filesystem would.
If Exist emacs\emacsver.texi.in update emacs/emacsver.texi.in emacs/emacsver.in
If Exist man\emacs.1.in update man/emacs.1.in man/emacs.in
If Exist ..\etc\refcards\emacsver.tex.in update ../etc/refcards/emacsver.tex.in ../etc/refcards/emacsver.in
264 265
Rem The two variants for lispintro below is for when the shell
Rem supports long file names but DJGPP does not
Eli Zaretskii's avatar
Eli Zaretskii committed
266 267 268 269 270
for %%d in (emacs lispref lispintro lispintr misc) do sed -e "s/@version@/%emver%/g" -f ../msdos/sed6.inp < %%d\Makefile.in > %%d\Makefile
Rem produce emacs.1 from emacs.in
If Exist man\emacs.1 goto manOk
sed -e "s/@version@/%emver%/g" -e "s/@PACKAGE_BUGREPORT@/bug-gnu-emacs@gnu.org/g" < man\emacs.in > man\emacs.1
:manOk
271 272
cd ..
rem   ----------------------------------------------------------------------
273
Echo Configuring the lib directory...
274
If Exist build-aux\snippet\c++defs.h update build-aux/snippet/c++defs.h build-aux/snippet/cxxdefs.h
275 276
cd lib
Rem Rename files like djtar on plain DOS filesystem would.
Eli Zaretskii's avatar
Eli Zaretskii committed
277
If Exist c++defs.h update c++defs.h cxxdefs.h
Eli Zaretskii's avatar
Eli Zaretskii committed
278
If Exist alloca.in.h update alloca.in.h alloca.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
279 280 281
If Exist byteswap.in.h update byteswap.in.h byteswap.in-h
If Exist dirent.in.h update dirent.in.h dirent.in-h
If Exist errno.in.h update errno.in.h errno.in-h
282
If Exist execinfo.in.h update execinfo.in.h execinfo.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
283
If Exist fcntl.in.h update fcntl.in.h fcntl.in-h
284
If Exist getopt.in.h update getopt.in.h getopt.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
285
If Exist getopt-cdefs.in.h update getopt-cdefs.in.h getopt-cdefs.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
286
If Exist inttypes.in.h update inttypes.in.h inttypes.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
287
If Exist limits.in.h update limits.in.h limits.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
288
If Exist signal.in.h update signal.in.h signal.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
289 290
If Exist signal.in.h update signal.in.h signal.in-h
If Exist stdalign.in.h update stdalign.in.h stdalign.in-h
291 292
If Exist stddef.in.h update stddef.in.h  stddef.in-h
If Exist stdint.in.h update stdint.in.h  stdint.in-h
293
If Exist stdio.in.h update stdio.in.h stdio.in-h
294
If Exist stdlib.in.h update stdlib.in.h stdlib.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
295 296
If Exist string.in.h update string.in.h string.in-h
If Exist sys_select.in.h update sys_select.in.h sys_select.in-h
297
If Exist sys_stat.in.h update sys_stat.in.h sys_stat.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
298
If Exist sys_time.in.h update sys_time.in.h sys_time.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
299
If Exist sys_types.in.h update sys_types.in.h sys_types.in-h
300 301
If Exist time.in.h update time.in.h time.in-h
If Exist unistd.in.h update unistd.in.h unistd.in-h
Eli Zaretskii's avatar
Eli Zaretskii committed
302
If Exist gnulib.mk.in update gnulib.mk.in gnulib.mk-in
Eli Zaretskii's avatar
Eli Zaretskii committed
303
Rem Only repository has the msdos/autogen directory
Eli Zaretskii's avatar
Eli Zaretskii committed
304
If Exist Makefile.in sed -f ../msdos/sedlibcf.inp < Makefile.in > makefile.tmp
305
If Exist ..\msdos\autogen\Makefile.in sed -f ../msdos/sedlibcf.inp < ..\msdos\autogen\Makefile.in > makefile.tmp
306 307
sed -f ../msdos/sedlibmk.inp < makefile.tmp > Makefile
rm -f makefile.tmp
Eli Zaretskii's avatar
Eli Zaretskii committed
308 309 310 311
sed -f ../msdos/sedlibcf.inp < gnulib.mk-in > gnulib.tmp
sed -f ../msdos/sedlibmk.inp < gnulib.tmp > gnulib.mk
rm -f gnulib.tmp
Rem Create .d files for new files in lib/
312
If Not Exist deps\stamp mkdir deps
313 314
for %%f in (*.c) do @call ..\msdos\depfiles.bat %%f
echo deps-stamp > deps\stamp
315 316
cd ..
rem   ----------------------------------------------------------------------
317 318 319 320 321 322 323 324 325 326 327
Echo Configuring the lisp directory...
cd lisp
If Exist gnus\.dir-locals.el update gnus/.dir-locals.el gnus/_dir-locals.el
sed -f ../msdos/sedlisp.inp < Makefile.in > Makefile
cd ..
rem   ----------------------------------------------------------------------
Echo Configuring the leim directory...
cd leim
sed -f ../msdos/sedleim.inp < Makefile.in > Makefile
cd ..
rem   ----------------------------------------------------------------------
Eli Zaretskii's avatar
Eli Zaretskii committed
328 329 330 331
If Not Exist admin\unidata goto noadmin
Echo Configuring the admin/unidata directory...
cd admin\unidata
sed -f ../../msdos/sedadmin.inp < Makefile.in > Makefile
Eli Zaretskii's avatar
Eli Zaretskii committed
332 333 334 335 336 337
Echo Configuring the admin/charsets directory...
cd ..\charsets
sed -f ../../msdos/sedadmin.inp < Makefile.in > Makefile
Echo Configuring the admin/grammars directory...
cd ..\grammars
sed -f ../../msdos/sedadmin.inp < Makefile.in > Makefile
Eli Zaretskii's avatar
Eli Zaretskii committed
338 339 340
cd ..\..
:noadmin
rem   ----------------------------------------------------------------------
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
Echo Configuring the main directory...
If Exist .dir-locals.el update .dir-locals.el _dir-locals.el
If Exist src\.dbxinit update src/.dbxinit src/_dbxinit
Echo Looking for the GDB init file...
If Exist src\.gdbinit update src/.gdbinit src/_gdbinit
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
Eli Zaretskii's avatar
Eli Zaretskii committed
357
rem GNUMakefile is not appropriate for MS-DOS so move it out of the way
358
If Exist GNUmakefile mv -f GNUmakefile GNUmakefile.unix
359 360 361 362 363 364 365 366 367 368 369 370 371
copy msdos\mainmake.v2 Makefile >nul
rem   ----------------------------------------------------------------------
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$=
:end
set X11=
set nodebug=
set djgpp_ver=
set sys_malloc=
set libxml=
Eli Zaretskii's avatar
Eli Zaretskii committed
372
set emver=