project(kradio4plugins)

find_package(PkgConfig)

include(CheckIncludeFileCXX)
include(CheckLibraryExists)

###############################################################################

option(WITH_ALSA "Compile with alsa support" ON)

IF(WITH_ALSA)
    find_package(ALSA)

    IF(NOT ALSA_FOUND)

        SET(WITH_ALSA OFF
            CACHE BOOL "alsa files could not be found on this system. Forcing this option to OFF"
            FORCE)
        MESSAGE("WARNING: alsa files could not be found on this system. Compiling without alsa support")

    ENDIF(NOT ALSA_FOUND)
ENDIF(WITH_ALSA)


IF (WITH_ALSA)
    message(STATUS "   Compiling with ALSA support")
    message(STATUS "       ALSA_INCLUDE_DIRS = ${ALSA_INCLUDE_DIRS}")
    message(STATUS "       ALSA_LIBRARIES    = ${ALSA_LIBRARIES}")
    message(STATUS "   Compiling with alsa support")
ELSE(WITH_ALSA)
    message(STATUS "   Compiling without ALSA support")
ENDIF(WITH_ALSA)


MACRO_LOG_FEATURE(WITH_ALSA "ALSA support" "Support for ALSA Sound Devices" "http://www.alsa-project.org")

###############################################################################


option(WITH_LIRC "Compile with LIRC support" ON)

IF(WITH_LIRC)
    find_package(LircClient)

    IF(NOT LircClient_FOUND)

        SET(WITH_LIRC OFF
            CACHE BOOL "LIRC files could not be found on this system. Forcing this option to OFF"
            FORCE)
        MESSAGE("WARNING: LIRC files could not be found on this system. Compiling without LIRC support")

    ENDIF(NOT LircClient_FOUND)
ENDIF(WITH_LIRC)


IF (WITH_LIRC)
    message(STATUS "   Compiling with LIRC support")
ELSE(WITH_LIRC)
    message(STATUS "   Compiling without LIRC support")
ENDIF(WITH_LIRC)

MACRO_LOG_FEATURE(WITH_LIRC "LIRC support" "Support for remote controls via LIRC interfaces" "http://www.lirc.org")

###############################################################################




option(WITH_FFMPEG "Compile with Internet Radio Stations support (libavformat/libffmpeg, libmms)" ON)

IF(WITH_FFMPEG)
    SET (FFMPEG_LIBRARY_DIRS  "")
    SET (FFMPEG_INCLUDE_DIRS  "")
    SET (FFMPEG_LIBRARIES     "")

    pkg_check_modules(LIBAVFORMAT libavformat)
    pkg_check_modules(LIBAVCODEC  libavcodec)
    IF(LIBAVFORMAT_FOUND)
        SET(HAVE_AVFORMAT_INC ON)
        SET(HAVE_AVFORMAT_LIB ON)

        SET(FFMPEG_LIBRARY_DIRS ${FFMPEG_LIBRARY_DIRS} ${LIBAVFORMAT_LIBRARY_DIRS} ${LIBAVCODEC_LIBRARY_DIRS} )
        SET(FFMPEG_LIBRARIES    ${FFMPEG_LIBRARIES}    ${LIBAVFORMAT_LIBRARIES}    ${LIBAVCODEC_LIBRARIES}    )
        SET(FFMPEG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS} ${LIBAVFORMAT_INCLUDE_DIRS} ${LIBAVCODEC_INCLUDE_DIRS} )

    ELSE(LIBAVFORMAT_FOUND)
        CHECK_INCLUDE_FILE_CXX(ffmpeg/avformat.h            HAVE_AVFORMAT_OLD_INC)
        CHECK_INCLUDE_FILE_CXX(libavformat/avformat.h       HAVE_AVFORMAT_INC)
        CHECK_LIBRARY_EXISTS(avformat av_open_input_file "" HAVE_AVFORMAT_LIB)
        IF (HAVE_AVFORMAT_OLD_INC OR HAVE_AVFORMAT_INC)
            IF (HAVE_AVFORMAT_LIB)
                SET(LIBAVFORMAT_FOUND ON)
                SET(FFMPEG_LIBRARIES    "avutil" "avformat" ${FFMPEG_LIBRARIES})
            ENDIF(HAVE_AVFORMAT_LIB)
        ENDIF(HAVE_AVFORMAT_OLD_INC OR HAVE_AVFORMAT_INC)
    ENDIF(LIBAVFORMAT_FOUND)



    pkg_check_modules(LIBSWRESAMPLE libswresample)
    IF(LIBSWRESAMPLE_FOUND)
        SET(FFMPEG_LIBRARIES    ${FFMPEG_LIBRARIES}    ${LIBSWRESAMPLE_LIBRARIES}   )
        add_definitions( -DHAVE_LIBSWRESAMPLE )
    ENDIF(LIBSWRESAMPLE_FOUND)


    pkg_check_modules(LIBAVRESAMPLE libavresample)
    IF(LIBAVRESAMPLE_FOUND)
        SET(FFMPEG_LIBRARIES    ${FFMPEG_LIBRARIES}    ${LIBAVRESAMPLE_LIBRARIES}   )
        add_definitions( -DHAVE_LIBAVRESAMPLE )
    ENDIF(LIBAVRESAMPLE_FOUND)

    IF(NOT LIBAVCODEC_VERSION LESS 53.42.0)
        IF(NOT LIBSWRESAMPLE_FOUND AND NOT LIBAVRESAMPLE_FOUND)
            ERROR(FATAL_ERROR "ERROR: found libavcodec " ${LIBAVCODEC_VERSION} " which requires libswresample or libavesample. However, none is not available.")
        ENDIF(NOT LIBSWRESAMPLE_FOUND AND NOT LIBAVRESAMPLE_FOUND)
    ENDIF(NOT LIBAVCODEC_VERSION LESS 53.42.0)


    set(LIBMMS_MIN_VERSION 0.5)
    find_package(Libmms ${LIBMMS_MIN_VERSION})

    IF ( NOT Libmms_FOUND OR NOT LIBAVFORMAT_FOUND )
        SET(WITH_FFMPEG OFF
            CACHE BOOL "libffmpeg and/or libmms files could not be found on this system. Forcing this option to OFF"
            FORCE)
        MESSAGE("WARNING: libffmpeg and/or libmms files could not be found on this system. Compiling without Internet Radio Stations support")
    ENDIF( NOT Libmms_FOUND OR NOT LIBAVFORMAT_FOUND )

ENDIF(WITH_FFMPEG)


IF (WITH_FFMPEG)
    message(STATUS "   Compiling with Internet Radio Stations (libavformat/libffmpeg, libmms) support")
    message(STATUS "       FFMPEG_INCLUDE_DIRS = ${FFMPEG_INCLUDE_DIRS}")
    message(STATUS "       FFMPEG_LIBRARY_DIRS = ${FFMPEG_LIBRARY_DIRS}")
    message(STATUS "       FFMPEG_LIBRARIES    = ${FFMPEG_LIBRARIES}")
    message(STATUS "       Libmms_INCLUDE_DIRS = ${Libmms_INCLUDE_DIRS}")
    message(STATUS "       Libmms_LIBRARIES    = ${Libmms_LIBRARIES}")

    IF(HAVE_AVFORMAT_OLD_INC)
        add_definitions( -DHAVE_FFMPEG_OLD )
    ELSE(HAVE_AVFORMAT_OLD_INC)
        add_definitions( -DHAVE_FFMPEG -D__STDC_CONSTANT_MACROS )
    ENDIF(HAVE_AVFORMAT_OLD_INC)
ELSE(WITH_FFMPEG)
    message(STATUS "   Compiling without Internet Radio Stations (libffmpeg, libmms) support")
ENDIF(WITH_FFMPEG)

MACRO_LOG_FEATURE(LIBAVFORMAT_FOUND "FFMPEG support"          "Support for internet radio by libffmpeg" "http://ffmpeg.org")
MACRO_LOG_FEATURE(LIBMMS_FOUND      "MMS protocol support"    "Support internet radio protocol mms:// by libmms"  "https://launchpad.net/libmms" FALSE "${LIBMMS_MIN_VERSION}")
MACRO_LOG_FEATURE(WITH_FFMPEG       "Internet radio support"  "Internet radio requires both libffmpeg and libmms" "")

###############################################################################



ADD_SUBDIRECTORY(radio)
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
    ADD_SUBDIRECTORY(v4lradio)
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
IF(WITH_ALSA)
    ADD_SUBDIRECTORY(alsa-sound)
ENDIF(WITH_ALSA)
ADD_SUBDIRECTORY(soundserver)
ADD_SUBDIRECTORY(gui-docking-menu)
ADD_SUBDIRECTORY(timecontrol)
ADD_SUBDIRECTORY(timeshifter)
ADD_SUBDIRECTORY(streaming)
ADD_SUBDIRECTORY(recording)
ADD_SUBDIRECTORY(gui-quickbar)
ADD_SUBDIRECTORY(gui-error-log)
IF(WITH_LIRC)
    ADD_SUBDIRECTORY(lirc)
ENDIF(WITH_LIRC)
ADD_SUBDIRECTORY(gui-standard-display)
ADD_SUBDIRECTORY(shortcuts)
IF(WITH_FFMPEG)
    ADD_SUBDIRECTORY(internetradio)
ENDIF(WITH_FFMPEG)
ADD_SUBDIRECTORY(dbus)
ADD_SUBDIRECTORY(mpris)
