2 rem ----------------------------------------------------------------------
\r
3 rem Configuration script for MS Windows 95/98/Me and NT/2000/XP
\r
4 rem Copyright (C) 1999-2003 Free Software Foundation, Inc.
\r
6 rem This file is part of GNU Emacs.
\r
8 rem GNU Emacs is free software; you can redistribute it and/or modify
\r
9 rem it under the terms of the GNU General Public License as published by
\r
10 rem the Free Software Foundation; either version 2, or (at your option)
\r
11 rem any later version.
\r
13 rem GNU Emacs is distributed in the hope that it will be useful,
\r
14 rem but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
15 rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
16 rem GNU General Public License for more details.
\r
18 rem You should have received a copy of the GNU General Public License
\r
19 rem along with GNU Emacs; see the file COPYING. If not, write to the
\r
20 rem Free Software Foundation, Inc., 59 Temple Place - Suite 330,
\r
21 rem Boston, MA 02111-1307, USA.
\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 gmake 3.75
\r
27 rem or later) and the Mingw32 and W32 API headers and libraries
\r
29 rem For reference, here is a list of which builds of gmake are known to
\r
30 rem work or not, and whether they work in the presence and/or absence of
\r
34 rem cygwin b20.1 make (3.75): okay[1] fails[2]
\r
35 rem MSVC compiled gmake 3.77: okay okay
\r
36 rem MSVC compiled gmake 3.78.1: okay okay
\r
37 rem MSVC compiled gmake 3.79.1: okay okay
\r
38 rem mingw32/gcc-2.92.2 make (3.77): okay okay
\r
39 rem cygwin compiled gmake 3.77: okay[1] fails[2]
\r
40 rem cygwin compiled gmake 3.78.1: okay fails[2]
\r
41 rem cygwin compiled gmake 3.79.1: couldn't build make[3]
\r
43 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
\r
44 rem emacs source with text!=binary.
\r
45 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
\r
46 rem [3] requires LC_MESSAGES support to build; maybe 2.95.x update to
\r
47 rem cygwin provides this?
\r
50 rem ----------------------------------------------------------------------
\r
51 rem See if the environment is large enough. We need 43 (?) bytes.
\r
52 set $foo$=123456789_123456789_123456789_123456789_123
\r
53 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
\r
56 rem ----------------------------------------------------------------------
\r
57 rem Make sure we are running in the nt subdir
\r
58 if exist configure.bat goto start
\r
59 echo You must run configure from the nt subdirectory.
\r
63 rem ----------------------------------------------------------------------
\r
64 rem Default settings.
\r
75 rem ----------------------------------------------------------------------
\r
76 rem Handle arguments.
\r
78 if "%1" == "-h" goto usage
\r
79 if "%1" == "--help" goto usage
\r
80 if "%1" == "--prefix" goto setprefix
\r
81 if "%1" == "--with-gcc" goto withgcc
\r
82 if "%1" == "--with-msvc" goto withmsvc
\r
83 if "%1" == "--no-debug" goto nodebug
\r
84 if "%1" == "--no-opt" goto noopt
\r
85 if "%1" == "--no-cygwin" goto nocygwin
\r
86 if "%1" == "--cflags" goto usercflags
\r
87 if "%1" == "--ldflags" goto userldflags
\r
88 if "%1" == "--without-png" goto withoutpng
\r
89 if "%1" == "--without-jpeg" goto withoutjpeg
\r
90 if "%1" == "--without-gif" goto withoutgif
\r
91 if "%1" == "--without-tiff" goto withouttiff
\r
92 if "%1" == "--without-xpm" goto withoutxpm
\r
93 if "%1" == "" goto checkutils
\r
95 echo Usage: configure [options]
\r
97 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
98 echo. --with-gcc use GCC to compile Emacs
\r
99 echo. --with-msvc use MSVC to compile Emacs
\r
100 echo. --no-debug exclude debug info from executables
\r
101 echo. --no-opt disable optimization
\r
102 echo. --no-cygwin use -mno-cygwin option with GCC
\r
103 echo. --cflags FLAG pass FLAG to compiler
\r
104 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
105 echo. --without-png do not use libpng even if it is installed
\r
106 echo. --without-jpeg do not use jpeg-6b even if it is installed
\r
107 echo. --without-gif do not use libungif even if it is installed
\r
108 echo. --without-tiff do not use libtiff even if it is installed
\r
109 echo. --without-xpm do not use libXpm even if it is installed
\r
111 rem ----------------------------------------------------------------------
\r
117 rem ----------------------------------------------------------------------
\r
122 rem ----------------------------------------------------------------------
\r
127 rem ----------------------------------------------------------------------
\r
132 rem ----------------------------------------------------------------------
\r
137 rem ----------------------------------------------------------------------
\r
142 rem ----------------------------------------------------------------------
\r
145 set usercflags=%usercflags%%sep1%%1
\r
146 set sep1= %nothing%
\r
149 rem ----------------------------------------------------------------------
\r
152 set userldflags=%userldflags%%sep2%%1
\r
153 set sep2= %nothing%
\r
156 rem ----------------------------------------------------------------------
\r
164 rem ----------------------------------------------------------------------
\r
172 rem ----------------------------------------------------------------------
\r
180 rem ----------------------------------------------------------------------
\r
188 rem ----------------------------------------------------------------------
\r
196 rem ----------------------------------------------------------------------
\r
197 rem Check that necessary utilities (cp and rm) are present.
\r
199 echo Checking for 'cp'...
\r
200 cp configure.bat junk.bat
\r
201 if not exist junk.bat goto needcp
\r
202 echo Checking for 'rm'...
\r
204 if exist junk.bat goto needrm
\r
207 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
211 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
214 rem ----------------------------------------------------------------------
\r
215 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
217 if (%COMPILER%)==(cl) goto compilercheckdone
\r
218 if (%COMPILER%)==(gcc) goto checkgcc
\r
220 echo Checking whether 'cl' is available...
\r
221 echo main(){} >junk.c
\r
222 cl -nologo -c junk.c
\r
223 if exist junk.obj goto clOK
\r
225 echo Checking whether 'gcc' is available...
\r
227 if not exist junk.o goto nocompiler
\r
231 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
232 Rem 8 characters of a label. So do NOT be tempted to change
\r
233 Rem chkapi* into something fancier like checkw32api
\r
234 Rem You HAVE been warned!
\r
235 if (%nocygwin%) == (Y) goto chkapi
\r
236 echo Checking whether gcc requires '-mno-cygwin'...
\r
237 echo #include "cygwin/version.h" >junk.c
\r
238 echo main(){} >>junk.c
\r
240 if not exist junk.o goto chkapi
\r
241 gcc -mno-cygwin -c junk.c
\r
242 if exist junk.o set nocygwin=Y
\r
243 rm -f junk.c junk.o
\r
246 rem ----------------------------------------------------------------------
\r
247 rem Older versions of the Windows API headers either don't have any of
\r
248 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
249 rem are like this), or have a typo in the definition of
\r
250 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
251 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
252 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
254 echo Checking whether W32 API headers are too old...
\r
255 echo #include "windows.h" >junk.c
\r
256 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
257 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
258 if (%nocygwin%) == (Y) goto chkapi1
\r
259 set cf=%usercflags%
\r
262 set cf=%usercflags% -mno-cygwin
\r
268 if exist junk.o goto gccOk
\r
272 echo Configure failed.
\r
273 echo To configure Emacs for Windows, you need to have either
\r
274 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
275 echo or MSVC 2.x or later.
\r
281 rm -f junk.c junk.o
\r
283 goto compilercheckdone
\r
287 rm -f junk.c junk.obj
\r
292 rem ----------------------------------------------------------------------
\r
293 rem Check for external image libraries. Since they are loaded
\r
294 rem dynamically, the libraries themselves do not need to be present
\r
295 rem at compile time, but the header files are required.
\r
297 if (%pngsupport%) == (N) goto pngDone
\r
299 echo Checking for libpng...
\r
300 echo #include "png.h" >junk.c
\r
301 echo main (){} >>junk.c
\r
302 rem -o option is ignored with cl, but allows result to be consistent.
\r
303 %COMPILER% %usercflags% -c junk.c -o junk.obj >junk.out 2>junk.err
\r
304 if exist junk.obj goto havePng
\r
306 echo ...png.h not found, building without PNG support.
\r
311 echo ...PNG header available, building with PNG support.
\r
315 rm -f junk.c junk.obj
\r
317 if (%jpegsupport%) == (N) goto jpegDone
\r
319 echo Checking for jpeg-6b...
\r
320 echo #include "jconfig.h" >junk.c
\r
321 echo main (){} >>junk.c
\r
322 rem -o option is ignored with cl, but allows result to be consistent.
\r
323 %COMPILER% %usercflags% -c junk.c -o junk.obj >junk.out 2>junk.err
\r
324 if exist junk.obj goto haveJpeg
\r
326 echo ...jconfig.h not found, building without JPEG support.
\r
331 echo ...JPEG header available, building with JPEG support.
\r
335 rm -f junk.c junk.obj
\r
337 if (%gifsupport%) == (N) goto gifDone
\r
339 echo Checking for libgif...
\r
340 echo #include "gif_lib.h" >junk.c
\r
341 echo main (){} >>junk.c
\r
342 rem -o option is ignored with cl, but allows result to be consistent.
\r
343 %COMPILER% %usercflags% -c junk.c -o junk.obj >junk.out 2>junk.err
\r
344 if exist junk.obj goto haveGif
\r
346 echo ...gif_lib.h not found, building without GIF support.
\r
351 echo ...GIF header available, building with GIF support.
\r
355 rm -f junk.c junk.obj
\r
357 if (%tiffsupport%) == (N) goto tiffDone
\r
359 echo Checking for tiff...
\r
360 echo #include "tiffio.h" >junk.c
\r
361 echo main (){} >>junk.c
\r
362 rem -o option is ignored with cl, but allows result to be consistent.
\r
363 %COMPILER% %usercflags% -c junk.c -o junk.obj >junk.out 2>junk.err
\r
364 if exist junk.obj goto haveTiff
\r
366 echo ...tiffio.h not found, building without TIFF support.
\r
371 echo ...TIFF header available, building with TIFF support.
\r
375 rm -f junk.c junk.obj
\r
377 if (%xpmsupport%) == (N) goto xpmDone
\r
379 echo Checking for libXpm...
\r
380 echo #define FOR_MSW 1 >junk.c
\r
381 echo #include "X11/xpm.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 %COMPILER% %usercflags% -c junk.c -o junk.obj >junk.out 2>junk.err
\r
385 if exist junk.obj goto haveXpm
\r
387 echo ...X11/xpm.h not found, building without XPM support.
\r
392 echo ...XPM header available, building with XPM support.
\r
396 rm -f junk.c junk.obj junk.err junk.out
\r
398 rem ----------------------------------------------------------------------
\r
400 echo Generating makefiles
\r
401 if %COMPILER% == gcc set MAKECMD=gmake
\r
402 if %COMPILER% == cl set MAKECMD=nmake
\r
404 rem Pass on chosen settings to makefiles.
\r
405 rem NB. Be very careful to not have a space before redirection symbols
\r
406 rem except when there is a preceding digit, when a space is required.
\r
408 echo # Start of settings from configure.bat >config.settings
\r
409 echo COMPILER=%COMPILER%>>config.settings
\r
410 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
411 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
412 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
413 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
414 if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags%>>config.settings
\r
415 if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags%>>config.settings
\r
416 echo # End of settings from configure.bat>>config.settings
\r
417 echo. >>config.settings
\r
419 copy config.nt ..\src\config.h
\r
420 echo. >>..\src\config.h
\r
421 echo /* Start of settings from configure.bat. */ >>..\src\config.h
\r
422 if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>..\src\config.h
\r
423 if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>..\src\config.h
\r
424 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>..\src\config.h
\r
425 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>..\src\config.h
\r
426 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>..\src\config.h
\r
427 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>..\src\config.h
\r
428 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>..\src\config.h
\r
429 echo /* End of settings from configure.bat. */ >>..\src\config.h
\r
431 copy paths.h ..\src\epaths.h
\r
433 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
434 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
435 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
436 if not exist ..\lisp\Makefile.unix rename ..\lisp\Makefile.in Makefile.unix
\r
437 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
438 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
439 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
440 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
441 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
442 del config.settings
\r
444 Rem Some people use WinZip which doesn't create empty directories!
\r
445 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
\r
446 if not exist ..\site-lisp\subdirs.el copy subdirs.el ..\site-lisp\subdirs.el
\r
449 echo Emacs successfully configured.
\r
450 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
454 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
455 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r