]> code.delx.au - gnu-emacs/blobdiff - config.bat
* files.el (abbreviate-file-name): When replacing $HOME with ~, turn
[gnu-emacs] / config.bat
index d2a665dfeb624f39e327a5aee038e8cf130a6ca0..10c224cb09535341eb56f10ddfe008ad9efea5ab 100644 (file)
@@ -1,13 +1,14 @@
 @echo off\r
 rem   ----------------------------------------------------------------------\r
 rem   Configuration script for MSDOS\r
 @echo off\r
 rem   ----------------------------------------------------------------------\r
 rem   Configuration script for MSDOS\r
-rem   Copyright (C) 1994 Free Software Foundation, Inc.\r
+rem   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003\r
+rem   2004, 2005, 2006, 2007, 2008  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
 rem   it under the terms of the GNU General Public License as published by\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
 rem   it under the terms of the GNU General Public License as published by\r
-rem   the Free Software Foundation; either version 2, or (at your option)\r
+rem   the Free Software Foundation; either version 3, or (at your option)\r
 rem   any later version.\r
 \r
 rem   GNU Emacs is distributed in the hope that it will be useful,\r
 rem   any later version.\r
 \r
 rem   GNU Emacs is distributed in the hope that it will be useful,\r
@@ -16,113 +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   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   + msdos version 3 or better.\r
 rem   ----------------------------------------------------------------------\r
 rem   YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:\r
 rem\r
 rem   + msdos version 3 or better.\r
-rem   + djgpp version 1,11 maint 4 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   + 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.\r
-rem   + rm, mv, chmod (From GNU file utilities).\r
-rem   + sed.\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\r
-rem   You must install in directory c:/emacs or change this script.\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
 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
 if "%1" == "msdos" goto msdos\r
-if "%1" == "msdos-X11" goto msdos11\r
 :usage\r
 :usage\r
-echo Usage: config msdos\r
-rem echo    or  config msdos-X11 -- don't even think about it\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
 goto end\r
 rem   ----------------------------------------------------------------------\r
-:msdos11\r
-set X11=y\r
-goto msdoscommon\r
+:withx\r
+set X11=Y\r
+shift\r
+goto again\r
 rem   ----------------------------------------------------------------------\r
 rem   ----------------------------------------------------------------------\r
-:msdos\r
-set X11=\r
-:msdoscommon\r
-rem   Change to the Emacs root -- assume we are there\r
-rem cd c:\emacs\r
+:nodebug\r
+set nodebug=Y\r
+shift\r
+goto again\r
 rem   ----------------------------------------------------------------------\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
 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
 \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
 \r
 rem   Create "config.h"\r
-rm -f config.h config.tmp\r
-cp %CONFIGH% config.tmp\r
+rm -f config.h2 config.tmp\r
+sed -e '' config.in > config.tmp\r
 if "%X11%" == "" goto src4\r
 if "%X11%" == "" goto src4\r
-sed -f ../msdos/sed4.inp <%CONFIGH% >config.tmp\r
+sed -f ../msdos/sed2x.inp <config.in >config.tmp\r
 :src4\r
 :src4\r
-sed -f ../msdos/sed2.inp <config.tmp >config.h\r
-rm -f config.tmp\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
 \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
-sed -e "1,/cpp stuff/s@^# .*$@@" <%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
 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
 cd ..\r
 rem   ----------------------------------------------------------------------\r
 Echo Configuring the library source directory...\r
 cd lib-src\r
-set MAKEFILEIN=makefile.in-in\r
-if exist %MAKEFILEIN% goto libsrc1\r
-set MAKEFILEIN=makefile-in.in\r
-if exist %MAKEFILEIN% goto libsrc1\r
-echo makefile: *** The file originally called "lib-src/Makefile.in.in" cannot be found.\r
-cd ..\r
-goto end\r
-:libsrc1\r
 rem   Create "makefile" from "makefile.in".\r
 rem   Create "makefile" from "makefile.in".\r
-sed -e "1,/cpp stuff/s@^# .*$@@" <%MAKEFILEIN% >junk.c\r
-gcc -E -I. -I../src junk.c | sed -e "s/^ /     /" -e "/^#/d" -e "/^[   \f]*$/d" >Makefile.new\r
-sed -f ../msdos/sed3.inp <makefile.new >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
 cd ..\r
 rem   ----------------------------------------------------------------------\r
+:maindir\r
 Echo Configuring the main directory...\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
 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
 :end\r
 set X11=\r
-set MAKEFILEIN=\r
-set PATHSH=\r
-set CONFIGH=\r
+set nodebug=\r
+set djgpp_ver=\r
 \r
 \r
+goto skipArchTag\r
+   arch-tag: 2d2fed23-4dc6-4006-a2e4-49daf0031f33\r
+:skipArchTag\r