]> code.delx.au - gnu-emacs/blobdiff - config.bat
Rename `MS-DOG' into `MS-DOS'.
[gnu-emacs] / config.bat
index 45aa38199f0f14c82f833e2d72a31d100fd0e00d..9a80f5d7854bade9c8787713204fbe8f1e850086 100644 (file)
@@ -1,6 +1,9 @@
 @echo off\r
 rem   ----------------------------------------------------------------------\r
 rem   Configuration script for MSDOS\r
+rem   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2004, 2006\r
+rem   Free Software Foundation, Inc.\r
+\r
 rem   This file is part of GNU Emacs.\r
 \r
 rem   GNU Emacs is free software; you can redistribute it and/or modify\r
@@ -14,82 +17,283 @@ rem   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 rem   GNU General Public License for more details.\r
 \r
 rem   You should have received a copy of the GNU General Public License\r
-rem   along with GNU Emacs; see the file COPYING.  If not, write to\r
-rem   the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.\r
+rem   along with GNU Emacs; see the file COPYING.  If not, write to the\r
+rem   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\r
+rem   Boston, MA 02110-1301, USA.\r
 rem   ----------------------------------------------------------------------\r
 rem   YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:\r
 rem\r
-rem   + djgpp version 1,11\r
-rem   + make utility that allows breaking of 128 chars limit of commands.\r
-rem     ndmake (as of version 4.5) won't work due to a line length limit.\r
-rem   + rm, mv, chmod (From GNU file utilities).\r
-rem   + sed.\r
+rem   + msdos version 3 or better.\r
+rem   + DJGPP version 1.12maint1 or later (version 2.03 or later recommended).\r
+rem   + make utility that allows breaking of the 128 chars limit on\r
+rem     command lines.  ndmake (as of version 4.5) won't work due to a\r
+rem     line length limit.  The make that comes with DJGPP does work.\r
+rem   + rm and mv (from GNU file utilities).\r
+rem   + sed (you can use the port that comes with DJGPP).\r
+rem\r
+rem   You should be able to get all the above utilities from the DJGPP FTP\r
+rem   site, ftp.delorie.com, in the directory "pub/djgpp/current/v2gnu".\r
 rem   ----------------------------------------------------------------------\r
-if not "%2" == "" goto usage\r
+set X11=\r
+set nodebug=\r
+set djgpp_ver=\r
+if "%1" == "" goto usage\r
+rem   ----------------------------------------------------------------------\r
+rem   See if their environment is large enough.  We need 28 bytes.\r
+set $foo$=789012345678901234567\r
+if not "%$foo$%" == "789012345678901234567" goto SmallEnv\r
+set $foo$=\r
+:again\r
+if "%1" == "" goto usage\r
+if "%1" == "--with-x" goto withx\r
+if "%1" == "--no-debug" goto nodebug\r
 if "%1" == "msdos" goto msdos\r
 :usage\r
-echo Usage: config msdos\r
-echo [Read the script before you run it; also check that you have all the\r
-echo necessary utilities.]\r
+echo Usage: config [--with-x] [--no-debug] msdos\r
+echo [Read the script before you run it.]\r
 goto end\r
 rem   ----------------------------------------------------------------------\r
-:msdos\r
-rem   Change to the Emacs root\r
-cd c:\emacs\r
+:withx\r
+set X11=Y\r
+shift\r
+goto again\r
 rem   ----------------------------------------------------------------------\r
+:nodebug\r
+set nodebug=Y\r
+shift\r
+goto again\r
+rem   ----------------------------------------------------------------------\r
+:msdos\r
+Echo Checking whether 'sed' is available...\r
+sed -e "w junk.$$$" <Nul\r
+If Exist junk.$$$ Goto sedOk\r
+Echo To configure 'Emacs' you need to have 'sed'!\r
+Goto End\r
+:sedOk\r
+Echo Checking whether 'rm' is available...\r
+rm -f junk.$$$\r
+If Not Exist junk.$$$ Goto rmOk\r
+Echo To configure 'Emacs' you need to have 'rm'!\r
+Goto End\r
+:rmOk\r
+Echo Checking whether 'mv' is available...\r
+rm -f junk.1 junk.2\r
+echo foo >junk.1\r
+mv junk.1 ./junk.2\r
+If Exist junk.2 Goto mvOk\r
+Echo To configure 'Emacs' you need to have 'mv'!\r
+rm -f junk.1\r
+Goto End\r
+:mvOk\r
+rm -f junk.2\r
+Echo Checking whether 'gcc' is available...\r
+echo main(){} >junk.c\r
+gcc -c junk.c\r
+if exist junk.o goto gccOk\r
+Echo To configure 'Emacs' you need to have 'gcc'!\r
+rm -f junk.c\r
+Goto End\r
+:gccOk\r
+rm -f junk.c junk.o junk junk.exe\r
+Echo Checking what version of DJGPP is installed...\r
+If Not "%DJGPP%" == "" goto djgppOk\r
+Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!\r
+Goto End\r
+:djgppOk\r
+echo int main()           >junk.c\r
+echo #ifdef __DJGPP__    >>junk.c\r
+echo {return (__DJGPP__)*10;} >>junk.c\r
+echo #else               >>junk.c\r
+echo #ifdef __GO32__     >>junk.c\r
+echo {return 10;}         >>junk.c\r
+echo #else               >>junk.c\r
+echo {return 0;}         >>junk.c\r
+echo #endif              >>junk.c\r
+echo #endif              >>junk.c\r
+gcc -o junk junk.c\r
+if not exist junk.exe coff2exe junk\r
+junk\r
+If ErrorLevel 10 Goto go32Ok\r
+rm -f junk.c junk junk.exe\r
+Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!\r
+Goto End\r
+:go32Ok\r
+set djgpp_ver=1\r
+If ErrorLevel 20 set djgpp_ver=2\r
+rm -f junk.c junk junk.exe\r
+rem The v1.x build does not need djecho\r
+if "%DJGPP_VER%" == "1" Goto djechoOk\r
+rem DJECHO is used by the top-level Makefile in the v2.x build\r
+Echo Checking whether 'djecho' is available...\r
+redir -o Nul -eo djecho -o junk.$$$ foo\r
+If Exist junk.$$$ Goto djechoOk\r
+Echo To build 'Emacs' you need the 'djecho.exe' program!\r
+Echo 'djecho.exe' is part of 'djdevNNN.zip' basic DJGPP development kit.\r
+Echo Versions of DJGPP before 2.02 called this program 'echo.exe'.\r
+Echo Either unpack 'djecho.exe' from the 'djdevNNN.zip' archive,\r
+Echo or, if you have 'echo.exe', copy it to 'djecho.exe'.\r
+Echo Then run CONFIG.BAT again with the same arguments you did now.\r
+Goto End\r
+:djechoOk\r
+rm -f junk.$$$\r
+Echo Configuring for DJGPP Version %DJGPP_VER% ...\r
+Rem   ----------------------------------------------------------------------\r
 Echo Configuring the source directory...\r
 cd src\r
-set PATHSH=paths-h.in\r
-if exist %PATHSH% goto src1\r
-set PATHSH=paths.h-in\r
-if exist %PATHSH% goto src1\r
-echo config: *** The file originally called "src/paths.h.in" cannot be found.\r
-cd ..\r
-goto end\r
-:src1\r
-set CONFIGH=config-h.in\r
-if exist %CONFIGH% goto src2\r
-set CONFIGH=config.h-in\r
-if exist %CONFIGH% goto src2\r
-echo config: *** The file originally called "src/config.h.in" cannot be found.\r
-cd ..\r
-goto end\r
-:src2\r
-set MAKEFILEIN=makefile.in-in\r
-if exist %MAKEFILEIN% goto src3\r
-set MAKEFILEIN=makefile-in.in\r
-if exist %MAKEFILEIN% goto src3\r
-echo makefile: *** The file originally called "src/makefile.in.in" cannot be found.\r
-cd ..\r
-goto end\r
-:src3\r
 \r
-rem   Create "paths.h"\r
-rm -f paths.h\r
-sed -e "s!/lib/emacs!!" -e "s!/usr/local!c:/emacs!" -e "s!/data!/etc!" <%PATHSH% >paths.h\r
+rem   Create "epaths.h"\r
+sed -f ../msdos/sed4.inp <epaths.in >epaths.tmp\r
+update epaths.tmp epaths.h >nul\r
+rm -f epaths.tmp\r
 \r
 rem   Create "config.h"\r
-rm -f config.h\r
-sed -f ../msdos/sed2.inp <%CONFIGH% >config.h\r
+rm -f config.h2 config.tmp\r
+sed -e '' config.in > config.tmp\r
+if "%X11%" == "" goto src4\r
+sed -f ../msdos/sed2x.inp <config.in >config.tmp\r
+:src4\r
+if "%DJGPP_VER%" == "2" Goto src41\r
+sed -f ../msdos/sed2.inp <config.tmp >config.h2\r
+goto src42\r
+:src41\r
+sed -f ../msdos/sed2v2.inp <config.tmp >config.h2\r
+:src42\r
+Rem See if DECL_ALIGN can be supported with this GCC\r
+rm -f junk.c junk.o junk junk.exe\r
+echo struct { int i; char *p; } __attribute__((__aligned__(8))) foo;  >junk.c\r
+rem Two percent signs because it is a special character for COMMAND.COM/CMD\r
+rem Filter thru Sed because "&" is special for CMD.EXE\r
+echo int main(void) { return (unsigned long)"&"foo %% 8; } | sed "s/.&./\&/"         >>junk.c\r
+gcc -o junk junk.c\r
+if not exist junk.exe coff2exe junk\r
+junk\r
+If Not ErrorLevel 1 Goto alignOk\r
+Echo WARNING: Your GCC does not support 8-byte aligned variables.\r
+Echo WARNING: Therefore Emacs cannot support buffers larger than 128MB.\r
+rem The following line disables DECL_ALIGN which in turn disables USE_LSB_TAG\r
+rem For details see lisp.h where it defines USE_LSB_TAG\r
+echo #define NO_DECL_ALIGN >>config.h2\r
+:alignOk\r
+rm -f junk.c junk junk.exe\r
+update config.h2 config.h >nul\r
+rm -f config.tmp config.h2\r
 \r
 rem   On my system dir.h gets in the way.  It's a VMS file so who cares.\r
 if exist dir.h ren dir.h vmsdir.h\r
 \r
-rem   Create "makefile" from "makefile.in.in" using a context patch.\r
-rm -f makefile junk.c\r
-cp %MAKEFILEIN% junk.c\r
-gcc -E junk.c | sed -f ../msdos/sed1.inp >makefile\r
+rem   Create "makefile" from "makefile.in".\r
+rm -f Makefile junk.c\r
+sed -e "1,/== start of cpp stuff ==/s@^# .*$@@" <Makefile.in >junk.c\r
+If "%DJGPP_VER%" == "1" Goto mfV1\r
+gcc -E -traditional junk.c | sed -f ../msdos/sed1v2.inp >Makefile\r
+goto mfDone\r
+:mfV1\r
+gcc -E -traditional junk.c | sed -f ../msdos/sed1.inp >Makefile\r
+:mfDone\r
 rm -f junk.c\r
+\r
+if "%X11%" == "" goto src5\r
+mv Makefile makefile.tmp\r
+sed -f ../msdos/sed1x.inp <makefile.tmp >Makefile\r
+rm -f makefile.tmp\r
+:src5\r
+\r
+if "%nodebug%" == "" goto src6\r
+sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp\r
+sed -e "/^LDFLAGS *=/s/=/=-s/" <makefile.tmp >Makefile\r
+rm -f makefile.tmp\r
+:src6\r
 cd ..\r
 rem   ----------------------------------------------------------------------\r
 Echo Configuring the library source directory...\r
 cd lib-src\r
 rem   Create "makefile" from "makefile.in".\r
-copy makefile makefile.bak >nul\r
-sed -f ../msdos/sed3.inp <makefile.in >makefile\r
+sed -e "1,/== start of cpp stuff ==/s@^#[      ].*$@@" <Makefile.in >junk.c\r
+gcc -E -traditional -I. -I../src junk.c | sed -e "s/^ /        /" -e "/^#/d" -e "/^[   \f]*$/d" >makefile.new\r
+If "%DJGPP_VER%" == "2" goto libsrc-v2\r
+sed -f ../msdos/sed3.inp <makefile.new >Makefile\r
+Goto libsrc2\r
+:libsrc-v2\r
+sed -f ../msdos/sed3v2.inp <makefile.new >Makefile\r
+:libsrc2\r
+rm -f makefile.new junk.c\r
+if "%nodebug%" == "" goto libsrc3\r
+sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp\r
+sed -e "/^ALL_CFLAGS *=/s/=/= -s/" <makefile.tmp >Makefile\r
+rm -f makefile.tmp\r
+:libsrc3\r
+cd ..\r
+rem   ----------------------------------------------------------------------\r
+if "%X11%" == "" goto oldx1\r
+Echo Configuring the oldxmenu directory...\r
+cd oldxmenu\r
+sed -f ../msdos/sed5x.inp <Makefile.in >Makefile\r
+if "%nodebug%" == "" goto oldx2\r
+sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp\r
+mv -f makefile.tmp Makefile\r
+:oldx2\r
+cd ..\r
+:oldx1\r
+rem   ----------------------------------------------------------------------\r
+Echo Configuring the manual directory...\r
+cd man\r
+sed -f ../msdos/sed6.inp < Makefile.in > Makefile\r
+cd ..\r
+rem   ----------------------------------------------------------------------\r
+Echo Configuring the ELisp manual directory...\r
+cd lispref\r
+sed -f ../msdos/sed6.inp < Makefile.in > Makefile\r
 cd ..\r
 rem   ----------------------------------------------------------------------\r
+Echo Configuring the ELisp Introduction manual directory...\r
+Rem The two variants for the line below is for when the shell\r
+Rem supports long file names but DJGPP does not\r
+if exist lispintro\Makefile.in cd lispintro\r
+if exist lispintr\Makefile.in cd lispintr\r
+sed -f ../msdos/sed6.inp < Makefile.in > Makefile\r
+cd ..\r
+rem   ----------------------------------------------------------------------\r
+Echo Configuring the lisp directory...\r
+cd lisp\r
+sed -f ../msdos/sedlisp.inp < Makefile.in > Makefile\r
+cd ..\r
+rem   ----------------------------------------------------------------------\r
+If not Exist leim\quail\latin-pre.el goto maindir\r
+Echo Configuring the leim directory...\r
+cd leim\r
+sed -f ../msdos/sedleim.inp < Makefile.in > Makefile\r
+cd ..\r
+rem   ----------------------------------------------------------------------\r
+:maindir\r
 Echo Configuring the main directory...\r
-copy msdos\mainmake makefile >nul\r
+If "%DJGPP_VER%" == "1" goto mainv1\r
+Echo Looking for the GDB init file...\r
+If Exist src\.gdbinit update src/.gdbinit src/_gdbinit\r
+If Exist src\_gdbinit goto gdbinitOk\r
+Echo ERROR:\r
+Echo I cannot find the GDB init file.  It was called ".gdbinit" in\r
+Echo the Emacs distribution, but was probably renamed to some other\r
+Echo name without the leading dot when you untarred the archive.\r
+Echo It should be in the "src/" subdirectory.  Please make sure this\r
+Echo file exists and is called "_gdbinit" with a leading underscore.\r
+Echo Then run CONFIG.BAT again with the same arguments you did now.\r
+goto End\r
+:gdbinitOk\r
+Echo Looking for the GDB init file...found\r
+copy msdos\mainmake.v2 Makefile >nul\r
+:mainv1\r
+If "%DJGPP_VER%" == "1" copy msdos\mainmake Makefile >nul\r
 rem   ----------------------------------------------------------------------\r
+goto End\r
+:SmallEnv\r
+echo Your environment size is too small.  Please enlarge it and run me again.\r
+echo For example, type "command.com /e:2048" to have 2048 bytes available.\r
+set $foo$=\r
 :end\r
+set X11=\r
+set nodebug=\r
+set djgpp_ver=\r
+\r
+goto skipArchTag\r
+   arch-tag: 2d2fed23-4dc6-4006-a2e4-49daf0031f33\r
+:skipArchTag\r