2 rem ----------------------------------------------------------------------
3 rem Configuration script for MS Windows 95/98/Me and NT/2000/XP
4 rem Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
5 rem 2006, 2007, 2008 Free Software Foundation, Inc.
7 rem This file is part of GNU Emacs.
9 rem GNU Emacs is free software; you can redistribute it and/or modify
10 rem it under the terms of the GNU General Public License as published by
11 rem the Free Software Foundation; either version 3, or (at your option)
12 rem any later version.
14 rem GNU Emacs is distributed in the hope that it will be useful,
15 rem but WITHOUT ANY WARRANTY; without even the implied warranty of
16 rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 rem GNU General Public License for more details.
19 rem You should have received a copy of the GNU General Public License
20 rem along with GNU Emacs; see the file COPYING. If not, write to the
21 rem Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 rem Boston, MA 02110-1301, USA.
23 rem ----------------------------------------------------------------------
24 rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
26 rem + MS Windows 95/98/Me or NT/2000/XP
27 rem + either MSVC 2.x or later, or gcc-2.95 or later (with gmake 3.75
28 rem or later) and the Mingw32 and W32 API headers and libraries.
29 rem + Visual Studio 2005 is not supported at this time.
31 rem For reference, here is a list of which builds of gmake are known to
32 rem work or not, and whether they work in the presence and/or absence of
36 rem cygwin b20.1 make (3.75): fails[1,5] fails[2,5]
37 rem MSVC compiled gmake 3.77: okay okay
38 rem MSVC compiled gmake 3.78.1: okay okay
39 rem MSVC compiled gmake 3.79.1: okay okay
40 rem mingw32/gcc-2.92.2 make (3.77): okay okay[4]
41 rem cygwin compiled gmake 3.77: fails[1,5] fails[2,5]
42 rem cygwin compiled gmake 3.78.1: fails[5] fails[2,5]
43 rem cygwin compiled gmake 3.79.1: fails[3,5] fails[2?,5]
44 rem cygwin compiled make 3.80: okay[6] fails?[7]
45 rem cygwin compiled make 3.81: fails fails?[7]
46 rem mingw32 compiled make 3.79.1: okay okay
47 rem mingw32 compiled make 3.80: okay okay?[7]
48 rem mingw32 compiled make 3.81: okay okay[8]
50 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
51 rem emacs source with text!=binary.
52 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
53 rem [3] requires LC_MESSAGES support to build; cannot build with early
54 rem versions of cygwin.
55 rem [4] may fail on Windows 9X and Windows ME; if so, install Bash.
56 rem [5] fails when building leim due to the use of cygwin style paths.
57 rem May work if building emacs without leim.
58 rem [6] need to uncomment 3 lines in nt/gmake.defs that invoke `cygpath';
59 rem look for "cygpath" near line 85 of gmake.defs.
60 rem [7] not recommended; please report if you try this combination.
61 rem [8] tested only on Windows XP.
64 if exist config.log
del config.log
66 rem ----------------------------------------------------------------------
67 rem See if the environment is large enough. We need 43 (?) bytes.
68 set $foo$
=123456789_123456789_123456789_123456789_123
69 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
72 rem ----------------------------------------------------------------------
73 rem Make sure we are running in the nt subdir
74 if exist configure.bat
goto start
75 echo You must
run configure from the nt subdirectory.
79 rem ----------------------------------------------------------------------
94 rem ----------------------------------------------------------------------
97 if "%1" == "-h" goto usage
98 if "%1" == "--help" goto usage
99 if "%1" == "--prefix" goto setprefix
100 if "%1" == "--with-gcc" goto withgcc
101 if "%1" == "--with-msvc" goto withmsvc
102 if "%1" == "--no-debug" goto nodebug
103 if "%1" == "--no-opt" goto noopt
104 if "%1" == "--no-cygwin" goto nocygwin
105 if "%1" == "--cflags" goto usercflags
106 if "%1" == "--ldflags" goto userldflags
107 if "%1" == "--without-png" goto withoutpng
108 if "%1" == "--without-jpeg" goto withoutjpeg
109 if "%1" == "--without-gif" goto withoutgif
110 if "%1" == "--without-tiff" goto withouttiff
111 if "%1" == "--without-xpm" goto withoutxpm
112 if "%1" == "--disable-font-backend" goto withoutfont
113 if "%1" == "" goto checkutils
115 echo Usage
: configure
[options
]
117 echo.
--prefix PREFIX install Emacs in directory PREFIX
118 echo.
--with
-gcc
use GCC to compile Emacs
119 echo.
--with
-msvc
use MSVC to compile Emacs
120 echo.
--no
-debug exclude
debug info from executables
121 echo.
--no
-opt disable optimization
122 echo.
--no
-cygwin
use -mno
-cygwin option with GCC
123 echo.
--cflags FLAG pass FLAG to compiler
124 echo.
--ldflags FLAG pass FLAG to compiler
when linking
125 echo.
--without
-png
do not use PNG library even
if it is installed
126 echo.
--without
-jpeg
do not use JPEG library even
if it is installed
127 echo.
--without
-gif
do not use GIF library even
if it is installed
128 echo.
--without
-tiff
do not use TIFF library even
if it is installed
129 echo.
--without
-xpm
do not use XPM library even
if it is installed
130 echo.
--disable
-font
-backend build without font backend support
132 rem ----------------------------------------------------------------------
138 rem ----------------------------------------------------------------------
143 rem ----------------------------------------------------------------------
148 rem ----------------------------------------------------------------------
153 rem ----------------------------------------------------------------------
158 rem ----------------------------------------------------------------------
163 rem ----------------------------------------------------------------------
166 set usercflags
=%usercflags%%sep1%%1
170 rem ----------------------------------------------------------------------
173 set userldflags
=%userldflags%%sep2%%1
177 rem ----------------------------------------------------------------------
185 rem ----------------------------------------------------------------------
193 rem ----------------------------------------------------------------------
201 rem ----------------------------------------------------------------------
209 rem ----------------------------------------------------------------------
222 rem ----------------------------------------------------------------------
223 rem Check that necessary utilities (cp and rm) are present.
225 echo Checking
for 'cp'...
226 cp configure.bat junk.bat
227 if not exist junk.bat
goto needcp
228 echo Checking
for 'rm'...
230 if exist junk.bat
goto needrm
233 echo You need
'cp' (the Unix file
copy program
) to build Emacs.
237 echo You need
'rm' (the Unix file delete program
) to build Emacs.
240 rem ----------------------------------------------------------------------
241 rem Auto-detect compiler if not specified, and validate GCC if chosen.
243 if (%COMPILER%)==(cl
) goto compilercheckdone
244 if (%COMPILER%)==(gcc
) goto checkgcc
246 echo Checking whether
'gcc' is available...
247 echo main
(){} >junk.c
249 if exist junk.o
goto checkgcc
251 echo Checking whether
'cl' is available...
253 if exist junk.obj
goto clOK
257 if exist junk.o
del junk.o
258 Rem WARNING -- COMMAND.COM on some systems only looks at the first
259 Rem 8 characters of a label. So do NOT be tempted to change
260 Rem chkapi* into something fancier like checkw32api
261 Rem You HAVE been warned!
262 if (%nocygwin%) == (Y
) goto chkapiN
263 echo Checking whether gcc requires
'-mno-cygwin'...
264 echo #include
"cygwin/version.h" >junk.c
265 echo main
(){} >>junk.c
266 echo gcc
-c junk.c
>>config.log
267 gcc
-c junk.c
>>config.log
2>&1
268 if not exist junk.o
goto chkapi
269 echo gcc
-mno
-cygwin
-c junk.c
>>config.log
270 gcc
-mno
-cygwin
-c junk.c
>>config.log
2>&1
271 if exist junk.o
set nocygwin
=Y
274 echo The failed program was
: >>config.log
275 type junk.c
>>config.log
278 rem ----------------------------------------------------------------------
279 rem Older versions of the Windows API headers either don't have any of
280 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
281 rem are like this), or have a typo in the definition of
282 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
283 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
284 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
286 echo Checking whether W32 API headers are too old...
287 echo #include
"windows.h" >junk.c
288 echo test
(PIMAGE_NT_HEADERS pHeader
) >>junk.c
289 echo {PIMAGE_SECTION_HEADER pSection
= IMAGE_FIRST_SECTION
(pHeader
);} >>junk.c
290 if (%nocygwin%) == (Y
) goto chkapi1
294 set cf
=%usercflags% -mno
-cygwin
299 @
echo gcc
%cf% -c junk.c
>>config.log
300 gcc
%cf% -c junk.c
>>config.log
2>&1
302 if exist junk.o
goto gccOk
303 echo The failed program was
: >>config.log
304 type junk.c
>>config.log
308 echo Configure failed.
309 echo To configure Emacs
for Windows
, you need to have either
310 echo gcc
-2.95 or later with Mingw32 and the W32 API headers
,
311 echo or MSVC
2.x or later.
319 Rem It is not clear what GCC version began supporting -mtune
320 Rem and pentium4 on x86, so check this explicitly.
321 echo main
(){} >junk.c
322 echo gcc
-c
-O2
-mtune
=pentium4 junk.c
>>config.log
323 gcc
-c
-O2
-mtune
=pentium4 junk.c
>>config.log
2>&1
324 if not errorlevel 1 goto gccMtuneOk
325 echo The failed program was
: >>config.log
326 type junk.c
>>config.log
329 goto compilercheckdone
331 echo GCC supports
-mtune
=pentium4
>>config.log
332 set mf
=-mtune
=pentium4
334 goto compilercheckdone
338 rm
-f junk.c junk.obj
343 rem ----------------------------------------------------------------------
344 rem Check for external image libraries. Since they are loaded
345 rem dynamically, the libraries themselves do not need to be present
346 rem at compile time, but the header files are required.
350 if (%nocygwin%) == (N
) goto flagsOK
351 set mingwflag
=-mno
-cygwin
355 if (%pngsupport%) == (N
) goto pngDone
357 echo Checking
for libpng...
358 echo #include
"png.h" >junk.c
359 echo main
(){} >>junk.c
360 rem -o option is ignored with cl, but allows result to be consistent.
361 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
362 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
363 if exist junk.obj
goto havePng
365 echo ...png.h
not found
, building without PNG support.
366 echo The failed program was
: >>config.log
367 type junk.c
>>config.log
372 echo ...PNG header available
, building with PNG support.
376 rm
-f junk.c junk.obj
378 if (%jpegsupport%) == (N
) goto jpegDone
380 echo Checking
for jpeg
-6b...
381 echo #include
"jconfig.h" >junk.c
382 echo main
(){} >>junk.c
383 rem -o option is ignored with cl, but allows result to be consistent.
384 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
385 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
386 if exist junk.obj
goto haveJpeg
388 echo ...jconfig.h
not found
, building without JPEG support.
389 echo The failed program was
: >>config.log
390 type junk.c
>>config.log
395 echo ...JPEG header available
, building with JPEG support.
399 rm
-f junk.c junk.obj
401 if (%gifsupport%) == (N
) goto gifDone
403 echo Checking
for libgif...
404 echo #include
"gif_lib.h" >junk.c
405 echo main
(){} >>junk.c
406 rem -o option is ignored with cl, but allows result to be consistent.
407 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
408 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
409 if exist junk.obj
goto haveGif
411 echo ...gif_lib.h
not found
, building without GIF support.
412 echo The failed program was
: >>config.log
413 type junk.c
>>config.log
418 echo ...GIF header available
, building with GIF support.
422 rm
-f junk.c junk.obj
424 if (%tiffsupport%) == (N
) goto tiffDone
426 echo Checking
for tiff...
427 echo #include
"tiffio.h" >junk.c
428 echo main
(){} >>junk.c
429 rem -o option is ignored with cl, but allows result to be consistent.
430 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
431 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
432 if exist junk.obj
goto haveTiff
434 echo ...tiffio.h
not found
, building without TIFF support.
435 echo The failed program was
: >>config.log
436 type junk.c
>>config.log
441 echo ...TIFF header available
, building with TIFF support.
445 rm
-f junk.c junk.obj
447 if (%xpmsupport%) == (N
) goto xpmDone
449 echo Checking
for libXpm...
450 echo #define FOR_MSW
1 >junk.c
451 echo #include
"X11/xpm.h" >>junk.c
452 echo main
(){} >>junk.c
453 rem -o option is ignored with cl, but allows result to be consistent.
454 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
455 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
456 if exist junk.obj
goto haveXpm
458 echo ...X11
/xpm.h
not found
, building without XPM support.
459 echo The failed program was
: >>config.log
460 type junk.c
>>config.log
465 echo ...XPM header available
, building with XPM support.
469 rm
-f junk.c junk.obj junk.err junk.out
471 rem ----------------------------------------------------------------------
473 echo Generating makefiles
474 if %COMPILER% == gcc
set MAKECMD
=gmake
475 if %COMPILER% == cl
set MAKECMD
=nmake
477 rem Pass on chosen settings to makefiles.
478 rem NB. Be very careful to not have a space before redirection symbols
479 rem except when there is a preceding digit, when a space is required.
481 echo #
Start of settings from configure.bat
>config.settings
482 echo COMPILER
=%COMPILER%>>config.settings
483 if not "(%mf%)" == "()" echo MCPU_FLAG
=%mf%>>config.settings
484 if (%nodebug%) == (Y
) echo NODEBUG
=1 >>config.settings
485 if (%noopt%) == (Y
) echo NOOPT
=1 >>config.settings
486 if (%nocygwin%) == (Y
) echo NOCYGWIN
=1 >>config.settings
487 if not "(%prefix%)" == "()" echo INSTALL_DIR
=%prefix%>>config.settings
488 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
489 rem and the if command cannot cope with this
490 for %%v in
(%usercflags%) do if not (%%v
)==() set docflags
=Y
491 if (%docflags%)==(Y
) echo USER_CFLAGS
=%usercflags%>>config.settings
492 for %%v in
(%userldflags%) do if not (%%v
)==() set doldflags
=Y
493 if (%doldflags%)==(Y
) echo USER_LDFLAGS
=%userldflags%>>config.settings
494 if (%usefontbackend%) == (Y
) echo USE_FONTBACKEND
=1 >>config.settings
495 echo #
End of settings from configure.bat
>>config.settings
496 echo.
>>config.settings
498 copy config.nt config.tmp
500 echo /* Start of settings from configure.bat.
*/ >>config.tmp
501 if (%docflags%) == (Y
) echo #define USER_CFLAGS
" %usercflags%">>config.tmp
502 if (%doldflags%) == (Y
) echo #define USER_LDFLAGS
" %userldflags%">>config.tmp
503 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG
1 >>config.tmp
504 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG
1 >>config.tmp
505 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF
1 >>config.tmp
506 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF
1 >>config.tmp
507 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM
1 >>config.tmp
508 echo /* End of settings from configure.bat.
*/ >>config.tmp
510 Rem See if fc.exe returns a meaningful exit status. If it does, we
511 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
512 Rem since this forces recompilation of every source file.
513 if exist foo.bar
del foo.bar
514 fc
/b foo.bar foo.bar
>nul
2>&1
515 if not errorlevel 2 goto doCopy
516 fc
/b config.tmp ..\src\config.h
>nul
2>&1
517 if errorlevel 1 goto doCopy
518 fc
/b paths.h ..\src\epaths.h
>nul
2>&1
519 if errorlevel 0 goto dontCopy
521 copy config.tmp ..\src\config.h
522 copy paths.h ..\src\epaths.h
525 if exist config.tmp
del config.tmp
526 copy /b config.settings
+%MAKECMD%.defs
+..
\nt\makefile.w32
-in ..
\nt\makefile
527 if exist ..
\admin\unidata
copy /b config.settings
+%MAKECMD%.defs
+..
\admin\unidata\makefile.w32
-in ..
\admin\unidata\makefile
528 copy /b config.settings
+%MAKECMD%.defs
+..\lib
-src\makefile.w32
-in ..\lib
-src\makefile
529 copy /b config.settings
+%MAKECMD%.defs
+..\src\makefile.w32
-in ..\src\makefile
530 copy /b config.settings
+%MAKECMD%.defs
+..\doc\emacs\makefile.w32
-in ..\doc\emacs\makefile
531 copy /b config.settings
+%MAKECMD%.defs
+..\doc\misc\makefile.w32
-in ..\doc\misc\makefile
532 copy /b config.settings
+%MAKECMD%.defs
+..\doc\lispref\makefile.w32
-in ..\doc\lispref\makefile
533 copy /b config.settings
+%MAKECMD%.defs
+..\doc\lispintro\makefile.w32
-in ..\doc\lispintro\makefile
534 if exist ..\lisp\makefile rm
-f ..
/lisp
/[Mm
]akefile
535 copy /b config.settings
+%MAKECMD%.defs
+..\lisp\makefile.w32
-in ..\lisp\makefile
536 rem Use the default (no-op) Makefile.in if the nt version is not present.
537 if exist ..\leim\makefile.w32
-in
copy /b config.settings
+%MAKECMD%.defs
+..\leim\makefile.w32
-in ..\leim\makefile
538 if not exist ..\leim\makefile.w32
-in
copy /b config.settings
+%MAKECMD%.defs
+..\leim\Makefile.in ..\leim\makefile
541 Rem Some people use WinZip which doesn't create empty directories!
542 if not exist ..\site
-lisp
\nul
mkdir ..\site
-lisp\
543 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
544 if exist foo.bar
del foo.bar
545 fc
/b foo.bar foo.bar
>nul
2>&1
546 if not errorlevel 2 goto doUpdateSubdirs
547 fc
/b subdirs.el ..\site
-lisp\subdirs.el
>nul
2>&1
548 if not errorlevel 1 goto dontUpdateSubdirs
550 if exist ..\site
-lisp\subdirs.el
del ..\site
-lisp\subdirs.el
551 copy subdirs.el ..\site
-lisp\subdirs.el
556 rem check that we have all the libraries we need.
559 if not "(%HAVE_XPM%)" == "()" goto checkpng
560 if (%xpmsupport%) == (N
) goto checkpng
562 echo XPM support is missing. It is required
for color icons in the toolbar.
563 echo Install libXpm development
files or
use --without
-xpm
566 if not "(%HAVE_PNG%)" == "()" goto checkjpeg
567 if (%pngsupport%) == (N
) goto checkjpeg
569 echo PNG support is missing.
570 echo Install libpng development
files or
use --without
-png
573 if not "(%HAVE_JPEG%)" == "()" goto checktiff
574 if (%jpegsupport%) == (N
) goto checktiff
576 echo JPEG support is missing.
577 echo Install jpeg development
files or
use --without
-jpeg
580 if not "(%HAVE_TIFF%)" == "()" goto checkgif
581 if (%tiffsupport%) == (N
) goto checkgif
583 echo TIFF support is missing.
584 echo Install libtiff development
files or
use --without
-tiff
587 if not "(%HAVE_GIF%)" == "()" goto donelibchecks
588 if (%gifsupport%) == (N
) goto donelibchecks
590 echo GIF support is missing.
591 echo Install giflib or libungif development
files or
use --without
-gif
594 if (%libsOK%) == (1) goto success
596 echo Important libraries are missing. Fix these issues before running make.
600 echo Emacs successfully configured.
601 echo Emacs successfully configured.
>>config.log
602 echo Run `
%MAKECMD%' to build, then run `%MAKECMD% install' to install.
606 echo Your environment size is too small. Please enlarge it and rerun configure.
607 echo For example
, type "command.com /e:2048" to have
2048 bytes available.
624 arch
-tag
: 300d20a4
-1675-4e75
-b615
-7ce1a8c5376c