set(CLIENT_SOURCES
    client_connection.cpp
    controller.cpp
    snapclient.cpp
    stream.cpp
    time_provider.cpp
    decoder/pcm_decoder.cpp
    player/player.cpp
    player/file_player.cpp)

set(CLIENT_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ${ATOMIC_LIBRARY} common)

set(CLIENT_INCLUDE
    ${Boost_INCLUDE_DIR}
    ${CMAKE_SOURCE_DIR}/client
    ${CMAKE_SOURCE_DIR}/common)


if(MACOSX)
    # Bonjour
    if (BONJOUR_FOUND)
        list(APPEND CLIENT_SOURCES browseZeroConf/browse_bonjour.cpp)
    endif (BONJOUR_FOUND)

    # CoreAudio
    add_definitions(-DHAS_COREAUDIO)
    list(APPEND CLIENT_SOURCES player/coreaudio_player.cpp)
    find_library(COREAUDIO_LIB CoreAudio)
    find_library(COREFOUNDATION_LIB CoreFoundation)
    find_library(IOKIT_LIB IOKit)
    find_library(AUDIOTOOLBOX_LIB AudioToolbox)
    list(APPEND CLIENT_LIBRARIES ${COREAUDIO_LIB} ${COREFOUNDATION_LIB} ${IOKIT_LIB} ${AUDIOTOOLBOX_LIB})
elseif (WIN32)
    list(APPEND CLIENT_SOURCES player/wasapi_player.cpp)
    list(APPEND CLIENT_LIBRARIES wsock32 ws2_32 avrt ksuser iphlpapi)
elseif(NOT ANDROID)
    # Avahi
    if (AVAHI_FOUND)
        list(APPEND CLIENT_SOURCES browseZeroConf/browse_avahi.cpp)
        list(APPEND CLIENT_LIBRARIES ${AVAHI_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${AVAHI_INCLUDE_DIRS})
    endif (AVAHI_FOUND)

    # ALSA
    if (ALSA_FOUND)
        list(APPEND CLIENT_SOURCES player/alsa_player.cpp)
        list(APPEND CLIENT_LIBRARIES ${ALSA_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${ALSA_INCLUDE_DIRS})
    endif (ALSA_FOUND)

    if (PULSE_FOUND)
        list(APPEND CLIENT_SOURCES player/pulse_player.cpp)
        list(APPEND CLIENT_LIBRARIES ${PULSE_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${PULSE_INCLUDE_DIRS})
    endif (PULSE_FOUND)
endif (MACOSX)

if (ANDROID)
    list(APPEND CLIENT_LIBRARIES oboe::oboe)
    list(APPEND CLIENT_LIBRARIES boost::boost)
    list(APPEND CLIENT_LIBRARIES flac::flac)
    list(APPEND CLIENT_LIBRARIES opus::opus)
    list(APPEND CLIENT_LIBRARIES tremor::tremor)
    list(APPEND CLIENT_LIBRARIES ogg::ogg)
    list(APPEND CLIENT_SOURCES player/oboe_player.cpp)
    list(APPEND CLIENT_SOURCES player/opensl_player.cpp)
    list(APPEND CLIENT_SOURCES decoder/ogg_decoder.cpp)
    list(APPEND CLIENT_SOURCES decoder/flac_decoder.cpp)
    list(APPEND CLIENT_LIBRARIES OpenSLES)

else()
    # if OGG then tremor or vorbis
    if (OGG_FOUND)
        list(APPEND CLIENT_SOURCES decoder/ogg_decoder.cpp)
        list(APPEND CLIENT_LIBRARIES ${OGG_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${OGG_INCLUDE_DIRS})
    endif (OGG_FOUND)

    # Tremor (fixed-point) or libvorbis (floating-point)
    if (TREMOR_FOUND)
        list(APPEND CLIENT_LIBRARIES ${TREMOR_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${TREMOR_INCLUDE_DIRS})
    elseif (VORBIS_FOUND)
        list(APPEND CLIENT_LIBRARIES ${VORBIS_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${VORBIS_INCLUDE_DIRS})
    endif (TREMOR_FOUND)

    if (FLAC_FOUND)
        list(APPEND CLIENT_SOURCES decoder/flac_decoder.cpp)
        list(APPEND CLIENT_LIBRARIES ${FLAC_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${FLAC_INCLUDE_DIRS})
    endif (FLAC_FOUND)

    if (OPUS_FOUND)
        list(APPEND CLIENT_SOURCES decoder/opus_decoder.cpp)
        list(APPEND CLIENT_LIBRARIES ${OPUS_LIBRARIES})
        list(APPEND CLIENT_INCLUDE ${OPUS_INCLUDE_DIRS})
    endif (OPUS_FOUND)
endif()

include_directories(${CLIENT_INCLUDE})
if (ANDROID)
    add_executable(libsnapclient.so ${CLIENT_SOURCES})
    target_link_libraries(libsnapclient.so ${CLIENT_LIBRARIES} log OpenSLES)
else()
    add_executable(snapclient ${CLIENT_SOURCES})
    target_link_libraries(snapclient ${CLIENT_LIBRARIES})

    install(TARGETS snapclient COMPONENT client DESTINATION "${CMAKE_INSTALL_BINDIR}")
    install(FILES snapclient.1 COMPONENT client DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
endif()

