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: fails?[6] fails?[6]
\r
45 rem cygwin compiled make 3.81: fails fails?[6]
\r
46 rem mingw32 compiled make 3.79.1: okay okay
\r
47 rem mingw32 compiled make 3.80: okay okay?[6]
\r
48 rem mingw32 compiled make 3.81: okay okay[7]
\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] not recommended; please report if you try this combination.
\r
59 rem [7] tested only on Windows XP.
\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
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
77 rem ----------------------------------------------------------------------
\r
78 rem Default settings.
\r
89 rem ----------------------------------------------------------------------
\r
90 rem Handle arguments.
\r
92 if "%1" == "-h" goto usage
\r
93 if "%1" == "--help" goto usage
\r
94 if "%1" == "--prefix" goto setprefix
\r
95 if "%1" == "--with-gcc" goto withgcc
\r
96 if "%1" == "--with-msvc" goto withmsvc
\r
97 if "%1" == "--no-debug" goto nodebug
\r
98 if "%1" == "--no-opt" goto noopt
\r
99 if "%1" == "--no-cygwin" goto nocygwin
\r
100 if "%1" == "--cflags" goto usercflags
\r
101 if "%1" == "--ldflags" goto userldflags
\r
102 if "%1" == "--without-png" goto withoutpng
\r
103 if "%1" == "--without-jpeg" goto withoutjpeg
\r
104 if "%1" == "--without-gif" goto withoutgif
\r
105 if "%1" == "--without-tiff" goto withouttiff
\r
106 if "%1" == "--without-xpm" goto withoutxpm
\r
107 if "%1" == "" goto checkutils
\r
109 echo Usage: configure [options]
\r
111 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
112 echo. --with-gcc use GCC to compile Emacs
\r
113 echo. --with-msvc use MSVC to compile Emacs
\r
114 echo. --no-debug exclude debug info from executables
\r
115 echo. --no-opt disable optimization
\r
116 echo. --no-cygwin use -mno-cygwin option with GCC
\r
117 echo. --cflags FLAG pass FLAG to compiler
\r
118 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
119 echo. --without-png do not use libpng even if it is installed
\r
120 echo. --without-jpeg do not use jpeg-6b even if it is installed
\r
121 echo. --without-gif do not use libungif even if it is installed
\r
122 echo. --without-tiff do not use libtiff even if it is installed
\r
123 echo. --without-xpm do not use libXpm even if it is installed
\r
125 rem ----------------------------------------------------------------------
\r
131 rem ----------------------------------------------------------------------
\r
136 rem ----------------------------------------------------------------------
\r
141 rem ----------------------------------------------------------------------
\r
146 rem ----------------------------------------------------------------------
\r
151 rem ----------------------------------------------------------------------
\r
156 rem ----------------------------------------------------------------------
\r
159 set usercflags=%usercflags%%sep1%%1
\r
160 set sep1= %nothing%
\r
163 rem ----------------------------------------------------------------------
\r
166 set userldflags=%userldflags%%sep2%%1
\r
167 set sep2= %nothing%
\r
170 rem ----------------------------------------------------------------------
\r
178 rem ----------------------------------------------------------------------
\r
186 rem ----------------------------------------------------------------------
\r
194 rem ----------------------------------------------------------------------
\r
202 rem ----------------------------------------------------------------------
\r
210 rem ----------------------------------------------------------------------
\r
211 rem Check that necessary utilities (cp and rm) are present.
\r
213 echo Checking for 'cp'...
\r
214 cp configure.bat junk.bat
\r
215 if not exist junk.bat goto needcp
\r
216 echo Checking for 'rm'...
\r
218 if exist junk.bat goto needrm
\r
221 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
225 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
228 rem ----------------------------------------------------------------------
\r
229 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
231 if (%COMPILER%)==(cl) goto compilercheckdone
\r
232 if (%COMPILER%)==(gcc) goto checkgcc
\r
234 echo Checking whether 'cl' is available...
\r
235 echo main(){} >junk.c
\r
236 cl -nologo -c junk.c
\r
237 if exist junk.obj goto clOK
\r
239 echo Checking whether 'gcc' is available...
\r
241 if not exist junk.o goto nocompiler
\r
245 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
246 Rem 8 characters of a label. So do NOT be tempted to change
\r
247 Rem chkapi* into something fancier like checkw32api
\r
248 Rem You HAVE been warned!
\r
249 if (%nocygwin%) == (Y) goto chkapi
\r
250 echo Checking whether gcc requires '-mno-cygwin'...
\r
251 echo #include "cygwin/version.h" >junk.c
\r
252 echo main(){} >>junk.c
\r
253 echo gcc -c junk.c >>config.log
\r
254 gcc -c junk.c >>config.log 2>&1
\r
255 if not exist junk.o goto chkapi
\r
256 echo gcc -mno-cygwin -c junk.c >>config.log
\r
257 gcc -mno-cygwin -c junk.c >>config.log 2>&1
\r
258 if exist junk.o set nocygwin=Y
\r
259 rm -f junk.c junk.o
\r
262 echo The failed program was: >>config.log
\r
263 type junk.c >>config.log
\r
264 rem ----------------------------------------------------------------------
\r
265 rem Older versions of the Windows API headers either don't have any of
\r
266 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
267 rem are like this), or have a typo in the definition of
\r
268 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
269 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
270 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
272 echo Checking whether W32 API headers are too old...
\r
273 echo #include "windows.h" >junk.c
\r
274 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
275 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
276 if (%nocygwin%) == (Y) goto chkapi1
\r
277 set cf=%usercflags%
\r
280 set cf=%usercflags% -mno-cygwin
\r
285 @echo gcc %cf% -c junk.c >>config.log
\r
286 gcc %cf% -c junk.c >>config.log 2>&1
\r
288 if exist junk.o goto gccOk
\r
289 echo The failed program was: >>config.log
\r
290 type junk.c >>config.log
\r
294 echo Configure failed.
\r
295 echo To configure Emacs for Windows, you need to have either
\r
296 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
297 echo or MSVC 2.x or later.
\r
304 rm -f junk.c junk.o
\r
305 Rem It is not clear what GCC version began supporting -mtune
\r
306 Rem and pentium4 on x86, so check this explicitly.
\r
307 echo main(){} >junk.c
\r
308 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
\r
309 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
\r
310 if not errorlevel 1 goto gccMtuneOk
\r
311 echo The failed program was: >>config.log
\r
312 type junk.c >>config.log
\r
314 rm -f junk.c junk.o
\r
315 goto compilercheckdone
\r
317 echo GCC supports -mtune=pentium4 >>config.log
\r
318 set mf=-mtune=pentium4
\r
319 rm -f junk.c junk.o
\r
320 goto compilercheckdone
\r
324 rm -f junk.c junk.obj
\r
329 rem ----------------------------------------------------------------------
\r
330 rem Check for external image libraries. Since they are loaded
\r
331 rem dynamically, the libraries themselves do not need to be present
\r
332 rem at compile time, but the header files are required.
\r
336 if (%nocygwin%) == (N) goto flagsOK
\r
337 set mingwflag=-mno-cygwin
\r
341 if (%pngsupport%) == (N) goto pngDone
\r
343 echo Checking for libpng...
\r
344 echo #include "png.h" >junk.c
\r
345 echo main (){} >>junk.c
\r
346 rem -o option is ignored with cl, but allows result to be consistent.
\r
347 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
348 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
349 if exist junk.obj goto havePng
\r
351 echo ...png.h not found, building without PNG support.
\r
352 echo The failed program was: >>config.log
\r
353 type junk.c >>config.log
\r
358 echo ...PNG header available, building with PNG support.
\r
362 rm -f junk.c junk.obj
\r
364 if (%jpegsupport%) == (N) goto jpegDone
\r
366 echo Checking for jpeg-6b...
\r
367 echo #include "jconfig.h" >junk.c
\r
368 echo main (){} >>junk.c
\r
369 rem -o option is ignored with cl, but allows result to be consistent.
\r
370 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
371 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
372 if exist junk.obj goto haveJpeg
\r
374 echo ...jconfig.h not found, building without JPEG support.
\r
375 echo The failed program was: >>config.log
\r
376 type junk.c >>config.log
\r
381 echo ...JPEG header available, building with JPEG support.
\r
385 rm -f junk.c junk.obj
\r
387 if (%gifsupport%) == (N) goto gifDone
\r
389 echo Checking for libgif...
\r
390 echo #include "gif_lib.h" >junk.c
\r
391 echo main (){} >>junk.c
\r
392 rem -o option is ignored with cl, but allows result to be consistent.
\r
393 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
394 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
395 if exist junk.obj goto haveGif
\r
397 echo ...gif_lib.h not found, building without GIF support.
\r
398 echo The failed program was: >>config.log
\r
399 type junk.c >>config.log
\r
404 echo ...GIF header available, building with GIF support.
\r
408 rm -f junk.c junk.obj
\r
410 if (%tiffsupport%) == (N) goto tiffDone
\r
412 echo Checking for tiff...
\r
413 echo #include "tiffio.h" >junk.c
\r
414 echo main (){} >>junk.c
\r
415 rem -o option is ignored with cl, but allows result to be consistent.
\r
416 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
417 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
418 if exist junk.obj goto haveTiff
\r
420 echo ...tiffio.h not found, building without TIFF support.
\r
421 echo The failed program was: >>config.log
\r
422 type junk.c >>config.log
\r
427 echo ...TIFF header available, building with TIFF support.
\r
431 rm -f junk.c junk.obj
\r
433 if (%xpmsupport%) == (N) goto xpmDone
\r
435 echo Checking for libXpm...
\r
436 echo #define FOR_MSW 1 >junk.c
\r
437 echo #include "X11/xpm.h" >>junk.c
\r
438 echo main (){} >>junk.c
\r
439 rem -o option is ignored with cl, but allows result to be consistent.
\r
440 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
441 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
442 if exist junk.obj goto haveXpm
\r
444 echo ...X11/xpm.h not found, building without XPM support.
\r
445 echo The failed program was: >>config.log
\r
446 type junk.c >>config.log
\r
451 echo ...XPM header available, building with XPM support.
\r
455 rm -f junk.c junk.obj junk.err junk.out
\r
457 rem ----------------------------------------------------------------------
\r
459 echo Generating makefiles
\r
460 if %COMPILER% == gcc set MAKECMD=gmake
\r
461 if %COMPILER% == cl set MAKECMD=nmake
\r
463 rem Pass on chosen settings to makefiles.
\r
464 rem NB. Be very careful to not have a space before redirection symbols
\r
465 rem except when there is a preceding digit, when a space is required.
\r
467 echo # Start of settings from configure.bat >config.settings
\r
468 echo COMPILER=%COMPILER%>>config.settings
\r
469 if not "(%mf%)" == "()" echo MCPU_FLAG=%mf%>>config.settings
\r
470 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
471 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
472 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
473 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
474 if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags%>>config.settings
\r
475 if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags%>>config.settings
\r
476 echo # End of settings from configure.bat>>config.settings
\r
477 echo. >>config.settings
\r
479 copy config.nt config.tmp
\r
481 echo /* Start of settings from configure.bat. */ >>config.tmp
\r
482 if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>config.tmp
\r
483 if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>config.tmp
\r
484 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp
\r
485 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp
\r
486 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp
\r
487 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp
\r
488 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp
\r
489 echo /* End of settings from configure.bat. */ >>config.tmp
\r
491 Rem See if fc.exe returns a meaningful exit status. If it does, we
\r
492 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
\r
493 Rem since this forces recompilation of every source file.
\r
494 if exist foo.bar del foo.bar
\r
495 fc /b foo.bar foo.bar >nul 2>&1
\r
496 if not errorlevel 2 goto doCopy
\r
497 fc /b config.tmp ..\src\config.h >nul 2>&1
\r
498 if errorlevel 1 goto doCopy
\r
499 fc /b paths.h ..\src\epaths.h >nul 2>&1
\r
500 if errorlevel 0 goto dontCopy
\r
502 copy config.tmp ..\src\config.h
\r
503 copy paths.h ..\src\epaths.h
\r
506 if exist config.tmp del config.tmp
\r
507 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
508 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
509 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
510 copy /b config.settings+%MAKECMD%.defs+..\man\makefile.w32-in ..\man\makefile
\r
511 copy /b config.settings+%MAKECMD%.defs+..\lispref\makefile.w32-in ..\lispref\makefile
\r
512 copy /b config.settings+%MAKECMD%.defs+..\lispintro\makefile.w32-in ..\lispintro\makefile
\r
513 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
514 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
515 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
516 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
517 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
518 del config.settings
\r
520 Rem Some people use WinZip which doesn't create empty directories!
\r
521 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
\r
522 if not exist ..\site-lisp\subdirs.el copy subdirs.el ..\site-lisp\subdirs.el
\r
525 echo Emacs successfully configured.
\r
526 echo Emacs successfully configured. >>config.log
\r
527 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
531 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
532 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r
547 arch-tag: 300d20a4-1675-4e75-b615-7ce1a8c5376c
\r