1@echo off 2rem *************************************************************************** 3rem * _ _ ____ _ 4rem * Project ___| | | | _ \| | 5rem * / __| | | | |_) | | 6rem * | (__| |_| | _ <| |___ 7rem * \___|\___/|_| \_\_____| 8rem * 9rem * Copyright (C) 1998 - 2016, 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 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 93rem Main generate function. 94rem 95rem Returns: 96rem 97rem 0 - success 98rem 1 - success with simplified tool_hugehelp.c 99rem 2 - failed to generate Makefile 100rem 3 - failed to generate tool_hugehelp.c 101rem 4 - failed to generate curlbuild.h 102rem 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 156rem Main clean function. 157rem 158rem Returns: 159rem 160rem 0 - success 161rem 1 - failed to clean Makefile 162rem 2 - failed to clean tool_hugehelp.c 163rem 3 - failed to clean curlbuild.h 164rem 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 195rem Function to generate src\tool_hugehelp.c 196rem 197rem Returns: 198rem 199rem 0 - full tool_hugehelp.c generated 200rem 1 - simplified tool_hugehelp.c 201rem 2 - failure 202rem 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 263rem Function to clean-up local variables under DOS, Windows 3.x and 264rem Windows 9x as setlocal isn't available until Windows NT 265rem 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 351