anchor.diff:  
   :execute
     echo =================================================================================
  -  setlocal enableextensions disabledelayedexpansion
  +  setlocal
     echo %*
     call %*
     endlocal
  
positive.code: :check_msvc
    POPD
    cl /? >NUL 2>NUL <NUL
    if !ERRORLEVEL! NEQ 0 (
      set "MSG=Can't detect Microsoft Visial Studio C++ compiler (cl.exe). MSVS 2015/2017 are supported only from standard locations"
      goto die
    )
  
negative.code: 
  :: Detect CMake
  cmake --version >NUL 2>NUL
  if %ERRORLEVEL% EQU 0 GOTO :CMAKE_FOUND
  
  if NOT exist "C:\Program Files\CMake\bin" GOTO CMAKE_NOT_FOUND
  set "PATH=%PATH%;C:\Program Files\CMake\bin"
  cmake --version >NUL 2>NUL
  if %ERRORLEVEL% EQU 0 GOTO :CMAKE_FOUND
  
  :CMAKE_NOT_FOUND
  set "MSG=CMake is required to build OpenCV samples. Download it from here: https://cmake.org/download/ and install into 'C:\Program Files\CMake'"
  goto die
  
  :CMAKE_FOUND
  set CMAKE_FOUND=1
  call :execute cmake --version
  echo CMake is detected
  
  :: Detect available MSVS version
  if NOT DEFINED VisualStudioVersion (
    set "MSG=Can't determine MSVS version. 'VisualStudioVersion' is not defined"
    goto die
  )
  if "%VisualStudioVersion%" == "14.0" (
    set CMAKE_GENERATOR="Visual Studio 14 Win64"
    set "PATH=%PATH%;%SCRIPTDIR%\..\..\build\x64\vc14\bin\"
  ) else (
    if "%VisualStudioVersion%" == "15.0" (
      set CMAKE_GENERATOR="Visual Studio 15 Win64"
      set "PATH=%PATH%;%SCRIPTDIR%\..\..\build\x64\vc15\bin\"
    ) else (
      set "MSG=Unsupported MSVS version. VisualStudioVersion=%VisualStudioVersion%"
      goto die
    )
  )
  
  set "BUILD_DIR=%SRC_DIR%\build_%SRC_NAME%"
  call :set_title Create build directory
  if NOT exist "%BUILD_DIR%" ( call :execute md "%BUILD_DIR%" )
  PUSHD "%BUILD_DIR%"
  if NOT exist "%BUILD_DIR%/sample" ( call :execute md "%BUILD_DIR%/sample" )
  call :execute copy /Y "%SCRIPTDIR%/CMakeLists.example.in" "%BUILD_DIR%/sample/CMakeLists.txt"
  
  call :set_title Configuring via CMake
  call :execute cmake -G%CMAKE_GENERATOR% "%BUILD_DIR%\sample" -DEXAMPLE_NAME=%SRC_NAME% "-DEXAMPLE_FILE=%SRC_FILENAME%" "-DOpenCV_DIR=%SCRIPTDIR%\..\..\build"
  if %ERRORLEVEL% NEQ 0 (
    set "MSG=CMake configuration step failed: %BUILD_DIR%"
    goto die
  )
  
  call :set_title Build sample project via CMake
  call :execute cmake --build . --config Release
  if %ERRORLEVEL% NEQ 0 (
    set "MSG=Build step failed: %BUILD_DIR%"
    goto die
  )
  
  call :set_title Launch %SRC_NAME%
  if NOT exist "%BUILD_DIR%\Release\%SRC_NAME%.exe" (
    echo. "ERROR: Can't find executable file (build seems broken): %SRC_NAME%.exe"
  ) else (
    cd "%BUILD_DIR%\Release"
    call :execute "%SRC_NAME%.exe" --help
    echo ================================================================================
    echo **  Type '%SRC_NAME%.exe' to run sample application
    echo **  Type '%SRC_NAME%.exe --help' to get list of available options (if available)
    echo **  Type 'start ..\%SRC_NAME%.sln' to launch MSVS IDE
    echo **  Type 'cmake --build .. --config Release' to rebuild sample
    echo **  Type 'exit' to exit from interactive shell and open the build directory
    echo ================================================================================
  )
  
  call :set_title Hands-on: %SRC_NAME%
  cmd /k echo Current directory: %CD%
  
  call :set_title Done: %SRC_NAME%
  echo Opening build directory with project files...
  explorer "%BUILD_DIR%"
  
  POPD
  echo Done%
  
  pause
  exit /B 0
  