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 of the License, or
\r
12 rem (at your option) 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. If not, see http://www.gnu.org/licenses/.
\r
22 rem ----------------------------------------------------------------------
\r
23 rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
\r
25 rem + MS Windows 95/98/Me or NT/2000/XP
\r
26 rem + either MSVC 2.x or later, or gcc-2.95 or later (with GNU make 3.75
\r
27 rem or later) and the Mingw32 and W32 API headers and libraries.
\r
28 rem + Visual Studio 2005 is not supported at this time.
\r
30 rem For reference, here is a list of which builds of GNU make are known to
\r
31 rem work or not, and whether they work in the presence and/or absence of
\r
35 rem cygwin b20.1 make (3.75): fails[1,5] fails[2,5]
\r
36 rem MSVC compiled gmake 3.77: okay okay
\r
37 rem MSVC compiled gmake 3.78.1: okay okay
\r
38 rem MSVC compiled gmake 3.79.1: okay okay
\r
39 rem mingw32/gcc-2.92.2 make (3.77): okay okay[4]
\r
40 rem cygwin compiled gmake 3.77: fails[1,5] fails[2,5]
\r
41 rem cygwin compiled gmake 3.78.1: fails[5] fails[2,5]
\r
42 rem cygwin compiled gmake 3.79.1: fails[3,5] fails[2?,5]
\r
43 rem cygwin compiled make 3.80: okay[6] fails?[7]
\r
44 rem cygwin compiled make 3.81: fails fails?[7]
\r
45 rem mingw32 compiled make 3.79.1: okay okay
\r
46 rem mingw32 compiled make 3.80: okay okay?[7]
\r
47 rem mingw32 compiled make 3.81: okay okay[8]
\r
49 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
\r
50 rem emacs source with text!=binary.
\r
51 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
\r
52 rem [3] requires LC_MESSAGES support to build; cannot build with early
\r
53 rem versions of cygwin.
\r
54 rem [4] may fail on Windows 9X and Windows ME; if so, install Bash.
\r
55 rem [5] fails when building leim due to the use of cygwin style paths.
\r
56 rem May work if building emacs without leim.
\r
57 rem [6] need to uncomment 3 lines in nt/gmake.defs that invoke `cygpath';
\r
58 rem look for "cygpath" near line 85 of gmake.defs.
\r
59 rem [7] not recommended; please report if you try this combination.
\r
60 rem [8] tested only on Windows XP.
\r
63 if exist config.log del config.log
\r
65 rem ----------------------------------------------------------------------
\r
66 rem See if the environment is large enough. We need 43 (?) bytes.
\r
67 set $foo$=123456789_123456789_123456789_123456789_123
\r
68 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
\r
71 rem ----------------------------------------------------------------------
\r
72 rem Make sure we are running in the nt subdir
\r
73 if exist configure.bat goto start
\r
74 echo You must run configure from the nt subdirectory.
\r
78 rem ----------------------------------------------------------------------
\r
79 rem Default settings.
\r
92 rem ----------------------------------------------------------------------
\r
93 rem Handle arguments.
\r
95 if "%1" == "-h" goto usage
\r
96 if "%1" == "--help" goto usage
\r
97 if "%1" == "--prefix" goto setprefix
\r
98 if "%1" == "--with-gcc" goto withgcc
\r
99 if "%1" == "--with-msvc" goto withmsvc
\r
100 if "%1" == "--no-debug" goto nodebug
\r
101 if "%1" == "--no-opt" goto noopt
\r
102 if "%1" == "--no-cygwin" goto nocygwin
\r
103 if "%1" == "--cflags" goto usercflags
\r
104 if "%1" == "--ldflags" goto userldflags
\r
105 if "%1" == "--without-png" goto withoutpng
\r
106 if "%1" == "--without-jpeg" goto withoutjpeg
\r
107 if "%1" == "--without-gif" goto withoutgif
\r
108 if "%1" == "--without-tiff" goto withouttiff
\r
109 if "%1" == "--without-xpm" goto withoutxpm
\r
110 if "%1" == "" goto checkutils
\r
112 echo Usage: configure [options]
\r
114 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
115 echo. --with-gcc use GCC to compile Emacs
\r
116 echo. --with-msvc use MSVC to compile Emacs
\r
117 echo. --no-debug exclude debug info from executables
\r
118 echo. --no-opt disable optimization
\r
119 echo. --no-cygwin use -mno-cygwin option with GCC
\r
120 echo. --cflags FLAG pass FLAG to compiler
\r
121 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
122 echo. --without-png do not use PNG library even if it is installed
\r
123 echo. --without-jpeg do not use JPEG library even if it is installed
\r
124 echo. --without-gif do not use GIF library even if it is installed
\r
125 echo. --without-tiff do not use TIFF library even if it is installed
\r
126 echo. --without-xpm do not use XPM library even if it is installed
\r
128 rem ----------------------------------------------------------------------
\r
134 rem ----------------------------------------------------------------------
\r
139 rem ----------------------------------------------------------------------
\r
144 rem ----------------------------------------------------------------------
\r
149 rem ----------------------------------------------------------------------
\r
154 rem ----------------------------------------------------------------------
\r
159 rem ----------------------------------------------------------------------
\r
162 set usercflags=%usercflags%%sep1%%1
\r
163 set sep1= %nothing%
\r
166 rem ----------------------------------------------------------------------
\r
169 set userldflags=%userldflags%%sep2%%1
\r
170 set sep2= %nothing%
\r
173 rem ----------------------------------------------------------------------
\r
181 rem ----------------------------------------------------------------------
\r
189 rem ----------------------------------------------------------------------
\r
197 rem ----------------------------------------------------------------------
\r
205 rem ----------------------------------------------------------------------
\r
213 rem ----------------------------------------------------------------------
\r
214 rem Check that necessary utilities (cp and rm) are present.
\r
216 echo Checking for 'cp'...
\r
217 cp configure.bat junk.bat
\r
218 if not exist junk.bat goto needcp
\r
219 echo Checking for 'rm'...
\r
221 if exist junk.bat goto needrm
\r
224 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
228 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
231 rem ----------------------------------------------------------------------
\r
232 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
234 if (%COMPILER%)==(cl) goto compilercheckdone
\r
235 if (%COMPILER%)==(gcc) goto checkgcc
\r
237 echo Checking whether 'gcc' is available...
\r
238 echo main(){} >junk.c
\r
240 if exist junk.o goto checkgcc
\r
242 echo Checking whether 'cl' is available...
\r
243 cl -nologo -c junk.c
\r
244 if exist junk.obj goto clOK
\r
248 if exist junk.o del junk.o
\r
249 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
250 Rem 8 characters of a label. So do NOT be tempted to change
\r
251 Rem chkapi* into something fancier like checkw32api
\r
252 Rem You HAVE been warned!
\r
253 if (%nocygwin%) == (Y) goto chkapiN
\r
254 echo Checking whether gcc requires '-mno-cygwin'...
\r
255 echo #include "cygwin/version.h" >junk.c
\r
256 echo main(){} >>junk.c
\r
257 echo gcc -c junk.c >>config.log
\r
258 gcc -c junk.c >>config.log 2>&1
\r
259 if not exist junk.o goto chkapi
\r
260 echo gcc -mno-cygwin -c junk.c >>config.log
\r
261 gcc -mno-cygwin -c junk.c >>config.log 2>&1
\r
262 if exist junk.o set nocygwin=Y
\r
265 echo The failed program was: >>config.log
\r
266 type junk.c >>config.log
\r
268 rm -f junk.c junk.o
\r
269 rem ----------------------------------------------------------------------
\r
270 rem Older versions of the Windows API headers either don't have any of
\r
271 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
272 rem are like this), or have a typo in the definition of
\r
273 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
274 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
275 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
276 rem Beginning with Emacs 23, we need usp10.h.
\r
278 echo Checking whether W32 API headers are too old...
\r
279 echo #include "windows.h" >junk.c
\r
280 echo #include "usp10.h" >>junk.c
\r
281 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
282 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
283 if (%nocygwin%) == (Y) goto chkapi1
\r
284 set cf=%usercflags%
\r
287 set cf=%usercflags% -mno-cygwin
\r
292 @echo gcc %cf% -c junk.c >>config.log
\r
293 gcc %cf% -c junk.c >>config.log 2>&1
\r
295 if exist junk.o goto gccOk
\r
296 echo The failed program was: >>config.log
\r
297 type junk.c >>config.log
\r
301 echo Configure failed.
\r
302 echo To configure Emacs for Windows, you need to have either
\r
303 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
304 echo or MSVC 2.x or later.
\r
311 rm -f junk.c junk.o
\r
312 Rem It is not clear what GCC version began supporting -mtune
\r
313 Rem and pentium4 on x86, so check this explicitly.
\r
314 echo main(){} >junk.c
\r
315 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
\r
316 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
\r
317 if not errorlevel 1 goto gccMtuneOk
\r
318 echo The failed program was: >>config.log
\r
319 type junk.c >>config.log
\r
321 rm -f junk.c junk.o
\r
322 goto compilercheckdone
\r
324 echo GCC supports -mtune=pentium4 >>config.log
\r
325 set mf=-mtune=pentium4
\r
326 rm -f junk.c junk.o
\r
327 goto compilercheckdone
\r
331 rm -f junk.c junk.obj
\r
336 rem ----------------------------------------------------------------------
\r
337 rem Check for external image libraries. Since they are loaded
\r
338 rem dynamically, the libraries themselves do not need to be present
\r
339 rem at compile time, but the header files are required.
\r
343 if (%nocygwin%) == (N) goto flagsOK
\r
344 set mingwflag=-mno-cygwin
\r
348 if (%pngsupport%) == (N) goto pngDone
\r
350 echo Checking for libpng...
\r
351 echo #include "png.h" >junk.c
\r
352 echo main (){} >>junk.c
\r
353 rem -o option is ignored with cl, but allows result to be consistent.
\r
354 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
355 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
356 if exist junk.obj goto havePng
\r
358 echo ...png.h not found, building without PNG support.
\r
359 echo The failed program was: >>config.log
\r
360 type junk.c >>config.log
\r
365 echo ...PNG header available, building with PNG support.
\r
369 rm -f junk.c junk.obj
\r
371 if (%jpegsupport%) == (N) goto jpegDone
\r
373 echo Checking for jpeg-6b...
\r
374 echo #include "jconfig.h" >junk.c
\r
375 echo main (){} >>junk.c
\r
376 rem -o option is ignored with cl, but allows result to be consistent.
\r
377 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
378 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
379 if exist junk.obj goto haveJpeg
\r
381 echo ...jconfig.h not found, building without JPEG support.
\r
382 echo The failed program was: >>config.log
\r
383 type junk.c >>config.log
\r
388 echo ...JPEG header available, building with JPEG support.
\r
392 rm -f junk.c junk.obj
\r
394 if (%gifsupport%) == (N) goto gifDone
\r
396 echo Checking for libgif...
\r
397 echo #include "gif_lib.h" >junk.c
\r
398 echo main (){} >>junk.c
\r
399 rem -o option is ignored with cl, but allows result to be consistent.
\r
400 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
401 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
402 if exist junk.obj goto haveGif
\r
404 echo ...gif_lib.h not found, building without GIF support.
\r
405 echo The failed program was: >>config.log
\r
406 type junk.c >>config.log
\r
411 echo ...GIF header available, building with GIF support.
\r
415 rm -f junk.c junk.obj
\r
417 if (%tiffsupport%) == (N) goto tiffDone
\r
419 echo Checking for tiff...
\r
420 echo #include "tiffio.h" >junk.c
\r
421 echo main (){} >>junk.c
\r
422 rem -o option is ignored with cl, but allows result to be consistent.
\r
423 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
424 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
425 if exist junk.obj goto haveTiff
\r
427 echo ...tiffio.h not found, building without TIFF support.
\r
428 echo The failed program was: >>config.log
\r
429 type junk.c >>config.log
\r
434 echo ...TIFF header available, building with TIFF support.
\r
438 rm -f junk.c junk.obj
\r
440 if (%xpmsupport%) == (N) goto xpmDone
\r
442 echo Checking for libXpm...
\r
443 echo #define FOR_MSW 1 >junk.c
\r
444 echo #include "X11/xpm.h" >>junk.c
\r
445 echo main (){} >>junk.c
\r
446 rem -o option is ignored with cl, but allows result to be consistent.
\r
447 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
448 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
449 if exist junk.obj goto haveXpm
\r
451 echo ...X11/xpm.h not found, building without XPM support.
\r
452 echo The failed program was: >>config.log
\r
453 type junk.c >>config.log
\r
458 echo ...XPM header available, building with XPM support.
\r
462 rm -f junk.c junk.obj junk.err junk.out
\r
464 rem ----------------------------------------------------------------------
\r
466 echo Generating makefiles
\r
467 if %COMPILER% == gcc set MAKECMD=gmake
\r
468 if %COMPILER% == cl set MAKECMD=nmake
\r
470 rem Pass on chosen settings to makefiles.
\r
471 rem NB. Be very careful to not have a space before redirection symbols
\r
472 rem except when there is a preceding digit, when a space is required.
\r
474 echo # Start of settings from configure.bat >config.settings
\r
475 echo COMPILER=%COMPILER%>>config.settings
\r
476 if not "(%mf%)" == "()" echo MCPU_FLAG=%mf%>>config.settings
\r
477 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
478 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
479 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
480 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
481 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
\r
482 rem and the if command cannot cope with this
\r
483 for %%v in (%usercflags%) do if not (%%v)==() set docflags=Y
\r
484 if (%docflags%)==(Y) echo USER_CFLAGS=%usercflags%>>config.settings
\r
485 for %%v in (%userldflags%) do if not (%%v)==() set doldflags=Y
\r
486 if (%doldflags%)==(Y) echo USER_LDFLAGS=%userldflags%>>config.settings
\r
487 echo # End of settings from configure.bat>>config.settings
\r
488 echo. >>config.settings
\r
490 copy config.nt config.tmp
\r
492 echo /* Start of settings from configure.bat. */ >>config.tmp
\r
493 if (%docflags%) == (Y) echo #define USER_CFLAGS " %usercflags%">>config.tmp
\r
494 if (%doldflags%) == (Y) echo #define USER_LDFLAGS " %userldflags%">>config.tmp
\r
495 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp
\r
496 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp
\r
497 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp
\r
498 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp
\r
499 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp
\r
500 echo /* End of settings from configure.bat. */ >>config.tmp
\r
502 Rem See if fc.exe returns a meaningful exit status. If it does, we
\r
503 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
\r
504 Rem since this forces recompilation of every source file.
\r
505 if exist foo.bar del foo.bar
\r
506 fc /b foo.bar foo.bar >nul 2>&1
\r
507 if not errorlevel 2 goto doCopy
\r
508 fc /b config.tmp ..\src\config.h >nul 2>&1
\r
509 if errorlevel 1 goto doCopy
\r
510 fc /b paths.h ..\src\epaths.h >nul 2>&1
\r
511 if errorlevel 0 goto dontCopy
\r
513 copy config.tmp ..\src\config.h
\r
514 copy paths.h ..\src\epaths.h
\r
517 if exist config.tmp del config.tmp
\r
518 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
519 if exist ..\admin\unidata copy /b config.settings+%MAKECMD%.defs+..\admin\unidata\makefile.w32-in ..\admin\unidata\makefile
\r
520 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
521 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
522 copy /b config.settings+%MAKECMD%.defs+..\doc\emacs\makefile.w32-in ..\doc\emacs\makefile
\r
523 copy /b config.settings+%MAKECMD%.defs+..\doc\misc\makefile.w32-in ..\doc\misc\makefile
\r
524 copy /b config.settings+%MAKECMD%.defs+..\doc\lispref\makefile.w32-in ..\doc\lispref\makefile
\r
525 copy /b config.settings+%MAKECMD%.defs+..\doc\lispintro\makefile.w32-in ..\doc\lispintro\makefile
\r
526 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
527 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
528 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
529 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
530 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
531 del config.settings
\r
533 Rem Some people use WinZip which doesn't create empty directories!
\r
534 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
\r
535 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
\r
536 if exist foo.bar del foo.bar
\r
537 fc /b foo.bar foo.bar >nul 2>&1
\r
538 if not errorlevel 2 goto doUpdateSubdirs
\r
539 fc /b subdirs.el ..\site-lisp\subdirs.el >nul 2>&1
\r
540 if not errorlevel 1 goto dontUpdateSubdirs
\r
542 if exist ..\site-lisp\subdirs.el del ..\site-lisp\subdirs.el
\r
543 copy subdirs.el ..\site-lisp\subdirs.el
\r
548 rem check that we have all the libraries we need.
\r
551 if not "(%HAVE_XPM%)" == "()" goto checkpng
\r
552 if (%xpmsupport%) == (N) goto checkpng
\r
554 echo XPM support is missing. It is required for color icons in the toolbar.
\r
555 echo Install libXpm development files or use --without-xpm
\r
558 if not "(%HAVE_PNG%)" == "()" goto checkjpeg
\r
559 if (%pngsupport%) == (N) goto checkjpeg
\r
561 echo PNG support is missing.
\r
562 echo Install libpng development files or use --without-png
\r
565 if not "(%HAVE_JPEG%)" == "()" goto checktiff
\r
566 if (%jpegsupport%) == (N) goto checktiff
\r
568 echo JPEG support is missing.
\r
569 echo Install jpeg development files or use --without-jpeg
\r
572 if not "(%HAVE_TIFF%)" == "()" goto checkgif
\r
573 if (%tiffsupport%) == (N) goto checkgif
\r
575 echo TIFF support is missing.
\r
576 echo Install libtiff development files or use --without-tiff
\r
579 if not "(%HAVE_GIF%)" == "()" goto donelibchecks
\r
580 if (%gifsupport%) == (N) goto donelibchecks
\r
582 echo GIF support is missing.
\r
583 echo Install giflib or libungif development files or use --without-gif
\r
586 if (%libsOK%) == (1) goto success
\r
588 echo Important libraries are missing. Fix these issues before running make.
\r
592 echo Emacs successfully configured.
\r
593 echo Emacs successfully configured. >>config.log
\r
594 if (%MAKECMD%) == (gmake) set MAKECMD=make
\r
595 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
599 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
600 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r
617 arch-tag: 300d20a4-1675-4e75-b615-7ce1a8c5376c
\r