find_package(Boost 1.34 REQUIRED COMPONENTS thread filesystem)

if( DEFINED WITH_GSTREAMER )
  if(WITH_GSTREAMER)
    set(WANT_GSTREAMER "YES")
  else(WITH_GSTREAMER)
    set(WANT_GSTREAMER "NO")
  endif(WITH_GSTREAMER)
else( DEFINED WITH_GSTREAMER )
  set(WANT_GSTREAMER "AUTODETECT")
endif( DEFINED WITH_GSTREAMER )

if( WANT_GSTREAMER MATCHES "NO")
  set( CMAKE_GSTREAMER_SUPPORT "user disabled")
  set( CMAKE_GSTREAMER_BUILD FALSE )
else( WANT_GSTREAMER MATCHES "NO")
  find_package(GStreamer)
  if( WANT_GSTREAMER MATCHES "YES")
    if (GSTREAMER_LIBRARIES)
      set( CMAKE_GSTREAMER_SUPPORT "user enabled")
      set( CMAKE_GSTREAMER_BUILD TRUE )
    else (GSTREAMER_LIBRARIES)
      message(FATAL_ERROR "Could not find gstreamer, but explicitly required")
    endif (GSTREAMER_LIBRARIES)
  else( WANT_GSTREAMER MATCHES "YES")
    #here it matches autodetect
    if (GSTREAMER_LIBRARIES)
      set( CMAKE_GSTREAMER_SUPPORT "enabled (autodetect)")
      set( CMAKE_GSTREAMER_BUILD TRUE )
    else (GSTREAMER_LIBRARIES)
      set( CMAKE_GSTREAMER_SUPPORT "disabled (autodetect)")
      set( CMAKE_GSTREAMER_BUILD FALSE )
    endif (GSTREAMER_LIBRARIES)
  endif( WANT_GSTREAMER MATCHES "YES")
endif( WANT_GSTREAMER MATCHES "NO")

if( DEFINED WITH_JACK )
  if(WITH_JACK)
    set(WANT_JACK "YES")
  else(WITH_JACK)
    set(WANT_JACK "NO")
  endif(WITH_JACK)
else( DEFINED WITH_JACK )
  set(WANT_JACK "AUTODETECT")
endif( DEFINED WITH_JACK )

if( WANT_JACK MATCHES "NO")
  set( CMAKE_JACK_SUPPORT "user disabled")
  set( CMAKE_JACK_BUILD FALSE )
else( WANT_JACK MATCHES "NO")
  find_package(Jack)
  if( WANT_JACK MATCHES "YES")
    if (JACK_LIBRARIES)
      set( CMAKE_JACK_SUPPORT "user enabled")
      set( CMAKE_JACK_BUILD TRUE )
    else (JACK_LIBRARIES)
      message(FATAL_ERROR "Could not find jack, but explicitly required")
    endif (JACK_LIBRARIES)
  else( WANT_JACK MATCHES "YES")
    #here it matches autodetect
    if (JACK_LIBRARIES)
      set( CMAKE_JACK_SUPPORT "enabled (autodetect)")
      set( CMAKE_JACK_BUILD TRUE )
    else (JACK_LIBRARIES)
      set( CMAKE_JACK_SUPPORT "disabled (autodetect)")
      set( CMAKE_JACK_BUILD FALSE )
    endif (JACK_LIBRARIES)
  endif( WANT_JACK MATCHES "YES")
endif( WANT_JACK MATCHES "NO")

if( DEFINED WITH_PORTAUDIO )
  if(WITH_PORTAUDIO)
    set(WANT_PORTAUDIO "YES")
  else(WITH_PORTAUDIO)
    set(WANT_PORTAUDIO "NO")
  endif(WITH_PORTAUDIO)
else( DEFINED WITH_PORTAUDIO )
  set(WANT_PORTAUDIO "AUTODETECT")
endif( DEFINED WITH_PORTAUDIO )
if( DEFINED WITH_PORTAUDIO )
  if(WITH_PORTAUDIO)
    set(WANT_PORTAUDIO "YES")
  else(WITH_PORTAUDIO)
    set(WANT_PORTAUDIO "NO")
  endif(WITH_PORTAUDIO)
else( DEFINED WITH_PORTAUDIO )
  set(WANT_PORTAUDIO "AUTODETECT")
endif( DEFINED WITH_PORTAUDIO )

if( WANT_PORTAUDIO MATCHES "NO")
  set( CMAKE_PORTAUDIO_SUPPORT "user disabled")
  set( CMAKE_PORTAUDIO_BUILD FALSE )
else( WANT_PORTAUDIO MATCHES "NO")
  find_package(Portaudio)
  if( WANT_PORTAUDIO MATCHES "YES")
    if (PORTAUDIO_FOUND)
      set( CMAKE_PORTAUDIO_SUPPORT "user enabled")
      set( CMAKE_PORTAUDIO_BUILD TRUE )
    else (PORTAUDIO_FOUND)
      message(FATAL_ERROR "Could not find portaudio, but explicitly required")
    endif (PORTAUDIO_FOUND)
  else( WANT_PORTAUDIO MATCHES "YES")
    #here it matches autodetect
    if (PORTAUDIO_FOUND)
      set( CMAKE_PORTAUDIO_SUPPORT "enabled (autodetect)")
      set( CMAKE_PORTAUDIO_BUILD TRUE )
    else (PORTAUDIO_FOUND)
      set( CMAKE_PORTAUDIO_SUPPORT "disabled (autodetect)")
      set( CMAKE_PORTAUDIO_BUILD FALSE )
    endif (PORTAUDIO_FOUND)
  endif( WANT_PORTAUDIO MATCHES "YES")
endif( WANT_PORTAUDIO MATCHES "NO")
if( DEFINED WITH_PORTAUDIO )
  if(WITH_PORTAUDIO)
    set(WANT_PORTAUDIO "YES")
  else(WITH_PORTAUDIO)
    set(WANT_PORTAUDIO "NO")
  endif(WITH_PORTAUDIO)
else( DEFINED WITH_PORTAUDIO )
  set(WANT_PORTAUDIO "AUTODETECT")
endif( DEFINED WITH_PORTAUDIO )

if( DEFINED WITH_PULSEAUDIO )
  if(WITH_PULSEAUDIO)
    set(WANT_PULSEAUDIO "YES")
  else(WITH_PULSEAUDIO)
    set(WANT_PULSEAUDIO "NO")
  endif(WITH_PULSEAUDIO)
else( DEFINED WITH_PULSEAUDIO )
  set(WANT_PULSEAUDIO "AUTODETECT")
endif( DEFINED WITH_PULSEAUDIO )

if( WANT_PULSEAUDIO MATCHES "NO")
  set( CMAKE_PULSEAUDIO_SUPPORT "user disabled")
  set( CMAKE_PULSEAUDIO_BUILD FALSE )
else( WANT_PULSEAUDIO MATCHES "NO")
  find_package(PulseAudio)
  if( WANT_PULSEAUDIO MATCHES "YES")
    if (PULSEAUDIO_FOUND)
      set( CMAKE_PULSEAUDIO_SUPPORT "user enabled")
      set( CMAKE_PULSEAUDIO_BUILD TRUE )
    else (PULSEAUDIO_FOUND)
      message(FATAL_ERROR "Could not find pulseaudio, but explicitly required")
    endif (PULSEAUDIO_FOUND)
  else( WANT_PULSEAUDIO MATCHES "YES")
    #here it matches autodetect
    if (PULSEAUDIO_FOUND)
      set( CMAKE_PULSEAUDIO_SUPPORT "enabled (autodetect)")
      set( CMAKE_PULSEAUDIO_BUILD TRUE )
    else (PULSEAUDIO_FOUND)
      set( CMAKE_PULSEAUDIO_SUPPORT "disabled (autodetect)")
      set( CMAKE_PULSEAUDIO_BUILD FALSE )
    endif (PULSEAUDIO_FOUND)
  endif( WANT_PULSEAUDIO MATCHES "YES")
endif( WANT_PULSEAUDIO MATCHES "NO")

if( DEFINED WITH_ALSA )
  if(WITH_ALSA)
    set(WANT_ALSA "YES")
  else(WITH_ALSA)
    set(WANT_ALSA "NO")
  endif(WITH_ALSA)
else( DEFINED WITH_ALSA )
  set(WANT_ALSA "AUTODETECT")
endif( DEFINED WITH_ALSA )

if( WANT_ALSA MATCHES "NO")
  set( CMAKE_ALSA_SUPPORT "user disabled")
  set( CMAKE_ALSA_BUILD FALSE )
else( WANT_ALSA MATCHES "NO")
  find_package(ALSA 0.18)
  if( WANT_ALSA MATCHES "YES")
    if (ALSA_FOUND)
      set( CMAKE_ALSA_SUPPORT "user enabled")
      set( CMAKE_ALSA_BUILD TRUE )
    else (ALSA_FOUND)
      message(FATAL_ERROR "Could not find alsa, but explicitly required")
    endif (ALSA_FOUND)
  else( WANT_ALSA MATCHES "YES")
    #here it matches autodetect
    if (ALSA_FOUND)
      set( CMAKE_ALSA_SUPPORT "enabled (autodetect)")
      set( CMAKE_ALSA_BUILD TRUE )
    else (ALSA_FOUND)
      set( CMAKE_ALSA_SUPPORT "disabled (autodetect)")
      set( CMAKE_ALSA_BUILD FALSE )
    endif (ALSA_FOUND)
  endif( WANT_ALSA MATCHES "YES")
endif( WANT_ALSA MATCHES "NO")

message("------------------------------------------------------------------")
message("                  LIBDA build summary                             ")
message("------------------------------------------------------------------")
message(" Alsa      : ${CMAKE_ALSA_SUPPORT}")
message(" Portaudio : ${CMAKE_PORTAUDIO_SUPPORT}")
message(" Pulseaudio: ${CMAKE_PULSEAUDIO_SUPPORT}")
message(" Gstreamer : ${CMAKE_GSTREAMER_SUPPORT}")
message(" Jack      : ${CMAKE_JACK_SUPPORT}")
message("------------------------------------------------------------------")

add_library(da_audio_dev_tone MODULE audio_dev_tone.cpp)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
  target_link_libraries(da_audio_dev_tone ${Boost_FILESYSTEM_LIBRARY} ${PORTAUDIO_LIBRARIES} da)
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

if (CMAKE_ALSA_BUILD)
	include_directories(${ALSA_INCLUDE_DIR})
	include_directories(.) # for alsa/alsa.hpp
	add_library(da_audio_dev_alsa MODULE audio_dev_alsa.cpp)
	target_link_libraries(da_audio_dev_alsa ${ALSA_LIBRARIES})
	install(TARGETS da_audio_dev_alsa DESTINATION ${LIBDA_PLUGIN_DIR})
endif (CMAKE_ALSA_BUILD)

if (CMAKE_GSTREAMER_BUILD)
	include_directories(${GSTREAMER_INCLUDE_DIRS})
	add_definitions(${GSTREAMER_DEFINITIONS})
	add_library(da_audio_dev_gst MODULE audio_dev_gst.cpp)
	target_link_libraries(da_audio_dev_gst ${GSTREAMER_LIBRARIES})
	install(TARGETS da_audio_dev_gst DESTINATION ${LIBDA_PLUGIN_DIR})
endif (CMAKE_GSTREAMER_BUILD)

if (CMAKE_JACK_BUILD)
	include_directories(${JACK_INCLUDE_DIRS})
	add_library(da_audio_dev_jack MODULE audio_dev_jack.cpp)
	target_link_libraries(da_audio_dev_jack ${JACK_LIBRARIES})
	install(TARGETS da_audio_dev_jack DESTINATION ${LIBDA_PLUGIN_DIR})
endif (CMAKE_JACK_BUILD)

if (CMAKE_PORTAUDIO_BUILD)
	if( ${PORTAUDIO_VERSION} EQUAL 18 )
		include_directories(${PORTAUDIO_INCLUDE_DIRS})
		add_library(da_audio_dev_pa18 MODULE audio_dev_pa18.cpp)
		link_directories(${PORTAUDIO_LIBRARY_DIRS})
		target_link_libraries(da_audio_dev_pa18 ${PORTAUDIO_LIBRARIES})
		install(TARGETS da_audio_dev_pa18 DESTINATION ${LIBDA_PLUGIN_DIR})
	endif( ${PORTAUDIO_VERSION} EQUAL 18 )
	if( ${PORTAUDIO_VERSION} EQUAL 19 )
		include_directories(${PORTAUDIO_INCLUDE_DIRS})
		add_library(da_audio_dev_pa19 MODULE audio_dev_pa19.cpp)
		if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
		  target_link_libraries(da_audio_dev_pa19 ${Boost_FILESYSTEM_LIBRARY} ${PORTAUDIO_LIBRARIES} da)
		else(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
		  target_link_libraries(da_audio_dev_pa19 ${PORTAUDIO_LIBRARIES})
		endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
		install(TARGETS da_audio_dev_pa19 DESTINATION ${LIBDA_PLUGIN_DIR})
	endif( ${PORTAUDIO_VERSION} EQUAL 19 )
endif (CMAKE_PORTAUDIO_BUILD)

if (CMAKE_PULSEAUDIO_BUILD)
	include_directories(${PULSEAUDIO_INCLUDE_DIR})
	add_library(da_audio_dev_pulse MODULE audio_dev_pulse.cpp)
	target_link_libraries(da_audio_dev_pulse ${PULSEAUDIO_LIBRARIES})
	install(TARGETS da_audio_dev_pulse DESTINATION ${LIBDA_PLUGIN_DIR})
endif (CMAKE_PULSEAUDIO_BUILD)
