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, 2008 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 3, 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
92 set usefontbackend=Y
\r
94 rem ----------------------------------------------------------------------
\r
95 rem Handle arguments.
\r
97 if "%1" == "-h" goto usage
\r
98 if "%1" == "--help" goto usage
\r
99 if "%1" == "--prefix" goto setprefix
\r
100 if "%1" == "--with-gcc" goto withgcc
\r
101 if "%1" == "--with-msvc" goto withmsvc
\r
102 if "%1" == "--no-debug" goto nodebug
\r
103 if "%1" == "--no-opt" goto noopt
\r
104 if "%1" == "--no-cygwin" goto nocygwin
\r
105 if "%1" == "--cflags" goto usercflags
\r
106 if "%1" == "--ldflags" goto userldflags
\r
107 if "%1" == "--without-png" goto withoutpng
\r
108 if "%1" == "--without-jpeg" goto withoutjpeg
\r
109 if "%1" == "--without-gif" goto withoutgif
\r
110 if "%1" == "--without-tiff" goto withouttiff
\r
111 if "%1" == "--without-xpm" goto withoutxpm
\r
112 if "%1" == "--disable-font-backend" goto withoutfont
\r
113 if "%1" == "" goto checkutils
\r
115 echo Usage: configure [options]
\r
117 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
118 echo. --with-gcc use GCC to compile Emacs
\r
119 echo. --with-msvc use MSVC to compile Emacs
\r
120 echo. --no-debug exclude debug info from executables
\r
121 echo. --no-opt disable optimization
\r
122 echo. --no-cygwin use -mno-cygwin option with GCC
\r
123 echo. --cflags FLAG pass FLAG to compiler
\r
124 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
125 echo. --without-png do not use PNG library even if it is installed
\r
126 echo. --without-jpeg do not use JPEG library even if it is installed
\r
127 echo. --without-gif do not use GIF library even if it is installed
\r
128 echo. --without-tiff do not use TIFF library even if it is installed
\r
129 echo. --without-xpm do not use XPM library even if it is installed
\r
130 echo. --disable-font-backend build without font backend support
\r
132 rem ----------------------------------------------------------------------
\r
138 rem ----------------------------------------------------------------------
\r
143 rem ----------------------------------------------------------------------
\r
148 rem ----------------------------------------------------------------------
\r
153 rem ----------------------------------------------------------------------
\r
158 rem ----------------------------------------------------------------------
\r
163 rem ----------------------------------------------------------------------
\r
166 set usercflags=%usercflags%%sep1%%1
\r
167 set sep1= %nothing%
\r
170 rem ----------------------------------------------------------------------
\r
173 set userldflags=%userldflags%%sep2%%1
\r
174 set sep2= %nothing%
\r
177 rem ----------------------------------------------------------------------
\r
185 rem ----------------------------------------------------------------------
\r
193 rem ----------------------------------------------------------------------
\r
201 rem ----------------------------------------------------------------------
\r
209 rem ----------------------------------------------------------------------
\r
218 set usefontbackend=N
\r
222 rem ----------------------------------------------------------------------
\r
223 rem Check that necessary utilities (cp and rm) are present.
\r
225 echo Checking for 'cp'...
\r
226 cp configure.bat junk.bat
\r
227 if not exist junk.bat goto needcp
\r
228 echo Checking for 'rm'...
\r
230 if exist junk.bat goto needrm
\r
233 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
237 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
240 rem ----------------------------------------------------------------------
\r
241 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
243 if (%COMPILER%)==(cl) goto compilercheckdone
\r
244 if (%COMPILER%)==(gcc) goto checkgcc
\r
246 echo Checking whether 'gcc' is available...
\r
247 echo main(){} >junk.c
\r
249 if exist junk.o goto checkgcc
\r
251 echo Checking whether 'cl' is available...
\r
252 cl -nologo -c junk.c
\r
253 if exist junk.obj goto clOK
\r
257 if exist junk.o del junk.o
\r
258 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
259 Rem 8 characters of a label. So do NOT be tempted to change
\r
260 Rem chkapi* into something fancier like checkw32api
\r
261 Rem You HAVE been warned!
\r
262 if (%nocygwin%) == (Y) goto chkapiN
\r
263 echo Checking whether gcc requires '-mno-cygwin'...
\r
264 echo #include "cygwin/version.h" >junk.c
\r
265 echo main(){} >>junk.c
\r
266 echo gcc -c junk.c >>config.log
\r
267 gcc -c junk.c >>config.log 2>&1
\r
268 if not exist junk.o goto chkapi
\r
269 echo gcc -mno-cygwin -c junk.c >>config.log
\r
270 gcc -mno-cygwin -c junk.c >>config.log 2>&1
\r
271 if exist junk.o set nocygwin=Y
\r
274 echo The failed program was: >>config.log
\r
275 type junk.c >>config.log
\r
277 rm -f junk.c junk.o
\r
278 rem ----------------------------------------------------------------------
\r
279 rem Older versions of the Windows API headers either don't have any of
\r
280 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
281 rem are like this), or have a typo in the definition of
\r
282 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
283 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
284 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
286 echo Checking whether W32 API headers are too old...
\r
287 echo #include "windows.h" >junk.c
\r
288 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
289 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
290 if (%nocygwin%) == (Y) goto chkapi1
\r
291 set cf=%usercflags%
\r
294 set cf=%usercflags% -mno-cygwin
\r
299 @echo gcc %cf% -c junk.c >>config.log
\r
300 gcc %cf% -c junk.c >>config.log 2>&1
\r
302 if exist junk.o goto gccOk
\r
303 echo The failed program was: >>config.log
\r
304 type junk.c >>config.log
\r
308 echo Configure failed.
\r
309 echo To configure Emacs for Windows, you need to have either
\r
310 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
311 echo or MSVC 2.x or later.
\r
318 rm -f junk.c junk.o
\r
319 Rem It is not clear what GCC version began supporting -mtune
\r
320 Rem and pentium4 on x86, so check this explicitly.
\r
321 echo main(){} >junk.c
\r
322 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
\r
323 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
\r
324 if not errorlevel 1 goto gccMtuneOk
\r
325 echo The failed program was: >>config.log
\r
326 type junk.c >>config.log
\r
328 rm -f junk.c junk.o
\r
329 goto compilercheckdone
\r
331 echo GCC supports -mtune=pentium4 >>config.log
\r
332 set mf=-mtune=pentium4
\r
333 rm -f junk.c junk.o
\r
334 goto compilercheckdone
\r
338 rm -f junk.c junk.obj
\r
343 rem ----------------------------------------------------------------------
\r
344 rem Check for external image libraries. Since they are loaded
\r
345 rem dynamically, the libraries themselves do not need to be present
\r
346 rem at compile time, but the header files are required.
\r
350 if (%nocygwin%) == (N) goto flagsOK
\r
351 set mingwflag=-mno-cygwin
\r
355 if (%pngsupport%) == (N) goto pngDone
\r
357 echo Checking for libpng...
\r
358 echo #include "png.h" >junk.c
\r
359 echo main (){} >>junk.c
\r
360 rem -o option is ignored with cl, but allows result to be consistent.
\r
361 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
362 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
363 if exist junk.obj goto havePng
\r
365 echo ...png.h not found, building without PNG support.
\r
366 echo The failed program was: >>config.log
\r
367 type junk.c >>config.log
\r
372 echo ...PNG header available, building with PNG support.
\r
376 rm -f junk.c junk.obj
\r
378 if (%jpegsupport%) == (N) goto jpegDone
\r
380 echo Checking for jpeg-6b...
\r
381 echo #include "jconfig.h" >junk.c
\r
382 echo main (){} >>junk.c
\r
383 rem -o option is ignored with cl, but allows result to be consistent.
\r
384 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
385 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
386 if exist junk.obj goto haveJpeg
\r
388 echo ...jconfig.h not found, building without JPEG support.
\r
389 echo The failed program was: >>config.log
\r
390 type junk.c >>config.log
\r
395 echo ...JPEG header available, building with JPEG support.
\r
399 rm -f junk.c junk.obj
\r
401 if (%gifsupport%) == (N) goto gifDone
\r
403 echo Checking for libgif...
\r
404 echo #include "gif_lib.h" >junk.c
\r
405 echo main (){} >>junk.c
\r
406 rem -o option is ignored with cl, but allows result to be consistent.
\r
407 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
408 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
409 if exist junk.obj goto haveGif
\r
411 echo ...gif_lib.h not found, building without GIF support.
\r
412 echo The failed program was: >>config.log
\r
413 type junk.c >>config.log
\r
418 echo ...GIF header available, building with GIF support.
\r
422 rm -f junk.c junk.obj
\r
424 if (%tiffsupport%) == (N) goto tiffDone
\r
426 echo Checking for tiff...
\r
427 echo #include "tiffio.h" >junk.c
\r
428 echo main (){} >>junk.c
\r
429 rem -o option is ignored with cl, but allows result to be consistent.
\r
430 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
431 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
432 if exist junk.obj goto haveTiff
\r
434 echo ...tiffio.h not found, building without TIFF support.
\r
435 echo The failed program was: >>config.log
\r
436 type junk.c >>config.log
\r
441 echo ...TIFF header available, building with TIFF support.
\r
445 rm -f junk.c junk.obj
\r
447 if (%xpmsupport%) == (N) goto xpmDone
\r
449 echo Checking for libXpm...
\r
450 echo #define FOR_MSW 1 >junk.c
\r
451 echo #include "X11/xpm.h" >>junk.c
\r
452 echo main (){} >>junk.c
\r
453 rem -o option is ignored with cl, but allows result to be consistent.
\r
454 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
455 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
456 if exist junk.obj goto haveXpm
\r
458 echo ...X11/xpm.h not found, building without XPM support.
\r
459 echo The failed program was: >>config.log
\r
460 type junk.c >>config.log
\r
465 echo ...XPM header available, building with XPM support.
\r
469 rm -f junk.c junk.obj junk.err junk.out
\r
471 rem ----------------------------------------------------------------------
\r
473 echo Generating makefiles
\r
474 if %COMPILER% == gcc set MAKECMD=gmake
\r
475 if %COMPILER% == cl set MAKECMD=nmake
\r
477 rem Pass on chosen settings to makefiles.
\r
478 rem NB. Be very careful to not have a space before redirection symbols
\r
479 rem except when there is a preceding digit, when a space is required.
\r
481 echo # Start of settings from configure.bat >config.settings
\r
482 echo COMPILER=%COMPILER%>>config.settings
\r
483 if not "(%mf%)" == "()" echo MCPU_FLAG=%mf%>>config.settings
\r
484 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
485 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
486 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
487 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
488 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
\r
489 rem and the if command cannot cope with this
\r
490 for %%v in (%usercflags%) do if not (%%v)==() set docflags=Y
\r
491 if (%docflags%)==(Y) echo USER_CFLAGS=%usercflags%>>config.settings
\r
492 for %%v in (%userldflags%) do if not (%%v)==() set doldflags=Y
\r
493 if (%doldflags%)==(Y) echo USER_LDFLAGS=%userldflags%>>config.settings
\r
494 if (%usefontbackend%) == (Y) echo USE_FONTBACKEND=1 >>config.settings
\r
495 echo # End of settings from configure.bat>>config.settings
\r
496 echo. >>config.settings
\r
498 copy config.nt config.tmp
\r
500 echo /* Start of settings from configure.bat. */ >>config.tmp
\r
501 if (%docflags%) == (Y) echo #define USER_CFLAGS " %usercflags%">>config.tmp
\r
502 if (%doldflags%) == (Y) echo #define USER_LDFLAGS " %userldflags%">>config.tmp
\r
503 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp
\r
504 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp
\r
505 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp
\r
506 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp
\r
507 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp
\r
508 echo /* End of settings from configure.bat. */ >>config.tmp
\r
510 Rem See if fc.exe returns a meaningful exit status. If it does, we
\r
511 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
\r
512 Rem since this forces recompilation of every source file.
\r
513 if exist foo.bar del foo.bar
\r
514 fc /b foo.bar foo.bar >nul 2>&1
\r
515 if not errorlevel 2 goto doCopy
\r
516 fc /b config.tmp ..\src\config.h >nul 2>&1
\r
517 if errorlevel 1 goto doCopy
\r
518 fc /b paths.h ..\src\epaths.h >nul 2>&1
\r
519 if errorlevel 0 goto dontCopy
\r
521 copy config.tmp ..\src\config.h
\r
522 copy paths.h ..\src\epaths.h
\r
525 if exist config.tmp del config.tmp
\r
526 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
527 if exist ..\admin\unidata copy /b config.settings+%MAKECMD%.defs+..\admin\unidata\makefile.w32-in ..\admin\unidata\makefile
\r
528 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
529 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
530 copy /b config.settings+%MAKECMD%.defs+..\doc\emacs\makefile.w32-in ..\doc\emacs\makefile
\r
531 copy /b config.settings+%MAKECMD%.defs+..\doc\misc\makefile.w32-in ..\doc\misc\makefile
\r
532 copy /b config.settings+%MAKECMD%.defs+..\doc\lispref\makefile.w32-in ..\doc\lispref\makefile
\r
533 copy /b config.settings+%MAKECMD%.defs+..\doc\lispintro\makefile.w32-in ..\doc\lispintro\makefile
\r
534 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
535 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
536 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
537 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
538 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
539 del config.settings
\r
541 Rem Some people use WinZip which doesn't create empty directories!
\r
542 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
\r
543 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
\r
544 if exist foo.bar del foo.bar
\r
545 fc /b foo.bar foo.bar >nul 2>&1
\r
546 if not errorlevel 2 goto doUpdateSubdirs
\r
547 fc /b subdirs.el ..\site-lisp\subdirs.el >nul 2>&1
\r
548 if not errorlevel 1 goto dontUpdateSubdirs
\r
550 if exist ..\site-lisp\subdirs.el del ..\site-lisp\subdirs.el
\r
551 copy subdirs.el ..\site-lisp\subdirs.el
\r
556 rem check that we have all the libraries we need.
\r
559 if not "(%HAVE_XPM%)" == "()" goto checkpng
\r
560 if (%xpmsupport%) == (N) goto checkpng
\r
562 echo XPM support is missing. It is required for color icons in the toolbar.
\r
563 echo Install libXpm development files or use --without-xpm
\r
566 if not "(%HAVE_PNG%)" == "()" goto checkjpeg
\r
567 if (%pngsupport%) == (N) goto checkjpeg
\r
569 echo PNG support is missing.
\r
570 echo Install libpng development files or use --without-png
\r
573 if not "(%HAVE_JPEG%)" == "()" goto checktiff
\r
574 if (%jpegsupport%) == (N) goto checktiff
\r
576 echo JPEG support is missing.
\r
577 echo Install jpeg development files or use --without-jpeg
\r
580 if not "(%HAVE_TIFF%)" == "()" goto checkgif
\r
581 if (%tiffsupport%) == (N) goto checkgif
\r
583 echo TIFF support is missing.
\r
584 echo Install libtiff development files or use --without-tiff
\r
587 if not "(%HAVE_GIF%)" == "()" goto donelibchecks
\r
588 if (%gifsupport%) == (N) goto donelibchecks
\r
590 echo GIF support is missing.
\r
591 echo Install giflib or libungif development files or use --without-gif
\r
594 if (%libsOK%) == (1) goto success
\r
596 echo Important libraries are missing. Fix these issues before running make.
\r
600 echo Emacs successfully configured.
\r
601 echo Emacs successfully configured. >>config.log
\r
602 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
606 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
607 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r
624 arch-tag: 300d20a4-1675-4e75-b615-7ce1a8c5376c
\r