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