diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f48b4208..a4151ca37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,22 +21,25 @@ find_package(LibZip REQUIRED) find_package(OpenSSL REQUIRED) find_package(LibLZMA REQUIRED) find_package(GTK3 3.0 REQUIRED gtk) +find_package(FFmpeg REQUIRED) +find_package(Iconv REQUIRED) +#@todo Turn into find_package(Opus REQUIRED) +find_library(OPUS opus) +find_path(OPUS_INCLUDE_DIR opus.h PATHS /usr/local/include/opus) include_directories(${GTK3_INCLUDE_DIRS}) link_directories(${GTK3_LIBRARY_DIRS}) -#find_package(PortAudio REQUIRED) -#find_package(Opus REQUIRED) -#find_package(FFmpeg REQUIRED) +if (NOT FFMPEG_SWSCALE_FOUND) + message(FATAL_ERROR "FFmpeg swscale is required") +endif() +if (NOT FFMPEG_SWRESAMPLE_FOUND) + message(FATAL_ERROR "FFmpeg swresample is required") +endif() +if (NOT OPUS) + message(FATAL_ERROR "opus codec is required") +endif() -if (NOT OPENAL_FOUND) - message(FATAL_ERROR OpenAL Soft is required) -endif() -if (NOT ZLIB_FOUND) - message(FATAL_ERROR Zlib is required) -endif() -if (NOT OPENSSL_FOUND) - message(FATAL_ERROR OpenSSL is required) -endif() +#find_package(PortAudio REQUIRED) add_subdirectory(Telegram) diff --git a/modules/FindFFmpeg.cmake b/modules/FindFFmpeg.cmake index 9a8c9d830..cf02b3348 100644 --- a/modules/FindFFmpeg.cmake +++ b/modules/FindFFmpeg.cmake @@ -6,12 +6,15 @@ # 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 ) @@ -19,8 +22,8 @@ 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 ) + 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 ) @@ -32,6 +35,7 @@ if( $ENV{FFMPEGDIR} ) 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 ) @@ -40,6 +44,7 @@ else( $ENV{FFMPEGDIR} ) 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 ) @@ -53,6 +58,8 @@ else( $ENV{FFMPEGDIR} ) ${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} @@ -67,6 +74,22 @@ IF ( SWSCALE_FOUND ) ${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} @@ -124,10 +147,8 @@ ENDIF( NOT WIN32 ) LIST( LENGTH FFMPEG_HEADERS LIST_SIZE_ ) SET( FFMPEG_FOUND FALSE ) -SET( FFMPEG_SWSCALE_FOUND FALSE ) SET( FFMPEG_POSTPROC_FOUND FALSE ) IF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} ) SET( FFMPEG_FOUND TRUE ) - SET( FFMPEG_SWSCALE_FOUND ${SWSCALE_FOUND} ) SET( FFMPEG_POSTPROC_FOUND ${POSTPROC_FOUND} ) ENDIF ( ${INC_SUCCESS} EQUAL ${LIST_SIZE_} ) diff --git a/modules/FindIconv.cmake b/modules/FindIconv.cmake new file mode 100644 index 000000000..0d240b587 --- /dev/null +++ b/modules/FindIconv.cmake @@ -0,0 +1,60 @@ +# - Try to find Iconv +# Once done this will define +# +# ICONV_FOUND - system has Iconv +# ICONV_INCLUDE_DIR - the Iconv include directory +# ICONV_LIBRARIES - Link these to use Iconv +# ICONV_SECOND_ARGUMENT_IS_CONST - the second argument for iconv() is const +# +include(CheckCXXSourceCompiles) + +IF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + # Already in cache, be silent + SET(ICONV_FIND_QUIETLY TRUE) +ENDIF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + +FIND_PATH(ICONV_INCLUDE_DIR iconv.h) + +FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c) + +IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + SET(ICONV_FOUND TRUE) +ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + +set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR}) +set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES}) +IF(ICONV_FOUND) + check_cxx_source_compiles(" + #include + int main(){ + iconv_t conv = 0; + const char* in = 0; + size_t ilen = 0; + char* out = 0; + size_t olen = 0; + iconv(conv, &in, &ilen, &out, &olen); + return 0; + } +" ICONV_SECOND_ARGUMENT_IS_CONST ) + IF(ICONV_SECOND_ARGUMENT_IS_CONST) + SET(ICONV_CONST "const") + ENDIF(ICONV_SECOND_ARGUMENT_IS_CONST) +ENDIF(ICONV_FOUND) +set(CMAKE_REQUIRED_INCLUDES) +set(CMAKE_REQUIRED_LIBRARIES) + +IF(ICONV_FOUND) + IF(NOT ICONV_FIND_QUIETLY) + MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}") + ENDIF(NOT ICONV_FIND_QUIETLY) +ELSE(ICONV_FOUND) + IF(Iconv_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find Iconv") + ENDIF(Iconv_FIND_REQUIRED) +ENDIF(ICONV_FOUND) + +MARK_AS_ADVANCED( + ICONV_INCLUDE_DIR + ICONV_LIBRARIES + ICONV_SECOND_ARGUMENT_IS_CONST +)