Warning, /graphics/digikam/core/cmake/modules/FindFFmpeg.cmake is written in an unsupported language. File is not indexed.

0001 #
0002 # CMake script to find FFMPEG libraries
0003 # Once done this will define:
0004 #
0005 #  FFMPEG_FOUND       - system has ffmpeg
0006 #  FFMPEG_INCLUDE_DIR - Include directory necessary for using the ffmpeg headers
0007 #  FFMPEG_LIBRARIES   - Link these to use ffmpeg
0008 #  FFMPEG_DEFINITIONS - Compiler switches required for using ffmpeg
0009 #
0010 # For each of the components it will additionally set.
0011 #
0012 #   - AVCODEC
0013 #   - AVDEVICE
0014 #   - AVFORMAT
0015 #   - AVUTIL
0016 #   - POSTPROCESS
0017 #   - SWSCALE
0018 #   - AVRESAMPLE
0019 #   - SWRESAMPLE
0020 #
0021 # NOTE: default components are AVFORMAT, AVUTIL, AVCODEC.
0022 #
0023 # The following variables will be defined
0024 #
0025 #   <component>_FOUND        - System has <component>
0026 #   <component>_INCLUDE_DIRS - Include directory necessary for using the <component> headers
0027 #   <component>_LIBRARIES    - Link these to use <component>
0028 #   <component>_DEFINITIONS  - Compiler switches required for using <component>
0029 #   <component>_VERSION      - The components version
0030 #
0031 # SPDX-FileCopyrightText: 2006,     by Matthias Kretz, <kretz at kde dot org>
0032 # SPDX-FileCopyrightText: 2008,     by Alexander Neundorf, <neundorf at kde dot org>
0033 # SPDX-FileCopyrightText: 2011      by Michael Jansen, <kde at michael-jansen dot biz>
0034 # SPDX-FileCopyrightText: 2016-2024 by Gilles Caulier, <caulier dot gilles at gmail dot com>
0035 #
0036 # SPDX-License-Identifier: BSD-3-Clause
0037 #
0038 
0039 INCLUDE(FindPackageHandleStandardArgs)
0040 
0041 # The default components were taken from a survey over other FindFFMPEG.cmake files
0042 
0043 IF(NOT FFmpeg_FIND_COMPONENTS)
0044 
0045     SET(FFmpeg_FIND_COMPONENTS AVCODEC AVFILTER AVFORMAT AVUTIL SWSCALE)
0046 
0047 ENDIF()
0048 
0049 # Macro to marks the given component as found if both *_LIBRARIES AND *_INCLUDE_DIRS is present.
0050 #
0051 MACRO(set_component_found _component)
0052 
0053     IF(${_component}_LIBRARIES AND ${_component}_INCLUDE_DIRS)
0054 
0055         # message(STATUS "  - ${_component} found.")
0056 
0057         SET(${_component}_FOUND TRUE)
0058 
0059     ELSE()
0060 
0061         # message(STATUS "  - ${_component} not found.")
0062 
0063         SET(${_component}_FOUND FALSE)
0064 
0065     ENDIF()
0066 
0067 ENDMACRO()
0068 
0069 # Macro to checks for the given component by invoking pkgconfig and then looking up the libraries and
0070 # include directories.
0071 
0072 MACRO(find_component _component _pkgconfig _library _header)
0073 
0074     # use pkg-config to get the directories and then use these values
0075     # in the FIND_PATH() and FIND_LIBRARY() calls
0076 
0077     FIND_PACKAGE(PkgConfig)
0078 
0079     IF(PKG_CONFIG_FOUND)
0080 
0081         MESSAGE(STATUS "Use PkgConfig to check FFMPEG ${_component} availability...")
0082         pkg_check_modules(PC_${_component} ${_pkgconfig})
0083 
0084     ELSE()
0085 
0086         MESSAGE(WARNING "PkgConfig not found!")
0087 
0088     ENDIF()
0089 
0090     FIND_PATH(${_component}_INCLUDE_DIRS ${_header}
0091               HINTS
0092                   ${PC_${_component}_INCLUDEDIR}
0093                   ${PC_${_component}_INCLUDE_DIRS}
0094               PATH_SUFFIXES
0095                   ffmpeg
0096     )
0097 
0098     FIND_LIBRARY(${_component}_LIBRARIES NAMES ${_library}
0099                  HINTS
0100                      ${PC_${_component}_LIBDIR}
0101                      ${PC_${_component}_LIBRARY_DIRS}
0102     )
0103 
0104     SET(${_component}_DEFINITIONS  ${PC_${_component}_CFLAGS_OTHER}
0105         CACHE STRING "The ${_component} CFLAGS.")
0106 
0107     SET(${_component}_VERSION      ${PC_${_component}_VERSION}
0108         CACHE STRING "The ${_component} version number.")
0109 
0110     set_component_found(${_component})
0111 
0112     MARK_AS_ADVANCED(
0113         ${_component}_INCLUDE_DIRS
0114         ${_component}_LIBRARIES
0115         ${_component}_DEFINITIONS
0116         ${_component}_VERSION
0117     )
0118 
0119 ENDMACRO()
0120 
0121 # Check for cached results. If there are skip the costly part.
0122 
0123 if(NOT FFMPEG_LIBRARIES)
0124 
0125     # Check for all possible component.
0126 
0127     find_component(AVCODEC    libavcodec    avcodec    libavcodec/avcodec.h)
0128     find_component(AVFILTER   libavfilter   avfilter   libavfilter/avfilter.h)
0129     find_component(AVFORMAT   libavformat   avformat   libavformat/avformat.h)
0130     find_component(AVDEVICE   libavdevice   avdevice   libavdevice/avdevice.h)
0131     find_component(AVUTIL     libavutil     avutil     libavutil/avutil.h)
0132     find_component(SWSCALE    libswscale    swscale    libswscale/swscale.h)
0133     find_component(POSTPROC   libpostproc   postproc   libpostproc/postprocess.h)
0134     find_component(AVRESAMPLE libavresample avresample libavresample/avresample.h)
0135     find_component(SWRESAMPLE libswresample swresample libswresample/swresample.h)
0136 
0137     # Check if the required components were found and add their stuff to the FFMPEG_* vars.
0138 
0139     FOREACH(_component ${FFmpeg_FIND_COMPONENTS})
0140 
0141         IF(${_component}_FOUND)
0142 
0143             # message(STATUS "Required component ${_component} present.")
0144 
0145             SET(FFMPEG_LIBRARIES   ${FFMPEG_LIBRARIES}   ${${_component}_LIBRARIES})
0146             SET(FFMPEG_DEFINITIONS ${FFMPEG_DEFINITIONS} ${${_component}_DEFINITIONS})
0147             LIST(APPEND FFMPEG_INCLUDE_DIRS ${${_component}_INCLUDE_DIRS})
0148 
0149         ELSE()
0150 
0151             # message(STATUS "Required component ${_component} missing.")
0152 
0153         ENDIF()
0154 
0155     ENDFOREACH()
0156 
0157     # Build the include path with duplicates removed.
0158 
0159     IF(FFMPEG_INCLUDE_DIRS)
0160 
0161         LIST(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS)
0162 
0163     ENDIF()
0164 
0165     # cache the vars.
0166 
0167     SET(FFMPEG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS} CACHE STRING "The FFmpeg include directories." FORCE)
0168     SET(FFMPEG_LIBRARIES    ${FFMPEG_LIBRARIES}    CACHE STRING "The FFmpeg libraries."           FORCE)
0169     SET(FFMPEG_DEFINITIONS  ${FFMPEG_DEFINITIONS}  CACHE STRING "The FFmpeg cflags."              FORCE)
0170 
0171     MARK_AS_ADVANCED(FFMPEG_INCLUDE_DIRS
0172                      FFMPEG_LIBRARIES
0173                      FFMPEG_DEFINITIONS
0174     )
0175 
0176 ENDIF()
0177 
0178 # Now set the non-cached _FOUND vars for the components.
0179 
0180 FOREACH(_component AVCODEC AVDEVICE AVFILTER AVFORMAT AVUTIL POSTPROCESS SWSCALE AVRESAMPLE SWRESAMPLE)
0181 
0182     set_component_found(${_component})
0183 
0184 ENDFOREACH()
0185 
0186 # Compile the list of required vars
0187 SET(_FFmpeg_REQUIRED_VARS FFMPEG_LIBRARIES FFMPEG_INCLUDE_DIRS)
0188 
0189 FOREACH(_component ${FFmpeg_FIND_COMPONENTS})
0190 
0191     LIST(APPEND _FFmpeg_REQUIRED_VARS ${_component}_LIBRARIES ${_component}_INCLUDE_DIRS)
0192 
0193 ENDFOREACH()
0194 
0195 # Give a nice error message if some of the required vars are missing.
0196 FIND_PACKAGE_HANDLE_STANDARD_ARGS(FFmpeg DEFAULT_MSG ${_FFmpeg_REQUIRED_VARS})
0197 
0198 MESSAGE(STATUS "FFMPEG_FOUND        = ${FFMPEG_FOUND}")
0199 MESSAGE(STATUS "FFMPEG_INCLUDE_DIRS = ${FFMPEG_INCLUDE_DIRS}")
0200 MESSAGE(STATUS "FFMPEG_LIBRARIES    = ${FFMPEG_LIBRARIES}")
0201 MESSAGE(STATUS "FFMPEG_DEFINITIONS  = ${FFMPEG_DEFINITIONS}")