@echo off
-REM
-REM
-REM This batch file must be used to set up a git tree to build on
-REM systems where there is no autotools support (i.e. Microsoft).
-REM
-REM This file is not included nor needed for curl's release
-REM archives, neither for curl's daily snapshot archives.
-
-if exist GIT-INFO goto start_doing
-ECHO ERROR: This file shall only be used with a curl git tree checkout.
-goto end_all
-:start_doing
-
-REM create hugehelp.c
-if not exist src\hugehelp.c.cvs goto end_hugehelp_c
-copy /Y src\hugehelp.c.cvs src\hugehelp.c
-:end_hugehelp_c
-
-REM create Makefile
-if not exist Makefile.dist goto end_makefile
-copy /Y Makefile.dist Makefile
-:end_makefile
-
-REM create curlbuild.h
-if not exist include\curl\curlbuild.h.dist goto end_curlbuild_h
-copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h
-:end_curlbuild_h
-
-REM create src\config-win32.h
-if not exist lib\config-win32.h goto end_config_win32_h
-copy /Y lib\config-win32.h src\config-win32.h
-:end_config_win32_h
-
-REM setup c-ares git tree
-if not exist ares\buildconf.bat goto end_c_ares
-cd ares
-call buildconf.bat
-cd ..
-:end_c_ares
-
-:end_all
+rem ***************************************************************************
+rem * _ _ ____ _
+rem * Project ___| | | | _ \| |
+rem * / __| | | | |_) | |
+rem * | (__| |_| | _ <| |___
+rem * \___|\___/|_| \_\_____|
+rem *
+rem * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+rem *
+rem * This software is licensed as described in the file COPYING, which
+rem * you should have received as part of this distribution. The terms
+rem * are also available at https://curl.haxx.se/docs/copyright.html.
+rem *
+rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+rem * copies of the Software, and permit persons to whom the Software is
+rem * furnished to do so, under the terms of the COPYING file.
+rem *
+rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+rem * KIND, either express or implied.
+rem *
+rem ***************************************************************************
+rem NOTES
+rem
+rem This batch file must be used to set up a git tree to build on systems where
+rem there is no autotools support (i.e. DOS and Windows).
+rem
+
+:begin
+ rem Set our variables
+ if "%OS%" == "Windows_NT" setlocal
+ set MODE=GENERATE
+
+ rem Switch to this batch file's directory
+ cd /d "%~0\.." 1>NUL 2>&1
+
+ rem Check we are running from a curl git repository
+ if not exist GIT-INFO goto norepo
+
+ rem Detect programs. HAVE_<PROGNAME>
+ rem When not found the variable is set undefined. The undefined pattern
+ rem allows for statements like "if not defined HAVE_PERL (command)"
+ groff --version <NUL 1>NUL 2>&1
+ if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y)
+ nroff --version <NUL 1>NUL 2>&1
+ if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y)
+ perl --version <NUL 1>NUL 2>&1
+ if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y)
+ gzip --version <NUL 1>NUL 2>&1
+ if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y)
+
+:parseArgs
+ if "%~1" == "" goto start
+
+ if /i "%~1" == "-clean" (
+ set MODE=CLEAN
+ ) else if /i "%~1" == "-?" (
+ goto syntax
+ ) else if /i "%~1" == "-h" (
+ goto syntax
+ ) else if /i "%~1" == "-help" (
+ goto syntax
+ ) else (
+ goto unknown
+ )
+
+ shift & goto parseArgs
+
+:start
+ if "%MODE%" == "GENERATE" (
+ echo.
+ echo Generating prerequisite files
+
+ call :generate
+ if errorlevel 4 goto nogencurlbuild
+ if errorlevel 3 goto nogenhugehelp
+ if errorlevel 2 goto nogenmakefile
+ if errorlevel 1 goto warning
+
+ ) else (
+ echo.
+ echo Removing prerequisite files
+
+ call :clean
+ if errorlevel 3 goto nocleancurlbuild
+ if errorlevel 2 goto nocleanhugehelp
+ if errorlevel 1 goto nocleanmakefile
+ )
+
+ goto success
+
+rem Main generate function.
+rem
+rem Returns:
+rem
+rem 0 - success
+rem 1 - success with simplified tool_hugehelp.c
+rem 2 - failed to generate Makefile
+rem 3 - failed to generate tool_hugehelp.c
+rem 4 - failed to generate curlbuild.h
+rem
+:generate
+ if "%OS%" == "Windows_NT" setlocal
+ set BASIC_HUGEHELP=0
+
+ rem Create Makefile
+ echo * %CD%\Makefile
+ if exist Makefile.dist (
+ copy /Y Makefile.dist Makefile 1>NUL 2>&1
+ if errorlevel 1 (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 2
+ )
+ )
+
+ rem Create tool_hugehelp.c
+ echo * %CD%\src\tool_hugehelp.c
+ call :genHugeHelp
+ if errorlevel 2 (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 3
+ )
+ if errorlevel 1 (
+ set BASIC_HUGEHELP=1
+ )
+ cmd /c exit 0
+
+ rem Create curlbuild.h
+ echo * %CD%\include\curl\curlbuild.h
+ if exist include\curl\curlbuild.h.dist (
+ copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1
+ if errorlevel 1 (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 4
+ )
+ )
+
+ rem Setup c-ares git tree
+ if exist ares\buildconf.bat (
+ echo.
+ echo Configuring c-ares build environment
+ cd ares
+ call buildconf.bat
+ cd ..
+ )
+
+ if "%BASIC_HUGEHELP%" == "1" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+ )
+
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+
+rem Main clean function.
+rem
+rem Returns:
+rem
+rem 0 - success
+rem 1 - failed to clean Makefile
+rem 2 - failed to clean tool_hugehelp.c
+rem 3 - failed to clean curlbuild.h
+rem
+:clean
+ rem Remove Makefile
+ echo * %CD%\Makefile
+ if exist Makefile (
+ del Makefile 2>NUL
+ if exist Makefile (
+ exit /B 1
+ )
+ )
+
+ rem Remove tool_hugehelp.c
+ echo * %CD%\src\tool_hugehelp.c
+ if exist src\tool_hugehelp.c (
+ del src\tool_hugehelp.c 2>NUL
+ if exist src\tool_hugehelp.c (
+ exit /B 2
+ )
+ )
+
+ rem Remove curlbuild.h
+ echo * %CD%\include\curl\curlbuild.h
+ if exist include\curl\curlbuild.h (
+ del include\curl\curlbuild.h 2>NUL
+ if exist include\curl\curlbuild.h (
+ exit /B 3
+ )
+ )
+
+ exit /B
+
+rem Function to generate src\tool_hugehelp.c
+rem
+rem Returns:
+rem
+rem 0 - full tool_hugehelp.c generated
+rem 1 - simplified tool_hugehelp.c
+rem 2 - failure
+rem
+:genHugeHelp
+ if "%OS%" == "Windows_NT" setlocal
+ set LC_ALL=C
+ set ROFFCMD=
+ set BASIC=1
+
+ if defined HAVE_PERL (
+ if defined HAVE_GROFF (
+ set ROFFCMD=groff -mtty-char -Tascii -P-c -man
+ ) else if defined HAVE_NROFF (
+ set ROFFCMD=nroff -c -Tascii -man
+ )
+ )
+
+ if defined ROFFCMD (
+ echo #include "tool_setup.h"> src\tool_hugehelp.c
+ echo #include "tool_hugehelp.h">> src\tool_hugehelp.c
+
+ if defined HAVE_GZIP (
+ echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c
+ )
+
+ %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c
+ if defined HAVE_GZIP (
+ echo #else>> src\tool_hugehelp.c
+ %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c
+ echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c
+ )
+
+ set BASIC=0
+ ) else (
+ if exist src\tool_hugehelp.c.cvs (
+ copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1
+ ) else (
+ echo #include "tool_setup.h"> src\tool_hugehelp.c
+ echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c
+ echo.>> src\tool_hugehelp.c
+ echo void hugehelp(void^)>> src\tool_hugehelp.c
+ echo {>> src\tool_hugehelp.c
+ echo #ifdef USE_MANUAL>> src\tool_hugehelp.c
+ echo fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c
+ echo #endif>> src\tool_hugehelp.c
+ echo }>> src\tool_hugehelp.c
+ )
+ )
+
+ findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1
+ if errorlevel 1 (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 2
+ )
+
+ if "%BASIC%" == "1" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+ )
+
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+
+rem Function to clean-up local variables under DOS, Windows 3.x and
+rem Windows 9x as setlocal isn't available until Windows NT
+rem
+:dosCleanup
+ set MODE=
+ set HAVE_GROFF=
+ set HAVE_NROFF=
+ set HAVE_PERL=
+ set HAVE_GZIP=
+ set BASIC_HUGEHELP=
+ set LC_ALL
+ set ROFFCMD=
+ set BASIC=
+
+ exit /B
+
+:syntax
+ rem Display the help
+ echo.
+ echo Usage: buildconf [-clean]
+ echo.
+ echo -clean - Removes the files
+ goto error
+
+:unknown
+ echo.
+ echo Error: Unknown argument '%1'
+ goto error
+
+:norepo
+ echo.
+ echo Error: This batch file should only be used with a curl git repository
+ goto error
+
+:nogenmakefile
+ echo.
+ echo Error: Unable to generate Makefile
+ goto error
+
+:nogenhugehelp
+ echo.
+ echo Error: Unable to generate src\tool_hugehelp.c
+ goto error
+
+:nogencurlbuild
+ echo.
+ echo Error: Unable to generate include\curl\curlbuild.h
+ goto error
+
+:nocleanmakefile
+ echo.
+ echo Error: Unable to clean Makefile
+ goto error
+
+:nocleanhugehelp
+ echo.
+ echo Error: Unable to clean src\tool_hugehelp.c
+ goto error
+
+:nocleancurlbuild
+ echo.
+ echo Error: Unable to clean include\curl\curlbuild.h
+ goto error
+
+:warning
+ echo.
+ echo Warning: The curl manual could not be integrated in the source. This means when
+ echo you build curl the manual will not be available (curl --man^). Integration of
+ echo the manual is not required and a summary of the options will still be available
+ echo (curl --help^). To integrate the manual your PATH is required to have
+ echo groff/nroff, perl and optionally gzip for compression.
+ goto success
+
+:error
+ if "%OS%" == "Windows_NT" (
+ endlocal
+ ) else (
+ call :dosCleanup
+ )
+ exit /B 1
+
+:success
+ if "%OS%" == "Windows_NT" (
+ endlocal
+ ) else (
+ call :dosCleanup
+ )
+ exit /B 0