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
93 rem ----------------------------------------------------------------------
\r
94 rem Handle arguments.
\r
96 if "%1" == "-h" goto usage
\r
97 if "%1" == "--help" goto usage
\r
98 if "%1" == "--prefix" goto setprefix
\r
99 if "%1" == "--with-gcc" goto withgcc
\r
100 if "%1" == "--with-msvc" goto withmsvc
\r
101 if "%1" == "--no-debug" goto nodebug
\r
102 if "%1" == "--no-opt" goto noopt
\r
103 if "%1" == "--no-cygwin" goto nocygwin
\r
104 if "%1" == "--cflags" goto usercflags
\r
105 if "%1" == "--ldflags" goto userldflags
\r
106 if "%1" == "--without-png" goto withoutpng
\r
107 if "%1" == "--without-jpeg" goto withoutjpeg
\r
108 if "%1" == "--without-gif" goto withoutgif
\r
109 if "%1" == "--without-tiff" goto withouttiff
\r
110 if "%1" == "--without-xpm" goto withoutxpm
\r
111 if "%1" == "--enable-font-backend" goto withfont
\r
112 if "%1" == "" goto checkutils
\r
114 echo Usage: configure [options]
\r
116 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
117 echo. --with-gcc use GCC to compile Emacs
\r
118 echo. --with-msvc use MSVC to compile Emacs
\r
119 echo. --no-debug exclude debug info from executables
\r
120 echo. --no-opt disable optimization
\r
121 echo. --no-cygwin use -mno-cygwin option with GCC
\r
122 echo. --cflags FLAG pass FLAG to compiler
\r
123 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
124 echo. --without-png do not use PNG library even if it is installed
\r
125 echo. --without-jpeg do not use JPEG library even if it is installed
\r
126 echo. --without-gif do not use GIF library even if it is installed
\r
127 echo. --without-tiff do not use TIFF library even if it is installed
\r
128 echo. --without-xpm do not use XPM library even if it is installed
\r
129 echo. --enable-font-backend build with font backend support
\r
131 rem ----------------------------------------------------------------------
\r
137 rem ----------------------------------------------------------------------
\r
142 rem ----------------------------------------------------------------------
\r
147 rem ----------------------------------------------------------------------
\r
152 rem ----------------------------------------------------------------------
\r
157 rem ----------------------------------------------------------------------
\r
162 rem ----------------------------------------------------------------------
\r
165 set usercflags=%usercflags%%sep1%%1
\r
166 set sep1= %nothing%
\r
169 rem ----------------------------------------------------------------------
\r
172 set userldflags=%userldflags%%sep2%%1
\r
173 set sep2= %nothing%
\r
176 rem ----------------------------------------------------------------------
\r
184 rem ----------------------------------------------------------------------
\r
192 rem ----------------------------------------------------------------------
\r
200 rem ----------------------------------------------------------------------
\r
208 rem ----------------------------------------------------------------------
\r
217 set usercflags=%usercflags%%sep1%-DUSE_FONT_BACKEND
\r
218 set sep1= %nothing%
\r
219 set usefontbackend=Y
\r
223 rem ----------------------------------------------------------------------
\r
224 rem Check that necessary utilities (cp and rm) are present.
\r
226 echo Checking for 'cp'...
\r
227 cp configure.bat junk.bat
\r
228 if not exist junk.bat goto needcp
\r
229 echo Checking for 'rm'...
\r
231 if exist junk.bat goto needrm
\r
234 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
238 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
241 rem ----------------------------------------------------------------------
\r
242 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
244 if (%COMPILER%)==(cl) goto compilercheckdone
\r
245 if (%COMPILER%)==(gcc) goto checkgcc
\r
247 echo Checking whether 'gcc' is available...
\r
248 echo main(){} >junk.c
\r
250 if exist junk.o goto checkgcc
\r
252 echo Checking whether 'cl' is available...
\r
253 cl -nologo -c junk.c
\r
254 if exist junk.obj goto clOK
\r
258 if exist junk.o del junk.o
\r
259 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
260 Rem 8 characters of a label. So do NOT be tempted to change
\r
261 Rem chkapi* into something fancier like checkw32api
\r
262 Rem You HAVE been warned!
\r
263 if (%nocygwin%) == (Y) goto chkapiN
\r
264 echo Checking whether gcc requires '-mno-cygwin'...
\r
265 echo #include "cygwin/version.h" >junk.c
\r
266 echo main(){} >>junk.c
\r
267 echo gcc -c junk.c >>config.log
\r
268 gcc -c junk.c >>config.log 2>&1
\r
269 if not exist junk.o goto chkapi
\r
270 echo gcc -mno-cygwin -c junk.c >>config.log
\r
271 gcc -mno-cygwin -c junk.c >>config.log 2>&1
\r
272 if exist junk.o set nocygwin=Y
\r
275 echo The failed program was: >>config.log
\r
276 type junk.c >>config.log
\r
278 rm -f junk.c junk.o
\r
279 rem ----------------------------------------------------------------------
\r
280 rem Older versions of the Windows API headers either don't have any of
\r
281 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
282 rem are like this), or have a typo in the definition of
\r
283 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
284 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
285 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
287 echo Checking whether W32 API headers are too old...
\r
288 echo #include "windows.h" >junk.c
\r
289 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
290 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
291 if (%nocygwin%) == (Y) goto chkapi1
\r
292 set cf=%usercflags%
\r
295 set cf=%usercflags% -mno-cygwin
\r
300 @echo gcc %cf% -c junk.c >>config.log
\r
301 gcc %cf% -c junk.c >>config.log 2>&1
\r
303 if exist junk.o goto gccOk
\r
304 echo The failed program was: >>config.log
\r
305 type junk.c >>config.log
\r
309 echo Configure failed.
\r
310 echo To configure Emacs for Windows, you need to have either
\r
311 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
312 echo or MSVC 2.x or later.
\r
319 rm -f junk.c junk.o
\r
320 Rem It is not clear what GCC version began supporting -mtune
\r
321 Rem and pentium4 on x86, so check this explicitly.
\r
322 echo main(){} >junk.c
\r
323 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
\r
324 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
\r
325 if not errorlevel 1 goto gccMtuneOk
\r
326 echo The failed program was: >>config.log
\r
327 type junk.c >>config.log
\r
329 rm -f junk.c junk.o
\r
330 goto compilercheckdone
\r
332 echo GCC supports -mtune=pentium4 >>config.log
\r
333 set mf=-mtune=pentium4
\r
334 rm -f junk.c junk.o
\r
335 goto compilercheckdone
\r
339 rm -f junk.c junk.obj
\r
344 rem ----------------------------------------------------------------------
\r
345 rem Check for external image libraries. Since they are loaded
\r
346 rem dynamically, the libraries themselves do not need to be present
\r
347 rem at compile time, but the header files are required.
\r
351 if (%nocygwin%) == (N) goto flagsOK
\r
352 set mingwflag=-mno-cygwin
\r
356 if (%pngsupport%) == (N) goto pngDone
\r
358 echo Checking for libpng...
\r
359 echo #include "png.h" >junk.c
\r
360 echo main (){} >>junk.c
\r
361 rem -o option is ignored with cl, but allows result to be consistent.
\r
362 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
363 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
364 if exist junk.obj goto havePng
\r
366 echo ...png.h not found, building without PNG support.
\r
367 echo The failed program was: >>config.log
\r
368 type junk.c >>config.log
\r
373 echo ...PNG header available, building with PNG support.
\r
377 rm -f junk.c junk.obj
\r
379 if (%jpegsupport%) == (N) goto jpegDone
\r
381 echo Checking for jpeg-6b...
\r
382 echo #include "jconfig.h" >junk.c
\r
383 echo main (){} >>junk.c
\r
384 rem -o option is ignored with cl, but allows result to be consistent.
\r
385 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
386 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
387 if exist junk.obj goto haveJpeg
\r
389 echo ...jconfig.h not found, building without JPEG support.
\r
390 echo The failed program was: >>config.log
\r
391 type junk.c >>config.log
\r
396 echo ...JPEG header available, building with JPEG support.
\r
400 rm -f junk.c junk.obj
\r
402 if (%gifsupport%) == (N) goto gifDone
\r
404 echo Checking for libgif...
\r
405 echo #include "gif_lib.h" >junk.c
\r
406 echo main (){} >>junk.c
\r
407 rem -o option is ignored with cl, but allows result to be consistent.
\r
408 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
409 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
410 if exist junk.obj goto haveGif
\r
412 echo ...gif_lib.h not found, building without GIF support.
\r
413 echo The failed program was: >>config.log
\r
414 type junk.c >>config.log
\r
419 echo ...GIF header available, building with GIF support.
\r
423 rm -f junk.c junk.obj
\r
425 if (%tiffsupport%) == (N) goto tiffDone
\r
427 echo Checking for tiff...
\r
428 echo #include "tiffio.h" >junk.c
\r
429 echo main (){} >>junk.c
\r
430 rem -o option is ignored with cl, but allows result to be consistent.
\r
431 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
432 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
433 if exist junk.obj goto haveTiff
\r
435 echo ...tiffio.h not found, building without TIFF support.
\r
436 echo The failed program was: >>config.log
\r
437 type junk.c >>config.log
\r
442 echo ...TIFF header available, building with TIFF support.
\r
446 rm -f junk.c junk.obj
\r
448 if (%xpmsupport%) == (N) goto xpmDone
\r
450 echo Checking for libXpm...
\r
451 echo #define FOR_MSW 1 >junk.c
\r
452 echo #include "X11/xpm.h" >>junk.c
\r
453 echo main (){} >>junk.c
\r
454 rem -o option is ignored with cl, but allows result to be consistent.
\r
455 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
456 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
457 if exist junk.obj goto haveXpm
\r
459 echo ...X11/xpm.h not found, building without XPM support.
\r
460 echo The failed program was: >>config.log
\r
461 type junk.c >>config.log
\r
466 echo ...XPM header available, building with XPM support.
\r
470 rm -f junk.c junk.obj junk.err junk.out
\r
472 rem ----------------------------------------------------------------------
\r
474 echo Generating makefiles
\r
475 if %COMPILER% == gcc set MAKECMD=gmake
\r
476 if %COMPILER% == cl set MAKECMD=nmake
\r
478 rem Pass on chosen settings to makefiles.
\r
479 rem NB. Be very careful to not have a space before redirection symbols
\r
480 rem except when there is a preceding digit, when a space is required.
\r
482 echo # Start of settings from configure.bat >config.settings
\r
483 echo COMPILER=%COMPILER%>>config.settings
\r
484 if not "(%mf%)" == "()" echo MCPU_FLAG=%mf%>>config.settings
\r
485 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
486 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
487 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
488 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
489 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
\r
490 rem and the if command cannot cope with this
\r
491 for %%v in (%usercflags%) do if not (%%v)==() set docflags=Y
\r
492 if (%docflags%)==(Y) echo USER_CFLAGS=%usercflags%>>config.settings
\r
493 for %%v in (%userldflags%) do if not (%%v)==() set doldflags=Y
\r
494 if (%doldflags%)==(Y) echo USER_LDFLAGS=%userldflags%>>config.settings
\r
495 if (%usefontbackend%) == (Y) echo USE_FONTBACKEND=1 >>config.settings
\r
496 echo # End of settings from configure.bat>>config.settings
\r
497 echo. >>config.settings
\r
499 copy config.nt config.tmp
\r
501 echo /* Start of settings from configure.bat. */ >>config.tmp
\r
502 if (%docflags%) == (Y) echo #define USER_CFLAGS " %usercflags%">>config.tmp
\r
503 if (%doldflags%) == (Y) echo #define USER_LDFLAGS " %userldflags%">>config.tmp
\r
504 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp
\r
505 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp
\r
506 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp
\r
507 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp
\r
508 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp
\r
509 echo /* End of settings from configure.bat. */ >>config.tmp
\r
511 Rem See if fc.exe returns a meaningful exit status. If it does, we
\r
512 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
\r
513 Rem since this forces recompilation of every source file.
\r
514 if exist foo.bar del foo.bar
\r
515 fc /b foo.bar foo.bar >nul 2>&1
\r
516 if not errorlevel 2 goto doCopy
\r
517 fc /b config.tmp ..\src\config.h >nul 2>&1
\r
518 if errorlevel 1 goto doCopy
\r
519 fc /b paths.h ..\src\epaths.h >nul 2>&1
\r
520 if errorlevel 0 goto dontCopy
\r
522 copy config.tmp ..\src\config.h
\r
523 copy paths.h ..\src\epaths.h
\r
526 if exist config.tmp del config.tmp
\r
527 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
528 if exist ..\admin\unidata copy /b config.settings+%MAKECMD%.defs+..\admin\unidata\makefile.w32-in ..\admin\unidata\makefile
\r
529 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
530 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
531 copy /b config.settings+%MAKECMD%.defs+..\doc\emacs\makefile.w32-in ..\doc\emacs\makefile
\r
532 copy /b config.settings+%MAKECMD%.defs+..\doc\misc\makefile.w32-in ..\doc\misc\makefile
\r
533 copy /b config.settings+%MAKECMD%.defs+..\doc\lispref\makefile.w32-in ..\doc\lispref\makefile
\r
534 copy /b config.settings+%MAKECMD%.defs+..\doc\lispintro\makefile.w32-in ..\doc\lispintro\makefile
\r
535 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
536 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
537 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
538 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
539 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
540 del config.settings
\r
542 Rem Some people use WinZip which doesn't create empty directories!
\r
543 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
\r
544 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
\r
545 if exist foo.bar del foo.bar
\r
546 fc /b foo.bar foo.bar >nul 2>&1
\r
547 if not errorlevel 2 goto doUpdateSubdirs
\r
548 fc /b subdirs.el ..\site-lisp\subdirs.el >nul 2>&1
\r
549 if not errorlevel 1 goto dontUpdateSubdirs
\r
551 if exist ..\site-lisp\subdirs.el del ..\site-lisp\subdirs.el
\r
552 copy subdirs.el ..\site-lisp\subdirs.el
\r
557 rem check that we have all the libraries we need.
\r
560 if not "(%HAVE_XPM%)" == "()" goto checkpng
\r
561 if (%xpmsupport%) == (N) goto checkpng
\r
563 echo XPM support is missing. It is required for color icons in the toolbar.
\r
564 echo Install libXpm development files or use --without-xpm
\r
567 if not "(%HAVE_PNG%)" == "()" goto checkjpeg
\r
568 if (%pngsupport%) == (N) goto checkjpeg
\r
570 echo PNG support is missing.
\r
571 echo Install libpng development files or use --without-png
\r
574 if not "(%HAVE_JPEG%)" == "()" goto checktiff
\r
575 if (%jpegsupport%) == (N) goto checktiff
\r
577 echo JPEG support is missing.
\r
578 echo Install jpeg development files or use --without-jpeg
\r
581 if not "(%HAVE_TIFF%)" == "()" goto checkgif
\r
582 if (%tiffsupport%) == (N) goto checkgif
\r
584 echo TIFF support is missing.
\r
585 echo Install libtiff development files or use --without-tiff
\r
588 if not "(%HAVE_GIF%)" == "()" goto donelibchecks
\r
589 if (%gifsupport%) == (N) goto donelibchecks
\r
591 echo GIF support is missing.
\r
592 echo Install giflib or libungif development files or use --without-gif
\r
595 if (%libsOK%) == (1) goto success
\r
597 echo Important libraries are missing. Fix these issues before running make.
\r
601 echo Emacs successfully configured.
\r
602 echo Emacs successfully configured. >>config.log
\r
603 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
607 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
608 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r
625 arch-tag: 300d20a4-1675-4e75-b615-7ce1a8c5376c
\r