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 of the License, or
12 rem (at your option) 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. If not, see http://www.gnu.org/licenses/.
22 rem ----------------------------------------------------------------------
23 rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
25 rem + MS Windows 95/98/Me or NT/2000/XP
26 rem + either MSVC 2.x or later, or gcc-2.95 or later (with GNU make 3.75
27 rem or later) and the Mingw32 and W32 API headers and libraries.
28 rem + Visual Studio 2005 is not supported at this time.
30 rem For reference, here is a list of which builds of GNU make are known to
31 rem work or not, and whether they work in the presence and/or absence of
35 rem cygwin b20.1 make (3.75): fails[1,5] fails[2,5]
36 rem MSVC compiled gmake 3.77: okay okay
37 rem MSVC compiled gmake 3.78.1: okay okay
38 rem MSVC compiled gmake 3.79.1: okay okay
39 rem mingw32/gcc-2.92.2 make (3.77): okay okay[4]
40 rem cygwin compiled gmake 3.77: fails[1,5] fails[2,5]
41 rem cygwin compiled gmake 3.78.1: fails[5] fails[2,5]
42 rem cygwin compiled gmake 3.79.1: fails[3,5] fails[2?,5]
43 rem cygwin compiled make 3.80: okay[6] fails?[7]
44 rem cygwin compiled make 3.81: fails fails?[7]
45 rem mingw32 compiled make 3.79.1: okay okay
46 rem mingw32 compiled make 3.80: okay okay?[7]
47 rem mingw32 compiled make 3.81: okay okay[8]
49 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
50 rem emacs source with text!=binary.
51 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
52 rem [3] requires LC_MESSAGES support to build; cannot build with early
53 rem versions of cygwin.
54 rem [4] may fail on Windows 9X and Windows ME; if so, install Bash.
55 rem [5] fails when building leim due to the use of cygwin style paths.
56 rem May work if building emacs without leim.
57 rem [6] need to uncomment 3 lines in nt/gmake.defs that invoke `cygpath';
58 rem look for "cygpath" near line 85 of gmake.defs.
59 rem [7] not recommended; please report if you try this combination.
60 rem [8] tested only on Windows XP.
63 if exist config.log
del config.log
65 rem ----------------------------------------------------------------------
66 rem See if the environment is large enough. We need 43 (?) bytes.
67 set $foo$
=123456789_123456789_123456789_123456789_123
68 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
71 rem ----------------------------------------------------------------------
72 rem Make sure we are running in the nt subdir
73 if exist configure.bat
goto start
74 echo You must
run configure from the nt subdirectory.
78 rem ----------------------------------------------------------------------
93 rem ----------------------------------------------------------------------
96 if "%1" == "-h" goto usage
97 if "%1" == "--help" goto usage
98 if "%1" == "--prefix" goto setprefix
99 if "%1" == "--with-gcc" goto withgcc
100 if "%1" == "--with-msvc" goto withmsvc
101 if "%1" == "--no-debug" goto nodebug
102 if "%1" == "--no-opt" goto noopt
103 if "%1" == "--profile" goto profile
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" == "" goto checkutils
114 echo Usage
: configure
[options
]
116 echo.
--prefix PREFIX install Emacs in directory PREFIX
117 echo.
--with
-gcc
use GCC to compile Emacs
118 echo.
--with
-msvc
use MSVC to compile Emacs
119 echo.
--no
-debug exclude
debug info from executables
120 echo.
--no
-opt disable optimization
121 echo.
--profile enable profiling
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
131 rem ----------------------------------------------------------------------
137 rem ----------------------------------------------------------------------
142 rem ----------------------------------------------------------------------
147 rem ----------------------------------------------------------------------
152 rem ----------------------------------------------------------------------
157 rem ----------------------------------------------------------------------
162 rem ----------------------------------------------------------------------
167 rem ----------------------------------------------------------------------
170 set usercflags
=%usercflags%%sep1%%1
174 rem ----------------------------------------------------------------------
177 set userldflags
=%userldflags%%sep2%%1
181 rem ----------------------------------------------------------------------
189 rem ----------------------------------------------------------------------
197 rem ----------------------------------------------------------------------
205 rem ----------------------------------------------------------------------
213 rem ----------------------------------------------------------------------
221 rem ----------------------------------------------------------------------
222 rem Check that necessary utilities (cp and rm) are present.
224 echo Checking
for 'cp'...
225 cp configure.bat junk.bat
226 if not exist junk.bat
goto needcp
227 echo Checking
for 'rm'...
229 if exist junk.bat
goto needrm
232 echo You need
'cp' (the Unix file
copy program
) to build Emacs.
236 echo You need
'rm' (the Unix file delete program
) to build Emacs.
239 rem ----------------------------------------------------------------------
240 rem Auto-detect compiler if not specified, and validate GCC if chosen.
242 if (%COMPILER%)==(cl
) goto compilercheckdone
243 if (%COMPILER%)==(gcc
) goto checkgcc
245 echo Checking whether
'gcc' is available...
246 echo main
(){} >junk.c
248 if exist junk.o
goto checkgcc
250 echo Checking whether
'cl' is available...
252 if exist junk.obj
goto clOK
256 if exist junk.o
del junk.o
257 Rem WARNING -- COMMAND.COM on some systems only looks at the first
258 Rem 8 characters of a label. So do NOT be tempted to change
259 Rem chkapi* into something fancier like checkw32api
260 Rem You HAVE been warned!
261 if (%nocygwin%) == (Y
) goto chkapiN
262 echo Checking whether gcc requires
'-mno-cygwin'...
263 echo #include
"cygwin/version.h" >junk.c
264 echo main
(){} >>junk.c
265 echo gcc
-c junk.c
>>config.log
266 gcc
-c junk.c
>>config.log
2>&1
267 if not exist junk.o
goto chkapi
268 echo gcc
-mno
-cygwin
-c junk.c
>>config.log
269 gcc
-mno
-cygwin
-c junk.c
>>config.log
2>&1
270 if exist junk.o
set nocygwin
=Y
273 echo The failed program was
: >>config.log
274 type junk.c
>>config.log
277 rem ----------------------------------------------------------------------
278 rem Older versions of the Windows API headers either don't have any of
279 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
280 rem are like this), or have a typo in the definition of
281 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
282 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
283 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
284 rem Beginning with Emacs 23, we need usp10.h.
286 echo Checking whether W32 API headers are too old...
287 echo #include
"windows.h" >junk.c
288 echo #include
"usp10.h" >>junk.c
289 echo test
(PIMAGE_NT_HEADERS pHeader
) >>junk.c
290 echo {PIMAGE_SECTION_HEADER pSection
= IMAGE_FIRST_SECTION
(pHeader
);} >>junk.c
291 if (%nocygwin%) == (Y
) goto chkapi1
295 set cf
=%usercflags% -mno
-cygwin
300 @
echo gcc
%cf% -c junk.c
>>config.log
301 gcc
%cf% -c junk.c
>>config.log
2>&1
303 if exist junk.o
goto gccOk
304 echo The failed program was
: >>config.log
305 type junk.c
>>config.log
309 echo Configure failed.
310 echo To configure Emacs
for Windows
, you need to have either
311 echo gcc
-2.95 or later with Mingw32 and the W32 API headers
,
312 echo or MSVC
2.x or later.
320 Rem It is not clear what GCC version began supporting -mtune
321 Rem and pentium4 on x86, so check this explicitly.
322 echo main
(){} >junk.c
323 echo gcc
-c
-O2
-mtune
=pentium4 junk.c
>>config.log
324 gcc
-c
-O2
-mtune
=pentium4 junk.c
>>config.log
2>&1
325 if not errorlevel 1 goto gccMtuneOk
326 echo The failed program was
: >>config.log
327 type junk.c
>>config.log
332 echo GCC supports
-mtune
=pentium4
>>config.log
333 set mf
=-mtune
=pentium4
336 rem Check for DWARF-2 debug info support, else default to stabs
337 echo main
(){} >junk.c
338 echo gcc
-c
-gdwarf
-2 -g3 junk.c
>>config.log
339 gcc
-c
-gdwarf
-2 -g3 junk.c
>>config.log
2>&1
340 if not errorlevel 1 goto gccdwarf
341 echo The failed program was
: >>config.log
342 type junk.c
>>config.log
345 goto compilercheckdone
347 echo GCC supports DWARF
-2 >>config.log
348 set dbginfo
=-gdwarf
-2 -g3
350 goto compilercheckdone
354 rm
-f junk.c junk.obj
359 rem ----------------------------------------------------------------------
360 rem Check for external image libraries. Since they are loaded
361 rem dynamically, the libraries themselves do not need to be present
362 rem at compile time, but the header files are required.
366 if (%nocygwin%) == (N
) goto flagsOK
367 set mingwflag
=-mno
-cygwin
371 if (%pngsupport%) == (N
) goto pngDone
373 echo Checking
for libpng...
374 echo #include
"png.h" >junk.c
375 echo main
(){} >>junk.c
376 rem -o option is ignored with cl, but allows result to be consistent.
377 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
378 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
379 if exist junk.obj
goto havePng
381 echo ...png.h
not found
, building without PNG support.
382 echo The failed program was
: >>config.log
383 type junk.c
>>config.log
388 echo ...PNG header available
, building with PNG support.
392 rm
-f junk.c junk.obj
394 if (%jpegsupport%) == (N
) goto jpegDone
396 echo Checking
for jpeg
-6b...
397 echo #include
"jconfig.h" >junk.c
398 echo main
(){} >>junk.c
399 rem -o option is ignored with cl, but allows result to be consistent.
400 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
401 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
402 if exist junk.obj
goto haveJpeg
404 echo ...jconfig.h
not found
, building without JPEG support.
405 echo The failed program was
: >>config.log
406 type junk.c
>>config.log
411 echo ...JPEG header available
, building with JPEG support.
415 rm
-f junk.c junk.obj
417 if (%gifsupport%) == (N
) goto gifDone
419 echo Checking
for libgif...
420 echo #include
"gif_lib.h" >junk.c
421 echo main
(){} >>junk.c
422 rem -o option is ignored with cl, but allows result to be consistent.
423 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
424 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
425 if exist junk.obj
goto haveGif
427 echo ...gif_lib.h
not found
, building without GIF support.
428 echo The failed program was
: >>config.log
429 type junk.c
>>config.log
434 echo ...GIF header available
, building with GIF support.
438 rm
-f junk.c junk.obj
440 if (%tiffsupport%) == (N
) goto tiffDone
442 echo Checking
for tiff...
443 echo #include
"tiffio.h" >junk.c
444 echo main
(){} >>junk.c
445 rem -o option is ignored with cl, but allows result to be consistent.
446 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
447 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
448 if exist junk.obj
goto haveTiff
450 echo ...tiffio.h
not found
, building without TIFF support.
451 echo The failed program was
: >>config.log
452 type junk.c
>>config.log
457 echo ...TIFF header available
, building with TIFF support.
461 rm
-f junk.c junk.obj
463 if (%xpmsupport%) == (N
) goto xpmDone
465 echo Checking
for libXpm...
466 echo #define FOR_MSW
1 >junk.c
467 echo #include
"X11/xpm.h" >>junk.c
468 echo main
(){} >>junk.c
469 rem -o option is ignored with cl, but allows result to be consistent.
470 echo %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>>config.log
471 %COMPILER% %usercflags% %mingwflag% -c junk.c
-o junk.obj
>junk.out
2>>config.log
472 if exist junk.obj
goto haveXpm
474 echo ...X11
/xpm.h
not found
, building without XPM support.
475 echo The failed program was
: >>config.log
476 type junk.c
>>config.log
481 echo ...XPM header available
, building with XPM support.
485 rm
-f junk.c junk.obj junk.err junk.out
487 rem ----------------------------------------------------------------------
489 echo Generating makefiles
490 if %COMPILER% == gcc
set MAKECMD
=gmake
491 if %COMPILER% == cl
set MAKECMD
=nmake
493 rem Pass on chosen settings to makefiles.
494 rem NB. Be very careful to not have a space before redirection symbols
495 rem except when there is a preceding digit, when a space is required.
497 echo #
Start of settings from configure.bat
>config.settings
498 echo COMPILER
=%COMPILER%>>config.settings
499 if not "(%mf%)" == "()" echo MCPU_FLAG
=%mf%>>config.settings
500 if not "(%dbginfo%)" == "()" echo DEBUG_INFO
=%dbginfo%>>config.settings
501 if (%nodebug%) == (Y
) echo NODEBUG
=1 >>config.settings
502 if (%noopt%) == (Y
) echo NOOPT
=1 >>config.settings
503 if (%profile%) == (Y
) echo PROFILE
=1 >>config.settings
504 if (%nocygwin%) == (Y
) echo NOCYGWIN
=1 >>config.settings
505 if not "(%prefix%)" == "()" echo INSTALL_DIR
=%prefix%>>config.settings
506 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
507 rem and the if command cannot cope with this
508 for %%v in
(%usercflags%) do if not (%%v
)==() set docflags
=Y
509 if (%docflags%)==(Y
) echo USER_CFLAGS
=%usercflags%>>config.settings
510 for %%v in
(%userldflags%) do if not (%%v
)==() set doldflags
=Y
511 if (%doldflags%)==(Y
) echo USER_LDFLAGS
=%userldflags%>>config.settings
512 echo #
End of settings from configure.bat
>>config.settings
513 echo.
>>config.settings
515 copy config.nt config.tmp
517 echo /* Start of settings from configure.bat.
*/ >>config.tmp
518 if (%docflags%) == (Y
) echo #define USER_CFLAGS
" %usercflags%">>config.tmp
519 if (%doldflags%) == (Y
) echo #define USER_LDFLAGS
" %userldflags%">>config.tmp
520 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG
1 >>config.tmp
521 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG
1 >>config.tmp
522 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF
1 >>config.tmp
523 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF
1 >>config.tmp
524 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM
1 >>config.tmp
525 echo /* End of settings from configure.bat.
*/ >>config.tmp
527 Rem See if fc.exe returns a meaningful exit status. If it does, we
528 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
529 Rem since this forces recompilation of every source file.
530 if exist foo.bar
del foo.bar
531 fc
/b foo.bar foo.bar
>nul
2>&1
532 if not errorlevel 2 goto doCopy
533 fc
/b config.tmp ..\src\config.h
>nul
2>&1
534 if errorlevel 1 goto doCopy
535 fc
/b paths.h ..\src\epaths.h
>nul
2>&1
536 if errorlevel 0 goto dontCopy
538 copy config.tmp ..\src\config.h
539 copy paths.h ..\src\epaths.h
542 if exist config.tmp
del config.tmp
543 copy /b config.settings
+%MAKECMD%.defs
+..
\nt\makefile.w32
-in ..
\nt\makefile
544 if exist ..
\admin\unidata
copy /b config.settings
+%MAKECMD%.defs
+..
\admin\unidata\makefile.w32
-in ..
\admin\unidata\makefile
545 copy /b config.settings
+%MAKECMD%.defs
+..\lib
-src\makefile.w32
-in ..\lib
-src\makefile
546 copy /b config.settings
+%MAKECMD%.defs
+..\src\makefile.w32
-in ..\src\makefile
547 copy /b config.settings
+%MAKECMD%.defs
+..\doc\emacs\makefile.w32
-in ..\doc\emacs\makefile
548 copy /b config.settings
+%MAKECMD%.defs
+..\doc\misc\makefile.w32
-in ..\doc\misc\makefile
549 copy /b config.settings
+%MAKECMD%.defs
+..\doc\lispref\makefile.w32
-in ..\doc\lispref\makefile
550 copy /b config.settings
+%MAKECMD%.defs
+..\doc\lispintro\makefile.w32
-in ..\doc\lispintro\makefile
551 if exist ..\lisp\makefile rm
-f ..
/lisp
/[Mm
]akefile
552 copy /b config.settings
+%MAKECMD%.defs
+..\lisp\makefile.w32
-in ..\lisp\makefile
553 rem Use the default (no-op) Makefile.in if the nt version is not present.
554 if exist ..\leim\makefile.w32
-in
copy /b config.settings
+%MAKECMD%.defs
+..\leim\makefile.w32
-in ..\leim\makefile
555 if not exist ..\leim\makefile.w32
-in
copy /b config.settings
+%MAKECMD%.defs
+..\leim\Makefile.in ..\leim\makefile
558 Rem Some people use WinZip which doesn't create empty directories!
559 if not exist ..\site
-lisp
\nul
mkdir ..\site
-lisp\
560 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
561 if exist foo.bar
del foo.bar
562 fc
/b foo.bar foo.bar
>nul
2>&1
563 if not errorlevel 2 goto doUpdateSubdirs
564 fc
/b subdirs.el ..\site
-lisp\subdirs.el
>nul
2>&1
565 if not errorlevel 1 goto dontUpdateSubdirs
567 if exist ..\site
-lisp\subdirs.el
del ..\site
-lisp\subdirs.el
568 copy subdirs.el ..\site
-lisp\subdirs.el
573 rem check that we have all the libraries we need.
576 if not "(%HAVE_XPM%)" == "()" goto checkpng
577 if (%xpmsupport%) == (N
) goto checkpng
579 echo XPM support is missing. It is required
for color icons in the toolbar.
580 echo Install libXpm development
files or
use --without
-xpm
583 if not "(%HAVE_PNG%)" == "()" goto checkjpeg
584 if (%pngsupport%) == (N
) goto checkjpeg
586 echo PNG support is missing.
587 echo Install libpng development
files or
use --without
-png
590 if not "(%HAVE_JPEG%)" == "()" goto checktiff
591 if (%jpegsupport%) == (N
) goto checktiff
593 echo JPEG support is missing.
594 echo Install jpeg development
files or
use --without
-jpeg
597 if not "(%HAVE_TIFF%)" == "()" goto checkgif
598 if (%tiffsupport%) == (N
) goto checkgif
600 echo TIFF support is missing.
601 echo Install libtiff development
files or
use --without
-tiff
604 if not "(%HAVE_GIF%)" == "()" goto donelibchecks
605 if (%gifsupport%) == (N
) goto donelibchecks
607 echo GIF support is missing.
608 echo Install giflib or libungif development
files or
use --without
-gif
611 if (%libsOK%) == (1) goto success
613 echo Important libraries are missing. Fix these issues before running make.
617 echo Emacs successfully configured.
618 echo Emacs successfully configured.
>>config.log
619 if (%MAKECMD%) == (gmake
) set MAKECMD
=make
620 echo Run `
%MAKECMD%' to build, then run `%MAKECMD% install' to install.
624 echo Your environment size is too small. Please enlarge it and rerun configure.
625 echo For example
, type "command.com /e:2048" to have
2048 bytes available.
643 arch
-tag
: 300d20a4
-1675-4e75
-b615
-7ce1a8c5376c