Add 2013 to yet more FSF copyright years
[emacs.git] / nt / configure.bat
blobf833da722693fa05b4cb118b6f7ae485b054b368
1 @echo off\r
2 rem   ----------------------------------------------------------------------\r
3 rem   Configuration script for MS Windows operating systems\r
4 rem   Copyright (C) 1999-2013 Free Software Foundation, Inc.\r
5 \r
6 rem   This file is part of GNU Emacs.\r
7 \r
8 rem   GNU Emacs is free software: you can redistribute it and/or modify\r
9 rem   it under the terms of the GNU General Public License as published by\r
10 rem   the Free Software Foundation, either version 3 of the License, or\r
11 rem   (at your option) any later version.\r
13 rem   GNU Emacs is distributed in the hope that it will be useful,\r
14 rem   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
15 rem   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
16 rem   GNU General Public License for more details.\r
18 rem   You should have received a copy of the GNU General Public License\r
19 rem   along with GNU Emacs.  If not, see http://www.gnu.org/licenses/.\r
21 rem   ----------------------------------------------------------------------\r
22 rem   YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:\r
23 rem\r
24 rem   + MS Windows 95, NT or later\r
25 rem   + either MSVC 2.x or later, or gcc-2.95 or later (with GNU make 3.75\r
26 rem     or later) and the Mingw32 and Windows API headers and libraries.\r
27 rem   + Visual Studio 2005 is not supported at this time.\r
28 rem\r
29 rem For reference, here is a list of which builds of GNU make are known to\r
30 rem work or not, and whether they work in the presence and/or absence of\r
31 rem sh.exe.\r
32 rem\r
33 rem                                       sh exists     no sh\r
34 rem  cygwin b20.1 make (3.75):            fails[1,5]    fails[2,5]\r
35 rem  MSVC compiled gmake 3.77:            okay          okay\r
36 rem  MSVC compiled gmake 3.78.1:          okay          okay\r
37 rem  MSVC compiled gmake 3.79.1:          okay          okay\r
38 rem  mingw32/gcc-2.92.2 make (3.77):      okay          okay[4]\r
39 rem  cygwin compiled gmake 3.77:          fails[1,5]    fails[2,5]\r
40 rem  cygwin compiled gmake 3.78.1:        fails[5]      fails[2,5]\r
41 rem  cygwin compiled gmake 3.79.1:        fails[3,5]    fails[2?,5]\r
42 rem  cygwin compiled make 3.80:           okay[6]       fails?[7]\r
43 rem  cygwin compiled make 3.81:           fails         fails?[7]\r
44 rem  mingw32 compiled make 3.79.1:        okay          okay\r
45 rem  mingw32 compiled make 3.80:          okay          okay?[7]\r
46 rem  mingw32 compiled make 3.81:          okay          okay[8]\r
47 rem\r
48 rem [1] doesn't cope with makefiles with DOS line endings, so must mount\r
49 rem     emacs source with text!=binary.\r
50 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.\r
51 rem [3] requires LC_MESSAGES support to build; cannot build with early\r
52 rem     versions of cygwin.\r
53 rem [4] may fail on Windows 9X and Windows ME; if so, install Bash.\r
54 rem [5] fails when building leim due to the use of cygwin style paths.\r
55 rem     May work if building emacs without leim.\r
56 rem [6] need to uncomment 3 lines in nt/gmake.defs that invoke `cygpath';\r
57 rem     look for "cygpath" near line 85 of gmake.defs.\r
58 rem [7] not recommended; please report if you try this combination.\r
59 rem [8] tested only on Windows XP.\r
60 rem\r
62 if exist config.log del config.log\r
64 rem ----------------------------------------------------------------------\r
65 rem   See if the environment is large enough.  We need 43 (?) bytes.\r
66 set $foo$=123456789_123456789_123456789_123456789_123\r
67 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv\r
68 set $foo$=\r
70 rem ----------------------------------------------------------------------\r
71 rem   Make sure we are running in the nt subdir\r
72 if exist configure.bat goto start\r
73 echo You must run configure from the nt subdirectory.\r
74 goto end\r
76 :start\r
77 rem ----------------------------------------------------------------------\r
78 rem   Attempt to enable command extensions.  Set use_extensions to 1 if\r
79 rem   they are available and 0 if they are not available.\r
80 set use_extensions=1\r
81 setlocal ENABLEEXTENSIONS\r
82 if "%CMDEXTVERSION%" == "" set use_extensions=0\r
83 if "%use_extensions%" == "1" goto afterext\r
85 echo. Command extensions are not available.  Using parameters that include the =\r
86 echo. character by enclosing them in quotes will not be supported.\r
88 :afterext\r
90 rem ----------------------------------------------------------------------\r
91 rem   Default settings.\r
92 set prefix=\r
93 set nodebug=N\r
94 set noopt=N\r
95 set enablechecking=N\r
96 set profile=N\r
97 set nocygwin=N\r
98 set COMPILER=\r
99 set usercflags=\r
100 set escusercflags=\r
101 set docflags=\r
102 set userldflags=\r
103 set escuserldflags=\r
104 set extrauserlibs=\r
105 set doldflags=\r
106 set doextralibs=\r
107 set sep1=\r
108 set sep2=\r
109 set sep3=\r
110 set sep4=\r
111 set distfiles=\r
113 rem ----------------------------------------------------------------------\r
114 rem   Handle arguments.\r
115 :again\r
116 if "%1" == "-h" goto usage\r
117 if "%1" == "--help" goto usage\r
118 if "%1" == "--prefix" goto setprefix\r
119 if "%1" == "--with-gcc" goto withgcc\r
120 if "%1" == "--with-msvc" goto withmsvc\r
121 if "%1" == "--no-debug" goto nodebug\r
122 if "%1" == "--no-opt" goto noopt\r
123 if "%1" == "--enable-checking" goto enablechecking\r
124 if "%1" == "--profile" goto profile\r
125 if "%1" == "--no-cygwin" goto nocygwin\r
126 if "%1" == "--cflags" goto usercflags\r
127 if "%1" == "--ldflags" goto userldflags\r
128 if "%1" == "--lib" goto extrauserlibs\r
129 if "%1" == "--without-png" goto withoutpng\r
130 if "%1" == "--without-jpeg" goto withoutjpeg\r
131 if "%1" == "--without-gif" goto withoutgif\r
132 if "%1" == "--without-tiff" goto withouttiff\r
133 if "%1" == "--without-gnutls" goto withoutgnutls\r
134 if "%1" == "--without-libxml2" goto withoutlibxml2\r
135 if "%1" == "--without-xpm" goto withoutxpm\r
136 if "%1" == "--with-svg" goto withsvg\r
137 if "%1" == "--distfiles" goto distfiles\r
138 if "%1" == "" goto checkutils\r
140 :usage\r
141 echo Usage: configure [options]\r
142 echo Options:\r
143 echo.   --prefix PREFIX         install Emacs in directory PREFIX\r
144 echo.   --with-gcc              use GCC to compile Emacs\r
145 echo.   --with-msvc             use MSVC to compile Emacs\r
146 echo.   --no-debug              exclude debug info from executables\r
147 echo.   --no-opt                disable optimization\r
148 echo.   --enable-checking       enable additional run-time checks\r
149 echo.   --profile               enable profiling\r
150 echo.   --no-cygwin             use -mno-cygwin option with GCC\r
151 echo.   --cflags FLAG           pass FLAG to compiler\r
152 echo.   --ldflags FLAG          pass FLAG to compiler when linking\r
153 echo.   --lib LIB               link to extra library LIB\r
154 echo.   --without-png           do not use PNG library even if it is installed\r
155 echo.   --without-jpeg          do not use JPEG library even if it is installed\r
156 echo.   --without-gif           do not use GIF library even if it is installed\r
157 echo.   --without-tiff          do not use TIFF library even if it is installed\r
158 echo.   --without-xpm           do not use XPM library even if it is installed\r
159 echo.   --without-gnutls        do not use GnuTLS library even if it is installed\r
160 echo.   --without-libxml2       do not use libxml2 library even if it is installed\r
161 echo.   --with-svg              use the RSVG library (experimental)\r
162 echo.   --distfiles             path to files for make dist, e.g. libXpm.dll\r
163 if "%use_extensions%" == "0" goto end\r
164 echo.\r
165 echo. The cflags and ldflags arguments support parameters that include the =\r
166 echo. character.  However, since the = character is normally treated as a\r
167 echo. separator character you will need to enclose any parameter that includes\r
168 echo. the = character in quotes.  For example, to include\r
169 echo. -DSITELOAD_PURESIZE_EXTRA=100000 as one of the cflags you would run\r
170 echo. configure.bat as follows:\r
171 echo. configure.bat --cflags "-DSITELOAD_PURESIZE_EXTRA=100000"\r
172 echo.\r
173 echo. Note that this capability of processing parameters that include the =\r
174 echo. character depends on command extensions.  This batch file attempts to\r
175 echo. enable command extensions.  If command extensions cannot be enabled, a\r
176 echo. warning message will be displayed.\r
177 goto end\r
179 rem ----------------------------------------------------------------------\r
181 :setprefix\r
182 shift\r
183 set prefix=%1\r
184 shift\r
185 goto again\r
187 rem ----------------------------------------------------------------------\r
189 :withgcc\r
190 set COMPILER=gcc\r
191 shift\r
192 goto again\r
194 rem ----------------------------------------------------------------------\r
196 :withmsvc\r
197 set COMPILER=cl\r
198 shift\r
199 goto again\r
201 rem ----------------------------------------------------------------------\r
203 :nodebug\r
204 set nodebug=Y\r
205 shift\r
206 goto again\r
208 rem ----------------------------------------------------------------------\r
210 :noopt\r
211 set noopt=Y\r
212 shift\r
213 goto again\r
215 rem ----------------------------------------------------------------------\r
217 :enablechecking\r
218 set enablechecking=Y\r
219 shift\r
220 goto again\r
222 rem ----------------------------------------------------------------------\r
224 :profile\r
225 set profile=Y\r
226 shift\r
227 goto again\r
229 rem ----------------------------------------------------------------------\r
231 :nocygwin\r
232 set nocygwin=Y\r
233 shift\r
234 goto again\r
236 rem ----------------------------------------------------------------------\r
238 :usercflags\r
239 if "%use_extensions%" == "1" goto ucflagex\r
240 goto ucflagne\r
242 :ucflagex\r
243 shift\r
244 set usercflags=%usercflags%%sep1%%~1\r
245 set escusercflags=%usercflags:"=\"%\r
246 set sep1= %nothing%\r
247 shift\r
248 goto again\r
250 :ucflagne\r
251 shift\r
252 set usercflags=%usercflags%%sep1%%1\r
253 set escusercflags=%usercflags%\r
254 set sep1= %nothing%\r
255 shift\r
256 goto again\r
258 :extrauserlibs\r
259 shift\r
260 echo. extrauserlibs: %extrauserlibs%\r
261 set extrauserlibs=%extrauserlibs%%sep4%%1\r
262 set sep4= %nothing%\r
263 shift\r
264 goto again\r
266 rem ----------------------------------------------------------------------\r
268 :userldflags\r
269 if "%use_extensions%" == "1" goto ulflagex\r
270 goto ulflagne\r
272 :ulflagex\r
273 shift\r
274 set userldflags=%userldflags%%sep2%%~1\r
275 set escuserldflags=%userldflags:"=\"%\r
276 set sep2= %nothing%\r
277 shift\r
278 goto again\r
280 :ulflagne\r
281 shift\r
282 set userldflags=%userldflags%%sep2%%1\r
283 set escuserldflags=%userldflags%\r
284 set sep2= %nothing%\r
285 shift\r
286 goto again\r
288 rem ----------------------------------------------------------------------\r
290 :withoutpng\r
291 set pngsupport=N\r
292 set HAVE_PNG=\r
293 shift\r
294 goto again\r
296 rem ----------------------------------------------------------------------\r
298 :withoutjpeg\r
299 set jpegsupport=N\r
300 set HAVE_JPEG=\r
301 shift\r
302 goto again\r
304 rem ----------------------------------------------------------------------\r
306 :withoutgif\r
307 set gifsupport=N\r
308 set HAVE_GIF=\r
309 shift\r
310 goto again\r
312 rem ----------------------------------------------------------------------\r
314 :withoutgnutls\r
315 set tlssupport=N\r
316 set HAVE_GNUTLS=\r
317 shift\r
318 goto again\r
320 rem ----------------------------------------------------------------------\r
322 :withoutlibxml2\r
323 set libxml2support=N\r
324 set HAVE_LIBXML2=\r
325 shift\r
326 goto again\r
328 rem ----------------------------------------------------------------------\r
330 :withouttiff\r
331 set tiffsupport=N\r
332 set HAVE_TIFF=\r
333 shift\r
334 goto again\r
336 rem ----------------------------------------------------------------------\r
338 :withoutxpm\r
339 set xpmsupport=N\r
340 set HAVE_XPM=\r
341 shift\r
342 goto again\r
344 :withsvg\r
345 shift\r
346 set svgsupport=Y\r
347 goto again\r
349 rem ----------------------------------------------------------------------\r
351 :distfiles\r
352 set HAVE_DISTFILES=1\r
353 shift\r
354 set distfiles=%distfiles%%sep3%%1\r
355 set sep3= %nothing%\r
356 shift\r
357 goto again\r
359 rem ----------------------------------------------------------------------\r
360 rem    Check that necessary utilities (cp and rm) are present.\r
362 :checkutils\r
363 echo Checking for 'cp'...\r
364 cp configure.bat junk.bat\r
365 if not exist junk.bat goto needcp\r
366 echo Checking for 'rm'...\r
367 rm junk.bat\r
368 if exist junk.bat goto needrm\r
369 goto checkcompiler\r
371 :needcp\r
372 echo You need 'cp' (the Unix file copy program) to build Emacs.\r
373 goto end\r
375 :needrm\r
376 del junk.bat\r
377 echo You need 'rm' (the Unix file delete program) to build Emacs.\r
378 goto end\r
380 rem ----------------------------------------------------------------------\r
381 rem   Auto-detect compiler if not specified, and validate GCC if chosen.\r
383 :checkcompiler\r
384 if (%COMPILER%)==(cl) goto compilercheckdone\r
385 if (%COMPILER%)==(gcc) goto checkgcc\r
387 echo Checking whether 'gcc' is available...\r
388 echo main(){} >junk.c\r
389 gcc -c junk.c\r
390 if exist junk.o goto checkgcc\r
392 echo Checking whether 'cl' is available...\r
393 cl -nologo -c junk.c\r
394 if exist junk.obj goto clOK\r
395 goto nocompiler\r
397 :checkgcc\r
398 if exist junk.o del junk.o\r
399 Rem WARNING -- COMMAND.COM on some systems only looks at the first\r
400 Rem            8 characters of a label.  So do NOT be tempted to change\r
401 Rem            chkapi* into something fancier like checkw32api\r
402 Rem You HAVE been warned!\r
403 if (%nocygwin%) == (Y) goto chkapiN\r
404 echo Checking whether gcc requires '-mno-cygwin'...\r
405 echo #include "cygwin/version.h" >junk.c\r
406 echo main(){} >>junk.c\r
407 echo gcc -c junk.c >>config.log\r
408 gcc -c junk.c >>config.log 2>&1\r
409 if not exist junk.o goto chkapi\r
410 echo gcc -mno-cygwin -c junk.c >>config.log\r
411 gcc -mno-cygwin -c junk.c >>config.log 2>&1\r
412 if exist junk.o set nocygwin=Y\r
414 :chkapi\r
415 echo The failed program was: >>config.log\r
416 type junk.c >>config.log\r
418 :chkapiN\r
419 rm -f junk.c junk.o\r
420 rem ----------------------------------------------------------------------\r
421 rem   Older versions of the Windows API headers either don't have any of\r
422 rem   the IMAGE_xxx definitions (the headers that come with Cygwin b20.1\r
423 rem   are like this), or have a typo in the definition of\r
424 rem   IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this\r
425 rem   problem).  The gcc/mingw32 2.95.2 headers are okay, as are distros\r
426 rem   of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.\r
427 rem   Beginning with Emacs 23, we need usp10.h.\r
428 rem\r
429 echo Checking whether Windows API headers are too old...\r
430 echo #include "windows.h" >junk.c\r
431 echo #include "usp10.h" >>junk.c\r
432 echo void test(PIMAGE_NT_HEADERS pHeader) >>junk.c\r
433 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c\r
434 if (%nocygwin%) == (Y) goto chkapi1\r
435 set cf=%usercflags%\r
436 goto chkapi2\r
438 :chkapi1\r
439 set cf=%usercflags% -mno-cygwin\r
441 :chkapi2\r
442 echo on\r
443 gcc %cf% -c junk.c\r
444 @echo off\r
445 @echo gcc %cf% -c junk.c >>config.log\r
446 gcc %cf% -c junk.c >>config.log 2>&1\r
447 set cf=\r
448 if exist junk.o goto chkuser\r
449 echo The failed program was: >>config.log\r
450 type junk.c >>config.log\r
451 goto nocompiler\r
453 :chkuser\r
454 rm -f junk.o\r
455 echo int main (int argc, char *argv[]) {>junk.c\r
456 echo char *usercflags = "%escusercflags%";>>junk.c\r
457 echo }>>junk.c\r
458 echo gcc -Werror -c junk.c >>config.log\r
459 gcc -Werror -c junk.c >>config.log 2>&1\r
460 if exist junk.o goto gccOk\r
461 echo.\r
462 echo Error in --cflags argument: %usercflags%\r
463 echo Backslashes and quotes cannot be used with --cflags.  Please use forward\r
464 echo slashes for filenames and paths (e.g. when passing directories to -I).\r
465 rm -f junk.c\r
466 goto end\r
468 :nocompiler\r
469 echo.\r
470 echo Configure failed.\r
471 echo To configure Emacs for Windows, you need to have either\r
472 echo gcc-2.95 or later with Mingw32 and the Windows API headers,\r
473 echo or MSVC 2.x or later.\r
474 del junk.c\r
475 goto end\r
477 :gccOk\r
478 set COMPILER=gcc\r
479 echo Using 'gcc'\r
480 rm -f junk.c junk.o\r
481 Rem It is not clear what GCC version began supporting -mtune\r
482 Rem and pentium4 on x86, so check this explicitly.\r
483 echo main(){} >junk.c\r
484 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log\r
485 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1\r
486 if not errorlevel 1 goto gccMtuneOk\r
487 echo The failed program was: >>config.log\r
488 type junk.c >>config.log\r
489 set mf=-mcpu=i686\r
490 rm -f junk.c junk.o\r
491 goto gccdebug\r
493 :gccMtuneOk\r
494 echo GCC supports -mtune=pentium4 >>config.log\r
495 set mf=-mtune=pentium4\r
496 rm -f junk.c junk.o\r
498 :gccdebug\r
499 rem Check for DWARF-2 debug info support, else default to stabs\r
500 echo main(){} >junk.c\r
501 echo gcc -c -gdwarf-2 -g3 junk.c >>config.log\r
502 gcc -c -gdwarf-2 -g3 junk.c >>config.log 2>&1\r
503 if not errorlevel 1 goto gccdwarf\r
504 echo The failed program was: >>config.log\r
505 type junk.c >>config.log\r
506 set dbginfo=-gstabs+\r
507 rm -f junk.c junk.o\r
508 goto compilercheckdone\r
510 :gccdwarf\r
511 echo GCC supports DWARF-2 >>config.log\r
512 set dbginfo=-gdwarf-2 -g3\r
513 rm -f junk.c junk.o\r
514 goto compilercheckdone\r
516 :clOk\r
517 set COMPILER=cl\r
518 rm -f junk.c junk.obj\r
519 echo Using 'MSVC'\r
521 :compilercheckdone\r
523 rem ----------------------------------------------------------------------\r
524 rem   Check for external image libraries. Since they are loaded\r
525 rem   dynamically, the libraries themselves do not need to be present\r
526 rem   at compile time, but the header files are required.\r
528 set mingwflag=\r
530 if (%nocygwin%) == (N) goto flagsOK\r
531 set mingwflag=-mno-cygwin\r
533 :flagsOK\r
535 if (%pngsupport%) == (N) goto pngDone\r
537 echo Checking for libpng...\r
538 echo #include "png.h" >junk.c\r
539 echo main (){} >>junk.c\r
540 rem   -o option is ignored with cl, but allows result to be consistent.\r
541 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
542 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
543 if exist junk.obj goto havePng\r
545 echo ...png.h not found, building without PNG support.\r
546 echo The failed program was: >>config.log\r
547 type junk.c >>config.log\r
548 set HAVE_PNG=\r
549 goto :pngDone\r
551 :havePng\r
552 echo ...PNG header available, building with PNG support.\r
553 set HAVE_PNG=1\r
555 :pngDone\r
556 rm -f junk.c junk.obj\r
558 if (%tlssupport%) == (N) goto tlsDone\r
560 rem this is a copy of the PNG detection\r
561 echo Checking for libgnutls...\r
562 echo #include "gnutls/gnutls.h" >junk.c\r
563 echo main (){} >>junk.c\r
564 rem   -o option is ignored with cl, but allows result to be consistent.\r
565 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
566 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
567 if exist junk.obj goto haveTls\r
569 echo ...gnutls.h not found, building without TLS support.\r
570 echo The failed program was: >>config.log\r
571 type junk.c >>config.log\r
572 set HAVE_GNUTLS=\r
573 goto :tlsDone\r
575 :haveTls\r
576 echo ...GnuTLS header available, building with GnuTLS support.\r
577 set HAVE_GNUTLS=1\r
579 :tlsDone\r
580 rm -f junk.c junk.obj\r
582 if (%libxml2support%) == (N) goto xml2Done\r
584 echo Checking for libxml2....\r
585 echo #include "libxml/HTMLparser.h" >junk.c\r
586 echo main(){} >>junk.c\r
587 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
588 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
589 if exist junk.obj goto havelibxml2\r
591 echo ...libxml/HTMLparser.h not found, building without libxml2 support\r
592 echo The failed program was: >>config.log\r
593 type junk.c >>config.log\r
594 set HAVE_LIBXML2=\r
595 goto xml2Done\r
597 :havelibxml2\r
598 echo ...libxml2 header available, building with libxml2 support\r
599 set HAVE_LIBXML2=1\r
601 :xml2Done\r
602 rm -f junk.c junk.obj\r
604 if (%jpegsupport%) == (N) goto jpegDone\r
606 echo Checking for jpeg-6b...\r
607 echo #include "jconfig.h" >junk.c\r
608 echo main (){} >>junk.c\r
609 rem   -o option is ignored with cl, but allows result to be consistent.\r
610 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
611 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
612 if exist junk.obj goto haveJpeg\r
614 echo ...jconfig.h not found, building without JPEG support.\r
615 echo The failed program was: >>config.log\r
616 type junk.c >>config.log\r
617 set HAVE_JPEG=\r
618 goto :jpegDone\r
620 :haveJpeg\r
621 echo ...JPEG header available, building with JPEG support.\r
622 set HAVE_JPEG=1\r
624 :jpegDone\r
625 rm -f junk.c junk.obj\r
627 if (%gifsupport%) == (N) goto gifDone\r
629 echo Checking for libgif...\r
630 rem giflib-5.0.0 needs size_t defined before gif_lib.h is included\r
631 rem redirection characters need to be protected from the shell\r
632 echo #include ^<stddef.h^> >junk.c\r
633 echo #include "gif_lib.h" >>junk.c\r
634 echo main (){} >>junk.c\r
635 rem   -o option is ignored with cl, but allows result to be consistent.\r
636 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
637 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
638 if exist junk.obj goto haveGif\r
640 echo ...gif_lib.h not found, building without GIF support.\r
641 echo The failed program was: >>config.log\r
642 type junk.c >>config.log\r
643 set HAVE_GIF=\r
644 goto :gifDone\r
646 :haveGif\r
647 echo ...GIF header available, building with GIF support.\r
648 set HAVE_GIF=1\r
650 :gifDone\r
651 rm -f junk.c junk.obj\r
653 if (%tiffsupport%) == (N) goto tiffDone\r
655 echo Checking for tiff...\r
656 echo #include "tiffio.h" >junk.c\r
657 echo main (){} >>junk.c\r
658 rem   -o option is ignored with cl, but allows result to be consistent.\r
659 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
660 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
661 if exist junk.obj goto haveTiff\r
663 echo ...tiffio.h not found, building without TIFF support.\r
664 echo The failed program was: >>config.log\r
665 type junk.c >>config.log\r
666 set HAVE_TIFF=\r
667 goto :tiffDone\r
669 :haveTiff\r
670 echo ...TIFF header available, building with TIFF support.\r
671 set HAVE_TIFF=1\r
673 :tiffDone\r
674 rm -f junk.c junk.obj\r
676 if (%xpmsupport%) == (N) goto xpmDone\r
678 echo Checking for libXpm...\r
679 echo #define FOR_MSW 1 >junk.c\r
680 echo #include "X11/xpm.h" >>junk.c\r
681 echo main (){} >>junk.c\r
682 rem   -o option is ignored with cl, but allows result to be consistent.\r
683 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
684 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
685 if exist junk.obj goto haveXpm\r
687 echo ...X11/xpm.h not found, building without XPM support.\r
688 echo The failed program was: >>config.log\r
689 type junk.c >>config.log\r
690 set HAVE_XPM=\r
691 goto :xpmDone\r
693 :haveXpm\r
694 echo ...XPM header available, building with XPM support.\r
695 set HAVE_XPM=1\r
697 :xpmDone\r
698 rm -f junk.c junk.obj\r
700 if not (%svgsupport%) == (Y) goto :svgDone\r
701 echo Checking for librsvg...\r
702 echo #include "librsvg/rsvg.h" >junk.c\r
703 echo main (){} >>junk.c\r
704 rem   -o option is ignored with cl, but allows result to be consistent.\r
705 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log\r
706 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log\r
707 if exist junk.obj goto haveSvg\r
709 echo ...librsvg/rsvg.h or dependencies not found, building without SVG support.\r
710 echo The failed program was: >>config.log\r
711 type junk.c >>config.log\r
712 set HAVE_RSVG=\r
713 goto :svgDone\r
715 :haveSvg\r
716 echo ...librsvg header available, building with SVG support (EXPERIMENTAL).\r
717 set HAVE_RSVG=1\r
719 :svgDone\r
720 rm -f junk.c junk.obj junk.err junk.out\r
722 rem Any distfiles provided for building distribution? If no, we're done.\r
723 if "(%HAVE_DISTFILES%)"=="()" goto :distFilesDone\r
725 rem Any arguments to --distfiles specified? If no, we're done.\r
726 if not "%distfiles%"=="" goto :checkDistFiles\r
727 set distFilesOk=0\r
728 echo No arguments specified for option --distfiles!\r
729 goto distfilesDone\r
731 :checkDistFiles\r
732 echo Checking for distfiles...\r
733 rem Check if all specified distfiles exist\r
734 set fileNotFound=\r
735 for %%d in (%distfiles%) do if not exist %%d set fileNotFound=%%d\r
736 if not "%fileNotFound%"=="" goto distFilesNotFound\r
738 set distFilesOK=1\r
739 echo ...all distfiles found.\r
740 goto :distFilesDone\r
742 :distFilesNotFound\r
743 set distFilesOk=0\r
744 echo ...%fileNotFound% not found.\r
745 set distfiles=\r
746 goto :distfilesDone\r
748 :distFilesDone\r
749 set fileNotFound=\r
751 rem ----------------------------------------------------------------------\r
753 :genmakefiles\r
754 echo Generating makefiles\r
755 if %COMPILER% == gcc set MAKECMD=gmake\r
756 if %COMPILER% == cl set MAKECMD=nmake\r
758 rem   Pass on chosen settings to makefiles.\r
759 rem\r
760 rem   The weird place we put the redirection is to make sure no extra\r
761 rem   whitespace winds up at the end of the Make variables, since some\r
762 rem   variables, e.g. INSTALL_DIR, cannot stand that.  Yes, echo will\r
763 rem   write the blanks between the end of command arguments and the\r
764 rem   redirection symbol to the file.  OTOH, we cannot put the\r
765 rem   redirection immediately after the last character of the command,\r
766 rem   because environment variable expansion can yield a digit there,\r
767 rem   which will then be misinterpreted as the file descriptor to\r
768 rem   redirect...\r
769 echo # Start of settings from configure.bat >config.settings\r
770 >>config.settings echo COMPILER=%COMPILER%\r
771 if not "(%mf%)" == "()" >>config.settings echo MCPU_FLAG=%mf%\r
772 if not "(%dbginfo%)" == "()" >>config.settings echo DEBUG_INFO=%dbginfo%\r
773 if (%nodebug%) == (Y) >>config.settings echo NODEBUG=1\r
774 if (%noopt%) == (Y) >>config.settings echo NOOPT=1\r
775 if (%profile%) == (Y) >>config.settings echo PROFILE=1\r
776 if (%nocygwin%) == (Y) >>config.settings echo NOCYGWIN=1\r
777 if not "(%prefix%)" == "()" >>config.settings echo INSTALL_DIR=%prefix%\r
778 if not "(%distfiles%)" == "()" >>config.settings echo DIST_FILES=%distfiles%\r
779 rem We go thru docflags because usercflags could be "-DFOO=bar" -something\r
780 rem and the if command cannot cope with this\r
781 for %%v in (%usercflags%) do if not (%%v)==() set docflags=Y\r
782 if (%docflags%)==(Y) >>config.settings echo USER_CFLAGS=%usercflags%\r
783 if (%docflags%)==(Y) >>config.settings echo ESC_USER_CFLAGS=%escusercflags%\r
784 for %%v in (%userldflags%) do if not (%%v)==() set doldflags=Y\r
785 if (%doldflags%)==(Y) >>config.settings echo USER_LDFLAGS=%userldflags%\r
786 for %%v in (%extrauserlibs%) do if not (%%v)==() set doextralibs=Y\r
787 if (%doextralibs%)==(Y) >>config.settings echo USER_LIBS=%extrauserlibs%\r
788 echo # End of settings from configure.bat>>config.settings\r
789 echo. >>config.settings\r
791 copy config.nt config.tmp\r
792 echo. >>config.tmp\r
793 echo /* Start of settings from configure.bat.  */ >>config.tmp\r
794 rem   We write USER_CFLAGS and USER_LDFLAGS starting with a space to simplify\r
795 rem   processing of compiler options in w32.c:get_emacs_configuration_options\r
796 if (%docflags%) == (Y) echo #define USER_CFLAGS " %escusercflags%" >>config.tmp\r
797 if (%doldflags%) == (Y) echo #define USER_LDFLAGS " %escuserldflags%" >>config.tmp\r
798 if (%profile%) == (Y) echo #define PROFILING 1 >>config.tmp\r
799 if (%enablechecking%) == (Y) echo #define ENABLE_CHECKING 1 >>config.tmp\r
800 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp\r
801 if not "(%HAVE_GNUTLS%)" == "()" echo #define HAVE_GNUTLS 1 >>config.tmp\r
802 if not "(%HAVE_LIBXML2%)" == "()" echo #define HAVE_LIBXML2 1 >>config.tmp\r
803 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp\r
804 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp\r
805 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp\r
806 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp\r
807 if "(%HAVE_RSVG%)" == "(1)" echo #define HAVE_RSVG 1 >>config.tmp\r
809 echo /* End of settings from configure.bat.  */ >>config.tmp\r
811 Rem See if fc.exe returns a meaningful exit status.  If it does, we\r
812 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,\r
813 Rem since this forces recompilation of every source file.\r
814 if exist foo.bar del foo.bar\r
815 fc /b foo.bar foo.bar >nul 2>&1\r
816 if not errorlevel 2 goto doCopy\r
817 fc /b config.tmp ..\src\config.h >nul 2>&1\r
818 if errorlevel 1 goto doCopy\r
819 fc /b paths.h ..\src\epaths.h >nul 2>&1\r
820 if not errorlevel 1 goto dontCopy\r
822 :doCopy\r
823 copy config.tmp ..\src\config.h\r
824 copy paths.h ..\src\epaths.h\r
826 :dontCopy\r
827 if exist config.tmp del config.tmp\r
828 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile\r
829 if exist ..\admin\unidata copy /b config.settings+%MAKECMD%.defs+..\admin\unidata\makefile.w32-in ..\admin\unidata\makefile\r
830 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile\r
831 copy /b config.settings+%MAKECMD%.defs+..\lib\makefile.w32-in ..\lib\makefile\r
832 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile\r
833 copy /b config.settings+%MAKECMD%.defs+..\doc\emacs\makefile.w32-in ..\doc\emacs\makefile\r
834 copy /b config.settings+%MAKECMD%.defs+..\doc\misc\makefile.w32-in ..\doc\misc\makefile\r
835 copy /b config.settings+%MAKECMD%.defs+..\doc\lispref\makefile.w32-in ..\doc\lispref\makefile\r
836 copy /b config.settings+%MAKECMD%.defs+..\doc\lispintro\makefile.w32-in ..\doc\lispintro\makefile\r
837 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile\r
838 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile\r
839 rem   Use the default (no-op) Makefile.in if the nt version is not present.\r
840 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile\r
841 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile\r
842 del config.settings\r
844 Rem Some people use WinZip which doesn't create empty directories!\r
845 if not exist ..\site-lisp\nul mkdir ..\site-lisp\\r
846 Rem Update subdirs.el only if it is different or fc.exe doesn't work.\r
847 if exist foo.bar del foo.bar\r
848 fc /b foo.bar foo.bar >nul 2>&1\r
849 if not errorlevel 2 goto doUpdateSubdirs\r
850 fc /b subdirs.el ..\site-lisp\subdirs.el >nul 2>&1\r
851 if not errorlevel 1 goto dontUpdateSubdirs\r
853 :doUpdateSubdirs\r
854 if exist ..\site-lisp\subdirs.el del ..\site-lisp\subdirs.el\r
855 copy subdirs.el ..\site-lisp\subdirs.el\r
857 :dontUpdateSubdirs\r
858 echo.\r
860 rem check that we have all the libraries we need.\r
861 set libsOK=1\r
863 if not "(%HAVE_XPM%)" == "()" goto checkpng\r
864 if (%xpmsupport%) == (N) goto checkpng\r
865  set libsOK=0\r
866  echo XPM support is missing. It is required for color icons in the toolbar.\r
867  echo   Install libXpm development files or use --without-xpm\r
869 :checkpng\r
870 if not "(%HAVE_PNG%)" == "()" goto checkjpeg\r
871 if (%pngsupport%) == (N) goto checkjpeg\r
872  set libsOK=0\r
873  echo PNG support is missing.\r
874  echo   Install libpng development files or use --without-png\r
876 :checkjpeg\r
877 if not "(%HAVE_JPEG%)" == "()" goto checktiff\r
878 if (%jpegsupport%) == (N) goto checktiff\r
879  set libsOK=0\r
880  echo JPEG support is missing.\r
881  echo   Install jpeg development files or use --without-jpeg\r
883 :checktiff\r
884 if not "(%HAVE_TIFF%)" == "()" goto checkgif\r
885 if (%tiffsupport%) == (N) goto checkgif\r
886  set libsOK=0\r
887  echo TIFF support is missing.\r
888  echo   Install libtiff development files or use --without-tiff\r
890 :checkgif\r
891 if not "(%HAVE_GIF%)" == "()" goto checkdistfiles\r
892 if (%gifsupport%) == (N) goto checkdistfiles\r
893  set libsOK=0\r
894  echo GIF support is missing.\r
895  echo   Install giflib or libungif development files or use --without-gif\r
897 :checkdistfiles\r
898 if "(%HAVE_DISTFILES%)" == "()" goto donelibchecks\r
899 if (%distFilesOk%) == (1) goto donelibchecks\r
900 echo.\r
901 echo Files specified with option --distfiles could not be found.\r
902 echo   Fix these issues before running make dist\r
904 :donelibchecks\r
905 if (%libsOK%) == (1) goto success\r
906 echo.\r
907 echo Important libraries are missing. Fix these issues before running make.\r
908 goto end\r
910 :success\r
911 echo Emacs successfully configured.\r
912 echo Emacs successfully configured. >>config.log\r
913 if (%MAKECMD%) == (gmake) set MAKECMD=make\r
914 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.\r
915 goto end\r
917 :SmallEnv\r
918 echo Your environment size is too small.  Please enlarge it and rerun configure.\r
919 echo For example, type "command.com /e:2048" to have 2048 bytes available.\r
920 set $foo$=\r
922 :end\r
923 set prefix=\r
924 set nodebug=\r
925 set noopt=\r
926 set enablechecking=\r
927 set profile=\r
928 set nocygwin=\r
929 set COMPILER=\r
930 set MAKECMD=\r
931 set usercflags=\r
932 set docflags=\r
933 set userldflags=\r
934 set doldflags=\r
935 set mingwflag=\r
936 set mf=\r
937 set distfiles=\r
938 set HAVE_DISTFILES=\r
939 set distFilesOk=\r
940 set pngsupport=\r
941 set tlssupport=\r
942 set libxml2support=\r
943 set jpegsupport=\r
944 set gifsupport=\r
945 set tiffsupport=\r
946 set xpmsupport=\r
947 set svgsupport=\r
948 set libsOK=\r
949 set HAVE_GIF=\r
950 set HAVE_JPEG=\r
951 set HAVE_PNG=\r
952 set HAVE_TIFF=\r
953 set HAVE_XPM=\r
954 set dbginfo=\r
955 endlocal\r
956 set use_extensions=\r