kepka/modules/FindFFmpeg.cmake

155 lines
5.8 KiB
CMake

# - Try to find FFMPEG
# Once done this will define
#
# FFMPEG_FOUND - system has FFMPEG
# FFMPEG_INCLUDE_DIR - the include directories
# FFMPEG_LIBRARY_DIR - the directory containing the libraries
# FFMPEG_LIBRARIES - link these to use FFMPEG
# FFMPEG_SWSCALE_FOUND - FFMPEG also has SWSCALE
# FFMPEG_SWRESAMPLE_FOUND - FFMPEG also has SWRESAMPLE
#
SET( FFMPEG_HEADERS avformat.h avcodec.h avutil.h avdevice.h )
SET( FFMPEG_PATH_SUFFIXES libavformat libavcodec libavutil libavdevice )
SET( FFMPEG_SWS_HEADERS swscale.h )
SET( FFMPEG_SWS_PATH_SUFFIXES libswscale )
SET( FFMPEG_SWR_HEADERS swresample.h )
SET( FFMPEG_SWR_PATH_SUFFIXES libswresample )
SET( FFMPEG_PP_HEADERS postproc.h )
SET( FFMPEG_PP_PATH_SUFFIXES libpostproc )
if( $ENV{FFMPEGDIR} )
SET( FFMPEG_LIBRARIES avformat-52.lib avcodec-51.lib avutil-49.lib avdevice-52.lib )
SET( FFMPEG_SWS_LIBRARIES swscale-0.lib )
SET( FFMPEG_PP_LIBRARIES postproc-0.lib )
SET( FFMPEG_LIBRARY_DIR $ENV{FFMPEGDIR}/lib )
SET( FFMPEG_INCLUDE_PATHS $ENV{FFMPEGDIR}/include )
# check to see if we can find swscale
SET( TMP_ TMP-NOTFOUND )
FIND_PATH( TMP_ ${FFMPEG_SWS_LIBRARIES} ${FFMPEG_PP_LIBRARIES}
PATHS ${FFMPEG_LIBRARY_DIR} )
IF ( TMP_ )
SET( SWSCALE_FOUND TRUE )
ENDIF( TMP_ )
else( $ENV{FFMPEGDIR} )
SET( FFMPEG_LIBRARIES avformat avcodec avutil avdevice )
SET( FFMPEG_SWS_LIBRARIES swscale )
SET( FFMPEG_SWR_LIBRARIES swresample )
SET( FFMPEG_PP_LIBRARIES postproc )
INCLUDE(FindPkgConfig)
if ( PKG_CONFIG_FOUND )
pkg_check_modules( AVFORMAT libavformat )
pkg_check_modules( AVCODEC libavcodec )
pkg_check_modules( AVUTIL libavutil )
pkg_check_modules( AVDEVICE libavdevice )
pkg_check_modules( SWSCALE libswscale )
pkg_check_modules( SWRESAMPLE libswresample )
pkg_check_modules( POSTPROC libpostproc )
endif ( PKG_CONFIG_FOUND )
SET( FFMPEG_LIBRARY_DIR ${AVFORMAT_LIBRARY_DIRS}
${AVCODEC_LIBRARY_DIRS}
${AVUTIL_LIBRARY_DIRS}
${AVDEVICE_LIBRARY_DIRS} )
SET( FFMPEG_INCLUDE_PATHS ${AVFORMAT_INCLUDE_DIRS}
${AVCODEC_INCLUDE_DIRS}
${AVUTIL_INCLUDE_DIRS}
${AVDEVICE_INCLUDE_DIRS} )
endif( $ENV{FFMPEGDIR} )
SET( FFMPEG_SWSCALE_FOUND ${SWSCALE_FOUND} )
# add in swscale if found
IF ( SWSCALE_FOUND )
SET( FFMPEG_LIBRARY_DIR ${FFMPEG_LIBRARY_DIR}
${SWSCALE_LIBRARY_DIRS} )
SET( FFMPEG_INCLUDE_PATHS ${FFMPEG_INCLUDE_PATHS}
${SWSCALE_INCLUDE_DIRS} )
SET( FFMPEG_HEADERS ${FFMPEG_HEADERS}
${FFMPEG_SWS_HEADERS} )
SET( FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES}
${FFMPEG_SWS_PATH_SUFFIXES} )
SET( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES}
${FFMPEG_SWS_LIBRARIES} )
ENDIF ( SWSCALE_FOUND )
SET( FFMPEG_SWRESAMPLE_FOUND ${SWRESAMPLE_FOUND} )
# add in swresample if found
IF ( SWRESAMPLE_FOUND )
SET( FFMPEG_LIBRARY_DIR ${FFMPEG_LIBRARY_DIR}
${SWRESAMPLE_LIBRARY_DIRS} )
SET( FFMPEG_INCLUDE_PATHS ${FFMPEG_INCLUDE_PATHS}
${SWRESAMPLE_INCLUDE_DIRS} )
SET( FFMPEG_HEADERS ${FFMPEG_HEADERS}
${FFMPEG_SWR_HEADERS} )
SET( FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES}
${FFMPEG_SWR_PATH_SUFFIXES} )
SET( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES}
${FFMPEG_SWR_LIBRARIES} )
ENDIF ( SWRESAMPLE_FOUND )
# add in postproc if found
IF ( POSTPROC_FOUND )
SET( FFMPEG_LIBRARY_DIR ${FFMPEG_LIBRARY_DIR}
${POSTPROC_LIBRARY_DIRS} )
SET( FFMPEG_INCLUDE_PATHS ${FFMPEG_INCLUDE_PATHS}
${POSTPROC_INCLUDE_DIRS} )
SET( FFMPEG_HEADERS ${FFMPEG_HEADERS}
${FFMPEG_PP_HEADERS} )
SET( FFMPEG_PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES}
${FFMPEG_PP_PATH_SUFFIXES} )
SET( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES}
${FFMPEG_PP_LIBRARIES} )
ENDIF ( POSTPROC_FOUND )
# find includes
SET( INC_SUCCESS 0 )
SET( TMP_ TMP-NOTFOUND )
SET( FFMPEG_INCLUDE_DIR ${FFMPEG_INCLUDE_PATHS} )
FOREACH( INC_ ${FFMPEG_HEADERS} )
message( "checking: " ${INC_} )
FIND_PATH( TMP_ ${INC_}
PATHS ${FFMPEG_INCLUDE_PATHS}
PATH_SUFFIXES ${FFMPEG_PATH_SUFFIXES} )
IF ( TMP_ )
message( "found: " ${TMP_} )
MATH( EXPR INC_SUCCESS ${INC_SUCCESS}+1 )
SET( FFMPEG_INCLUDE_DIR ${FFMPEG_INCLUDE_DIR} ${TMP_} )
ENDIF ( TMP_ )
SET( TMP_ TMP-NOTFOUND )
ENDFOREACH( INC_ )
# clear out duplicates
IF (FFMPEG_INCLUDE_DIR)
LIST( REMOVE_DUPLICATES FFMPEG_INCLUDE_DIR )
ENDIF (FFMPEG_INCLUDE_DIR)
IF (FFMPEG_LIBRARY_DIR)
LIST( REMOVE_DUPLICATES FFMPEG_LIBRARY_DIR )
ENDIF (FFMPEG_LIBRARY_DIR)
# find the full paths of the libraries
SET( TMP_ TMP-NOTFOUND )
IF ( NOT WIN32 )
FOREACH( LIB_ ${FFMPEG_LIBRARIES} )
FIND_LIBRARY( TMP_ NAMES ${LIB_} PATHS ${FFMPEG_LIBRARY_DIR} )
IF ( TMP_ )
SET( FFMPEG_LIBRARIES_FULL ${FFMPEG_LIBRARIES_FULL} ${TMP_} )
ENDIF ( TMP_ )
SET( TMP_ TMP-NOTFOUND )
ENDFOREACH( LIB_ )
SET ( FFMPEG_LIBRARIES ${FFMPEG_LIBRARIES_FULL} )
ENDIF( NOT WIN32 )
LIST( LENGTH FFMPEG_HEADERS LIST_SIZE_ )
SET( FFMPEG_FOUND FALSE )
SET( FFMPEG_POSTPROC_FOUND FALSE )
IF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} )
SET( FFMPEG_FOUND TRUE )
SET( FFMPEG_POSTPROC_FOUND ${POSTPROC_FOUND} )
ENDIF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} )