0033661: Data Exchange, Step Import - Tessellated GDTs are not imported
[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
798a95ed 40 if (NOT DEFINED 3RDPARTY_FFMPEG_LIBRARY_DIR)
41 set (3RDPARTY_FFMPEG_LIBRARY_DIR "" CACHE PATH "The directory containing FFmpeg libraries")
42 endif()
43
81dc0326 44 if (WIN32)
45 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}}")
46 set (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "" CACHE FILEPATH "FFmpeg shared libraries (${LIBRARY_NAME})" FORCE)
47 endif()
08f8a185 48 endif()
49
50 if (WIN32)
81dc0326 51 if (NOT DEFINED 3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME})
52 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "" CACHE PATH "The directory containing FFmpeg shared libraries (${LIBRARY_NAME})")
53 endif()
798a95ed 54 if (NOT DEFINED 3RDPARTY_FFMPEG_DLL_DIR)
55 set (3RDPARTY_FFMPEG_DLL_DIR "" CACHE PATH "The directory containing FFmpeg shared libraries")
56 endif()
81dc0326 57 endif()
08f8a185 58
81dc0326 59 # check 3RDPARTY_${PRODUCT_NAME}_ paths for consistency with specified 3RDPARTY_${PRODUCT_NAME}_DIR
60 if (3RDPARTY_FFMPEG_DIR AND EXISTS "${3RDPARTY_FFMPEG_DIR}")
61 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_INCLUDE_DIR PATH "the path to FFmpeg")
62 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} FILEPATH "the path to FFmpeg framework (${LIBRARY_NAME})")
63
64 if (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}")
65 get_filename_component (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}" PATH)
798a95ed 66 set (3RDPARTY_FFMPEG_LIBRARY_DIR "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg libraries" FORCE)
81dc0326 67 set (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
08f8a185 68 else()
81dc0326 69 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} PATH "The directory containing FFmpeg library (${LIBRARY_NAME})")
70 endif()
71
72 if (WIN32)
73 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} FILEPATH "the path to FFmpeg shared library (${LIBRARY_NAME})")
74
75 if (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}")
76 get_filename_component (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" PATH)
798a95ed 77 set (3RDPARTY_FFMPEG_DLL_DIR "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg shared libraries" FORCE)
81dc0326 78 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg shared library (${LIBRARY_NAME})" FORCE)
79 else()
80 CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_FFMPEG_DIR 3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} PATH "The directory containing FFmpeg shared library (${LIBRARY_NAME})")
81 endif()
08f8a185 82 endif()
83 endif()
81dc0326 84endforeach()
08f8a185 85
86# header
87if (NOT 3RDPARTY_FFMPEG_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_FFMPEG_INCLUDE_DIR}")
88 set (HEADER_NAMES avutil.h libavutil/avutil.h)
89
90 # set 3RDPARTY_FFMPEG_INCLUDE_DIR as notfound, otherwise find_library can't assign a new value to 3RDPARTY_FFMPEG_INCLUDE_DIR
91 set (3RDPARTY_FFMPEG_INCLUDE_DIR "3RDPARTY_FFMPEG_INCLUDE_DIR-NOTFOUND" CACHE FILEPATH "the path to header directory" FORCE)
92
93 if (3RDPARTY_FFMPEG_DIR AND EXISTS "${3RDPARTY_FFMPEG_DIR}")
94 find_path (3RDPARTY_FFMPEG_INCLUDE_DIR NAMES ${HEADER_NAMES}
95 PATHS ${3RDPARTY_FFMPEG_DIR}
96 PATH_SUFFIXES include
97 CMAKE_FIND_ROOT_PATH_BOTH
98 NO_DEFAULT_PATH)
99 else()
100 find_path (3RDPARTY_FFMPEG_INCLUDE_DIR NAMES ${HEADER_NAMES}
101 PATH_SUFFIXES include
102 CMAKE_FIND_ROOT_PATH_BOTH)
103 endif()
104endif()
105
106if (3RDPARTY_FFMPEG_INCLUDE_DIR AND EXISTS "${3RDPARTY_FFMPEG_INCLUDE_DIR}")
107 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FFMPEG_INCLUDE_DIR}")
108else()
109 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FFMPEG_INCLUDE_DIR)
110
111 set (3RDPARTY_FFMPEG_INCLUDE_DIR "" CACHE FILEPATH "the path to avutil.h" FORCE)
112endif()
113
81dc0326 114# libraries
115foreach (LIBRARY_NAME ${CSF_FFmpeg})
116 if (NOT 3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} OR NOT EXISTS "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}")
117 set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .so .dylib .a)
08f8a185 118
81dc0326 119 set (FFMPEG_PATH_SUFFIXES lib)
120 if (ANDROID)
121 set (FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} libs/${ANDROID_ABI})
122 elseif(APPLE)
123 set (FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} Frameworks)
124 endif()
08f8a185 125
81dc0326 126 # set 3RDPARTY_FFMPEG_LIBRARY as notfound, otherwise find_library can't assign a new value to 3RDPARTY_FFMPEG_LIBRARY
127 set (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} "3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}-NOTFOUND" CACHE FILEPATH "The path to FFmpeg library (${LIBRARY_NAME})" FORCE)
08f8a185 128
81dc0326 129 if (3RDPARTY_FFMPEG_DIR AND EXISTS "${3RDPARTY_FFMPEG_DIR}")
130 find_library (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} NAMES ${LIBRARY_NAME}
131 PATHS "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}" "${3RDPARTY_FFMPEG_DIR}"
132 PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES}
133 CMAKE_FIND_ROOT_PATH_BOTH
134 NO_DEFAULT_PATH)
135 else()
136 find_library (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} NAMES ${LIBRARY_NAME}
137 PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES}
138 CMAKE_FIND_ROOT_PATH_BOTH)
139 endif()
140
141 if (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}")
142 get_filename_component (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}}" PATH)
143 set (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
144 else()
145 set (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} "" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
146 endif()
08f8a185 147 endif()
148
81dc0326 149 if (3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}")
150 list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}}")
08f8a185 151 else()
0553a8ea 152 list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME})
08f8a185 153
81dc0326 154 set (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} "" CACHE FILEPATH "The path to FFmpeg library (${LIBRARY_NAME})" FORCE)
155 endif()
08f8a185 156
81dc0326 157 # shared library
158 if (WIN32)
159 if (NOT 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} OR NOT EXISTS "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}")
08f8a185 160
81dc0326 161 set (CMAKE_FIND_LIBRARY_SUFFIXES .dll)
162 set (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}-NOTFOUND" CACHE FILEPATH "The path to FFmpeg shared library (${LIBRARY_NAME})" FORCE)
08f8a185 163
81dc0326 164 # find FFmpeg shared library
165 file (GLOB 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DIR}/bin/${LIBRARY_NAME}[-][0-9]*")
08f8a185 166
81dc0326 167 if (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}")
168 set (3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" CACHE FILEPATH "FFmpeg shared library (${LIBRARY_NAME})" FORCE)
169 get_filename_component (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" PATH)
170 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}" CACHE PATH "The directory containing FFmpeg library (${LIBRARY_NAME})" FORCE)
171 else()
172 set (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} "" CACHE PATH "The directory containing FFmpeg shared library (${LIBRARY_NAME})" FORCE)
173 endif()
174 endif()
08f8a185 175
81dc0326 176 if (3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME} OR EXISTS "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}")
177 list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}}")
08f8a185 178 else()
0553a8ea 179 list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME})
08f8a185 180 endif()
181 endif()
182
81dc0326 183 # install instructions
184 if (INSTALL_FFMPEG)
185 OCCT_MAKE_OS_WITH_BITNESS()
186 OCCT_MAKE_COMPILER_SHORT_NAME()
187
188 if (WIN32)
189 if (DEFINED INSTALL_BIN_DIR)
190 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}" DESTINATION "${INSTALL_BIN_DIR}")
191 else()
192 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
193 CONFIGURATIONS Release
19691a22 194 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${INSTALL_DIR_BIN}")
81dc0326 195 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
196 CONFIGURATIONS RelWithDebInfo
19691a22 197 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${INSTALL_DIR_BIN}i")
81dc0326 198 install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
199 CONFIGURATIONS Debug
19691a22 200 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${INSTALL_DIR_BIN}d")
81dc0326 201 endif()
08f8a185 202 else()
81dc0326 203 get_filename_component(3RDPARTY_FFMPEG_LIBRARY_ABS ${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}} REALPATH)
204 get_filename_component(3RDPARTY_FFMPEG_LIBRARY_NAME ${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}} NAME)
205
206 if (DEFINED INSTALL_LIB_DIR)
207 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
208 DESTINATION "${INSTALL_LIB_DIR}"
209 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
210 else()
211 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
212 CONFIGURATIONS Release
213 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib"
214 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
215 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
216 CONFIGURATIONS RelWithDebInfo
217 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libi"
218 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
219 install (FILES "${3RDPARTY_FFMPEG_LIBRARY_ABS}"
220 CONFIGURATIONS Debug
221 DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/libd"
222 RENAME ${3RDPARTY_FFMPEG_LIBRARY_NAME}.6)
223 endif()
08f8a185 224 endif()
08f8a185 225
81dc0326 226 set (USED_3RDPARTY_FFMPEG_DIR "")
227 else()
228 # the library directory for using by the executable
229 if (WIN32)
230 set (USED_3RDPARTY_FFMPEG_DIR ${3RDPARTY_FFMPEG_DLL_DIR_${LIBRARY_NAME}})
08f8a185 231 else()
81dc0326 232 set (USED_3RDPARTY_FFMPEG_DIR ${3RDPARTY_FFMPEG_LIBRARY_DIR_${LIBRARY_NAME}})
08f8a185 233 endif()
234 endif()
235
81dc0326 236 mark_as_advanced (3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME} 3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME})
237endforeach()
08f8a185 238
239# unset all redundant variables
240OCCT_CHECK_AND_UNSET (FFMPEG_INCLUDE_DIRS)
241OCCT_CHECK_AND_UNSET (FFMPEG_LIBRARY_DIRS)
242OCCT_CHECK_AND_UNSET (FFMPEG_DIR)