blob: da5c0391af7e445d6ec83e9b5024e17f35e95c4c [file] [log] [blame]
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07001@echo off
Alex Deymo8f1a2142016-06-28 14:49:26 -07002rem ***************************************************************************
3rem * _ _ ____ _
4rem * Project ___| | | | _ \| |
5rem * / __| | | | |_) | |
6rem * | (__| |_| | _ <| |___
7rem * \___|\___/|_| \_\_____|
8rem *
Elliott Hughes82be86d2017-09-20 17:00:17 -07009rem * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
Alex Deymo8f1a2142016-06-28 14:49:26 -070010rem *
11rem * This software is licensed as described in the file COPYING, which
12rem * you should have received as part of this distribution. The terms
13rem * are also available at https://curl.haxx.se/docs/copyright.html.
14rem *
15rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
16rem * copies of the Software, and permit persons to whom the Software is
17rem * furnished to do so, under the terms of the COPYING file.
18rem *
19rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20rem * KIND, either express or implied.
21rem *
22rem ***************************************************************************
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070023
Alex Deymo8f1a2142016-06-28 14:49:26 -070024rem NOTES
25rem
26rem This batch file must be used to set up a git tree to build on systems where
27rem there is no autotools support (i.e. DOS and Windows).
28rem
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070029
Alex Deymo8f1a2142016-06-28 14:49:26 -070030:begin
31 rem Set our variables
32 if "%OS%" == "Windows_NT" setlocal
33 set MODE=GENERATE
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070034
Alex Deymo8f1a2142016-06-28 14:49:26 -070035 rem Switch to this batch file's directory
36 cd /d "%~0\.." 1>NUL 2>&1
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070037
Alex Deymo8f1a2142016-06-28 14:49:26 -070038 rem Check we are running from a curl git repository
39 if not exist GIT-INFO goto norepo
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070040
Alex Deymo8f1a2142016-06-28 14:49:26 -070041 rem Detect programs. HAVE_<PROGNAME>
42 rem When not found the variable is set undefined. The undefined pattern
43 rem allows for statements like "if not defined HAVE_PERL (command)"
44 groff --version <NUL 1>NUL 2>&1
45 if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y)
46 nroff --version <NUL 1>NUL 2>&1
47 if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y)
48 perl --version <NUL 1>NUL 2>&1
49 if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y)
50 gzip --version <NUL 1>NUL 2>&1
51 if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y)
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070052
Alex Deymo8f1a2142016-06-28 14:49:26 -070053:parseArgs
54 if "%~1" == "" goto start
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070055
Alex Deymo8f1a2142016-06-28 14:49:26 -070056 if /i "%~1" == "-clean" (
57 set MODE=CLEAN
58 ) else if /i "%~1" == "-?" (
59 goto syntax
60 ) else if /i "%~1" == "-h" (
61 goto syntax
62 ) else if /i "%~1" == "-help" (
63 goto syntax
64 ) else (
65 goto unknown
66 )
67
68 shift & goto parseArgs
69
70:start
71 if "%MODE%" == "GENERATE" (
72 echo.
73 echo Generating prerequisite files
74
75 call :generate
Alex Deymo8f1a2142016-06-28 14:49:26 -070076 if errorlevel 3 goto nogenhugehelp
77 if errorlevel 2 goto nogenmakefile
78 if errorlevel 1 goto warning
79
80 ) else (
81 echo.
82 echo Removing prerequisite files
83
84 call :clean
Alex Deymo8f1a2142016-06-28 14:49:26 -070085 if errorlevel 2 goto nocleanhugehelp
86 if errorlevel 1 goto nocleanmakefile
87 )
88
89 goto success
90
91rem Main generate function.
92rem
93rem Returns:
94rem
95rem 0 - success
96rem 1 - success with simplified tool_hugehelp.c
97rem 2 - failed to generate Makefile
98rem 3 - failed to generate tool_hugehelp.c
Alex Deymo8f1a2142016-06-28 14:49:26 -070099rem
100:generate
101 if "%OS%" == "Windows_NT" setlocal
102 set BASIC_HUGEHELP=0
103
104 rem Create Makefile
105 echo * %CD%\Makefile
106 if exist Makefile.dist (
107 copy /Y Makefile.dist Makefile 1>NUL 2>&1
108 if errorlevel 1 (
109 if "%OS%" == "Windows_NT" endlocal
110 exit /B 2
111 )
112 )
113
114 rem Create tool_hugehelp.c
115 echo * %CD%\src\tool_hugehelp.c
116 call :genHugeHelp
117 if errorlevel 2 (
118 if "%OS%" == "Windows_NT" endlocal
119 exit /B 3
120 )
121 if errorlevel 1 (
122 set BASIC_HUGEHELP=1
123 )
124 cmd /c exit 0
125
Alex Deymo8f1a2142016-06-28 14:49:26 -0700126 rem Setup c-ares git tree
127 if exist ares\buildconf.bat (
128 echo.
129 echo Configuring c-ares build environment
130 cd ares
131 call buildconf.bat
132 cd ..
133 )
134
135 if "%BASIC_HUGEHELP%" == "1" (
136 if "%OS%" == "Windows_NT" endlocal
137 exit /B 1
138 )
139
140 if "%OS%" == "Windows_NT" endlocal
141 exit /B 0
142
143rem Main clean function.
144rem
145rem Returns:
146rem
147rem 0 - success
148rem 1 - failed to clean Makefile
149rem 2 - failed to clean tool_hugehelp.c
Alex Deymo8f1a2142016-06-28 14:49:26 -0700150rem
151:clean
152 rem Remove Makefile
153 echo * %CD%\Makefile
154 if exist Makefile (
155 del Makefile 2>NUL
156 if exist Makefile (
157 exit /B 1
158 )
159 )
160
161 rem Remove tool_hugehelp.c
162 echo * %CD%\src\tool_hugehelp.c
163 if exist src\tool_hugehelp.c (
164 del src\tool_hugehelp.c 2>NUL
165 if exist src\tool_hugehelp.c (
166 exit /B 2
167 )
168 )
169
Alex Deymo8f1a2142016-06-28 14:49:26 -0700170 exit /B
171
172rem Function to generate src\tool_hugehelp.c
173rem
174rem Returns:
175rem
176rem 0 - full tool_hugehelp.c generated
177rem 1 - simplified tool_hugehelp.c
178rem 2 - failure
179rem
180:genHugeHelp
181 if "%OS%" == "Windows_NT" setlocal
182 set LC_ALL=C
183 set ROFFCMD=
184 set BASIC=1
185
186 if defined HAVE_PERL (
187 if defined HAVE_GROFF (
188 set ROFFCMD=groff -mtty-char -Tascii -P-c -man
189 ) else if defined HAVE_NROFF (
190 set ROFFCMD=nroff -c -Tascii -man
191 )
192 )
193
194 if defined ROFFCMD (
195 echo #include "tool_setup.h"> src\tool_hugehelp.c
196 echo #include "tool_hugehelp.h">> src\tool_hugehelp.c
197
198 if defined HAVE_GZIP (
199 echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c
200 )
201
202 %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c
203 if defined HAVE_GZIP (
204 echo #else>> src\tool_hugehelp.c
205 %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c
206 echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c
207 )
208
209 set BASIC=0
210 ) else (
211 if exist src\tool_hugehelp.c.cvs (
212 copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1
213 ) else (
214 echo #include "tool_setup.h"> src\tool_hugehelp.c
215 echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c
216 echo.>> src\tool_hugehelp.c
217 echo void hugehelp(void^)>> src\tool_hugehelp.c
218 echo {>> src\tool_hugehelp.c
219 echo #ifdef USE_MANUAL>> src\tool_hugehelp.c
220 echo fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c
221 echo #endif>> src\tool_hugehelp.c
222 echo }>> src\tool_hugehelp.c
223 )
224 )
225
226 findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1
227 if errorlevel 1 (
228 if "%OS%" == "Windows_NT" endlocal
229 exit /B 2
230 )
231
232 if "%BASIC%" == "1" (
233 if "%OS%" == "Windows_NT" endlocal
234 exit /B 1
235 )
236
237 if "%OS%" == "Windows_NT" endlocal
238 exit /B 0
239
240rem Function to clean-up local variables under DOS, Windows 3.x and
241rem Windows 9x as setlocal isn't available until Windows NT
242rem
243:dosCleanup
244 set MODE=
245 set HAVE_GROFF=
246 set HAVE_NROFF=
247 set HAVE_PERL=
248 set HAVE_GZIP=
249 set BASIC_HUGEHELP=
250 set LC_ALL
251 set ROFFCMD=
252 set BASIC=
253
254 exit /B
255
256:syntax
257 rem Display the help
258 echo.
259 echo Usage: buildconf [-clean]
260 echo.
261 echo -clean - Removes the files
262 goto error
263
264:unknown
265 echo.
266 echo Error: Unknown argument '%1'
267 goto error
268
269:norepo
270 echo.
271 echo Error: This batch file should only be used with a curl git repository
272 goto error
273
274:nogenmakefile
275 echo.
276 echo Error: Unable to generate Makefile
277 goto error
278
279:nogenhugehelp
280 echo.
281 echo Error: Unable to generate src\tool_hugehelp.c
282 goto error
283
Alex Deymo8f1a2142016-06-28 14:49:26 -0700284:nocleanmakefile
285 echo.
286 echo Error: Unable to clean Makefile
287 goto error
288
289:nocleanhugehelp
290 echo.
291 echo Error: Unable to clean src\tool_hugehelp.c
292 goto error
293
Alex Deymo8f1a2142016-06-28 14:49:26 -0700294:warning
295 echo.
296 echo Warning: The curl manual could not be integrated in the source. This means when
297 echo you build curl the manual will not be available (curl --man^). Integration of
298 echo the manual is not required and a summary of the options will still be available
299 echo (curl --help^). To integrate the manual your PATH is required to have
300 echo groff/nroff, perl and optionally gzip for compression.
301 goto success
302
303:error
304 if "%OS%" == "Windows_NT" (
305 endlocal
306 ) else (
307 call :dosCleanup
308 )
309 exit /B 1
310
311:success
312 if "%OS%" == "Windows_NT" (
313 endlocal
314 ) else (
315 call :dosCleanup
316 )
317 exit /B 0