2 rem ----------------------------------------------------------------------
\r
3 rem Configuration script for MS Windows 95/98/Me and NT/2000/XP
\r
4 rem Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
\r
5 rem 2006, 2007 Free Software Foundation, Inc.
\r
7 rem This file is part of GNU Emacs.
\r
9 rem GNU Emacs is free software; you can redistribute it and/or modify
\r
10 rem it under the terms of the GNU General Public License as published by
\r
11 rem the Free Software Foundation; either version 2, or (at your option)
\r
12 rem any later version.
\r
14 rem GNU Emacs is distributed in the hope that it will be useful,
\r
15 rem but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 rem GNU General Public License for more details.
\r
19 rem You should have received a copy of the GNU General Public License
\r
20 rem along with GNU Emacs; see the file COPYING. If not, write to the
\r
21 rem Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
\r
22 rem Boston, MA 02110-1301, USA.
\r
23 rem ----------------------------------------------------------------------
\r
24 rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
\r
26 rem + MS Windows 95/98/Me or NT/2000/XP
\r
27 rem + either MSVC 2.x or later, or gcc-2.95 or later (with gmake 3.75
\r
28 rem or later) and the Mingw32 and W32 API headers and libraries.
\r
29 rem + Visual Studio 2005 is not supported at this time.
\r
31 rem For reference, here is a list of which builds of gmake are known to
\r
32 rem work or not, and whether they work in the presence and/or absence of
\r
36 rem cygwin b20.1 make (3.75): fails[1,5] fails[2,5]
\r
37 rem MSVC compiled gmake 3.77: okay okay
\r
38 rem MSVC compiled gmake 3.78.1: okay okay
\r
39 rem MSVC compiled gmake 3.79.1: okay okay
\r
40 rem mingw32/gcc-2.92.2 make (3.77): okay okay[4]
\r
41 rem cygwin compiled gmake 3.77: fails[1,5] fails[2,5]
\r
42 rem cygwin compiled gmake 3.78.1: fails[5] fails[2,5]
\r
43 rem cygwin compiled gmake 3.79.1: fails[3,5] fails[2?,5]
\r
44 rem cygwin compiled make 3.80: okay[6] fails?[7]
\r
45 rem cygwin compiled make 3.81: fails fails?[7]
\r
46 rem mingw32 compiled make 3.79.1: okay okay
\r
47 rem mingw32 compiled make 3.80: okay okay?[7]
\r
48 rem mingw32 compiled make 3.81: okay okay[8]
\r
50 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
\r
51 rem emacs source with text!=binary.
\r
52 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
\r
53 rem [3] requires LC_MESSAGES support to build; cannot build with early
\r
54 rem versions of cygwin.
\r
55 rem [4] may fail on Windows 9X and Windows ME; if so, install Bash.
\r
56 rem [5] fails when building leim due to the use of cygwin style paths.
\r
57 rem May work if building emacs without leim.
\r
58 rem [6] need to uncomment 3 lines in nt/gmake.defs that invoke `cygpath';
\r
59 rem look for "cygpath" near line 85 of gmake.defs.
\r
60 rem [7] not recommended; please report if you try this combination.
\r
61 rem [8] tested only on Windows XP.
\r
64 if exist config.log del config.log
\r
66 rem ----------------------------------------------------------------------
\r
67 rem See if the environment is large enough. We need 43 (?) bytes.
\r
68 set $foo$=123456789_123456789_123456789_123456789_123
\r
69 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
\r
72 rem ----------------------------------------------------------------------
\r
73 rem Make sure we are running in the nt subdir
\r
74 if exist configure.bat goto start
\r
75 echo You must run configure from the nt subdirectory.
\r
79 rem ----------------------------------------------------------------------
\r
80 rem Default settings.
\r
91 rem ----------------------------------------------------------------------
\r
92 rem Handle arguments.
\r
94 if "%1" == "-h" goto usage
\r
95 if "%1" == "--help" goto usage
\r
96 if "%1" == "--prefix" goto setprefix
\r
97 if "%1" == "--with-gcc" goto withgcc
\r
98 if "%1" == "--with-msvc" goto withmsvc
\r
99 if "%1" == "--no-debug" goto nodebug
\r
100 if "%1" == "--no-opt" goto noopt
\r
101 if "%1" == "--no-cygwin" goto nocygwin
\r
102 if "%1" == "--cflags" goto usercflags
\r
103 if "%1" == "--ldflags" goto userldflags
\r
104 if "%1" == "--without-png" goto withoutpng
\r
105 if "%1" == "--without-jpeg" goto withoutjpeg
\r
106 if "%1" == "--without-gif" goto withoutgif
\r
107 if "%1" == "--without-tiff" goto withouttiff
\r
108 if "%1" == "--without-xpm" goto withoutxpm
\r
109 if "%1" == "" goto checkutils
\r
111 echo Usage: configure [options]
\r
113 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
114 echo. --with-gcc use GCC to compile Emacs
\r
115 echo. --with-msvc use MSVC to compile Emacs
\r
116 echo. --no-debug exclude debug info from executables
\r
117 echo. --no-opt disable optimization
\r
118 echo. --no-cygwin use -mno-cygwin option with GCC
\r
119 echo. --cflags FLAG pass FLAG to compiler
\r
120 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
121 echo. --without-png do not use libpng even if it is installed
\r
122 echo. --without-jpeg do not use jpeg-6b even if it is installed
\r
123 echo. --without-gif do not use libungif even if it is installed
\r
124 echo. --without-tiff do not use libtiff even if it is installed
\r
125 echo. --without-xpm do not use libXpm even if it is installed
\r
127 rem ----------------------------------------------------------------------
\r
133 rem ----------------------------------------------------------------------
\r
138 rem ----------------------------------------------------------------------
\r
143 rem ----------------------------------------------------------------------
\r
148 rem ----------------------------------------------------------------------
\r
153 rem ----------------------------------------------------------------------
\r
158 rem ----------------------------------------------------------------------
\r
161 set usercflags=%usercflags%%sep1%%1
\r
162 set sep1= %nothing%
\r
165 rem ----------------------------------------------------------------------
\r
168 set userldflags=%userldflags%%sep2%%1
\r
169 set sep2= %nothing%
\r
172 rem ----------------------------------------------------------------------
\r
180 rem ----------------------------------------------------------------------
\r
188 rem ----------------------------------------------------------------------
\r
196 rem ----------------------------------------------------------------------
\r
204 rem ----------------------------------------------------------------------
\r
212 rem ----------------------------------------------------------------------
\r
213 rem Check that necessary utilities (cp and rm) are present.
\r
215 echo Checking for 'cp'...
\r
216 cp configure.bat junk.bat
\r
217 if not exist junk.bat goto needcp
\r
218 echo Checking for 'rm'...
\r
220 if exist junk.bat goto needrm
\r
223 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
227 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
230 rem ----------------------------------------------------------------------
\r
231 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
233 if (%COMPILER%)==(cl) goto compilercheckdone
\r
234 if (%COMPILER%)==(gcc) goto checkgcc
\r
236 echo Checking whether 'cl' is available...
\r
237 echo main(){} >junk.c
\r
238 cl -nologo -c junk.c
\r
239 if exist junk.obj goto clOK
\r
241 echo Checking whether 'gcc' is available...
\r
243 if not exist junk.o goto nocompiler
\r
247 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
248 Rem 8 characters of a label. So do NOT be tempted to change
\r
249 Rem chkapi* into something fancier like checkw32api
\r
250 Rem You HAVE been warned!
\r
251 if (%nocygwin%) == (Y) goto chkapi
\r
252 echo Checking whether gcc requires '-mno-cygwin'...
\r
253 echo #include "cygwin/version.h" >junk.c
\r
254 echo main(){} >>junk.c
\r
255 echo gcc -c junk.c >>config.log
\r
256 gcc -c junk.c >>config.log 2>&1
\r
257 if not exist junk.o goto chkapi
\r
258 echo gcc -mno-cygwin -c junk.c >>config.log
\r
259 gcc -mno-cygwin -c junk.c >>config.log 2>&1
\r
260 if exist junk.o set nocygwin=Y
\r
261 rm -f junk.c junk.o
\r
264 echo The failed program was: >>config.log
\r
265 type junk.c >>config.log
\r
266 rem ----------------------------------------------------------------------
\r
267 rem Older versions of the Windows API headers either don't have any of
\r
268 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
269 rem are like this), or have a typo in the definition of
\r
270 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
271 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
272 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
274 echo Checking whether W32 API headers are too old...
\r
275 echo #include "windows.h" >junk.c
\r
276 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
277 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
278 if (%nocygwin%) == (Y) goto chkapi1
\r
279 set cf=%usercflags%
\r
282 set cf=%usercflags% -mno-cygwin
\r
287 @echo gcc %cf% -c junk.c >>config.log
\r
288 gcc %cf% -c junk.c >>config.log 2>&1
\r
290 if exist junk.o goto gccOk
\r
291 echo The failed program was: >>config.log
\r
292 type junk.c >>config.log
\r
296 echo Configure failed.
\r
297 echo To configure Emacs for Windows, you need to have either
\r
298 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
299 echo or MSVC 2.x or later.
\r
306 rm -f junk.c junk.o
\r
307 Rem It is not clear what GCC version began supporting -mtune
\r
308 Rem and pentium4 on x86, so check this explicitly.
\r
309 echo main(){} >junk.c
\r
310 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
\r
311 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
\r
312 if not errorlevel 1 goto gccMtuneOk
\r
313 echo The failed program was: >>config.log
\r
314 type junk.c >>config.log
\r
316 rm -f junk.c junk.o
\r
317 goto compilercheckdone
\r
319 echo GCC supports -mtune=pentium4 >>config.log
\r
320 set mf=-mtune=pentium4
\r
321 rm -f junk.c junk.o
\r
322 goto compilercheckdone
\r
326 rm -f junk.c junk.obj
\r
331 rem ----------------------------------------------------------------------
\r
332 rem Check for external image libraries. Since they are loaded
\r
333 rem dynamically, the libraries themselves do not need to be present
\r
334 rem at compile time, but the header files are required.
\r
338 if (%nocygwin%) == (N) goto flagsOK
\r
339 set mingwflag=-mno-cygwin
\r
343 if (%pngsupport%) == (N) goto pngDone
\r
345 echo Checking for libpng...
\r
346 echo #include "png.h" >junk.c
\r
347 echo main (){} >>junk.c
\r
348 rem -o option is ignored with cl, but allows result to be consistent.
\r
349 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
350 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
351 if exist junk.obj goto havePng
\r
353 echo ...png.h not found, building without PNG support.
\r
354 echo The failed program was: >>config.log
\r
355 type junk.c >>config.log
\r
360 echo ...PNG header available, building with PNG support.
\r
364 rm -f junk.c junk.obj
\r
366 if (%jpegsupport%) == (N) goto jpegDone
\r
368 echo Checking for jpeg-6b...
\r
369 echo #include "jconfig.h" >junk.c
\r
370 echo main (){} >>junk.c
\r
371 rem -o option is ignored with cl, but allows result to be consistent.
\r
372 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
373 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
374 if exist junk.obj goto haveJpeg
\r
376 echo ...jconfig.h not found, building without JPEG support.
\r
377 echo The failed program was: >>config.log
\r
378 type junk.c >>config.log
\r
383 echo ...JPEG header available, building with JPEG support.
\r
387 rm -f junk.c junk.obj
\r
389 if (%gifsupport%) == (N) goto gifDone
\r
391 echo Checking for libgif...
\r
392 echo #include "gif_lib.h" >junk.c
\r
393 echo main (){} >>junk.c
\r
394 rem -o option is ignored with cl, but allows result to be consistent.
\r
395 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
396 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
397 if exist junk.obj goto haveGif
\r
399 echo ...gif_lib.h not found, building without GIF support.
\r
400 echo The failed program was: >>config.log
\r
401 type junk.c >>config.log
\r
406 echo ...GIF header available, building with GIF support.
\r
410 rm -f junk.c junk.obj
\r
412 if (%tiffsupport%) == (N) goto tiffDone
\r
414 echo Checking for tiff...
\r
415 echo #include "tiffio.h" >junk.c
\r
416 echo main (){} >>junk.c
\r
417 rem -o option is ignored with cl, but allows result to be consistent.
\r
418 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
419 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
420 if exist junk.obj goto haveTiff
\r
422 echo ...tiffio.h not found, building without TIFF support.
\r
423 echo The failed program was: >>config.log
\r
424 type junk.c >>config.log
\r
429 echo ...TIFF header available, building with TIFF support.
\r
433 rm -f junk.c junk.obj
\r
435 if (%xpmsupport%) == (N) goto xpmDone
\r
437 echo Checking for libXpm...
\r
438 echo #define FOR_MSW 1 >junk.c
\r
439 echo #include "X11/xpm.h" >>junk.c
\r
440 echo main (){} >>junk.c
\r
441 rem -o option is ignored with cl, but allows result to be consistent.
\r
442 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
443 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
444 if exist junk.obj goto haveXpm
\r
446 echo ...X11/xpm.h not found, building without XPM support.
\r
447 echo The failed program was: >>config.log
\r
448 type junk.c >>config.log
\r
453 echo ...XPM header available, building with XPM support.
\r
457 rm -f junk.c junk.obj junk.err junk.out
\r
459 rem ----------------------------------------------------------------------
\r
461 echo Generating makefiles
\r
462 if %COMPILER% == gcc set MAKECMD=gmake
\r
463 if %COMPILER% == cl set MAKECMD=nmake
\r
465 rem Pass on chosen settings to makefiles.
\r
466 rem NB. Be very careful to not have a space before redirection symbols
\r
467 rem except when there is a preceding digit, when a space is required.
\r
469 echo # Start of settings from configure.bat >config.settings
\r
470 echo COMPILER=%COMPILER%>>config.settings
\r
471 if not "(%mf%)" == "()" echo MCPU_FLAG=%mf%>>config.settings
\r
472 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
473 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
474 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
475 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
476 if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags%>>config.settings
\r
477 if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags%>>config.settings
\r
478 echo # End of settings from configure.bat>>config.settings
\r
479 echo. >>config.settings
\r
481 copy config.nt config.tmp
\r
483 echo /* Start of settings from configure.bat. */ >>config.tmp
\r
484 if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>config.tmp
\r
485 if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>config.tmp
\r
486 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp
\r
487 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp
\r
488 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp
\r
489 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp
\r
490 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp
\r
491 echo /* End of settings from configure.bat. */ >>config.tmp
\r
493 Rem See if fc.exe returns a meaningful exit status. If it does, we
\r
494 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
\r
495 Rem since this forces recompilation of every source file.
\r
496 if exist foo.bar del foo.bar
\r
497 fc /b foo.bar foo.bar >nul 2>&1
\r
498 if not errorlevel 2 goto doCopy
\r
499 fc /b config.tmp ..\src\config.h >nul 2>&1
\r
500 if errorlevel 1 goto doCopy
\r
501 fc /b paths.h ..\src\epaths.h >nul 2>&1
\r
502 if errorlevel 0 goto dontCopy
\r
504 copy config.tmp ..\src\config.h
\r
505 copy paths.h ..\src\epaths.h
\r
508 if exist config.tmp del config.tmp
\r
509 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
510 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
511 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
512 copy /b config.settings+%MAKECMD%.defs+..\man\makefile.w32-in ..\man\makefile
\r
513 copy /b config.settings+%MAKECMD%.defs+..\lispref\makefile.w32-in ..\lispref\makefile
\r
514 copy /b config.settings+%MAKECMD%.defs+..\lispintro\makefile.w32-in ..\lispintro\makefile
\r
515 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
516 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
517 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
518 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
519 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
520 del config.settings
\r
522 Rem Some people use WinZip which doesn't create empty directories!
\r
523 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
\r
524 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
\r
525 if exist foo.bar del foo.bar
\r
526 fc /b foo.bar foo.bar >nul 2>&1
\r
527 if not errorlevel 2 goto doUpdateSubdirs
\r
528 fc /b subdirs.el ..\site-lisp\subdirs.el >nul 2>&1
\r
529 if not errorlevel 1 goto dontUpdateSubdirs
\r
531 if exist ..\site-lisp\subdirs.el del ..\site-lisp\subdirs.el
\r
532 copy subdirs.el ..\site-lisp\subdirs.el
\r
536 echo Emacs successfully configured.
\r
537 echo Emacs successfully configured. >>config.log
\r
538 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
542 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
543 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r
558 arch-tag: 300d20a4-1675-4e75-b615-7ce1a8c5376c
\r