(back_comment): Detect cases where a comment-starter is
[emacs.git] / nt / configure.bat
blob7d644fd840be2c3aa155a5e5876ba42da02bfa6b
1 @echo off
2 rem   ----------------------------------------------------------------------
3 rem   Configuration script for MS Windows 95/98 and NT/2000
4 rem   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
6 rem   This file is part of GNU Emacs.
8 rem   GNU Emacs is free software; you can redistribute it and/or modify
9 rem   it under the terms of the GNU General Public License as published by
10 rem   the Free Software Foundation; either version 2, or (at your option)
11 rem   any later version.
13 rem   GNU Emacs is distributed in the hope that it will be useful,
14 rem   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 rem   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 rem   GNU General Public License for more details.
18 rem   You should have received a copy of the GNU General Public License
19 rem   along with GNU Emacs; see the file COPYING.  If not, write to the
20 rem   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 rem   Boston, MA 02111-1307, USA.
22 rem   ----------------------------------------------------------------------
23 rem   YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
24 rem
25 rem   + MS Windows 95/98 or NT/2000
26 rem   + either MSVC 2.x or later, or gcc-2.95 or later (with gmake 3.75
27 rem     or later) and the Mingw32 and W32 API headers and libraries
28 rem
29 rem For reference, here is a list of which builds of gmake are known to
30 rem work or not, and whether they work in the presence and/or absence of
31 rem sh.exe.
32 rem  
33 rem                                       sh exists     no sh
34 rem  cygwin b20.1 make (3.75):            okay[1]       fails[2]
35 rem  MSVC compiled gmake 3.77:            okay          okay
36 rem  MSVC compiled gmake 3.78.1:          okay          okay
37 rem  MSVC compiled gmake 3.79.1:          okay          okay
38 rem  mingw32/gcc-2.92.2 make (3.77):      okay          okay
39 rem  cygwin compiled gmake 3.77:          okay[1]       fails[2]
40 rem  cygwin compiled gmake 3.78.1:        okay          fails[2]
41 rem  cygwin compiled gmake 3.79.1:        couldn't build make[3]
42 rem
43 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
44 rem     emacs source with text!=binary.
45 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
46 rem [3] requires LC_MESSAGES support to build; maybe 2.95.x update to
47 rem     cygwin provides this?
48 rem
50 rem ----------------------------------------------------------------------
51 rem   See if the environment is large enough.  We need 43 (?) bytes.
52 set $foo$=123456789_123456789_123456789_123456789_123
53 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
54 set $foo$=
56 rem ----------------------------------------------------------------------
57 rem   Make sure we are running in the nt subdir
58 if exist configure.bat goto start
59 echo You must run configure from the nt subdirectory.
60 goto end
62 :start
63 rem ----------------------------------------------------------------------
64 rem   Default settings.
65 set prefix=
66 set nodebug=N
67 set noopt=N
68 set nocygwin=N
69 set COMPILER=
70 set usercflags=
71 set userldflags=
72 set sep1=
73 set sep2=
75 rem ----------------------------------------------------------------------
76 rem   Handle arguments.
77 :again
78 if "%1" == "-h" goto usage
79 if "%1" == "--help" goto usage
80 if "%1" == "--prefix" goto setprefix
81 if "%1" == "--with-gcc" goto withgcc
82 if "%1" == "--with-msvc" goto withmsvc
83 if "%1" == "--no-debug" goto nodebug
84 if "%1" == "--no-opt" goto noopt
85 if "%1" == "--no-cygwin" goto nocygwin
86 if "%1" == "--cflags" goto usercflags
87 if "%1" == "--ldflags" goto userldflags
88 if "%1" == "" goto checkutils
89 :usage
90 echo Usage: configure [options]
91 echo Options:
92 echo.   --prefix PREFIX         install Emacs in directory PREFIX
93 echo.   --with-gcc              use GCC to compile Emacs
94 echo.   --with-msvc             use MSVC to compile Emacs
95 echo.   --no-debug              exclude debug info from executables
96 echo.   --no-opt                disable optimization
97 echo.   --no-cygwin             use -mno-cygwin option with GCC
98 echo.   --cflags FLAG           pass FLAG to compiler
99 echo.   --ldflags FLAG          pass FLAG to compiler when linking
100 goto end
101 rem ----------------------------------------------------------------------
102 :setprefix
103 shift
104 set prefix=%1
105 shift
106 goto again
107 rem ----------------------------------------------------------------------
108 :withgcc
109 set COMPILER=gcc
110 shift
111 goto again
112 rem ----------------------------------------------------------------------
113 :withmsvc
114 set COMPILER=cl
115 shift
116 goto again
117 rem ----------------------------------------------------------------------
118 :nodebug
119 set nodebug=Y
120 shift
121 goto again
122 rem ----------------------------------------------------------------------
123 :noopt
124 set noopt=Y
125 shift
126 goto again
127 rem ----------------------------------------------------------------------
128 :nocygwin
129 set nocygwin=Y
130 shift
131 goto again
132 rem ----------------------------------------------------------------------
133 :usercflags
134 shift
135 set usercflags=%usercflags%%sep1%%1
136 set sep1= %nothing%
137 shift
138 goto again
139 rem ----------------------------------------------------------------------
140 :userldflags
141 shift
142 set userldflags=%userldflags%%sep2%%1
143 set sep2= %nothing%
144 shift
145 goto again
147 rem ----------------------------------------------------------------------
148 rem    Check that necessary utilities (cp and rm) are present.
149 :checkutils
150 echo Checking for 'cp'...
151 cp configure.bat junk.bat
152 if not exist junk.bat goto needcp
153 echo Checking for 'rm'...
154 rm junk.bat
155 if exist junk.bat goto needrm
156 goto checkcompiler
157 :needcp
158 echo You need 'cp' (the Unix file copy program) to build Emacs.
159 goto end
160 :needrm
161 del junk.bat
162 echo You need 'rm' (the Unix file delete program) to build Emacs.
163 goto end
165 rem ----------------------------------------------------------------------
166 rem   Auto-detect compiler if not specified, and validate GCC if chosen.
167 :checkcompiler
168 if (%COMPILER%)==(cl) goto genmakefiles
169 if (%COMPILER%)==(gcc) goto checkgcc
171 echo Checking whether 'cl' is available...
172 echo main(){} >junk.c
173 cl -nologo -c junk.c
174 if exist junk.obj goto clOK
176 echo Checking whether 'gcc' is available...
177 gcc -c junk.c
178 if not exist junk.o goto nocompiler
179 del junk.o
181 :checkgcc
182 if (%nocygwin%) == (Y) goto checkw32api
183 echo Checking whether gcc requires '-mno-cygwin'...
184 echo #include "cygwin/version.h" >junk.c
185 echo main(){} >>junk.c
186 gcc -c junk.c
187 if not exist junk.o goto checkw32api
188 gcc -mno-cygwin -c junk.c
189 if exist junk.o set nocygwin=Y
190 del junk.o junk.c
192 :checkw32api
193 rem ----------------------------------------------------------------------
194 rem   Older versions of the Windows API headers either don't have any of
195 rem   the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
196 rem   are like this), or have a typo in the definition of
197 rem   IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
198 rem   problem).  The gcc/mingw32 2.95.2 headers are okay, as are distros
199 rem   of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
201 echo Checking whether W32 API headers are too old...
202 echo #include "windows.h" >junk.c
203 echo test(PIMAGE_NT_HEADERS pHeader)>>junk.c
204 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);}>>junk.c
205 gcc -c junk.c
206 if exist junk.o goto gccOk
208 :nocompiler
209 echo.
210 echo Configure failed.
211 echo To configure Emacs for Windows, you need to have either
212 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
213 echo or MSVC 2.x or later.
214 del junk.c
215 goto end
217 :gccOk
218 set COMPILER=gcc
219 del junk.c junk.o
220 echo Using 'gcc'
221 goto genmakefiles
223 :clOk
224 set COMPILER=cl
225 del junk.c junk.obj
226 echo Using 'MSVC'
227 goto genmakefiles
229 rem ----------------------------------------------------------------------
230 :genmakefiles
231 echo Generating makefiles
232 if %COMPILER% == gcc set MAKECMD=gmake
233 if %COMPILER% == cl set MAKECMD=nmake
235 rem   Pass on chosen settings to makefiles.
236 echo # Start of settings from configure.bat >config.settings
237 echo COMPILER=%COMPILER% >>config.settings
238 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
239 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
240 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
241 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix% >>config.settings
242 if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags% >>config.settings
243 if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags% >>config.settings
244 echo # End of settings from configure.bat >>config.settings
245 echo. >>config.settings
247 copy config.nt ..\src\config.h
248 if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>..\src\config.h
249 if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>..\src\config.h
250 copy paths.h ..\src\epaths.h
252 rem   gmake doesn't support "cd foo" in commands (except as part of a
253 rem   compound statement which command.com doesn't support), but nmake
254 rem   doesn't support the -C dir command line switch, so generate the
255 rem   necessary makefile fragment for targets that involve changing dir.
256 rem 
257 if %MAKECMD% == nmake goto gen1
259 echo. > make-frag
260 echo all-other-dirs: >> make-frag
261 echo.   $(MAKE) -C ../lib-src all >> make-frag
262 echo.   $(MAKE) -C ../src all >> make-frag
263 echo.   $(MAKE) -C ../lisp all >> make-frag
264 echo.   $(MAKE) -C ../leim all >> make-frag
265 echo. >> make-frag
266 echo clean-other-dirs: >> make-frag
267 echo.   $(MAKE) -C ../lib-src clean >> make-frag
268 echo.   $(MAKE) -C ../src clean >> make-frag
269 echo.   $(MAKE) -C ../lisp clean >> make-frag
270 echo.   $(MAKE) -C ../leim clean >> make-frag
271 echo. >> make-frag
272 echo install-other-dirs: >> make-frag
273 echo.   $(MAKE) -C ../lib-src install >> make-frag
274 echo.   $(MAKE) -C ../src install >> make-frag
275 echo.   $(MAKE) -C ../lisp install >> make-frag
276 echo.   $(MAKE) -C ../leim install >> make-frag
277 echo. >> make-frag
278 goto gen2
280 :gen1
281 echo. > make-frag
282 echo all-other-dirs: >> make-frag
283 echo.   cd ..\lib-src >> make-frag
284 echo.   $(MAKE) all >> make-frag
285 echo.   cd ..\src >> make-frag
286 echo.   $(MAKE) all >> make-frag
287 echo.   cd ..\lisp >> make-frag
288 echo.   $(MAKE) all >> make-frag
289 echo.   cd ..\leim >> make-frag
290 echo.   $(MAKE) all >> make-frag
291 echo.   cd ..\nt >> make-frag
292 echo. >> make-frag
293 echo clean-other-dirs: >> make-frag
294 echo.   cd ..\lib-src >> make-frag
295 echo.   $(MAKE) clean >> make-frag
296 echo.   cd ..\src >> make-frag
297 echo.   $(MAKE) clean >> make-frag
298 echo.   cd ..\lisp >> make-frag
299 echo.   $(MAKE) clean >> make-frag
300 echo.   cd ..\leim >> make-frag
301 echo.   $(MAKE) clean >> make-frag
302 echo.   cd ..\nt >> make-frag
303 echo. >> make-frag
304 echo install-other-dirs: >> make-frag
305 echo.   cd ..\lib-src >> make-frag
306 echo.   $(MAKE) install >> make-frag
307 echo.   cd ..\src >> make-frag
308 echo.   $(MAKE) install >> make-frag
309 echo.   cd ..\lisp >> make-frag
310 echo.   $(MAKE) install >> make-frag
311 echo.   cd ..\leim >> make-frag
312 echo.   $(MAKE) install >> make-frag
313 echo.   cd ..\nt >> make-frag
314 echo. >> make-frag
316 :gen2
317 copy /b config.settings+%MAKECMD%.defs+make-frag+..\nt\makefile.w32-in ..\nt\makefile
318 del make-frag
319 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
320 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
321 if not exist ..\lisp\Makefile.unix rename ..\lisp\Makefile Makefile.unix
322 if exist ..\lisp\makefile del /f ..\lisp\makefile
323 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
324 rem   Use the default (no-op) Makefile.in if the nt version is not present.
325 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
326 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
327 del config.settings
329 echo.
330 echo Emacs successfully configured.
331 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
332 goto end
334 :SmallEnv
335 echo Your environment size is too small.  Please enlarge it and rerun configure.
336 echo For example, type "command.com /e:2048" to have 2048 bytes available.
337 set $foo$=
338 :end
339 set prefix=
340 set nodebug=
341 set noopt=
342 set nocygwin=
343 set COMPILER=
344 set MAKECMD=
345 set usercflags=
346 set userldflags=