(charset_ordered_list_tick): Declare extern.
[bpt/emacs.git] / nt / configure.bat
1 @echo off
2 rem ----------------------------------------------------------------------
3 rem Configuration script for MS Windows 95/98 and NT/2000
4 rem Copyright (C) 1999-2001 Free Software Foundation, Inc.
5
6 rem This file is part of GNU Emacs.
7
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.
12
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.
17
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
49
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$=
55
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
61
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=
74
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
146
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
164
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
170
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
175
176 echo Checking whether 'gcc' is available...
177 gcc -c junk.c
178 if not exist junk.o goto nocompiler
179 del junk.o
180
181 :checkgcc
182 Rem WARNING -- COMMAND.COM on some systems only looks at the first
183 Rem 8 characters of a label. So do NOT be tempted to change
184 Rem chkapi* into something fancier like checkw32api
185 Rem You HAVE been warned!
186 if (%nocygwin%) == (Y) goto chkapi
187 echo Checking whether gcc requires '-mno-cygwin'...
188 echo #include "cygwin/version.h" >junk.c
189 echo main(){} >>junk.c
190 gcc -c junk.c
191 if not exist junk.o goto chkapi
192 gcc -mno-cygwin -c junk.c
193 if exist junk.o set nocygwin=Y
194 rm -f junk.c junk.o
195
196 :chkapi
197 rem ----------------------------------------------------------------------
198 rem Older versions of the Windows API headers either don't have any of
199 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
200 rem are like this), or have a typo in the definition of
201 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
202 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
203 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
204 rem
205 echo Checking whether W32 API headers are too old...
206 echo #include "windows.h" >junk.c
207 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
208 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
209 if (%nocygwin%) == (Y) goto chkapi1
210 set cf=%usercflags%
211 goto chkapi2
212 :chkapi1
213 set cf=%usercflags% -mno-cygwin
214 :chkapi2
215 echo on
216 gcc %cf% -c junk.c
217 echo off
218 set cf=
219 if exist junk.o goto gccOk
220
221 :nocompiler
222 echo.
223 echo Configure failed.
224 echo To configure Emacs for Windows, you need to have either
225 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
226 echo or MSVC 2.x or later.
227 del junk.c
228 goto end
229
230 :gccOk
231 set COMPILER=gcc
232 rm -f junk.c junk.o
233 echo Using 'gcc'
234 goto genmakefiles
235
236 :clOk
237 set COMPILER=cl
238 rm -f junk.c junk.obj
239 echo Using 'MSVC'
240 goto genmakefiles
241
242 rem ----------------------------------------------------------------------
243 :genmakefiles
244 echo Generating makefiles
245 if %COMPILER% == gcc set MAKECMD=gmake
246 if %COMPILER% == cl set MAKECMD=nmake
247
248 rem Pass on chosen settings to makefiles.
249 rem NB. Be very careful to not have a space before redirection symbols
250 rem except when there is a preceding digit, when a space is required.
251 rem
252 echo # Start of settings from configure.bat >config.settings
253 echo COMPILER=%COMPILER%>>config.settings
254 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
255 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
256 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
257 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
258 if not "(%usercflags%)" == "()" echo USER_CFLAGS=%usercflags%>>config.settings
259 if not "(%userldflags%)" == "()" echo USER_LDFLAGS=%userldflags%>>config.settings
260 echo # End of settings from configure.bat>>config.settings
261 echo. >>config.settings
262
263 copy config.nt ..\src\config.h
264 if not "(%usercflags%)" == "()" echo #define USER_CFLAGS " %usercflags%">>..\src\config.h
265 if not "(%userldflags%)" == "()" echo #define USER_LDFLAGS " %userldflags%">>..\src\config.h
266 copy paths.h ..\src\epaths.h
267
268 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
269 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
270 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
271 if not exist ..\lisp\Makefile.unix rename ..\lisp\Makefile.in Makefile.unix
272 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
273 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
274 rem Use the default (no-op) Makefile.in if the nt version is not present.
275 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
276 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
277 del config.settings
278
279 Rem Some people use WinZip which doesn't create empty directories!
280 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
281 if not exist ..\site-lisp\subdirs.el copy subdirs.el ..\site-lisp\subdirs.el
282
283 echo.
284 echo Emacs successfully configured.
285 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
286 goto end
287
288 :SmallEnv
289 echo Your environment size is too small. Please enlarge it and rerun configure.
290 echo For example, type "command.com /e:2048" to have 2048 bytes available.
291 set $foo$=
292 :end
293 set prefix=
294 set nodebug=
295 set noopt=
296 set nocygwin=
297 set COMPILER=
298 set MAKECMD=
299 set usercflags=
300 set userldflags=