0029547: Сonfiguration, upgrade.dat - include deprecated enums into section [rename]
[occt.git] / adm / cmake / ffmpeg.cmake
CommitLineData
08f8a185 1# FFmpeg
2
3if (NOT DEFINED INSTALL_FFMPEG)
4 set (INSTALL_FFMPEG OFF CACHE BOOL "${INSTALL_FFMPEG_DESCR}")
5endif()
6
7if (NOT DEFINED 3RDPARTY_FFMPEG_DIR)
8 set (3RDPARTY_FFMPEG_DIR "" CACHE PATH "The directory containing FFmpeg")
9endif()
10
81dc0326 11# include occt macros. compiler_bitness, os_with_bit, compiler
08f8a185 12OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
13
14# specify FFMPEG folder in connection with 3RDPARTY_DIR
15if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
16 if (NOT 3RDPARTY_FFMPEG_DIR OR NOT EXISTS "${3RDPARTY_FFMPEG_DIR}")
17 FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" FFMPEG FFMPEG_DIR_NAME)
18 if (FFMPEG_DIR_NAME)
19 set (3RDPARTY_FFMPEG_DIR "${3RDPARTY_DIR}/${FFMPEG_DIR_NAME}" CACHE PATH "The directory containing FFmpeg" FORCE)
20 endif()
21 endif()
22else()
23endif()
24
25# define required FFMPEG variables
26if (NOT DEFINED 3RDPARTY_FFMPEG_INCLUDE_DIR)
27 set (3RDPARTY_FFMPEG_INCLUDE_DIR "" CACHE PATH "the path of headers directory")
28endif()
29
81dc0326 30separate_arguments (CSF_FFmpeg)
31foreach (LIBRARY_NAME ${CSF_FFmpeg})
32 if (NOT DEFINED 3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} OR NOT 3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} OR NOT EXISTS "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}")
33 set (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} "" CACHE FILEPATH "FFmpeg framework (${LIBRARY_NAME})" FORCE)
08f8a185 34 endif()
08f8a185 35
81dc0326 36 if (NOT DEFINED 3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME})
37 set (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "" CACHE PATH "The directory containing FFmpeg framework (${LIBRARY_NAME})")
08f8a185 38 endif()
08f8a185 39
81dc0326 40 if (WIN32)
41 if (NOT DEFINED 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} OR NOT 3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} OR NOT EXISTS "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}")
42 set (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "" CACHE FILEPATH "FFmpeg shared libraries (${LIBRARY_NAME})" FORCE)
43 endif()
08f8a185 44 endif()
45
46 if (WIN32)
81dc0326 47 if (NOT DEFINED 3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME})
48 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "" CACHE PATH "The directory containing FFmpeg shared libraries (${LIBRARY_NAME})")
49 endif()
50 endif()
08f8a185 51
81dc0326 52 # check 3RDPARTY_${PRODUCT_NAME}_ paths for consistency with specified 3RDPARTY_${PRODUCT_NAME}_DIR
53 if (3RDPARTY_FFMPEG_DIR AND EXISTS "${3RDPARTY_FFMPEG_DIR}")
54 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_INCLUDE_DIR PATH "the path to FFmpeg")
55 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} FILEPATH "the path to FFmpeg framework (${LIBRARY_NAME})")
56
57 if (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}")
58 get_filename_component (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}" PATH)
59 set (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
08f8a185 60 else()
81dc0326 61 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} PATH "The directory containing FFmpeg library (${LIBRARY_NAME})")
62 endif()
63
64 if (WIN32)
65 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} FILEPATH "the path to FFmpeg shared library (${LIBRARY_NAME})")
66
67 if (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}")
68 get_filename_component (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" PATH)
69 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg shared library (${LIBRARY_NAME})" FORCE)
70 else()
71 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} PATH "The directory containing FFmpeg shared library (${LIBRARY_NAME})")
72 endif()
08f8a185 73 endif()
74 endif()
81dc0326 75endforeach()
08f8a185 76
77# header
78if (NOT 3RDPARTY_FFMPEG_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_FFMPEG_INCLUDE_DIR}")
79 set (HEADER_NAMES avutil.h libavutil/avutil.h)
80
81 # set 3RDPARTY_FFMPEG_INCLUDE_DIR as notfound, otherwise find_library can't assign a new value to 3RDPARTY_FFMPEG_INCLUDE_DIR
82 set (3RDPARTY_FFMPEG_INCLUDE_DIR "3RDPARTY_FFMPEG_INCLUDE_DIR-NOTFOUND" CACHE FILEPATH "the path to header directory" FORCE)
83
84 if (3RDPARTY_FFMPEG_DIR AND EXISTS "${3RDPARTY_FFMPEG_DIR}")
85 find_path (3RDPARTY_FFMPEG_INCLUDE_DIR NAMES ${HEADER_NAMES}
86 PATHS ${3RDPARTY_FFMPEG_DIR}
87 PATH_SUFFIXES include
88 CMAKE_FIND_ROOT_PATH_BOTH
89 NO_DEFAULT_PATH)
90 else()
91 find_path (3RDPARTY_FFMPEG_INCLUDE_DIR NAMES ${HEADER_NAMES}
92 PATH_SUFFIXES include
93 CMAKE_FIND_ROOT_PATH_BOTH)
94 endif()
95endif()
96
97if (3RDPARTY_FFMPEG_INCLUDE_DIR AND EXISTS "${3RDPARTY_FFMPEG_INCLUDE_DIR}")
98 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FFMPEG_INCLUDE_DIR}")
99else()
100 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FFMPEG_INCLUDE_DIR)
101
102 set (3RDPARTY_FFMPEG_INCLUDE_DIR "" CACHE FILEPATH "the path to avutil.h" FORCE)
103endif()
104
81dc0326 105# libraries
106foreach (LIBRARY_NAME ${CSF_FFmpeg})
107 if (NOT 3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} OR NOT EXISTS "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}")
108 set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .so .dylib .a)
08f8a185 109
81dc0326 110 set (FFMPEG_PATH_SUFFIXES lib)
111 if (ANDROID)
112 set (FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} libs/${ANDROID_ABI})
113 elseif(APPLE)
114 set (FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} Frameworks)
115 endif()
08f8a185 116
81dc0326 117 # set 3RDPARTY_FFMPEG_LIBRARY as notfound, otherwise find_library can't assign a new value to 3RDPARTY_FFMPEG_LIBRARY
118 set (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} "3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}-NOTFOUND" CACHE FILEPATH "The path to FFmpeg library (${LIBRARY_NAME})" FORCE)
08f8a185 119
81dc0326 120 if (3RDPARTY_FFMPEG_DIR AND EXISTS "${3RDPARTY_FFMPEG_DIR}")
121 find_library (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} NAMES ${LIBRARY_NAME}
122 PATHS "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}" "${3RDPARTY_FFMPEG_DIR}"
123 PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES}
124 CMAKE_FIND_ROOT_PATH_BOTH
125 NO_DEFAULT_PATH)
126 else()
127 find_library (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} NAMES ${LIBRARY_NAME}
128 PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES}
129 CMAKE_FIND_ROOT_PATH_BOTH)
130 endif()
131
132 if (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}")
133 get_filename_component (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}" PATH)
134 set (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
135 else()
136 set (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
137 endif()
08f8a185 138 endif()
139
81dc0326 140 if (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}")
141 list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}")
08f8a185 142 else()
81dc0326 143 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME})
08f8a185 144
81dc0326 145 set (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} "" CACHE FILEPATH "The path to FFmpeg library (${LIBRARY_NAME})" FORCE)
146 endif()
08f8a185 147
81dc0326 148 # shared library
149 if (WIN32)
150 if (NOT 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} OR NOT EXISTS "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}")
08f8a185 151
81dc0326 152 set (CMAKE_FIND_LIBRARY_SUFFIXES .dll)
153 set (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}-NOTFOUND" CACHE FILEPATH "The path to FFmpeg shared library (${LIBRARY_NAME})" FORCE)
08f8a185 154
81dc0326 155 # find FFmpeg shared library
156 file (GLOB 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DIR}/bin/${LIBRARY_NAME}[-][0-9]*")
08f8a185 157
81dc0326 158 if (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}")
159 set (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" CACHE FILEPATH "FFmpeg shared library (${LIBRARY_NAME})" FORCE)
160 get_filename_component (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" PATH)
161 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
162 else()
163 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "" CACHE PATH "The directory containing FFmpeg shared library (${LIBRARY_NAME})" FORCE)
164 endif()
165 endif()
08f8a185 166
81dc0326 167 if (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} OR EXISTS "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}")
168 list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}")
08f8a185 169 else()
81dc0326 170 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME})
08f8a185 171 endif()
172 endif()
173
81dc0326 174 # install instructions
175 if (INSTALL_FFMPEG)
176 OCCT_MAKE_OS_WITH_BITNESS()
177 OCCT_MAKE_COMPILER_SHORT_NAME()
178
179 if (WIN32)
180 if (DEFINED INSTALL_BIN_DIR)
181 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" DESTINATION "${INSTALL_BIN_DIR}")
182 else()
183 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
184 CONFIGURATIONS Release
185 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
186 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
187 CONFIGURATIONS RelWithDebInfo
188 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
189 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
190 CONFIGURATIONS Debug
191 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
192 endif()
08f8a185 193 else()
81dc0326 194 get_filename_component(3RDPARTY_FFMPEG_LIBRARY_ABS ${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}} REALPATH)
195 get_filename_component(3RDPARTY_FFMPEG_LIBRARY_NAME ${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}} NAME)
196
197 if (DEFINED INSTALL_LIB_DIR)
198 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
199 DESTINATION "${INSTALL_LIB_DIR}"
200 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
201 else()
202 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
203 CONFIGURATIONS Release
204 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib"
205 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
206 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
207 CONFIGURATIONS RelWithDebInfo
208 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libi"
209 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
210 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
211 CONFIGURATIONS Debug
212 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libd"
213 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
214 endif()
08f8a185 215 endif()
08f8a185 216
81dc0326 217 set (USED_3RDPARTY_FFMPEG_DIR "")
218 else()
219 # the library directory for using by the executable
220 if (WIN32)
221 set (USED_3RDPARTY_FFMPEG_DIR ${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}})
08f8a185 222 else()
81dc0326 223 set (USED_3RDPARTY_FFMPEG_DIR ${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}})
08f8a185 224 endif()
225 endif()
226
81dc0326 227 mark_as_advanced (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME})
228endforeach()
08f8a185 229
230# unset all redundant variables
231OCCT_CHECK_AND_UNSET (FFMPEG_INCLUDE_DIRS)
232OCCT_CHECK_AND_UNSET (FFMPEG_LIBRARY_DIRS)
233OCCT_CHECK_AND_UNSET (FFMPEG_DIR)