Enable aruco module
[platform/upstream/opencv.git] / samples / _winpack_build_sample.cmd
1 :: Usage:
2 :: - Drag & drop .cpp file on this file from Windows explorer
3 :: - Run from cmd/powershell:
4 ::   - > _winpack_build_sample.cmd cpp\opencv_version.cpp
5 :: Requires:
6 :: - CMake
7 :: - MSVS 2015/2017/2019
8 :: (tools are searched on default paths or environment should be pre-configured)
9 @echo off
10 setlocal
11
12 SET SCRIPT_DIR=%~dp0
13 SET "OPENCV_SETUPVARS_SCRIPT=setup_vars_opencv4.cmd"
14 SET "PACKAGE_BUILD_DIR=%SCRIPT_DIR%\..\..\build"
15 IF NOT EXIST "%PACKAGE_BUILD_DIR%\%OPENCV_SETUPVARS_SCRIPT%" (
16   :: Winpack DLDT
17   SET "PACKAGE_BUILD_DIR=%SCRIPT_DIR%\..\..\..\build"
18 )
19 IF NOT EXIST "%PACKAGE_BUILD_DIR%\%OPENCV_SETUPVARS_SCRIPT%" (
20   set "MSG=OpenCV Winpack installation is required"
21   goto die
22 )
23 :: normalize path
24 for %%i in ("%PACKAGE_BUILD_DIR%") do SET "PACKAGE_BUILD_DIR=%%~fi"
25
26 if [%1]==[] (
27   set "MSG=Sample path is required"
28   goto die
29 )
30 if exist %1\* (
31   set "MSG=Only .cpp samples are allowed (not a directory): %1"
32   goto die
33 )
34 if NOT "%~x1" == ".cpp" (
35   set "MSG=Only .cpp samples are allowed: %~x1"
36   goto die
37 )
38 set SRC_FILENAME=%~dpnx1
39 echo SRC_FILENAME=%SRC_FILENAME%
40 call :dirname "%SRC_FILENAME%" SRC_DIR
41 echo SRC_DIR=%SRC_DIR%
42 set "SRC_NAME=%~n1"
43 echo SRC_NAME=%SRC_NAME%
44 echo ================================================================================
45
46 :: Path to root 'bin' dir
47 set "PATH=%PACKAGE_BUILD_DIR%\bin;%PATH%"
48
49 :: Detect compiler
50 cl /? >NUL 2>NUL <NUL
51 if %ERRORLEVEL% == 0 (
52   goto detect_cmake
53 )
54 PUSHD %CD%
55
56 CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars64.bat"
57 IF ERRORLEVEL 1 (
58   CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
59 )
60 IF ERRORLEVEL 1 (
61   CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
62 )
63
64 IF ERRORLEVEL 1 (
65   CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars64.bat"
66 )
67 IF ERRORLEVEL 1 (
68   CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
69 )
70 IF ERRORLEVEL 1 (
71   CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
72 )
73
74 IF ERRORLEVEL 1 (
75   CALL :try_call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
76 )
77
78 POPD
79 cl /? >NUL 2>NUL <NUL
80 if %ERRORLEVEL% NEQ 0 (
81   set "MSG=Can't detect Microsoft Visual Studio C++ compiler (cl.exe). MSVS 2015/2017/2019 are supported only from standard locations"
82   goto die
83 )
84
85 :: Detect CMake
86 :detect_cmake
87 cmake --version >NUL 2>NUL
88 if %ERRORLEVEL% EQU 0 GOTO :CMAKE_FOUND
89
90 if NOT exist "C:\Program Files\CMake\bin" GOTO CMAKE_NOT_FOUND
91 set "PATH=%PATH%;C:\Program Files\CMake\bin"
92 cmake --version >NUL 2>NUL
93 if %ERRORLEVEL% EQU 0 GOTO :CMAKE_FOUND
94
95 :CMAKE_NOT_FOUND
96 set "MSG=CMake is required to build OpenCV samples. Download it from here: https://cmake.org/download/ and install into 'C:\Program Files\CMake'"
97 goto die
98
99 :CMAKE_FOUND
100 set CMAKE_FOUND=1
101 call :execute cmake --version
102 echo CMake is detected
103 where cmake
104
105 :: Detect available MSVS version
106 if NOT DEFINED VisualStudioVersion (
107   set "MSG=Can't determine MSVS version. 'VisualStudioVersion' is not defined"
108   goto die
109 )
110 if "%VisualStudioVersion%" == "14.0" (
111   set "CMAKE_GENERATOR=-G^"Visual Studio 14 Win64^""
112   set "BUILD_DIR_SUFFIX=.vc14"
113   if EXIST "%PACKAGE_BUILD_DIR%\x64\vc14\bin" (
114     set "PATH=%PACKAGE_BUILD_DIR%\x64\vc14\bin;%PATH%"
115   )
116 ) else (
117   if "%VisualStudioVersion%" == "15.0" (
118     set "CMAKE_GENERATOR=-G^"Visual Studio 15 Win64^""
119     set "BUILD_DIR_SUFFIX=.vc15"
120     set "PATH=%PATH%;%SCRIPTDIR%\..\..\build\x64\vc15\bin\"
121     if EXIST "%PACKAGE_BUILD_DIR%\x64\vc15\bin" (
122       set "PATH=%PACKAGE_BUILD_DIR%\x64\vc15\bin;%PATH%"
123     ) else (
124       if EXIST "%PACKAGE_BUILD_DIR%\x64\vc14\bin" (
125         set "PATH=%PACKAGE_BUILD_DIR%\x64\vc14\bin;%PATH%"
126       )
127     )
128   ) else (
129     if "%VisualStudioVersion%" == "16.0" (
130       echo.==========================================
131       echo.*  Note: MSVS 2019 requires CMake 3.14+  *
132       echo.==========================================
133       set "CMAKE_GENERATOR=-G^"Visual Studio 16 2019^" -A x64"
134       set "BUILD_DIR_SUFFIX=.vc16"
135       if EXIST "%PACKAGE_BUILD_DIR%\x64\vc16\bin" (
136         set "PATH=%PACKAGE_BUILD_DIR%\x64\vc16\bin;%PATH%"
137       ) else (
138         if EXIST "%PACKAGE_BUILD_DIR%\x64\vc15\bin" (
139           set "PATH=%PACKAGE_BUILD_DIR%\x64\vc15\bin;%PATH%"
140         ) else (
141           if EXIST "%PACKAGE_BUILD_DIR%\x64\vc14\bin" (
142             set "PATH=%PACKAGE_BUILD_DIR%\x64\vc14\bin;%PATH%"
143           )
144         )
145       )
146     ) else (
147       set "MSG=Unsupported MSVS version. VisualStudioVersion=%VisualStudioVersion%"
148       goto die
149     )
150   )
151 )
152
153 set "BUILD_DIR=%SRC_DIR%\build_%SRC_NAME%%BUILD_DIR_SUFFIX%"
154 call :set_title Create build directory
155 if NOT exist "%BUILD_DIR%" ( call :execute md "%BUILD_DIR%" )
156 PUSHD "%BUILD_DIR%"
157 if NOT exist "%BUILD_DIR%/sample" ( call :execute md "%BUILD_DIR%/sample" )
158 call :execute copy /Y "%SCRIPT_DIR%/CMakeLists.example.in" "%BUILD_DIR%/sample/CMakeLists.txt"
159
160 call :set_title Configuring via CMake
161 call :execute cmake %CMAKE_GENERATOR% "%BUILD_DIR%\sample" -DEXAMPLE_NAME=%SRC_NAME% "-DEXAMPLE_FILE=%SRC_FILENAME%"
162 if %ERRORLEVEL% NEQ 0 (
163   set "MSG=CMake configuration step failed: %BUILD_DIR%"
164   goto die
165 )
166
167 call :set_title Build sample project via CMake
168 call :execute cmake --build . --config Release
169 if %ERRORLEVEL% NEQ 0 (
170   set "MSG=Build step failed: %BUILD_DIR%"
171   goto die
172 )
173
174 call :set_title Launch %SRC_NAME%
175 if NOT exist "%BUILD_DIR%\Release\%SRC_NAME%.exe" (
176   echo. "ERROR: Can't find executable file (build seems broken): %SRC_NAME%.exe"
177 ) else (
178   cd "%BUILD_DIR%\Release"
179   call :execute "%SRC_NAME%.exe" --help
180   echo ================================================================================
181   echo **  Type '%SRC_NAME%.exe' to run sample application
182   echo **  Type '%SRC_NAME%.exe --help' to get list of available options (if available)
183   echo **  Type 'start ..\%SRC_NAME%.sln' to launch MSVS IDE
184   echo **  Type 'cmake --build .. --config Release' to rebuild sample
185   echo **  Type 'exit' to exit from interactive shell and open the build directory
186   echo ================================================================================
187 )
188
189 call :set_title Hands-on: %SRC_NAME%
190 cmd /k echo Current directory: %CD%
191
192 call :set_title Done: %SRC_NAME%
193 echo Opening build directory with project files...
194 explorer "%BUILD_DIR%"
195
196 POPD
197 echo Done%
198
199 pause
200 exit /B 0
201
202
203 ::
204 :: Helper routines
205 ::
206
207 :set_title
208   title OpenCV sample: %*
209   EXIT /B 0
210
211 :execute
212   echo =================================================================================
213   setlocal
214   echo %*
215   call %*
216   endlocal
217   EXIT /B %ERRORLEVEL%
218
219 :dirname file resultVar
220   setlocal
221   set _dir=%~dp1
222   set _dir=%_dir:~0,-1%
223   endlocal & set %2=%_dir%
224   EXIT /B 0
225
226 :try_call
227 IF EXIST %1 (
228   CALL %*
229   EXIT /B
230 ) ELSE (
231   EXIT /B 1
232 )
233
234 :: 'goto die' instead of 'call'
235 :die
236   TITLE OpenCV sample: ERROR: %MSG%
237   echo ERROR: %MSG%
238   pause
239   EXIT /B 1