@echo off rem file : build-msvc.bat rem copyright : Copyright (c) 2014-2019 Code Synthesis Ltd rem license : MIT; see accompanying LICENSE file setlocal EnableDelayedExpansion goto start :usage echo. echo Usage: %0 [/?] [^<options^>] [^<cl-compiler^>] echo Options: echo --install-dir ^<dir^> Alternative installation directory. echo --repo ^<loc^> Alternative package repository location. echo --trust ^<fp^> Repository certificate fingerprint to trust. echo --timeout ^<sec^> Network operations timeout in seconds. echo --verbose ^<level^> Diagnostics verbosity level between 0 and 6. echo. echo By default the batch file will use cl.exe as the C++ compiler and install echo into C:\build2. It also expects to find the base utilities in the bin\ echo subdirectory of the installation directory ^(C:\build2\bin\ by default^). echo. echo The --trust option recognizes two special values: 'yes' ^(trust everything^) echo and 'no' (trust nothing). echo. echo See the BOOTSTRAP-MSVC file for details. echo. goto end :start set "owd=%CD%" rem Package repository URL (or path). rem if "_%BUILD2_REPO%_" == "__" ( set "BUILD2_REPO=https://stage.build2.org/1" rem set "BUILD2_REPO=https://pkg.cppget.org/1/queue/alpha" rem set "BUILD2_REPO=https://pkg.cppget.org/1/alpha" ) rem The bpkg configuration directory. rem set "cver=0.12-a.0" set "cdir=build2-toolchain-%cver%" rem Parse options. rem set "idir=C:\build2" set "trust=" set "timeout=" set "verbose=" :options if "_%~1_" == "_/?_" goto usage if "_%~1_" == "_-h_" goto usage if "_%~1_" == "_--help_" goto usage if "_%~1_" == "_--install-dir_" ( if "_%~2_" == "__" ( echo error: installation directory expected after --install-dir goto error ) set "idir=%~2" shift shift goto options ) if "_%~1_" == "_--trust_" ( if "_%~2_" == "__" ( echo error: certificate fingerprint expected after --trust goto error ) set "trust=%~2" shift shift goto options ) if "_%~1_" == "_--repo_" ( if "_%~2_" == "__" ( echo error: repository location expected after --repo goto error ) set "BUILD2_REPO=%~2" shift shift goto options ) if "_%~1_" == "_--timeout_" ( if "_%~2_" == "__" ( echo error: value in seconds expected after --timeout goto error ) set "timeout=%~2" shift shift goto options ) if "_%~1_" == "_--verbose_" ( if "_%~2_" == "__" ( echo error: diagnostics level between 0 and 6 expected after --verbose goto error ) set "verbose=%~2" shift shift goto options ) if "_%~1_" == "_--_" shift rem Validate options and arguments. rem rem @@ Temporarily retained for backwards compatibility. rem if not "_%1_" == "__" ( set "idir=%1" ) if not "_%2_" == "__" ( set "trust=%2" ) rem Compiler. rem rem if "_%1_" == "__" ( set "cxx=cl" rem ) else ( rem set "cxx=%1" rem ) rem Certificate to trust. rem if not "_%trust%_" == "__" ( if "_%trust%_" == "_yes_" ( set "trust=--trust-yes" ) else ( if "_%trust%_" == "_no_" ( set "trust=--trust-no" ) else ( set "trust=--trust %trust%" ) ) ) rem Network timeout. rem if not "_%timeout%_" == "__" ( set "timeout=--fetch-timeout %timeout%" ) rem Diagnostics verbosity. rem if not "_%verbose%_" == "__" ( set "verbose=--verbose %verbose%" ) if not exist %idir%\bin\ ( echo error: %idir%\bin\ does not exist goto error ) if exist build\config.build ( echo error: current directory already configured, start with clean source goto error ) if exist ..\%cdir%\ ( echo error: ..\%cdir%\ bpkg configuration directory already exists, remove it goto error ) set "sdir=%idir%\stage" set "PATH=%idir%\bin;%PATH%" rem Show the steps we are performing. rem @echo on @rem Verify the compiler works. @rem %cxx% @if errorlevel 1 goto error @rem Bootstrap. @rem cd build2 @rem Execute in a separate cmd.exe to preserve the echo mode. @rem cmd /C bootstrap-msvc.bat %cxx% @if errorlevel 1 goto error build2\b-boot --version @if errorlevel 1 goto error build2\b-boot %verbose% config.cxx=%cxx% config.bin.lib=static build2\exe{b} @if errorlevel 1 goto error move /y build2\b.exe build2\b-boot.exe @if errorlevel 1 goto error build2\b-boot --version @if errorlevel 1 goto error @rem Build and stage the build system and the package manager. @rem cd .. build2\build2\b-boot %verbose% configure^ config.cxx=%cxx%^ config.bin.suffix=-stage^ config.install.root=%idir%^ config.install.data_root=root\stage @if errorlevel 1 goto error build2\build2\b-boot %verbose% install: build2\ bpkg\ @if errorlevel 1 goto error where b-stage @if errorlevel 1 goto error where bpkg-stage @if errorlevel 1 goto error b-stage --version @if errorlevel 1 goto error bpkg-stage --version @if errorlevel 1 goto error @rem Build the entire toolchain from packages. @rem cd .. md %cdir% @if errorlevel 1 goto error cd %cdir% @rem Save full path for later. @rem @set "cdir=%CD%" bpkg-stage %verbose% create^ cc^ config.cxx=%cxx%^ config.cc.coptions=/O2^ config.install.root=%idir% @if errorlevel 1 goto error bpkg-stage %verbose% add %BUILD2_REPO% @if errorlevel 1 goto error bpkg-stage %verbose% %timeout% %trust% fetch @if errorlevel 1 goto error bpkg-stage %verbose% %timeout% build --for install --yes --plan= build2 bpkg bdep @if errorlevel 1 goto error bpkg-stage %verbose% install build2 bpkg bdep @if errorlevel 1 goto error where b @if errorlevel 1 goto error where bpkg @if errorlevel 1 goto error where bdep @if errorlevel 1 goto error b --version @if errorlevel 1 goto error bpkg --version @if errorlevel 1 goto error bdep --version @if errorlevel 1 goto error @rem Clean up stage. @rem cd %owd% b %verbose% uninstall: build2/ bpkg/ @if errorlevel 1 goto error @echo off echo. echo Toolchain installation: %idir%\bin echo Upgrade configuration: %cdir% echo. goto end :error @echo off cd %owd% endlocal exit /b 1 :end endlocal