| @ECHO OFF | |
| REM ================================================================ | |
| REM This script installs the "vcpkg" source package manager and uses | |
| REM it to build the third-party libraries that git requires when it | |
| REM is built using MSVC. | |
| REM | |
| REM [1] Install VCPKG. | |
| REM [a] Create <root>/compat/vcbuild/vcpkg/ | |
| REM [b] Download "vcpkg". | |
| REM [c] Compile using the currently installed version of VS. | |
| REM [d] Create <root>/compat/vcbuild/vcpkg/vcpkg.exe | |
| REM | |
| REM [2] Install third-party libraries. | |
| REM [a] Download each (which may also install CMAKE). | |
| REM [b] Compile in RELEASE mode and install in: | |
| REM vcpkg/installed/<arch>/{bin,lib} | |
| REM [c] Compile in DEBUG mode and install in: | |
| REM vcpkg/installed/<arch>/debug/{bin,lib} | |
| REM [d] Install headers in: | |
| REM vcpkg/installed/<arch>/include | |
| REM | |
| REM [3] Create a set of MAKE definitions for the top-level | |
| REM Makefile to allow "make MSVC=1" to find the above | |
| REM third-party libraries. | |
| REM [a] Write vcpkg/VCPGK-DEFS | |
| REM | |
| REM https://blogs.msdn.microsoft.com/vcblog/2016/09/19/vcpkg-a-tool-to-acquire-and-build-c-open-source-libraries-on-windows/ | |
| REM https://github.com/Microsoft/vcpkg | |
| REM https://vcpkg.readthedocs.io/en/latest/ | |
| REM ================================================================ | |
| SETLOCAL EnableDelayedExpansion | |
| @FOR /F "delims=" %%D IN ("%~dp0") DO @SET cwd=%%~fD | |
| cd %cwd% | |
| dir vcpkg\vcpkg.exe >nul 2>nul && GOTO :install_libraries | |
| echo Fetching vcpkg in %cwd%vcpkg | |
| git.exe clone https://github.com/Microsoft/vcpkg vcpkg | |
| IF ERRORLEVEL 1 ( EXIT /B 1 ) | |
| cd vcpkg | |
| echo Building vcpkg | |
| powershell -exec bypass scripts\bootstrap.ps1 | |
| IF ERRORLEVEL 1 ( EXIT /B 1 ) | |
| echo Successfully installed %cwd%vcpkg\vcpkg.exe | |
| :install_libraries | |
| SET arch=x64-windows | |
| echo Installing third-party libraries... | |
| FOR %%i IN (zlib expat libiconv openssl libssh2 curl) DO ( | |
| cd %cwd%vcpkg | |
| IF NOT EXIST "packages\%%i_%arch%" CALL :sub__install_one %%i | |
| IF ERRORLEVEL 1 ( EXIT /B 1 ) | |
| ) | |
| :install_defines | |
| cd %cwd% | |
| SET inst=%cwd%vcpkg\installed\%arch% | |
| echo vcpkg_inc=-I"%inst%\include">VCPKG-DEFS | |
| echo vcpkg_rel_lib=-L"%inst%\lib">>VCPKG-DEFS | |
| echo vcpkg_rel_bin="%inst%\bin">>VCPKG-DEFS | |
| echo vcpkg_dbg_lib=-L"%inst%\debug\lib">>VCPKG-DEFS | |
| echo vcpkg_dbg_bin="%inst%\debug\bin">>VCPKG-DEFS | |
| EXIT /B 0 | |
| :sub__install_one | |
| echo Installing package %1... | |
| .\vcpkg.exe install %1:%arch% | |
| IF ERRORLEVEL 1 ( EXIT /B 1 ) | |
| echo Finished %1 | |
| goto :EOF |