Used %license macro
[platform/upstream/curl.git] / buildconf.bat
1 @echo off
2 rem ***************************************************************************
3 rem *                                  _   _ ____  _
4 rem *  Project                     ___| | | |  _ \| |
5 rem *                             / __| | | | |_) | |
6 rem *                            | (__| |_| |  _ <| |___
7 rem *                             \___|\___/|_| \_\_____|
8 rem *
9 rem * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
10 rem *
11 rem * This software is licensed as described in the file COPYING, which
12 rem * you should have received as part of this distribution. The terms
13 rem * are also available at https://curl.haxx.se/docs/copyright.html.
14 rem *
15 rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
16 rem * copies of the Software, and permit persons to whom the Software is
17 rem * furnished to do so, under the terms of the COPYING file.
18 rem *
19 rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20 rem * KIND, either express or implied.
21 rem *
22 rem ***************************************************************************
23
24 rem NOTES
25 rem
26 rem This batch file must be used to set up a git tree to build on systems where
27 rem there is no autotools support (i.e. DOS and Windows).
28 rem
29
30 :begin
31   rem Set our variables
32   if "%OS%" == "Windows_NT" setlocal
33   set MODE=GENERATE
34
35   rem Switch to this batch file's directory
36   cd /d "%~0\.." 1>NUL 2>&1
37
38   rem Check we are running from a curl git repository
39   if not exist GIT-INFO goto norepo
40
41   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)
52
53 :parseArgs
54   if "%~1" == "" goto start
55
56   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
76     if errorlevel 4 goto nogencurlbuild
77     if errorlevel 3 goto nogenhugehelp
78     if errorlevel 2 goto nogenmakefile
79     if errorlevel 1 goto warning
80
81   ) else (
82     echo.
83     echo Removing prerequisite files
84
85     call :clean
86     if errorlevel 3 goto nocleancurlbuild
87     if errorlevel 2 goto nocleanhugehelp
88     if errorlevel 1 goto nocleanmakefile
89   )
90
91   goto success
92
93 rem Main generate function.
94 rem
95 rem Returns:
96 rem
97 rem 0 - success
98 rem 1 - success with simplified tool_hugehelp.c 
99 rem 2 - failed to generate Makefile
100 rem 3 - failed to generate tool_hugehelp.c
101 rem 4 - failed to generate curlbuild.h
102 rem
103 :generate
104   if "%OS%" == "Windows_NT" setlocal
105   set BASIC_HUGEHELP=0
106
107   rem Create Makefile
108   echo * %CD%\Makefile
109   if exist Makefile.dist (
110     copy /Y Makefile.dist Makefile 1>NUL 2>&1
111     if errorlevel 1 (
112       if "%OS%" == "Windows_NT" endlocal
113       exit /B 2
114     )
115   )
116
117   rem Create tool_hugehelp.c
118   echo * %CD%\src\tool_hugehelp.c
119   call :genHugeHelp
120   if errorlevel 2 (
121     if "%OS%" == "Windows_NT" endlocal
122     exit /B 3
123   )
124   if errorlevel 1 (
125     set BASIC_HUGEHELP=1
126   )
127   cmd /c exit 0
128
129   rem Create curlbuild.h
130   echo * %CD%\include\curl\curlbuild.h
131   if exist include\curl\curlbuild.h.dist (
132     copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1
133     if errorlevel 1 (
134       if "%OS%" == "Windows_NT" endlocal
135       exit /B 4
136     )
137   )
138
139   rem Setup c-ares git tree
140   if exist ares\buildconf.bat (
141     echo.
142     echo Configuring c-ares build environment
143     cd ares
144     call buildconf.bat
145     cd ..
146   )
147
148   if "%BASIC_HUGEHELP%" == "1" (
149     if "%OS%" == "Windows_NT" endlocal
150     exit /B 1
151   )
152
153   if "%OS%" == "Windows_NT" endlocal
154   exit /B 0
155
156 rem Main clean function.
157 rem
158 rem Returns:
159 rem
160 rem 0 - success
161 rem 1 - failed to clean Makefile
162 rem 2 - failed to clean tool_hugehelp.c
163 rem 3 - failed to clean curlbuild.h
164 rem
165 :clean
166   rem Remove Makefile
167   echo * %CD%\Makefile
168   if exist Makefile (
169     del Makefile 2>NUL
170     if exist Makefile (
171       exit /B 1
172     )
173   )
174
175   rem Remove tool_hugehelp.c
176   echo * %CD%\src\tool_hugehelp.c
177   if exist src\tool_hugehelp.c (
178     del src\tool_hugehelp.c 2>NUL
179     if exist src\tool_hugehelp.c (
180       exit /B 2
181     )
182   )
183
184   rem Remove curlbuild.h
185   echo * %CD%\include\curl\curlbuild.h
186   if exist include\curl\curlbuild.h (
187     del include\curl\curlbuild.h 2>NUL
188     if exist include\curl\curlbuild.h (
189       exit /B 3
190     )
191   )
192
193   exit /B
194
195 rem Function to generate src\tool_hugehelp.c
196 rem
197 rem Returns:
198 rem
199 rem 0 - full tool_hugehelp.c generated
200 rem 1 - simplified tool_hugehelp.c
201 rem 2 - failure
202 rem
203 :genHugeHelp
204   if "%OS%" == "Windows_NT" setlocal
205   set LC_ALL=C
206   set ROFFCMD=
207   set BASIC=1
208
209   if defined HAVE_PERL (
210     if defined HAVE_GROFF (
211       set ROFFCMD=groff -mtty-char -Tascii -P-c -man
212     ) else if defined HAVE_NROFF (
213       set ROFFCMD=nroff -c -Tascii -man
214     )
215   )
216
217   if defined ROFFCMD (
218     echo #include "tool_setup.h"> src\tool_hugehelp.c
219     echo #include "tool_hugehelp.h">> src\tool_hugehelp.c 
220
221     if defined HAVE_GZIP (
222       echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c
223     )
224
225     %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c
226     if defined HAVE_GZIP (
227       echo #else>> src\tool_hugehelp.c
228       %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c
229       echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c
230     )
231
232     set BASIC=0
233   ) else (
234     if exist src\tool_hugehelp.c.cvs (
235       copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1
236     ) else (
237       echo #include "tool_setup.h"> src\tool_hugehelp.c
238       echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c
239       echo.>> src\tool_hugehelp.c
240       echo void hugehelp(void^)>> src\tool_hugehelp.c
241       echo {>> src\tool_hugehelp.c
242       echo #ifdef USE_MANUAL>> src\tool_hugehelp.c
243       echo   fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c
244       echo #endif>> src\tool_hugehelp.c
245       echo }>> src\tool_hugehelp.c
246     )
247   )
248
249   findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1
250   if errorlevel 1 (
251     if "%OS%" == "Windows_NT" endlocal
252     exit /B 2
253   )
254
255   if "%BASIC%" == "1" (
256     if "%OS%" == "Windows_NT" endlocal
257     exit /B 1
258   )
259
260   if "%OS%" == "Windows_NT" endlocal
261   exit /B 0
262
263 rem Function to clean-up local variables under DOS, Windows 3.x and
264 rem Windows 9x as setlocal isn't available until Windows NT
265 rem
266 :dosCleanup
267   set MODE=
268   set HAVE_GROFF=
269   set HAVE_NROFF=
270   set HAVE_PERL=
271   set HAVE_GZIP=
272   set BASIC_HUGEHELP=
273   set LC_ALL
274   set ROFFCMD=
275   set BASIC=
276
277   exit /B
278
279 :syntax
280   rem Display the help
281   echo.
282   echo Usage: buildconf [-clean]
283   echo.
284   echo -clean    - Removes the files
285   goto error
286
287 :unknown
288   echo.
289   echo Error: Unknown argument '%1'
290   goto error
291
292 :norepo
293   echo.
294   echo Error: This batch file should only be used with a curl git repository
295   goto error
296
297 :nogenmakefile
298   echo.
299   echo Error: Unable to generate Makefile
300   goto error
301
302 :nogenhugehelp
303   echo.
304   echo Error: Unable to generate src\tool_hugehelp.c
305   goto error
306
307 :nogencurlbuild
308   echo.
309   echo Error: Unable to generate include\curl\curlbuild.h
310   goto error
311
312 :nocleanmakefile
313   echo.
314   echo Error: Unable to clean Makefile
315   goto error
316
317 :nocleanhugehelp
318   echo.
319   echo Error: Unable to clean src\tool_hugehelp.c
320   goto error
321
322 :nocleancurlbuild
323   echo.
324   echo Error: Unable to clean include\curl\curlbuild.h
325   goto error
326
327 :warning
328   echo.
329   echo Warning: The curl manual could not be integrated in the source. This means when
330   echo you build curl the manual will not be available (curl --man^). Integration of
331   echo the manual is not required and a summary of the options will still be available
332   echo (curl --help^). To integrate the manual your PATH is required to have
333   echo groff/nroff, perl and optionally gzip for compression.
334   goto success
335
336 :error
337   if "%OS%" == "Windows_NT" (
338     endlocal
339   ) else (
340     call :dosCleanup
341   )
342   exit /B 1
343
344 :success
345   if "%OS%" == "Windows_NT" (
346     endlocal
347   ) else (
348     call :dosCleanup
349   )
350   exit /B 0