1@echo off 2rem *************************************************************************** 3rem * _ _ ____ _ 4rem * Project ___| | | | _ \| | 5rem * / __| | | | |_) | | 6rem * | (__| |_| | _ <| |___ 7rem * \___|\___/|_| \_\_____| 8rem * 9rem * Copyright (C) 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.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 * SPDX-License-Identifier: curl 23rem * 24rem *************************************************************************** 25 26rem NOTES 27rem 28rem This batch file must be used to set up a git tree to build on systems where 29rem there is no autotools support (i.e. DOS and Windows). 30rem 31 32:begin 33 rem Set our variables 34 if "%OS%" == "Windows_NT" setlocal 35 set MODE=GENERATE 36 37 rem Switch to this batch file's directory 38 cd /d "%~0\.." 1>NUL 2>&1 39 40 rem Check we are running from a curl git repository 41 if not exist GIT-INFO goto norepo 42 43 rem Detect programs. HAVE_<PROGNAME> 44 rem When not found the variable is set undefined. The undefined pattern 45 rem allows for statements like "if not defined HAVE_PERL (command)" 46 groff --version <NUL 1>NUL 2>&1 47 if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y) 48 nroff --version <NUL 1>NUL 2>&1 49 if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y) 50 perl --version <NUL 1>NUL 2>&1 51 if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y) 52 gzip --version <NUL 1>NUL 2>&1 53 if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y) 54 55:parseArgs 56 if "%~1" == "" goto start 57 58 if /i "%~1" == "-clean" ( 59 set MODE=CLEAN 60 ) else if /i "%~1" == "-?" ( 61 goto syntax 62 ) else if /i "%~1" == "-h" ( 63 goto syntax 64 ) else if /i "%~1" == "-help" ( 65 goto syntax 66 ) else ( 67 goto unknown 68 ) 69 70 shift & goto parseArgs 71 72:start 73 if "%MODE%" == "GENERATE" ( 74 echo. 75 echo Generating prerequisite files 76 77 call :generate 78 if errorlevel 3 goto nogenhugehelp 79 if errorlevel 2 goto nogenmakefile 80 if errorlevel 1 goto warning 81 82 ) else ( 83 echo. 84 echo Removing prerequisite files 85 86 call :clean 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 102:generate 103 if "%OS%" == "Windows_NT" setlocal 104 set BASIC_HUGEHELP=0 105 106 rem Create Makefile 107 echo * %CD%\Makefile 108 if exist Makefile.dist ( 109 copy /Y Makefile.dist Makefile 1>NUL 2>&1 110 if errorlevel 1 ( 111 if "%OS%" == "Windows_NT" endlocal 112 exit /B 2 113 ) 114 ) 115 116 rem Create tool_hugehelp.c 117 echo * %CD%\src\tool_hugehelp.c 118 call :genHugeHelp 119 if errorlevel 2 ( 120 if "%OS%" == "Windows_NT" endlocal 121 exit /B 3 122 ) 123 if errorlevel 1 ( 124 set BASIC_HUGEHELP=1 125 ) 126 cmd /c exit 0 127 128 rem Setup c-ares git tree 129 if exist ares\buildconf.bat ( 130 echo. 131 echo Configuring c-ares build environment 132 cd ares 133 call buildconf.bat 134 cd .. 135 ) 136 137 if "%BASIC_HUGEHELP%" == "1" ( 138 if "%OS%" == "Windows_NT" endlocal 139 exit /B 1 140 ) 141 142 if "%OS%" == "Windows_NT" endlocal 143 exit /B 0 144 145rem Main clean function. 146rem 147rem Returns: 148rem 149rem 0 - success 150rem 1 - failed to clean Makefile 151rem 2 - failed to clean tool_hugehelp.c 152rem 153:clean 154 rem Remove Makefile 155 echo * %CD%\Makefile 156 if exist Makefile ( 157 del Makefile 2>NUL 158 if exist Makefile ( 159 exit /B 1 160 ) 161 ) 162 163 rem Remove tool_hugehelp.c 164 echo * %CD%\src\tool_hugehelp.c 165 if exist src\tool_hugehelp.c ( 166 del src\tool_hugehelp.c 2>NUL 167 if exist src\tool_hugehelp.c ( 168 exit /B 2 169 ) 170 ) 171 172 exit /B 173 174rem Function to generate src\tool_hugehelp.c 175rem 176rem Returns: 177rem 178rem 0 - full tool_hugehelp.c generated 179rem 1 - simplified tool_hugehelp.c 180rem 2 - failure 181rem 182:genHugeHelp 183 if "%OS%" == "Windows_NT" setlocal 184 set LC_ALL=C 185 set ROFFCMD= 186 set BASIC=1 187 188 if defined HAVE_PERL ( 189 if defined HAVE_GROFF ( 190 set ROFFCMD=groff -mtty-char -Tascii -P-c -man 191 ) else if defined HAVE_NROFF ( 192 set ROFFCMD=nroff -c -Tascii -man 193 ) 194 ) 195 196 if defined ROFFCMD ( 197 echo #include "tool_setup.h"> src\tool_hugehelp.c 198 echo #include "tool_hugehelp.h">> src\tool_hugehelp.c 199 200 if defined HAVE_GZIP ( 201 echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c 202 ) 203 204 %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c 205 if defined HAVE_GZIP ( 206 echo #else>> src\tool_hugehelp.c 207 %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c 208 echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c 209 ) 210 211 set BASIC=0 212 ) else ( 213 if exist src\tool_hugehelp.c.cvs ( 214 copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1 215 ) else ( 216 echo #include "tool_setup.h"> src\tool_hugehelp.c 217 echo #include "tool_hugehelp.h">> src\tool_hugehelp.c 218 echo.>> src\tool_hugehelp.c 219 echo void hugehelp(void^)>> src\tool_hugehelp.c 220 echo {>> src\tool_hugehelp.c 221 echo #ifdef USE_MANUAL>> src\tool_hugehelp.c 222 echo fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c 223 echo #endif>> src\tool_hugehelp.c 224 echo }>> src\tool_hugehelp.c 225 ) 226 ) 227 228 findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1 229 if errorlevel 1 ( 230 if "%OS%" == "Windows_NT" endlocal 231 exit /B 2 232 ) 233 234 if "%BASIC%" == "1" ( 235 if "%OS%" == "Windows_NT" endlocal 236 exit /B 1 237 ) 238 239 if "%OS%" == "Windows_NT" endlocal 240 exit /B 0 241 242rem Function to clean-up local variables under DOS, Windows 3.x and 243rem Windows 9x as setlocal isn't available until Windows NT 244rem 245:dosCleanup 246 set MODE= 247 set HAVE_GROFF= 248 set HAVE_NROFF= 249 set HAVE_PERL= 250 set HAVE_GZIP= 251 set BASIC_HUGEHELP= 252 set LC_ALL 253 set ROFFCMD= 254 set BASIC= 255 256 exit /B 257 258:syntax 259 rem Display the help 260 echo. 261 echo Usage: buildconf [-clean] 262 echo. 263 echo -clean - Removes the files 264 goto error 265 266:unknown 267 echo. 268 echo Error: Unknown argument '%1' 269 goto error 270 271:norepo 272 echo. 273 echo Error: This batch file should only be used with a curl git repository 274 goto error 275 276:nogenmakefile 277 echo. 278 echo Error: Unable to generate Makefile 279 goto error 280 281:nogenhugehelp 282 echo. 283 echo Error: Unable to generate src\tool_hugehelp.c 284 goto error 285 286:nocleanmakefile 287 echo. 288 echo Error: Unable to clean Makefile 289 goto error 290 291:nocleanhugehelp 292 echo. 293 echo Error: Unable to clean src\tool_hugehelp.c 294 goto error 295 296:warning 297 echo. 298 echo Warning: The curl manual could not be integrated in the source. This means when 299 echo you build curl the manual will not be available (curl --man^). Integration of 300 echo the manual is not required and a summary of the options will still be available 301 echo (curl --help^). To integrate the manual your PATH is required to have 302 echo groff/nroff, perl and optionally gzip for compression. 303 goto success 304 305:error 306 if "%OS%" == "Windows_NT" ( 307 endlocal 308 ) else ( 309 call :dosCleanup 310 ) 311 exit /B 1 312 313:success 314 if "%OS%" == "Windows_NT" ( 315 endlocal 316 ) else ( 317 call :dosCleanup 318 ) 319 exit /B 0 320