2 rem ----------------------------------------------------------------------
\r
3 rem Configuration script for MS Windows 95/98 and NT/2000
\r
4 rem Copyright (C) 1999-2001 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 or NT/2000
\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" == "" goto checkutils
\r
90 echo Usage: configure [options]
\r
92 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
93 echo. --with-gcc use GCC to compile Emacs
\r
94 echo. --with-msvc use MSVC to compile Emacs
\r
95 echo. --no-debug exclude debug info from executables
\r
96 echo. --no-opt disable optimization
\r
97 echo. --no-cygwin use -mno-cygwin option with GCC
\r
98 echo. --cflags FLAG pass FLAG to compiler
\r
99 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
101 rem ----------------------------------------------------------------------
\r
107 rem ----------------------------------------------------------------------
\r
112 rem ----------------------------------------------------------------------
\r
117 rem ----------------------------------------------------------------------
\r
122 rem ----------------------------------------------------------------------
\r
127 rem ----------------------------------------------------------------------
\r
132 rem ----------------------------------------------------------------------
\r
135 set usercflags=%usercflags%%sep1%%1
\r
136 set sep1= %nothing%
\r
139 rem ----------------------------------------------------------------------
\r
142 set userldflags=%userldflags%%sep2%%1
\r
143 set sep2= %nothing%
\r
147 rem ----------------------------------------------------------------------
\r
148 rem Check that necessary utilities (cp and rm) are present.
\r
150 echo Checking for 'cp'...
\r
151 cp configure.bat junk.bat
\r
152 if not exist junk.bat goto needcp
\r
153 echo Checking for 'rm'...
\r
155 if exist junk.bat goto needrm
\r
158 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
162 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
165 rem ----------------------------------------------------------------------
\r
166 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
168 if (%COMPILER%)==(cl) goto genmakefiles
\r
169 if (%COMPILER%)==(gcc) goto checkgcc
\r
171 echo Checking whether 'cl' is available...
\r
172 echo main(){} >junk.c
\r
173 cl -nologo -c junk.c
\r
174 if exist junk.obj goto clOK
\r
176 echo Checking whether 'gcc' is available...
\r
178 if not exist junk.o goto nocompiler
\r
182 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
183 Rem 8 characters of a label. So do NOT be tempted to change
\r
184 Rem chkapi* into something fancier like checkw32api
\r
185 Rem You HAVE been warned!
\r
186 if (%nocygwin%) == (Y) goto chkapi
\r
187 echo Checking whether gcc requires '-mno-cygwin'...
\r
188 echo #include "cygwin/version.h" >junk.c
\r
189 echo main(){} >>junk.c
\r
191 if not exist junk.o goto chkapi
\r
192 gcc -mno-cygwin -c junk.c
\r
193 if exist junk.o set nocygwin=Y
\r
194 rm -f junk.c junk.o
\r
197 rem ----------------------------------------------------------------------
\r
198 rem Older versions of the Windows API headers either don't have any of
\r
199 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
200 rem are like this), or have a typo in the definition of
\r
201 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
202 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
203 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
205 echo Checking whether W32 API headers are too old...
\r
206 echo #include "windows.h" >junk.c
\r
207 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
208 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
209 if (%nocygwin%) == (Y) goto chkapi1
\r
210 set cf=%usercflags%
\r
213 set cf=%usercflags% -mno-cygwin
\r
219 if exist junk.o goto gccOk
\r
223 echo Configure failed.
\r
224 echo To configure Emacs for Windows, you need to have either
\r
225 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
226 echo or MSVC 2.x or later.
\r
232 rm -f junk.c junk.o
\r
238 rm -f junk.c junk.obj
\r
242 rem ----------------------------------------------------------------------
\r
244 echo Generating makefiles
\r
245 if %COMPILER% == gcc set MAKECMD=gmake
\r
246 if %COMPILER% == cl set MAKECMD=nmake
\r
248 rem Pass on chosen settings to makefiles.
\r
249 rem NB. Be very careful to not have a space before redirection symbols
\r
250 rem except when there is a preceding digit, when a space is required.
\r
252 echo # Start of settings from configure.bat >config.settings
\r
253 echo COMPILER=%COMPILER%>>config.settings
\r
254 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
255 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
256 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
257 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
258 if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags%>>config.settings
\r
259 if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags%>>config.settings
\r
260 echo # End of settings from configure.bat>>config.settings
\r
261 echo. >>config.settings
\r
263 copy config.nt ..\src\config.h
\r
264 if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>..\src\config.h
\r
265 if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>..\src\config.h
\r
266 copy paths.h ..\src\epaths.h
\r
268 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
269 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
270 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
271 if not exist ..\lisp\Makefile.unix rename ..\lisp\Makefile.in Makefile.unix
\r
272 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
273 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
274 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
275 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
276 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
277 del config.settings
\r
280 echo Emacs successfully configured.
\r
281 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
285 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
286 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r