• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1@echo off
2rem ***************************************************************************
3rem *                                  _   _ ____  _
4rem *  Project                     ___| | | |  _ \| |
5rem *                             / __| | | | |_) | |
6rem *                            | (__| |_| |  _ <| |___
7rem *                             \___|\___/|_| \_\_____|
8rem *
9rem * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
10rem *
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 ***************************************************************************
23
24rem 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
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 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
85    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
99rem
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
126  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
150rem
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
170  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
284: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
294: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
318