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