*** empty log message ***
[bpt/emacs.git] / nt / configure.bat
CommitLineData
f466241d
EZ
1@echo off\r
2rem ----------------------------------------------------------------------\r
3rem Configuration script for MS Windows 95/98 and NT/2000\r
4rem Copyright (C) 1999-2001 Free Software Foundation, Inc.\r
5\r
6rem This file is part of GNU Emacs.\r
7\r
8rem GNU Emacs is free software; you can redistribute it and/or modify\r
9rem it under the terms of the GNU General Public License as published by\r
10rem the Free Software Foundation; either version 2, or (at your option)\r
11rem any later version.\r
12\r
13rem GNU Emacs is distributed in the hope that it will be useful,\r
14rem but WITHOUT ANY WARRANTY; without even the implied warranty of\r
15rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
16rem GNU General Public License for more details.\r
17\r
18rem You should have received a copy of the GNU General Public License\r
19rem along with GNU Emacs; see the file COPYING. If not, write to the\r
20rem Free Software Foundation, Inc., 59 Temple Place - Suite 330,\r
21rem Boston, MA 02111-1307, USA.\r
22rem ----------------------------------------------------------------------\r
23rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:\r
24rem\r
25rem + MS Windows 95/98 or NT/2000\r
26rem + either MSVC 2.x or later, or gcc-2.95 or later (with gmake 3.75\r
27rem or later) and the Mingw32 and W32 API headers and libraries\r
28rem\r
29rem For reference, here is a list of which builds of gmake are known to\r
30rem work or not, and whether they work in the presence and/or absence of\r
31rem sh.exe.\r
32rem \r
33rem sh exists no sh\r
34rem cygwin b20.1 make (3.75): okay[1] fails[2]\r
35rem MSVC compiled gmake 3.77: okay okay\r
36rem MSVC compiled gmake 3.78.1: okay okay\r
37rem MSVC compiled gmake 3.79.1: okay okay\r
38rem mingw32/gcc-2.92.2 make (3.77): okay okay\r
39rem cygwin compiled gmake 3.77: okay[1] fails[2]\r
40rem cygwin compiled gmake 3.78.1: okay fails[2]\r
41rem cygwin compiled gmake 3.79.1: couldn't build make[3]\r
42rem\r
43rem [1] doesn't cope with makefiles with DOS line endings, so must mount\r
44rem emacs source with text!=binary.\r
45rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.\r
46rem [3] requires LC_MESSAGES support to build; maybe 2.95.x update to\r
47rem cygwin provides this?\r
48rem\r
49\r
50rem ----------------------------------------------------------------------\r
51rem See if the environment is large enough. We need 43 (?) bytes.\r
52set $foo$=123456789_123456789_123456789_123456789_123\r
53if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv\r
54set $foo$=\r
55\r
56rem ----------------------------------------------------------------------\r
57rem Make sure we are running in the nt subdir\r
58if exist configure.bat goto start\r
59echo You must run configure from the nt subdirectory.\r
60goto end\r
61\r
62:start\r
63rem ----------------------------------------------------------------------\r
64rem Default settings.\r
65set prefix=\r
66set nodebug=N\r
67set noopt=N\r
68set nocygwin=N\r
69set COMPILER=\r
70set usercflags=\r
71set userldflags=\r
72set sep1=\r
73set sep2=\r
74\r
75rem ----------------------------------------------------------------------\r
76rem Handle arguments.\r
77:again\r
78if "%1" == "-h" goto usage\r
79if "%1" == "--help" goto usage\r
80if "%1" == "--prefix" goto setprefix\r
81if "%1" == "--with-gcc" goto withgcc\r
82if "%1" == "--with-msvc" goto withmsvc\r
83if "%1" == "--no-debug" goto nodebug\r
84if "%1" == "--no-opt" goto noopt\r
85if "%1" == "--no-cygwin" goto nocygwin\r
86if "%1" == "--cflags" goto usercflags\r
87if "%1" == "--ldflags" goto userldflags\r
88if "%1" == "" goto checkutils\r
89:usage\r
90echo Usage: configure [options]\r
91echo Options:\r
92echo. --prefix PREFIX install Emacs in directory PREFIX\r
93echo. --with-gcc use GCC to compile Emacs\r
94echo. --with-msvc use MSVC to compile Emacs\r
95echo. --no-debug exclude debug info from executables\r
96echo. --no-opt disable optimization\r
97echo. --no-cygwin use -mno-cygwin option with GCC\r
98echo. --cflags FLAG pass FLAG to compiler\r
99echo. --ldflags FLAG pass FLAG to compiler when linking\r
100goto end\r
101rem ----------------------------------------------------------------------\r
102:setprefix\r
103shift\r
104set prefix=%1\r
105shift\r
106goto again\r
107rem ----------------------------------------------------------------------\r
108:withgcc\r
109set COMPILER=gcc\r
110shift\r
111goto again\r
112rem ----------------------------------------------------------------------\r
113:withmsvc\r
114set COMPILER=cl\r
115shift\r
116goto again\r
117rem ----------------------------------------------------------------------\r
118:nodebug\r
119set nodebug=Y\r
120shift\r
121goto again\r
122rem ----------------------------------------------------------------------\r
123:noopt\r
124set noopt=Y\r
125shift\r
126goto again\r
127rem ----------------------------------------------------------------------\r
128:nocygwin\r
129set nocygwin=Y\r
130shift\r
131goto again\r
132rem ----------------------------------------------------------------------\r
133:usercflags\r
134shift\r
135set usercflags=%usercflags%%sep1%%1\r
136set sep1= %nothing%\r
137shift\r
138goto again\r
139rem ----------------------------------------------------------------------\r
140:userldflags\r
141shift\r
142set userldflags=%userldflags%%sep2%%1\r
143set sep2= %nothing%\r
144shift\r
145goto again\r
146\r
147rem ----------------------------------------------------------------------\r
148rem Check that necessary utilities (cp and rm) are present.\r
149:checkutils\r
150echo Checking for 'cp'...\r
151cp configure.bat junk.bat\r
152if not exist junk.bat goto needcp\r
153echo Checking for 'rm'...\r
154rm junk.bat\r
155if exist junk.bat goto needrm\r
156goto checkcompiler\r
157:needcp\r
158echo You need 'cp' (the Unix file copy program) to build Emacs.\r
159goto end\r
160:needrm\r
161del junk.bat\r
162echo You need 'rm' (the Unix file delete program) to build Emacs.\r
163goto end\r
164\r
165rem ----------------------------------------------------------------------\r
166rem Auto-detect compiler if not specified, and validate GCC if chosen.\r
167:checkcompiler\r
168if (%COMPILER%)==(cl) goto genmakefiles\r
169if (%COMPILER%)==(gcc) goto checkgcc\r
170\r
171echo Checking whether 'cl' is available...\r
172echo main(){} >junk.c\r
173cl -nologo -c junk.c\r
174if exist junk.obj goto clOK\r
175\r
176echo Checking whether 'gcc' is available...\r
177gcc -c junk.c\r
178if not exist junk.o goto nocompiler\r
179del junk.o\r
180\r
181:checkgcc\r
182Rem WARNING -- COMMAND.COM on some systems only looks at the first\r
183Rem 8 characters of a label. So do NOT be tempted to change\r
184Rem chkapi* into something fancier like checkw32api\r
185Rem You HAVE been warned!\r
186if (%nocygwin%) == (Y) goto chkapi\r
187echo Checking whether gcc requires '-mno-cygwin'...\r
188echo #include "cygwin/version.h" >junk.c\r
189echo main(){} >>junk.c\r
190gcc -c junk.c\r
191if not exist junk.o goto chkapi\r
192gcc -mno-cygwin -c junk.c\r
193if exist junk.o set nocygwin=Y\r
194rm -f junk.c junk.o\r
195\r
196:chkapi\r
197rem ----------------------------------------------------------------------\r
198rem Older versions of the Windows API headers either don't have any of\r
199rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1\r
200rem are like this), or have a typo in the definition of\r
201rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this\r
202rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros\r
203rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.\r
204rem\r
205echo Checking whether W32 API headers are too old...\r
206echo #include "windows.h" >junk.c\r
207echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c\r
208echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c\r
209if (%nocygwin%) == (Y) goto chkapi1\r
210set cf=%usercflags%\r
211goto chkapi2\r
212:chkapi1\r
213set cf=%usercflags% -mno-cygwin\r
214:chkapi2\r
215echo on\r
216gcc %cf% -c junk.c\r
217echo off\r
218set cf=\r
219if exist junk.o goto gccOk\r
220\r
221:nocompiler\r
222echo.\r
223echo Configure failed.\r
224echo To configure Emacs for Windows, you need to have either\r
225echo gcc-2.95 or later with Mingw32 and the W32 API headers,\r
226echo or MSVC 2.x or later.\r
227del junk.c\r
228goto end\r
229\r
230:gccOk\r
231set COMPILER=gcc\r
232rm -f junk.c junk.o\r
233echo Using 'gcc'\r
234goto genmakefiles\r
235\r
236:clOk\r
237set COMPILER=cl\r
238rm -f junk.c junk.obj\r
239echo Using 'MSVC'\r
240goto genmakefiles\r
241\r
242rem ----------------------------------------------------------------------\r
243:genmakefiles\r
244echo Generating makefiles\r
245if %COMPILER% == gcc set MAKECMD=gmake\r
246if %COMPILER% == cl set MAKECMD=nmake\r
247\r
248rem Pass on chosen settings to makefiles.\r
249rem NB. Be very careful to not have a space before redirection symbols\r
250rem except when there is a preceding digit, when a space is required.\r
251rem\r
252echo # Start of settings from configure.bat >config.settings\r
253echo COMPILER=%COMPILER%>>config.settings\r
254if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings\r
255if (%noopt%) == (Y) echo NOOPT=1 >>config.settings\r
256if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings\r
257if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings\r
258if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags%>>config.settings\r
259if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags%>>config.settings\r
260echo # End of settings from configure.bat>>config.settings\r
261echo. >>config.settings\r
262\r
263copy config.nt ..\src\config.h\r
264if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>..\src\config.h\r
265if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>..\src\config.h\r
266copy paths.h ..\src\epaths.h\r
267\r
268copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile\r
269copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile\r
270copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile\r
271if not exist ..\lisp\Makefile.unix rename ..\lisp\Makefile.in Makefile.unix\r
272if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile\r
273copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile\r
274rem Use the default (no-op) Makefile.in if the nt version is not present.\r
275if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile\r
276if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile\r
277del config.settings\r
278\r
e44f8099
EZ
279Rem Some people use WinZip which doesn't create empty directories!\r
280if not exist ..\site-lisp\nul mkdir ..\site-lisp\\r
f466241d
EZ
281if not exist ..\site-lisp\subdirs.el copy subdirs.el ..\site-lisp\subdirs.el\r
282\r
283echo.\r
284echo Emacs successfully configured.\r
285echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.\r
286goto end\r
287\r
288:SmallEnv\r
289echo Your environment size is too small. Please enlarge it and rerun configure.\r
290echo For example, type "command.com /e:2048" to have 2048 bytes available.\r
291set $foo$=\r
292:end\r
293set prefix=\r
294set nodebug=\r
295set noopt=\r
296set nocygwin=\r
297set COMPILER=\r
298set MAKECMD=\r
299set usercflags=\r
300set userldflags=\r