*** 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
e0006538 88if "%1" == "--without-png" goto withoutpng\r
aad0eae4 89if "%1" == "--without-jpeg" goto withoutjpeg\r
f466241d
EZ
90if "%1" == "" goto checkutils\r
91:usage\r
92echo Usage: configure [options]\r
93echo Options:\r
94echo. --prefix PREFIX install Emacs in directory PREFIX\r
95echo. --with-gcc use GCC to compile Emacs\r
96echo. --with-msvc use MSVC to compile Emacs\r
97echo. --no-debug exclude debug info from executables\r
98echo. --no-opt disable optimization\r
99echo. --no-cygwin use -mno-cygwin option with GCC\r
100echo. --cflags FLAG pass FLAG to compiler\r
101echo. --ldflags FLAG pass FLAG to compiler when linking\r
e0006538 102echo. --without-png do not use libpng even if it is installed \r
aad0eae4 103echo. --without-jpeg do not use jpeglib even if it is installed \r
f466241d
EZ
104goto end\r
105rem ----------------------------------------------------------------------\r
106:setprefix\r
107shift\r
108set prefix=%1\r
109shift\r
110goto again\r
111rem ----------------------------------------------------------------------\r
112:withgcc\r
113set COMPILER=gcc\r
114shift\r
115goto again\r
116rem ----------------------------------------------------------------------\r
117:withmsvc\r
118set COMPILER=cl\r
119shift\r
120goto again\r
121rem ----------------------------------------------------------------------\r
122:nodebug\r
123set nodebug=Y\r
124shift\r
125goto again\r
126rem ----------------------------------------------------------------------\r
127:noopt\r
128set noopt=Y\r
129shift\r
130goto again\r
131rem ----------------------------------------------------------------------\r
132:nocygwin\r
133set nocygwin=Y\r
134shift\r
135goto again\r
136rem ----------------------------------------------------------------------\r
137:usercflags\r
138shift\r
139set usercflags=%usercflags%%sep1%%1\r
140set sep1= %nothing%\r
141shift\r
142goto again\r
143rem ----------------------------------------------------------------------\r
144:userldflags\r
145shift\r
146set userldflags=%userldflags%%sep2%%1\r
147set sep2= %nothing%\r
148shift\r
149goto again\r
e0006538
JR
150rem ----------------------------------------------------------------------\r
151\r
152:withoutpng\r
153set pngsupport=N\r
154set HAVE_PNG=\r
155goto again\r
f466241d 156\r
aad0eae4
JR
157rem ----------------------------------------------------------------------\r
158\r
159:withoutjpeg\r
160set jpegsupport=N\r
161set HAVE_JPEG=\r
162goto again\r
163\r
f466241d
EZ
164rem ----------------------------------------------------------------------\r
165rem Check that necessary utilities (cp and rm) are present.\r
166:checkutils\r
167echo Checking for 'cp'...\r
168cp configure.bat junk.bat\r
169if not exist junk.bat goto needcp\r
170echo Checking for 'rm'...\r
171rm junk.bat\r
172if exist junk.bat goto needrm\r
173goto checkcompiler\r
174:needcp\r
175echo You need 'cp' (the Unix file copy program) to build Emacs.\r
176goto end\r
177:needrm\r
178del junk.bat\r
179echo You need 'rm' (the Unix file delete program) to build Emacs.\r
180goto end\r
181\r
182rem ----------------------------------------------------------------------\r
183rem Auto-detect compiler if not specified, and validate GCC if chosen.\r
184:checkcompiler\r
e0006538 185if (%COMPILER%)==(cl) goto compilercheckdone\r
f466241d
EZ
186if (%COMPILER%)==(gcc) goto checkgcc\r
187\r
188echo Checking whether 'cl' is available...\r
189echo main(){} >junk.c\r
190cl -nologo -c junk.c\r
191if exist junk.obj goto clOK\r
192\r
193echo Checking whether 'gcc' is available...\r
194gcc -c junk.c\r
195if not exist junk.o goto nocompiler\r
196del junk.o\r
197\r
198:checkgcc\r
199Rem WARNING -- COMMAND.COM on some systems only looks at the first\r
200Rem 8 characters of a label. So do NOT be tempted to change\r
201Rem chkapi* into something fancier like checkw32api\r
202Rem You HAVE been warned!\r
203if (%nocygwin%) == (Y) goto chkapi\r
204echo Checking whether gcc requires '-mno-cygwin'...\r
205echo #include "cygwin/version.h" >junk.c\r
206echo main(){} >>junk.c\r
207gcc -c junk.c\r
208if not exist junk.o goto chkapi\r
209gcc -mno-cygwin -c junk.c\r
210if exist junk.o set nocygwin=Y\r
211rm -f junk.c junk.o\r
212\r
213:chkapi\r
214rem ----------------------------------------------------------------------\r
215rem Older versions of the Windows API headers either don't have any of\r
216rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1\r
217rem are like this), or have a typo in the definition of\r
218rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this\r
219rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros\r
220rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.\r
221rem\r
222echo Checking whether W32 API headers are too old...\r
223echo #include "windows.h" >junk.c\r
224echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c\r
225echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c\r
226if (%nocygwin%) == (Y) goto chkapi1\r
227set cf=%usercflags%\r
228goto chkapi2\r
229:chkapi1\r
230set cf=%usercflags% -mno-cygwin\r
231:chkapi2\r
232echo on\r
233gcc %cf% -c junk.c\r
234echo off\r
235set cf=\r
236if exist junk.o goto gccOk\r
237\r
238:nocompiler\r
239echo.\r
240echo Configure failed.\r
241echo To configure Emacs for Windows, you need to have either\r
242echo gcc-2.95 or later with Mingw32 and the W32 API headers,\r
243echo or MSVC 2.x or later.\r
244del junk.c\r
245goto end\r
246\r
247:gccOk\r
248set COMPILER=gcc\r
249rm -f junk.c junk.o\r
250echo Using 'gcc'\r
e0006538 251goto compilercheckdone\r
f466241d
EZ
252\r
253:clOk\r
254set COMPILER=cl\r
255rm -f junk.c junk.obj\r
256echo Using 'MSVC'\r
e0006538
JR
257\r
258:compilercheckdone\r
259\r
260rem ----------------------------------------------------------------------\r
261rem Check for external image libraries. Since they are loaded\r
262rem dynamically, the libraries themselves do not need to be present\r
263rem at compile time, but the header files are required.\r
264\r
265if (%pngsupport%) == (N) goto pngDone\r
266\r
267echo Checking for libpng...\r
268echo #include "png.h" >junk.c\r
269echo main (){} >>junk.c\r
270rem -o option is ignored with cl, but allows result to be consistent.\r
271%COMPILER% %usercflags% -c junk.c -o junk.obj\r
272if exist junk.obj goto havePng\r
273\r
274echo ...building without PNG support.\r
275set HAVE_PNG=\r
276goto :pngDone\r
277\r
278:havePng\r
279echo ...PNG header available, building with PNG support.\r
280set HAVE_PNG=1\r
281\r
282:pngDone\r
283rm -f junk.c junk.obj\r
f466241d 284\r
aad0eae4
JR
285if (%jpegsupport%) == (N) goto jpegDone\r
286\r
287echo Checking for jpeg ...\r
288echo #include "jconfig.h" >junk.c\r
289echo main (){} >>junk.c\r
290rem -o option is ignored with cl, but allows result to be consistent.\r
291%COMPILER% %usercflags% -c junk.c -o junk.obj\r
292if exist junk.obj goto haveJpeg\r
293\r
294echo ...building without JPEG support.\r
295set HAVE_JPEG=\r
296goto :jpegDone\r
297\r
298:haveJpeg\r
299echo ...JPEG header available, building with JPEG support.\r
300set HAVE_JPEG=1\r
301\r
302:jpegDone\r
303rm -f junk.c junk.obj\r
304\r
f466241d
EZ
305rem ----------------------------------------------------------------------\r
306:genmakefiles\r
307echo Generating makefiles\r
308if %COMPILER% == gcc set MAKECMD=gmake\r
309if %COMPILER% == cl set MAKECMD=nmake\r
310\r
311rem Pass on chosen settings to makefiles.\r
312rem NB. Be very careful to not have a space before redirection symbols\r
313rem except when there is a preceding digit, when a space is required.\r
314rem\r
315echo # Start of settings from configure.bat >config.settings\r
316echo COMPILER=%COMPILER%>>config.settings\r
317if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings\r
318if (%noopt%) == (Y) echo NOOPT=1 >>config.settings\r
319if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings\r
320if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings\r
321if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags%>>config.settings\r
322if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags%>>config.settings\r
323echo # End of settings from configure.bat>>config.settings\r
324echo. >>config.settings\r
325\r
326copy config.nt ..\src\config.h\r
e0006538
JR
327echo. >>..\src\config.h\r
328echo /* Start of settings from configure.bat. */ >>..\src\config.h\r
f466241d
EZ
329if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>..\src\config.h\r
330if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>..\src\config.h\r
e0006538 331if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>..\src\config.h\r
aad0eae4 332if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>..\src\config.h\r
e0006538
JR
333echo /* End of settings from configure.bat. */ >>..\src\config.h\r
334\r
f466241d
EZ
335copy paths.h ..\src\epaths.h\r
336\r
337copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile\r
338copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile\r
339copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile\r
340if not exist ..\lisp\Makefile.unix rename ..\lisp\Makefile.in Makefile.unix\r
341if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile\r
342copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile\r
343rem Use the default (no-op) Makefile.in if the nt version is not present.\r
344if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile\r
345if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile\r
346del config.settings\r
347\r
e44f8099
EZ
348Rem Some people use WinZip which doesn't create empty directories!\r
349if not exist ..\site-lisp\nul mkdir ..\site-lisp\\r
f466241d
EZ
350if not exist ..\site-lisp\subdirs.el copy subdirs.el ..\site-lisp\subdirs.el\r
351\r
352echo.\r
353echo Emacs successfully configured.\r
354echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.\r
355goto end\r
356\r
357:SmallEnv\r
358echo Your environment size is too small. Please enlarge it and rerun configure.\r
359echo For example, type "command.com /e:2048" to have 2048 bytes available.\r
360set $foo$=\r
361:end\r
362set prefix=\r
363set nodebug=\r
364set noopt=\r
365set nocygwin=\r
366set COMPILER=\r
367set MAKECMD=\r
368set usercflags=\r
369set userldflags=\r