summaryrefslogtreecommitdiff
path: root/CMakeFFmpegLibavMacros.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeFFmpegLibavMacros.cmake')
-rw-r--r--CMakeFFmpegLibavMacros.cmake65
1 files changed, 65 insertions, 0 deletions
diff --git a/CMakeFFmpegLibavMacros.cmake b/CMakeFFmpegLibavMacros.cmake
new file mode 100644
index 0000000..06105c6
--- /dev/null
+++ b/CMakeFFmpegLibavMacros.cmake
@@ -0,0 +1,65 @@
+#-------------------------------------------------------------------
+# FindFFmpeg.cmake and FindLibAV.cmake are dependent on this file.
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file
+#
+#-------------------------------------------------------------------
+
+### Macro: set_component_found
+#
+# Marks the given component as found if both *_LIBRARIES AND *_INCLUDE_DIRS is present.
+#
+macro(set_component_found _component )
+ if(${_component}_LIBRARIES AND ${_component}_INCLUDE_DIRS)
+ # message(STATUS " - ${_component} found.")
+ set(${_component}_FOUND TRUE)
+ else()
+ # message(STATUS " - ${_component} not found.")
+ endif()
+endmacro()
+
+#
+### Macro: find_component
+#
+# Finds each component's library file and include directory, and sets
+# *_LIBRARIES and *_INCLUDE_DIRS accordingly. Additionally detects each
+# component's version and sets *_VERSION_STRING.
+#
+macro(find_component _component _library _header _version)
+ find_path(${_component}_INCLUDE_DIRS ${_header}
+ PATH_SUFFIXES
+ ffmpeg
+ libav
+ include
+ )
+
+ find_library(${_component}_LIBRARIES
+ NAMES ${_library}
+ PATH_SUFFIXES
+ lib
+ )
+
+ if(${_component}_INCLUDE_DIRS AND EXISTS "${${_component}_INCLUDE_DIRS}/${_version}")
+ file(STRINGS "${${_component}_INCLUDE_DIRS}/${_version}" ${_component}_VERSION_MAJOR_LINE REGEX "^#define[ \t]+LIB${_component}_VERSION_MAJOR[ \t]+[0-9]+$")
+ file(STRINGS "${${_component}_INCLUDE_DIRS}/${_version}" ${_component}_VERSION_MINOR_LINE REGEX "^#define[ \t]+LIB${_component}_VERSION_MINOR[ \t]+[0-9]+$")
+ file(STRINGS "${${_component}_INCLUDE_DIRS}/${_version}" ${_component}_VERSION_PATCH_LINE REGEX "^#define[ \t]+LIB${_component}_VERSION_MICRO[ \t]+[0-9]+$")
+ string(REGEX REPLACE "^#define[ \t]+LIB${_component}_VERSION_MAJOR[ \t]+([0-9]+)$" "\\1" ${_component}_VERSION_MAJOR "${${_component}_VERSION_MAJOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+LIB${_component}_VERSION_MINOR[ \t]+([0-9]+)$" "\\1" ${_component}_VERSION_MINOR "${${_component}_VERSION_MINOR_LINE}")
+ string(REGEX REPLACE "^#define[ \t]+LIB${_component}_VERSION_MICRO[ \t]+([0-9]+)$" "\\1" ${_component}_VERSION_PATCH "${${_component}_VERSION_PATCH_LINE}")
+ set(${_component}_VERSION_STRING ${${_component}_VERSION_MAJOR}.${${_component}_VERSION_MINOR}.${${_component}_VERSION_PATCH})
+ unset(${_component}_VERSION_MAJOR_LINE)
+ unset(${_component}_VERSION_MINOR_LINE)
+ unset(${_component}_VERSION_PATCH_LINE)
+ unset(${_component}_VERSION_MAJOR)
+ unset(${_component}_VERSION_MINOR)
+ unset(${_component}_VERSION_PATCH)
+ endif()
+
+ find_package_handle_standard_args(${_component}
+ REQUIRED_VARS ${_component}_LIBRARIES ${_component}_INCLUDE_DIRS
+ VERSION_VAR ${_component}_VERSION_STRING
+ )
+
+ set_component_found(${_component})
+endmacro()