mirror of
https://github.com/curl/curl.git
synced 2026-04-13 00:31:41 +08:00
- Fix generate.bat "-clean" option.
- Change version template substitutes to match old files, eg go back to
using format version "11.00" instead of "11.0".
- Limit the vcxproj filters file types that are filtered to c, h, rc.
- Get rid of the tmpl extension from template files and add a README
to the tmpl directory explaining the purpose of the files.
- gitignore VCxx directories entirely rather than individual file types.
- Do not remove the VC directories during clean, instead remove just the
generated project files.
Removing the VC directories has the unwanted behavior of removing files
other than those generated. Visual Studio will generate its own
preference files (like if you have some debug arguments in your .suo)
and those files sit in the VC directories. We ignore those files since
they are the user's files and should not be deleted. Also the user may
have their own untracked files that we shouldn't be deleting.
Follow-up to 57d349fe which consolidated the project templates.
Assisted-by: Viktor Szakats
Closes https://github.com/curl/curl/pull/18412
352 lines
9.6 KiB
Batchfile
352 lines
9.6 KiB
Batchfile
@echo off
|
|
rem ***************************************************************************
|
|
rem * _ _ ____ _
|
|
rem * Project ___| | | | _ \| |
|
|
rem * / __| | | | |_) | |
|
|
rem * | (__| |_| | _ <| |___
|
|
rem * \___|\___/|_| \_\_____|
|
|
rem *
|
|
rem * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
|
|
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.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 * SPDX-License-Identifier: curl
|
|
rem *
|
|
rem ***************************************************************************
|
|
|
|
:begin
|
|
rem Check we are running on a Windows NT derived OS
|
|
if not "%OS%" == "Windows_NT" goto nodos
|
|
|
|
rem Set our variables
|
|
setlocal ENABLEEXTENSIONS
|
|
set VERSION=ALL
|
|
set MODE=GENERATE
|
|
|
|
rem Check we are not running on a network drive
|
|
if "%~d0."=="\\." goto nonetdrv
|
|
|
|
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.md goto norepo
|
|
|
|
:parseArgs
|
|
if "%~1" == "" goto start
|
|
|
|
if /i "%~1" == "vc10" (
|
|
set VERSION=VC10
|
|
) else if /i "%~1" == "vc11" (
|
|
set VERSION=VC11
|
|
) else if /i "%~1" == "vc12" (
|
|
set VERSION=VC12
|
|
) else if /i "%~1" == "-clean" (
|
|
set MODE=CLEAN
|
|
) else if /i "%~1" == "-?" (
|
|
goto syntax
|
|
) else if /i "%~1" == "/?" (
|
|
goto syntax
|
|
) else if /i "%~1" == "-h" (
|
|
goto syntax
|
|
) else if /i "%~1" == "-help" (
|
|
goto syntax
|
|
) else if /i "%~1" == "--help" (
|
|
goto syntax
|
|
) else (
|
|
goto unknown
|
|
)
|
|
|
|
shift & goto parseArgs
|
|
|
|
:start
|
|
if "%VERSION%" == "VC10" goto vc10
|
|
if "%VERSION%" == "VC11" goto vc11
|
|
if "%VERSION%" == "VC12" goto vc12
|
|
|
|
:vc10
|
|
if "%MODE%" == "GENERATE" (
|
|
call :generate_proj VC10
|
|
) else (
|
|
call :clean_proj VC10
|
|
)
|
|
|
|
if not "%VERSION%" == "ALL" goto success
|
|
|
|
:vc11
|
|
if "%MODE%" == "GENERATE" (
|
|
call :generate_proj VC11
|
|
) else (
|
|
call :clean_proj VC11
|
|
)
|
|
|
|
if not "%VERSION%" == "ALL" goto success
|
|
|
|
:vc12
|
|
if "%MODE%" == "GENERATE" (
|
|
call :generate_proj VC12
|
|
) else (
|
|
call :clean_proj VC12
|
|
)
|
|
|
|
goto success
|
|
|
|
rem Main project generate function.
|
|
rem
|
|
rem %1 - version
|
|
rem %2 - Input template file
|
|
rem %3 - Output project file
|
|
rem
|
|
:generate_proj
|
|
echo.
|
|
echo Generating %1 project files
|
|
if not exist Windows\%1\lib md Windows\%1\lib
|
|
if not exist Windows\%1\src md Windows\%1\src
|
|
call :generate %1 Windows\tmpl\curl-all.sln Windows\%1\curl-all.sln
|
|
call :generate %1 Windows\tmpl\curl.sln Windows\%1\src\curl.sln
|
|
call :generate %1 Windows\tmpl\curl.vcxproj Windows\%1\src\curl.vcxproj
|
|
call :generate %1 Windows\tmpl\curl.vcxproj.filters Windows\%1\src\curl.vcxproj.filters
|
|
call :generate %1 Windows\tmpl\libcurl.sln Windows\%1\lib\libcurl.sln
|
|
call :generate %1 Windows\tmpl\libcurl.vcxproj Windows\%1\lib\libcurl.vcxproj
|
|
call :generate %1 Windows\tmpl\libcurl.vcxproj.filters Windows\%1\lib\libcurl.vcxproj.filters
|
|
|
|
exit /B
|
|
|
|
rem Main project clean function.
|
|
rem
|
|
rem %1 - version
|
|
rem
|
|
:clean_proj
|
|
echo.
|
|
echo Removing %1 project files
|
|
call :clean Windows\%1\curl-all.sln
|
|
call :clean Windows\%1\src\curl.sln
|
|
call :clean Windows\%1\src\curl.vcxproj
|
|
call :clean Windows\%1\src\curl.vcxproj.filters
|
|
call :clean Windows\%1\lib\libcurl.sln
|
|
call :clean Windows\%1\lib\libcurl.vcxproj
|
|
call :clean Windows\%1\lib\libcurl.vcxproj.filters
|
|
|
|
exit /B
|
|
|
|
rem Main file generate function.
|
|
rem
|
|
rem %1 - version
|
|
rem %2 - Input template file
|
|
rem %3 - Output project file
|
|
rem
|
|
:generate
|
|
if not exist %2 (
|
|
echo.
|
|
echo Error: Cannot open %2
|
|
exit /B
|
|
)
|
|
|
|
if exist %3 (
|
|
del %3
|
|
)
|
|
|
|
set "S01=$FORMATVER"
|
|
set "S02=$PLATFORMTOOLSET"
|
|
set "S03=$SUBDIR"
|
|
set "S04=$TOOLSVER"
|
|
|
|
if "%1" == "VC10" (
|
|
set "R01=11.00"
|
|
set "R02=v100"
|
|
set "R03=VC10"
|
|
set "R04=4.0"
|
|
) else if "%1%" == "VC11" (
|
|
set "R01=12.00"
|
|
set "R02=v110"
|
|
set "R03=VC11"
|
|
set "R04=4.0"
|
|
) else if "%1%" == "VC12" (
|
|
set "R01=12.00"
|
|
set "R02=v120"
|
|
set "R03=VC12"
|
|
set "R04=12.0"
|
|
)
|
|
|
|
echo * %CD%\%3
|
|
for /f "usebackq delims=" %%i in (`"findstr /n ^^ %2"`) do (
|
|
set "var=%%i"
|
|
setlocal enabledelayedexpansion
|
|
set "var=!var:%S01%=%R01%!"
|
|
set "var=!var:%S02%=%R02%!"
|
|
set "var=!var:%S03%=%R03%!"
|
|
set "var=!var:%S04%=%R04%!"
|
|
|
|
set "var=!var:*:=!"
|
|
|
|
if "!var!" == "CURL_SRC_C_FILES" (
|
|
for /f "delims=" %%c in ('dir /b ..\src\*.c') do (
|
|
if /i "%%c" NEQ "curlinfo.c" call :element src "%%c" %3
|
|
)
|
|
) else if "!var!" == "CURL_SRC_H_FILES" (
|
|
for /f "delims=" %%h in ('dir /b ..\src\*.h') do call :element src "%%h" %3
|
|
) else if "!var!" == "CURL_SRC_RC_FILES" (
|
|
for /f "delims=" %%r in ('dir /b ..\src\*.rc') do call :element src "%%r" %3
|
|
) else if "!var!" == "CURL_SRC_X_H_FILES" (
|
|
call :element lib "config-win32.h" %3
|
|
call :element lib "curl_setup.h" %3
|
|
) else if "!var!" == "CURL_LIB_C_FILES" (
|
|
for /f "delims=" %%c in ('dir /b ..\lib\*.c') do call :element lib "%%c" %3
|
|
) else if "!var!" == "CURL_LIB_H_FILES" (
|
|
for /f "delims=" %%h in ('dir /b ..\include\curl\*.h') do call :element include\curl "%%h" %3
|
|
for /f "delims=" %%h in ('dir /b ..\lib\*.h') do call :element lib "%%h" %3
|
|
) else if "!var!" == "CURL_LIB_RC_FILES" (
|
|
for /f "delims=" %%r in ('dir /b ..\lib\*.rc') do call :element lib "%%r" %3
|
|
) else if "!var!" == "CURL_LIB_CURLX_C_FILES" (
|
|
for /f "delims=" %%c in ('dir /b ..\lib\curlx\*.c') do call :element lib\curlx "%%c" %3
|
|
) else if "!var!" == "CURL_LIB_CURLX_H_FILES" (
|
|
for /f "delims=" %%h in ('dir /b ..\lib\curlx\*.h') do call :element lib\curlx "%%h" %3
|
|
) else if "!var!" == "CURL_LIB_VAUTH_C_FILES" (
|
|
for /f "delims=" %%c in ('dir /b ..\lib\vauth\*.c') do call :element lib\vauth "%%c" %3
|
|
) else if "!var!" == "CURL_LIB_VAUTH_H_FILES" (
|
|
for /f "delims=" %%h in ('dir /b ..\lib\vauth\*.h') do call :element lib\vauth "%%h" %3
|
|
) else if "!var!" == "CURL_LIB_VQUIC_C_FILES" (
|
|
for /f "delims=" %%c in ('dir /b ..\lib\vquic\*.c') do call :element lib\vquic "%%c" %3
|
|
) else if "!var!" == "CURL_LIB_VQUIC_H_FILES" (
|
|
for /f "delims=" %%h in ('dir /b ..\lib\vquic\*.h') do call :element lib\vquic "%%h" %3
|
|
) else if "!var!" == "CURL_LIB_VSSH_C_FILES" (
|
|
for /f "delims=" %%c in ('dir /b ..\lib\vssh\*.c') do call :element lib\vssh "%%c" %3
|
|
) else if "!var!" == "CURL_LIB_VSSH_H_FILES" (
|
|
for /f "delims=" %%h in ('dir /b ..\lib\vssh\*.h') do call :element lib\vssh "%%h" %3
|
|
) else if "!var!" == "CURL_LIB_VTLS_C_FILES" (
|
|
for /f "delims=" %%c in ('dir /b ..\lib\vtls\*.c') do call :element lib\vtls "%%c" %3
|
|
) else if "!var!" == "CURL_LIB_VTLS_H_FILES" (
|
|
for /f "delims=" %%h in ('dir /b ..\lib\vtls\*.h') do call :element lib\vtls "%%h" %3
|
|
) else (
|
|
echo.!var!>> %3
|
|
)
|
|
|
|
endlocal
|
|
)
|
|
exit /B
|
|
|
|
rem Generates a single file xml element.
|
|
rem
|
|
rem %1 - Directory (src, lib, lib\vauth, lib\vquic, lib\vssh, lib\vtls)
|
|
rem %2 - Source filename
|
|
rem %3 - Output project file
|
|
rem
|
|
:element
|
|
set "SPACES= "
|
|
|
|
call :extension %2 ext
|
|
|
|
if "%ext%" == "c" (
|
|
echo %SPACES%^<ClCompile Include=^"..\..\..\..\%1\%~2^" /^>>> %3
|
|
) else if "%ext%" == "h" (
|
|
echo %SPACES%^<ClInclude Include=^"..\..\..\..\%1\%~2^" /^>>> %3
|
|
) else if "%ext%" == "rc" (
|
|
echo %SPACES%^<ResourceCompile Include=^"..\..\..\..\%1\%~2^" /^>>> %3
|
|
)
|
|
|
|
exit /B
|
|
|
|
rem Returns the extension for a given filename.
|
|
rem
|
|
rem %1 - The filename
|
|
rem %2 - The return value
|
|
rem
|
|
:extension
|
|
set fname=%~1
|
|
set ename=
|
|
:loop1
|
|
if "%fname%"=="" (
|
|
set %2=
|
|
exit /B
|
|
)
|
|
|
|
if not "%fname:~-1%"=="." (
|
|
set ename=%fname:~-1%%ename%
|
|
set fname=%fname:~0,-1%
|
|
goto loop1
|
|
)
|
|
|
|
set %2=%ename%
|
|
exit /B
|
|
|
|
rem Removes the given project file.
|
|
rem
|
|
rem %1 - The filename
|
|
rem
|
|
:clean
|
|
echo * %CD%\%1
|
|
|
|
if exist %1 (
|
|
del %1
|
|
)
|
|
|
|
exit /B
|
|
|
|
:syntax
|
|
rem Display the help
|
|
echo.
|
|
echo Usage: generate [what] [-clean]
|
|
echo.
|
|
echo What to generate:
|
|
echo.
|
|
echo vc10 - Use Visual Studio 2010
|
|
echo vc11 - Use Visual Studio 2012
|
|
echo vc12 - Use Visual Studio 2013
|
|
echo.
|
|
echo Only legacy Visual Studio project files can be generated.
|
|
echo.
|
|
echo To generate recent versions of Visual Studio project files use cmake.
|
|
echo Refer to INSTALL-CMAKE.md in the docs directory.
|
|
echo.
|
|
echo -clean - Removes the project files
|
|
goto error
|
|
|
|
:unknown
|
|
echo.
|
|
echo Error: Unknown argument '%1'
|
|
goto error
|
|
|
|
:nodos
|
|
echo.
|
|
echo Error: Only a Windows NT based Operating System is supported
|
|
goto error
|
|
|
|
:nonetdrv
|
|
echo.
|
|
echo Error: This batch file cannot run from a network drive
|
|
goto error
|
|
|
|
:norepo
|
|
echo.
|
|
echo Error: This batch file should only be used from a curl git repository
|
|
goto error
|
|
|
|
:seterr
|
|
rem Set the caller's errorlevel.
|
|
rem %1[opt]: Errorlevel as integer.
|
|
rem If %1 is empty the errorlevel will be set to 0.
|
|
rem If %1 is not empty and not an integer the errorlevel will be set to 1.
|
|
setlocal
|
|
set EXITCODE=%~1
|
|
if not defined EXITCODE set EXITCODE=0
|
|
echo %EXITCODE%|findstr /r "[^0-9\-]" 1>NUL 2>&1
|
|
if %ERRORLEVEL% EQU 0 set EXITCODE=1
|
|
exit /b %EXITCODE%
|
|
|
|
:error
|
|
if "%OS%" == "Windows_NT" endlocal
|
|
exit /B 1
|
|
|
|
:success
|
|
endlocal
|
|
exit /B 0
|