OSDN Git Service

[COMMON] Fix unaligned SIMD variables.Fix crash built with "-msse2" at Win32.
[csp-qt/common_source_project-fm7.git] / source / build-cmake / 3rdparty / FindLibAV.cmake
1 # Module for locating libav.
2 #
3 # Customizable variables:
4 #   LIBAV_ROOT_DIR
5 #     Specifies libav's root directory.
6 #
7 # Read-only variables:
8 #   LIBAV_FOUND
9 #     Indicates whether the library has been found.
10 #
11 #   LIBAV_INCLUDE_DIRS
12 #      Specifies libav's include directory.
13 #
14 #   LIBAV_LIBRARIES
15 #     Specifies libav libraries that should be passed to target_link_libararies.
16 #
17 #   LIBAV_<COMPONENT>_LIBRARIES
18 #     Specifies the libraries of a specific <COMPONENT>.
19 #
20 #   LIBAV_<COMPONENT>_FOUND
21 #     Indicates whether the specified <COMPONENT> was found.
22 #
23 #
24 # Copyright (c) 2012 Sergiu Dotenco
25 #
26 # Permission is hereby granted, free of charge, to any person obtaining a copy
27 # of this software and associated documentation files (the "Software"), to deal
28 # in the Software without restriction, including without limitation the rights
29 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
30 # copies of the Software, and to permit persons to whom the Software is
31 # furnished to do so, subject to the following conditions:
32 #
33 # The above copyright notice and this permission notice shall be included in all
34 # copies or substantial portions of the Software.
35 #
36 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
37 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
38 # FITNESS FOR A PARTLIBAVLAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
39 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
40 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
41 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
42 # SOFTWARE.
43 # From: https://github.com/bitmovin/libdash/blob/master/libdash/qtsampleplayer/FindLibAV.cmake
44 INCLUDE (FindPackageHandleStandardArgs)
45
46 IF (CMAKE_VERSION VERSION_GREATER 2.8.7)
47   SET (_LIBAV_CHECK_COMPONENTS FALSE)
48 ELSE (CMAKE_VERSION VERSION_GREATER 2.8.7)
49   SET (_LIBAV_CHECK_COMPONENTS TRUE)
50 ENDIF (CMAKE_VERSION VERSION_GREATER 2.8.7)
51
52 FIND_PATH (LIBAV_ROOT_DIR
53   NAMES include/libavcodec/avcodec.h
54         include/libavdevice/avdevice.h
55         include/libavfilter/avfilter.h
56         include/libavutil/avutil.h
57         include/libswresample/swresample.h
58         include/libswscale/swscale.h
59   PATHS ENV LIBAVROOT
60   DOC "libav root directory")
61
62 FIND_PATH (LIBAV_INCLUDE_DIR
63   NAMES libavcodec/avcodec.h
64         libavdevice/avdevice.h
65         libavfilter/avfilter.h
66         libavutil/avutil.h
67         libswresample/swresample.h
68         libswscale/swscale.h
69   HINTS ${LIBAV_ROOT_DIR}
70   PATH_SUFFIXES include
71   DOC "libav include directory")
72
73 if (NOT LibAV_FIND_COMPONENTS)
74   set (LibAV_FIND_COMPONENTS avcodec avdevice avfilter avformat avutil swresample swscale)
75 endif (NOT LibAV_FIND_COMPONENTS)
76
77 FOREACH (_LIBAV_COMPONENT ${LibAV_FIND_COMPONENTS})
78   STRING (TOUPPER ${_LIBAV_COMPONENT} _LIBAV_COMPONENT_UPPER)
79   SET (_LIBAV_LIBRARY_BASE LIBAV_${_LIBAV_COMPONENT_UPPER}_LIBRARY)
80
81   FIND_LIBRARY (${_LIBAV_LIBRARY_BASE}
82     NAMES ${_LIBAV_COMPONENT}
83     HINTS ${LIBAV_ROOT_DIR}
84     PATH_SUFFIXES bin lib
85     DOC "libav ${_LIBAV_COMPONENT} library")
86
87   MARK_AS_ADVANCED (${_LIBAV_LIBRARY_BASE})
88
89   SET (LIBAV_${_LIBAV_COMPONENT_UPPER}_FOUND TRUE)
90   SET (LibAV_${_LIBAV_COMPONENT}_FOUND ${LIBAV_${_LIBAV_COMPONENT_UPPER}_FOUND})
91
92   IF (${_LIBAV_LIBRARY_BASE})
93     # setup the LIBAV_<COMPONENT>_LIBRARIES variable
94     SET (LIBAV_${_LIBAV_COMPONENT_UPPER}_LIBRARIES ${${_LIBAV_LIBRARY_BASE}})
95     LIST (APPEND LIBAV_LIBRARIES ${LIBAV_${_LIBAV_COMPONENT_UPPER}_LIBRARIES})
96     LIST (APPEND _LIBAV_ALL_LIBS ${${_LIBAV_LIBRARY_BASE}})
97   ELSE (${_LIBAV_LIBRARY_BASE})
98     LIST (APPEND _LIBAV_MISSING_LIBRARIES ${_LIBAV_LIBRARY_BASE})
99   ENDIF (${_LIBAV_LIBRARY_BASE})
100 ENDFOREACH (_LIBAV_COMPONENT ${LibAV_FIND_COMPONENTS})
101
102 SET (LIBAV_INCLUDE_DIRS ${LIBAV_INCLUDE_DIR})
103
104 IF (DEFINED _LIBAV_MISSING_COMPONENTS AND _LIBAV_CHECK_COMPONENTS)
105   IF (NOT LibAV_FIND_QUIETLY)
106     MESSAGE (STATUS "One or more libav components were not found:")
107     # Display missing components indented, each on a separate line
108     FOREACH (_LIBAV_MISSING_COMPONENT ${_LIBAV_MISSING_COMPONENTS})
109       MESSAGE (STATUS "  " ${_LIBAV_MISSING_COMPONENT})
110     ENDFOREACH (_LIBAV_MISSING_COMPONENT ${_LIBAV_MISSING_COMPONENTS})
111   ENDIF (NOT LibAV_FIND_QUIETLY)
112 ENDIF (DEFINED _LIBAV_MISSING_COMPONENTS AND _LIBAV_CHECK_COMPONENTS)
113
114 # Determine library's version
115
116 FIND_PROGRAM (LIBAV_AVCONV_EXECUTABLE NAMES avconv
117   HINTS ${LIBAV_ROOT_DIR}
118   PATH_SUFFIXES bin
119   DOC "avconv executable")
120
121 IF (LIBAV_AVCONV_EXECUTABLE)
122   EXECUTE_PROCESS (COMMAND ${LIBAV_AVCONV_EXECUTABLE} -version
123     OUTPUT_VARIABLE _LIBAV_AVCONV_OUTPUT ERROR_QUIET)
124
125   STRING (REGEX REPLACE ".*avconv[ \t]+([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1"
126     LIBAV_VERSION "${_LIBAV_AVCONV_OUTPUT}")
127   STRING (REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1"
128     LIBAV_VERSION_MAJOR "${LIBAV_VERSION}")
129   STRING (REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2"
130     LIBAV_VERSION_MINOR "${LIBAV_VERSION}")
131   STRING (REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\3"
132     LIBAV_VERSION_PATCH "${LIBAV_VERSION}")
133
134   SET (LIBAV_VERSION_COMPONENTS 3)
135 ENDIF (LIBAV_AVCONV_EXECUTABLE)
136
137 IF (WIN32)
138   FIND_PROGRAM (LIB_EXECUTABLE NAMES lib
139     HINTS "$ENV{VS110COMNTOOLS}/../../VC/bin"
140           "$ENV{VS100COMNTOOLS}/../../VC/bin"
141           "$ENV{VS90COMNTOOLS}/../../VC/bin"
142           "$ENV{VS71COMNTOOLS}/../../VC/bin"
143           "$ENV{VS80COMNTOOLS}/../../VC/bin"
144     DOC "Library manager")
145
146   MARK_AS_ADVANCED (LIB_EXECUTABLE)
147 ENDIF (WIN32)
148
149 MACRO (GET_LIB_REQUISITES LIB REQUISITES)
150   IF (LIB_EXECUTABLE)
151     GET_FILENAME_COMPONENT (_LIB_PATH ${LIB_EXECUTABLE} PATH)
152
153     EXECUTE_PROCESS (COMMAND ${LIB_EXECUTABLE} /nologo /list ${LIB}
154       WORKING_DIRECTORY ${_LIB_PATH}/../../Common7/IDE
155       OUTPUT_VARIABLE _LIB_OUTPUT ERROR_QUIET)
156
157     STRING (REPLACE "\n" ";" "${REQUISITES}" "${_LIB_OUTPUT}")
158     LIST (REMOVE_DUPLICATES ${REQUISITES})
159   ENDIF (LIB_EXECUTABLE)
160 ENDMACRO (GET_LIB_REQUISITES)
161
162 IF (_LIBAV_ALL_LIBS)
163   # collect lib requisites using the lib tool
164   FOREACH (_LIBAV_COMPONENT ${_LIBAV_ALL_LIBS})
165     GET_LIB_REQUISITES (${_LIBAV_COMPONENT} _LIBAV_REQUISITES)
166   ENDFOREACH (_LIBAV_COMPONENT)
167 ENDIF (_LIBAV_ALL_LIBS)
168
169 IF (NOT LIBAV_BINARY_DIR)
170   SET (_LIBAV_UPDATE_BINARY_DIR TRUE)
171 ELSE (NOT LIBAV_BINARY_DIR)
172   SET (_LIBAV_UPDATE_BINARY_DIR FALSE)
173 ENDIF (NOT LIBAV_BINARY_DIR)
174
175 SET (_LIBAV_BINARY_DIR_HINTS bin)
176
177 IF (_LIBAV_REQUISITES)
178   FIND_FILE (LIBAV_BINARY_DIR NAMES ${_LIBAV_REQUISITES}
179           HINTS ${LIBAV_ROOT_DIR}
180     PATH_SUFFIXES ${_LIBAV_BINARY_DIR_HINTS} NO_DEFAULT_PATH)
181 ENDIF (_LIBAV_REQUISITES)
182
183 IF (LIBAV_BINARY_DIR AND _LIBAV_UPDATE_BINARY_DIR)
184   SET (_LIBAV_BINARY_DIR ${LIBAV_BINARY_DIR})
185   UNSET (LIBAV_BINARY_DIR CACHE)
186
187   IF (_LIBAV_BINARY_DIR)
188         GET_FILENAME_COMPONENT (LIBAV_BINARY_DIR ${_LIBAV_BINARY_DIR} PATH)
189   ENDIF (_LIBAV_BINARY_DIR)
190 ENDIF (LIBAV_BINARY_DIR AND _LIBAV_UPDATE_BINARY_DIR)
191
192 SET (LIBAV_BINARY_DIR ${LIBAV_BINARY_DIR} CACHE PATH "libav binary directory")
193
194 MARK_AS_ADVANCED (LIBAV_INCLUDE_DIR LIBAV_BINARY_DIR)
195
196 IF (NOT _LIBAV_CHECK_COMPONENTS)
197  SET (_LIBAV_FPHSA_ADDITIONAL_ARGS HANDLE_COMPONENTS)
198 ENDIF (NOT _LIBAV_CHECK_COMPONENTS)
199
200 FIND_PACKAGE_HANDLE_STANDARD_ARGS (LibAV REQUIRED_VARS LIBAV_ROOT_DIR
201   LIBAV_INCLUDE_DIR ${_LIBAV_MISSING_LIBRARIES} VERSION_VAR LIBAV_VERSION
202   ${_LIBAV_FPHSA_ADDITIONAL_ARGS})