*** empty log message ***
[bpt/emacs.git] / nt / configure.bat
1 @echo off
2 rem ----------------------------------------------------------------------
3 rem Configuration script for MS Windows 95/98/Me and NT/2000/XP
4 rem Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
5 rem 2006, 2007, 2008 Free Software Foundation, Inc.
6
7 rem This file is part of GNU Emacs.
8
9 rem GNU Emacs is free software; you can redistribute it and/or modify
10 rem it under the terms of the GNU General Public License as published by
11 rem the Free Software Foundation; either version 3, or (at your option)
12 rem any later version.
13
14 rem GNU Emacs is distributed in the hope that it will be useful,
15 rem but WITHOUT ANY WARRANTY; without even the implied warranty of
16 rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 rem GNU General Public License for more details.
18
19 rem You should have received a copy of the GNU General Public License
20 rem along with GNU Emacs; see the file COPYING. If not, write to the
21 rem Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 rem Boston, MA 02110-1301, USA.
23 rem ----------------------------------------------------------------------
24 rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
25 rem
26 rem + MS Windows 95/98/Me or NT/2000/XP
27 rem + either MSVC 2.x or later, or gcc-2.95 or later (with gmake 3.75
28 rem or later) and the Mingw32 and W32 API headers and libraries.
29 rem + Visual Studio 2005 is not supported at this time.
30 rem
31 rem For reference, here is a list of which builds of gmake are known to
32 rem work or not, and whether they work in the presence and/or absence of
33 rem sh.exe.
34 rem
35 rem sh exists no sh
36 rem cygwin b20.1 make (3.75): fails[1,5] fails[2,5]
37 rem MSVC compiled gmake 3.77: okay okay
38 rem MSVC compiled gmake 3.78.1: okay okay
39 rem MSVC compiled gmake 3.79.1: okay okay
40 rem mingw32/gcc-2.92.2 make (3.77): okay okay[4]
41 rem cygwin compiled gmake 3.77: fails[1,5] fails[2,5]
42 rem cygwin compiled gmake 3.78.1: fails[5] fails[2,5]
43 rem cygwin compiled gmake 3.79.1: fails[3,5] fails[2?,5]
44 rem cygwin compiled make 3.80: okay[6] fails?[7]
45 rem cygwin compiled make 3.81: fails fails?[7]
46 rem mingw32 compiled make 3.79.1: okay okay
47 rem mingw32 compiled make 3.80: okay okay?[7]
48 rem mingw32 compiled make 3.81: okay okay[8]
49 rem
50 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
51 rem emacs source with text!=binary.
52 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
53 rem [3] requires LC_MESSAGES support to build; cannot build with early
54 rem versions of cygwin.
55 rem [4] may fail on Windows 9X and Windows ME; if so, install Bash.
56 rem [5] fails when building leim due to the use of cygwin style paths.
57 rem May work if building emacs without leim.
58 rem [6] need to uncomment 3 lines in nt/gmake.defs that invoke `cygpath';
59 rem look for "cygpath" near line 85 of gmake.defs.
60 rem [7] not recommended; please report if you try this combination.
61 rem [8] tested only on Windows XP.
62 rem
63
64 if exist config.log del config.log
65
66 rem ----------------------------------------------------------------------
67 rem See if the environment is large enough. We need 43 (?) bytes.
68 set $foo$=123456789_123456789_123456789_123456789_123
69 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
70 set $foo$=
71
72 rem ----------------------------------------------------------------------
73 rem Make sure we are running in the nt subdir
74 if exist configure.bat goto start
75 echo You must run configure from the nt subdirectory.
76 goto end
77
78 :start
79 rem ----------------------------------------------------------------------
80 rem Default settings.
81 set prefix=
82 set nodebug=N
83 set noopt=N
84 set nocygwin=N
85 set COMPILER=
86 set usercflags=
87 set docflags=
88 set userldflags=
89 set doldflags=
90 set sep1=
91 set sep2=
92
93 rem ----------------------------------------------------------------------
94 rem Handle arguments.
95 :again
96 if "%1" == "-h" goto usage
97 if "%1" == "--help" goto usage
98 if "%1" == "--prefix" goto setprefix
99 if "%1" == "--with-gcc" goto withgcc
100 if "%1" == "--with-msvc" goto withmsvc
101 if "%1" == "--no-debug" goto nodebug
102 if "%1" == "--no-opt" goto noopt
103 if "%1" == "--no-cygwin" goto nocygwin
104 if "%1" == "--cflags" goto usercflags
105 if "%1" == "--ldflags" goto userldflags
106 if "%1" == "--without-png" goto withoutpng
107 if "%1" == "--without-jpeg" goto withoutjpeg
108 if "%1" == "--without-gif" goto withoutgif
109 if "%1" == "--without-tiff" goto withouttiff
110 if "%1" == "--without-xpm" goto withoutxpm
111 if "%1" == "" goto checkutils
112 :usage
113 echo Usage: configure [options]
114 echo Options:
115 echo. --prefix PREFIX install Emacs in directory PREFIX
116 echo. --with-gcc use GCC to compile Emacs
117 echo. --with-msvc use MSVC to compile Emacs
118 echo. --no-debug exclude debug info from executables
119 echo. --no-opt disable optimization
120 echo. --no-cygwin use -mno-cygwin option with GCC
121 echo. --cflags FLAG pass FLAG to compiler
122 echo. --ldflags FLAG pass FLAG to compiler when linking
123 echo. --without-png do not use libpng even if it is installed
124 echo. --without-jpeg do not use jpeg-6b even if it is installed
125 echo. --without-gif do not use libungif even if it is installed
126 echo. --without-tiff do not use libtiff even if it is installed
127 echo. --without-xpm do not use libXpm even if it is installed
128 goto end
129 rem ----------------------------------------------------------------------
130 :setprefix
131 shift
132 set prefix=%1
133 shift
134 goto again
135 rem ----------------------------------------------------------------------
136 :withgcc
137 set COMPILER=gcc
138 shift
139 goto again
140 rem ----------------------------------------------------------------------
141 :withmsvc
142 set COMPILER=cl
143 shift
144 goto again
145 rem ----------------------------------------------------------------------
146 :nodebug
147 set nodebug=Y
148 shift
149 goto again
150 rem ----------------------------------------------------------------------
151 :noopt
152 set noopt=Y
153 shift
154 goto again
155 rem ----------------------------------------------------------------------
156 :nocygwin
157 set nocygwin=Y
158 shift
159 goto again
160 rem ----------------------------------------------------------------------
161 :usercflags
162 shift
163 set usercflags=%usercflags%%sep1%%1
164 set sep1= %nothing%
165 shift
166 goto again
167 rem ----------------------------------------------------------------------
168 :userldflags
169 shift
170 set userldflags=%userldflags%%sep2%%1
171 set sep2= %nothing%
172 shift
173 goto again
174 rem ----------------------------------------------------------------------
175
176 :withoutpng
177 set pngsupport=N
178 set HAVE_PNG=
179 shift
180 goto again
181
182 rem ----------------------------------------------------------------------
183
184 :withoutjpeg
185 set jpegsupport=N
186 set HAVE_JPEG=
187 shift
188 goto again
189
190 rem ----------------------------------------------------------------------
191
192 :withoutgif
193 set gifsupport=N
194 set HAVE_GIF=
195 shift
196 goto again
197
198 rem ----------------------------------------------------------------------
199
200 :withouttiff
201 set tiffsupport=N
202 set HAVE_TIFF=
203 shift
204 goto again
205
206 rem ----------------------------------------------------------------------
207
208 :withoutxpm
209 set xpmsupport=N
210 set HAVE_XPM=
211 shift
212 goto again
213
214 rem ----------------------------------------------------------------------
215 rem Check that necessary utilities (cp and rm) are present.
216 :checkutils
217 echo Checking for 'cp'...
218 cp configure.bat junk.bat
219 if not exist junk.bat goto needcp
220 echo Checking for 'rm'...
221 rm junk.bat
222 if exist junk.bat goto needrm
223 goto checkcompiler
224 :needcp
225 echo You need 'cp' (the Unix file copy program) to build Emacs.
226 goto end
227 :needrm
228 del junk.bat
229 echo You need 'rm' (the Unix file delete program) to build Emacs.
230 goto end
231
232 rem ----------------------------------------------------------------------
233 rem Auto-detect compiler if not specified, and validate GCC if chosen.
234 :checkcompiler
235 if (%COMPILER%)==(cl) goto compilercheckdone
236 if (%COMPILER%)==(gcc) goto checkgcc
237
238 echo Checking whether 'cl' is available...
239 echo main(){} >junk.c
240 cl -nologo -c junk.c
241 if exist junk.obj goto clOK
242
243 echo Checking whether 'gcc' is available...
244 gcc -c junk.c
245 if not exist junk.o goto nocompiler
246 del junk.o
247
248 :checkgcc
249 Rem WARNING -- COMMAND.COM on some systems only looks at the first
250 Rem 8 characters of a label. So do NOT be tempted to change
251 Rem chkapi* into something fancier like checkw32api
252 Rem You HAVE been warned!
253 if (%nocygwin%) == (Y) goto chkapi
254 echo Checking whether gcc requires '-mno-cygwin'...
255 echo #include "cygwin/version.h" >junk.c
256 echo main(){} >>junk.c
257 echo gcc -c junk.c >>config.log
258 gcc -c junk.c >>config.log 2>&1
259 if not exist junk.o goto chkapi
260 echo gcc -mno-cygwin -c junk.c >>config.log
261 gcc -mno-cygwin -c junk.c >>config.log 2>&1
262 if exist junk.o set nocygwin=Y
263 rm -f junk.c junk.o
264
265 :chkapi
266 echo The failed program was: >>config.log
267 type junk.c >>config.log
268 rem ----------------------------------------------------------------------
269 rem Older versions of the Windows API headers either don't have any of
270 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
271 rem are like this), or have a typo in the definition of
272 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
273 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
274 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
275 rem
276 echo Checking whether W32 API headers are too old...
277 echo #include "windows.h" >junk.c
278 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
279 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
280 if (%nocygwin%) == (Y) goto chkapi1
281 set cf=%usercflags%
282 goto chkapi2
283 :chkapi1
284 set cf=%usercflags% -mno-cygwin
285 :chkapi2
286 echo on
287 gcc %cf% -c junk.c
288 @echo off
289 @echo gcc %cf% -c junk.c >>config.log
290 gcc %cf% -c junk.c >>config.log 2>&1
291 set cf=
292 if exist junk.o goto gccOk
293 echo The failed program was: >>config.log
294 type junk.c >>config.log
295
296 :nocompiler
297 echo.
298 echo Configure failed.
299 echo To configure Emacs for Windows, you need to have either
300 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
301 echo or MSVC 2.x or later.
302 del junk.c
303 goto end
304
305 :gccOk
306 set COMPILER=gcc
307 echo Using 'gcc'
308 rm -f junk.c junk.o
309 Rem It is not clear what GCC version began supporting -mtune
310 Rem and pentium4 on x86, so check this explicitly.
311 echo main(){} >junk.c
312 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
313 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
314 if not errorlevel 1 goto gccMtuneOk
315 echo The failed program was: >>config.log
316 type junk.c >>config.log
317 set mf=-mcpu=i686
318 rm -f junk.c junk.o
319 goto compilercheckdone
320 :gccMtuneOk
321 echo GCC supports -mtune=pentium4 >>config.log
322 set mf=-mtune=pentium4
323 rm -f junk.c junk.o
324 goto compilercheckdone
325
326 :clOk
327 set COMPILER=cl
328 rm -f junk.c junk.obj
329 echo Using 'MSVC'
330
331 :compilercheckdone
332
333 rem ----------------------------------------------------------------------
334 rem Check for external image libraries. Since they are loaded
335 rem dynamically, the libraries themselves do not need to be present
336 rem at compile time, but the header files are required.
337
338 set mingwflag=
339
340 if (%nocygwin%) == (N) goto flagsOK
341 set mingwflag=-mno-cygwin
342
343 :flagsOK
344
345 if (%pngsupport%) == (N) goto pngDone
346
347 echo Checking for libpng...
348 echo #include "png.h" >junk.c
349 echo main (){} >>junk.c
350 rem -o option is ignored with cl, but allows result to be consistent.
351 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
352 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
353 if exist junk.obj goto havePng
354
355 echo ...png.h not found, building without PNG support.
356 echo The failed program was: >>config.log
357 type junk.c >>config.log
358 set HAVE_PNG=
359 goto :pngDone
360
361 :havePng
362 echo ...PNG header available, building with PNG support.
363 set HAVE_PNG=1
364
365 :pngDone
366 rm -f junk.c junk.obj
367
368 if (%jpegsupport%) == (N) goto jpegDone
369
370 echo Checking for jpeg-6b...
371 echo #include "jconfig.h" >junk.c
372 echo main (){} >>junk.c
373 rem -o option is ignored with cl, but allows result to be consistent.
374 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
375 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
376 if exist junk.obj goto haveJpeg
377
378 echo ...jconfig.h not found, building without JPEG support.
379 echo The failed program was: >>config.log
380 type junk.c >>config.log
381 set HAVE_JPEG=
382 goto :jpegDone
383
384 :haveJpeg
385 echo ...JPEG header available, building with JPEG support.
386 set HAVE_JPEG=1
387
388 :jpegDone
389 rm -f junk.c junk.obj
390
391 if (%gifsupport%) == (N) goto gifDone
392
393 echo Checking for libgif...
394 echo #include "gif_lib.h" >junk.c
395 echo main (){} >>junk.c
396 rem -o option is ignored with cl, but allows result to be consistent.
397 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
398 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
399 if exist junk.obj goto haveGif
400
401 echo ...gif_lib.h not found, building without GIF support.
402 echo The failed program was: >>config.log
403 type junk.c >>config.log
404 set HAVE_GIF=
405 goto :gifDone
406
407 :haveGif
408 echo ...GIF header available, building with GIF support.
409 set HAVE_GIF=1
410
411 :gifDone
412 rm -f junk.c junk.obj
413
414 if (%tiffsupport%) == (N) goto tiffDone
415
416 echo Checking for tiff...
417 echo #include "tiffio.h" >junk.c
418 echo main (){} >>junk.c
419 rem -o option is ignored with cl, but allows result to be consistent.
420 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
421 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
422 if exist junk.obj goto haveTiff
423
424 echo ...tiffio.h not found, building without TIFF support.
425 echo The failed program was: >>config.log
426 type junk.c >>config.log
427 set HAVE_TIFF=
428 goto :tiffDone
429
430 :haveTiff
431 echo ...TIFF header available, building with TIFF support.
432 set HAVE_TIFF=1
433
434 :tiffDone
435 rm -f junk.c junk.obj
436
437 if (%xpmsupport%) == (N) goto xpmDone
438
439 echo Checking for libXpm...
440 echo #define FOR_MSW 1 >junk.c
441 echo #include "X11/xpm.h" >>junk.c
442 echo main (){} >>junk.c
443 rem -o option is ignored with cl, but allows result to be consistent.
444 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
445 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
446 if exist junk.obj goto haveXpm
447
448 echo ...X11/xpm.h not found, building without XPM support.
449 echo The failed program was: >>config.log
450 type junk.c >>config.log
451 set HAVE_XPM=
452 goto :xpmDone
453
454 :haveXpm
455 echo ...XPM header available, building with XPM support.
456 set HAVE_XPM=1
457
458 :xpmDone
459 rm -f junk.c junk.obj junk.err junk.out
460
461 rem ----------------------------------------------------------------------
462 :genmakefiles
463 echo Generating makefiles
464 if %COMPILER% == gcc set MAKECMD=gmake
465 if %COMPILER% == cl set MAKECMD=nmake
466
467 rem Pass on chosen settings to makefiles.
468 rem NB. Be very careful to not have a space before redirection symbols
469 rem except when there is a preceding digit, when a space is required.
470 rem
471 echo # Start of settings from configure.bat >config.settings
472 echo COMPILER=%COMPILER%>>config.settings
473 if not "(%mf%)" == "()" echo MCPU_FLAG=%mf%>>config.settings
474 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
475 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
476 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
477 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
478 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
479 rem and the if command cannot cope with this
480 for %%v in (%usercflags%) do if not (%%v)==() set docflags=Y
481 if (%docflags%)==(Y) echo USER_CFLAGS=%usercflags%>>config.settings
482 for %%v in (%userldflags%) do if not (%%v)==() set doldflags=Y
483 if (%doldflags%)==(Y) echo USER_LDFLAGS=%userldflags%>>config.settings
484 echo # End of settings from configure.bat>>config.settings
485 echo. >>config.settings
486
487 copy config.nt config.tmp
488 echo. >>config.tmp
489 echo /* Start of settings from configure.bat. */ >>config.tmp
490 if (%docflags%) == (Y) echo #define USER_CFLAGS " %usercflags%">>config.tmp
491 if (%doldflags%) == (Y) echo #define USER_LDFLAGS " %userldflags%">>config.tmp
492 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp
493 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp
494 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp
495 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp
496 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp
497 echo /* End of settings from configure.bat. */ >>config.tmp
498
499 Rem See if fc.exe returns a meaningful exit status. If it does, we
500 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
501 Rem since this forces recompilation of every source file.
502 if exist foo.bar del foo.bar
503 fc /b foo.bar foo.bar >nul 2>&1
504 if not errorlevel 2 goto doCopy
505 fc /b config.tmp ..\src\config.h >nul 2>&1
506 if errorlevel 1 goto doCopy
507 fc /b paths.h ..\src\epaths.h >nul 2>&1
508 if errorlevel 0 goto dontCopy
509 :doCopy
510 copy config.tmp ..\src\config.h
511 copy paths.h ..\src\epaths.h
512
513 :dontCopy
514 if exist config.tmp del config.tmp
515 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
516 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
517 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
518 copy /b config.settings+%MAKECMD%.defs+..\man\makefile.w32-in ..\man\makefile
519 copy /b config.settings+%MAKECMD%.defs+..\lispref\makefile.w32-in ..\lispref\makefile
520 copy /b config.settings+%MAKECMD%.defs+..\lispintro\makefile.w32-in ..\lispintro\makefile
521 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
522 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
523 rem Use the default (no-op) Makefile.in if the nt version is not present.
524 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
525 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
526 del config.settings
527
528 Rem Some people use WinZip which doesn't create empty directories!
529 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
530 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
531 if exist foo.bar del foo.bar
532 fc /b foo.bar foo.bar >nul 2>&1
533 if not errorlevel 2 goto doUpdateSubdirs
534 fc /b subdirs.el ..\site-lisp\subdirs.el >nul 2>&1
535 if not errorlevel 1 goto dontUpdateSubdirs
536 :doUpdateSubdirs
537 if exist ..\site-lisp\subdirs.el del ..\site-lisp\subdirs.el
538 copy subdirs.el ..\site-lisp\subdirs.el
539
540 :dontUpdateSubdirs
541 echo.
542 echo Emacs successfully configured.
543 echo Emacs successfully configured. >>config.log
544 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
545 goto end
546
547 :SmallEnv
548 echo Your environment size is too small. Please enlarge it and rerun configure.
549 echo For example, type "command.com /e:2048" to have 2048 bytes available.
550 set $foo$=
551 :end
552 set prefix=
553 set nodebug=
554 set noopt=
555 set nocygwin=
556 set COMPILER=
557 set MAKECMD=
558 set usercflags=
559 set userldflags=
560 set mingwflag=
561 set mf=
562
563 goto skipArchTag
564 arch-tag: 300d20a4-1675-4e75-b615-7ce1a8c5376c
565 :skipArchTag