1 # Module for locating libav.
3 # Customizable variables:
5 # Specifies libav's root directory.
9 # Indicates whether the library has been found.
12 # Specifies libav's include directory.
15 # Specifies libav libraries that should be passed to target_link_libararies.
17 # LIBAV_<COMPONENT>_LIBRARIES
18 # Specifies the libraries of a specific <COMPONENT>.
20 # LIBAV_<COMPONENT>_FOUND
21 # Indicates whether the specified <COMPONENT> was found.
24 # Copyright (c) 2012 Sergiu Dotenco
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:
33 # The above copyright notice and this permission notice shall be included in all
34 # copies or substantial portions of the Software.
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
43 # From: https://github.com/bitmovin/libdash/blob/master/libdash/qtsampleplayer/FindLibAV.cmake
44 INCLUDE (FindPackageHandleStandardArgs)
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)
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
60 DOC "libav root directory")
62 FIND_PATH (LIBAV_INCLUDE_DIR
63 NAMES libavcodec/avcodec.h
64 libavdevice/avdevice.h
65 libavfilter/avfilter.h
67 libswresample/swresample.h
69 HINTS ${LIBAV_ROOT_DIR}
71 DOC "libav include directory")
73 if (NOT LibAV_FIND_COMPONENTS)
74 set (LibAV_FIND_COMPONENTS avcodec avdevice avfilter avformat avutil swresample swscale)
75 endif (NOT LibAV_FIND_COMPONENTS)
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)
81 FIND_LIBRARY (${_LIBAV_LIBRARY_BASE}
82 NAMES ${_LIBAV_COMPONENT}
83 HINTS ${LIBAV_ROOT_DIR}
85 DOC "libav ${_LIBAV_COMPONENT} library")
87 MARK_AS_ADVANCED (${_LIBAV_LIBRARY_BASE})
89 SET (LIBAV_${_LIBAV_COMPONENT_UPPER}_FOUND TRUE)
90 SET (LibAV_${_LIBAV_COMPONENT}_FOUND ${LIBAV_${_LIBAV_COMPONENT_UPPER}_FOUND})
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})
102 SET (LIBAV_INCLUDE_DIRS ${LIBAV_INCLUDE_DIR})
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)
114 # Determine library's version
116 FIND_PROGRAM (LIBAV_AVCONV_EXECUTABLE NAMES avconv
117 HINTS ${LIBAV_ROOT_DIR}
119 DOC "avconv executable")
121 IF (LIBAV_AVCONV_EXECUTABLE)
122 EXECUTE_PROCESS (COMMAND ${LIBAV_AVCONV_EXECUTABLE} -version
123 OUTPUT_VARIABLE _LIBAV_AVCONV_OUTPUT ERROR_QUIET)
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}")
134 SET (LIBAV_VERSION_COMPONENTS 3)
135 ENDIF (LIBAV_AVCONV_EXECUTABLE)
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")
146 MARK_AS_ADVANCED (LIB_EXECUTABLE)
149 MACRO (GET_LIB_REQUISITES LIB REQUISITES)
151 GET_FILENAME_COMPONENT (_LIB_PATH ${LIB_EXECUTABLE} PATH)
153 EXECUTE_PROCESS (COMMAND ${LIB_EXECUTABLE} /nologo /list ${LIB}
154 WORKING_DIRECTORY ${_LIB_PATH}/../../Common7/IDE
155 OUTPUT_VARIABLE _LIB_OUTPUT ERROR_QUIET)
157 STRING (REPLACE "\n" ";" "${REQUISITES}" "${_LIB_OUTPUT}")
158 LIST (REMOVE_DUPLICATES ${REQUISITES})
159 ENDIF (LIB_EXECUTABLE)
160 ENDMACRO (GET_LIB_REQUISITES)
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)
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)
175 SET (_LIBAV_BINARY_DIR_HINTS bin)
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)
183 IF (LIBAV_BINARY_DIR AND _LIBAV_UPDATE_BINARY_DIR)
184 SET (_LIBAV_BINARY_DIR ${LIBAV_BINARY_DIR})
185 UNSET (LIBAV_BINARY_DIR CACHE)
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)
192 SET (LIBAV_BINARY_DIR ${LIBAV_BINARY_DIR} CACHE PATH "libav binary directory")
194 MARK_AS_ADVANCED (LIBAV_INCLUDE_DIR LIBAV_BINARY_DIR)
196 IF (NOT _LIBAV_CHECK_COMPONENTS)
197 SET (_LIBAV_FPHSA_ADDITIONAL_ARGS HANDLE_COMPONENTS)
198 ENDIF (NOT _LIBAV_CHECK_COMPONENTS)
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})