@echo off setlocal ENABLEDELAYEDEXPANSION echo Building PrivateBin API C++ DLL... REM Proaktiv: VS-Entwicklungsumgebung initialisieren, wenn bekannt set "VSINSTALL_HINT=C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" set "VSDEVCMD_HINT=%VSINSTALL_HINT%\Common7\Tools\VsDevCmd.bat" if not exist "%VSDEVCMD_HINT%" ( set "VSINSTALL_HINT=C:\Program Files\Microsoft Visual Studio\2022\Community" set "VSDEVCMD_HINT=%VSINSTALL_HINT%\Common7\Tools\VsDevCmd.bat" ) if exist "%VSDEVCMD_HINT%" ( echo Initializing MSVC environment from "%VSDEVCMD_HINT%" for x64... call "%VSDEVCMD_HINT%" -arch=x64 >nul set "VCPKG_VISUAL_STUDIO_PATH=%VSINSTALL_HINT%" ) REM Ensure MSVC environment is loaded (cl.exe). Try via vswhere if not present. where cl >nul 2>&1 if errorlevel 1 ( REM Ensure vswhere is on PATH (both PF and PF(x86)) set "PATH=%ProgramFiles%\Microsoft Visual Studio\Installer;%ProgramFiles(x86)%\Microsoft Visual Studio\Installer;%PATH%" REM First try well-known VsDevCmd from BuildTools/Community to avoid vswhere dependency set "VSINSTALL=C:\ Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" set "VSDEVCMD_CANDIDATE=%VSINSTALL%\Common7\Tools\VsDevCmd.bat" if not exist "%VSDEVCMD_CANDIDATE%" ( set "VSINSTALL=C:\ Program Files\Microsoft Visual Studio\2022\Community" set "VSDEVCMD_CANDIDATE=%VSINSTALL%\Common7\Tools\VsDevCmd.bat" ) if exist "%VSDEVCMD_CANDIDATE%" ( echo Initializing MSVC environment from "%VSDEVCMD_CANDIDATE%" for x64... call "%VSDEVCMD_CANDIDATE%" -arch=x64 >nul REM Provide VS path hint for vcpkg set "VCPKG_VISUAL_STUDIO_PATH=%VSINSTALL%" REM Re-check if cl is now available; if so, skip vswhere path where cl >nul 2>&1 if not errorlevel 1 goto :after_vs_env ) set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" if not exist "%VSWHERE%" ( set "VSWHERE=%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe" ) if not exist "%VSWHERE%" ( set "VSWHERE=c:\tools\vswhere.exe" ) if exist "%VSWHERE%" ( for /f "usebackq tokens=*" %%i in (`"%VSWHERE%" -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do set "VSINSTALL=%%i" if defined VSINSTALL ( set "VSDEVCMD=%VSINSTALL%\Common7\Tools\VsDevCmd.bat" if exist "%VSDEVCMD%" ( echo Initializing MSVC environment from "%VSDEVCMD%" for x64... call "%VSDEVCMD%" -arch=x64 >nul set "VCPKG_VISUAL_STUDIO_PATH=%VSINSTALL%" ) else ( echo VsDevCmd.bat not found under "%VSINSTALL%". cl.exe may be unavailable. ) ) else ( echo Visual Studio with C++ tools not found. Install "Desktop development with C++" workload. ) ) else ( echo vswhere.exe not found. Consider installing Visual Studio 2022 with C++ tools. ) ) :after_vs_env REM Detect or bootstrap vcpkg if not defined VCPKG_ROOT ( set "VCPKG_ROOT=%USERPROFILE%\vcpkg" ) if not exist "%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake" ( echo vcpkg not found at "%VCPKG_ROOT%". Cloning and bootstrapping... if not exist "%VCPKG_ROOT%" ( git clone https://github.com/microsoft/vcpkg.git "%VCPKG_ROOT%" if errorlevel 1 ( echo Failed to clone vcpkg exit /b 1 ) ) call "%VCPKG_ROOT%\bootstrap-vcpkg.bat" if errorlevel 1 ( echo Failed to bootstrap vcpkg exit /b 1 ) ) REM Ensure vcpkg manifest/config has a baseline; create vcpkg-configuration.json if missing REM Baseline wird außerhalb des Skripts gesetzt (vcpkg x-update-baseline) REM Reset build directory to avoid stale CMake cache (e.g., CMAKE_GENERATOR_INSTANCE) if exist "build" rd /s /q build mkdir build pushd build REM Generate build files with CMake and vcpkg (manifest mode with auto-baseline) set "VCPKG_DEFAULT_TRIPLET=x64-windows" REM Ensure no stale generator instance is leaking from environment set "CMAKE_GENERATOR_INSTANCE=" REM Ensure vcpkg manifest has a builtin-baseline (adds if missing) if exist "vcpkg.json" ( "%VCPKG_ROOT%\vcpkg.exe" x-update-baseline --add-initial-baseline 1>nul 2>nul ) REM Use user vcpkg toolchain set "TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake" cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_TOOLCHAIN_FILE="%TOOLCHAIN_FILE%" if errorlevel 1 ( echo CMake configuration failed popd exit /b 1 ) REM Build the project cmake --build . --config Release set BUILD_ERROR=%ERRORLEVEL% if %BUILD_ERROR% EQU 0 ( echo Build completed successfully! ) else ( echo Build failed with error level %BUILD_ERROR% ) popd exit /b %BUILD_ERROR%