cmake_minimum_required(VERSION 3.0)

set(CMAKE_CXX_STANDARD 98)
#set(CMAKE_VERBOSE_MAKEFILE true)

find_package(PkgConfig REQUIRED)

project(amsynth)

SET(CMAKE_POSITION_INDEPENDENT_CODE True)

include_directories(${PROJECT_SOURCE_DIR}/include)

add_compile_options(
        -DVERSION="dev"
        -DPACKAGE="amsynth"
        -DPACKAGE_NAME="amsynth"
        -DPACKAGE_TARNAME="amsynth"
        -DPACKAGE_STRING="amsynth dev"
        -DPACKAGE_URL="https://amsynth.github.io"
        -DPACKAGE_BUGREPORT="https://www.github.com/amsynth/amsynth/issues"
        -DPKGDATADIR="${PROJECT_SOURCE_DIR}/data"
        -DWITH_OSS
)

add_compile_options(
        -DENABLE_NLS
        -DGETTEXT_PACKAGE="amsynth"
        -DPACKAGE_LOCALEDIR="/usr/local/share/locale"
)

add_compile_options(
        -Wall
        -Werror
)

pkg_check_modules(ALSA alsa)
if (ALSA_FOUND)
    add_compile_options(-DWITH_ALSA)
    include_directories(${ALSA_INCLUDE_DIRS})
endif (ALSA_FOUND)

pkg_check_modules(JACK jack)
if (JACK_FOUND)
    add_compile_options(-DWITH_JACK -DHAVE_JACK_MIDIPORT_H -DHAVE_JACK_SESSION_H)
    include_directories(${JACK_INCLUDE_DIRS})
endif (JACK_FOUND)

pkg_check_modules(GTK gtk+-2.0)
add_compile_options(-DWITH_GUI)
include_directories(${GTK_INCLUDE_DIRS})

pkg_check_modules(LASH lash-1.0)
if (LASH_FOUND)
    add_compile_options(-DWITH_LASH)
    include_directories(${LASH_INCLUDE_DIRS})
endif (LASH_FOUND)

pkg_check_modules(LIBLO liblo)
if (LIBLO_FOUND)
    include_directories(${LIBLO_INCLUDE_DIRS})
endif (LIBLO_FOUND)

pkg_check_modules(SNDFILE sndfile)
if (SNDFILE_FOUND)
    add_compile_options(-Dwith_sndfile)
endif(SNDFILE_FOUND)

#
#
#

add_library(amsynth_core STATIC
        src/Effects/Distortion.cpp
        src/Effects/Distortion.h
        src/Effects/SoftLimiter.cpp
        src/Effects/SoftLimiter.h
        src/freeverb/allpass.cpp
        src/freeverb/allpass.hpp
        src/freeverb/comb.cpp
        src/freeverb/comb.hpp
        src/freeverb/denormals.h
        src/freeverb/revmodel.cpp
        src/freeverb/revmodel.hpp
        src/freeverb/tuning.h
        src/VoiceBoard/ADSR.cpp
        src/VoiceBoard/ADSR.h
        src/VoiceBoard/LowPassFilter.cpp
        src/VoiceBoard/LowPassFilter.h
        src/VoiceBoard/Oscillator.cpp
        src/VoiceBoard/Oscillator.h
        src/VoiceBoard/Synth--.h
        src/VoiceBoard/VoiceBoard.cpp
        src/VoiceBoard/VoiceBoard.h
        src/Configuration.cpp
        src/Configuration.h
        src/controls.h
        src/gettext.h
        src/lash.c
        src/lash.h
        src/midi.h
        src/MidiController.cpp
        src/MidiController.h
        src/Parameter.cpp
        src/Parameter.h
        src/Preset.cpp
        src/Preset.h
        src/PresetController.cpp
        src/PresetController.h
        src/Synthesizer.cpp
        src/Synthesizer.h
        src/Thread.h
        src/TuningMap.cpp
        src/TuningMap.h
        src/types.h
        src/UpdateListener.h
        src/VoiceAllocationUnit.cpp
        src/VoiceAllocationUnit.h
        )

#
# Stand-alone application
#

add_executable(amsynth
        src/drivers/ALSAAudioDriver.cpp
        src/drivers/ALSAAudioDriver.h
        src/drivers/ALSAMidiDriver.cpp
        src/drivers/ALSAMidiDriver.h
        src/drivers/ALSAmmapAudioDriver.cpp
        src/drivers/ALSAmmapAudioDriver.h
        src/drivers/AudioDriver.h
        src/drivers/CoreAudio.cpp
        src/drivers/CoreAudio.h
        src/drivers/MidiDriver.h
        src/drivers/OSSAudioDriver.cpp
        src/drivers/OSSAudioDriver.h
        src/drivers/OSSMidiDriver.cpp
        src/drivers/OSSMidiDriver.h
        src/GUI/bitmap_button.c
        src/GUI/bitmap_button.h
        src/GUI/bitmap_knob.c
        src/GUI/bitmap_knob.h
        src/GUI/bitmap_popup.c
        src/GUI/bitmap_popup.h
        src/GUI/ConfigDialog.cpp
        src/GUI/ConfigDialog.h
        src/GUI/controllers.h
        src/GUI/editor_menus.cpp
        src/GUI/editor_menus.h
        src/GUI/editor_pane.c
        src/GUI/editor_pane.h
        src/GUI/gui_main.cpp
        src/GUI/gui_main.h
        src/GUI/MainMenu.cpp
        src/GUI/MainMenu.h
        src/GUI/MainWindow.cpp
        src/GUI/MainWindow.h
        src/GUI/MIDILearnDialog.cpp
        src/GUI/MIDILearnDialog.h
        src/GUI/PresetControllerView.cpp
        src/GUI/PresetControllerView.h
        src/nsm/DebugMessage.cpp
        src/nsm/DebugMessage.h
        src/nsm/nsm.h
        src/nsm/NsmClient.cpp
        src/nsm/NsmClient.h
        src/nsm/NsmHandler.cpp
        src/nsm/NsmHandler.h
        src/AudioOutput.cpp
        src/AudioOutput.h
        src/JackOutput.cpp
        src/JackOutput.h
        src/lash.c
        src/lash.h
        src/main.cpp
        src/main.h
        )

target_link_libraries(amsynth
        pthread
        amsynth_core
        ${ALSA_LIBRARIES}
        ${JACK_LIBRARIES}
        ${GTK_LIBRARIES}
        ${LASH_LIBRARIES}
        ${SNDFILE_LIBRARIES}
        ${LIBLO_LIBRARIES}
        oscpack
        )

#
#
#

add_library(amsynth_dssi MODULE src/amsynth_dssi.cpp src/amsynth_dssi.h)
set_target_properties(amsynth_dssi PROPERTIES PREFIX "")
target_link_libraries(amsynth_dssi amsynth_core)

add_executable(amsynth_dssi_gtk
        src/amsynth_dssi_gtk.cpp
        src/GUI/bitmap_button.c
        src/GUI/bitmap_button.h
        src/GUI/bitmap_knob.c
        src/GUI/bitmap_knob.h
        src/GUI/bitmap_popup.c
        src/GUI/bitmap_popup.h
        src/GUI/controllers.h
        src/GUI/editor_menus.cpp
        src/GUI/editor_menus.h
        src/GUI/editor_pane.c
        src/GUI/editor_pane.h
        src/GUI/gui_main.cpp
        src/GUI/gui_main.h
        )

target_link_libraries(amsynth_dssi_gtk
        amsynth_core
        ${GTK_LIBRARIES}
        ${LIBLO_LIBRARIES}
        )

#
#
#

add_library(amsynth_lv2 MODULE src/amsynth_lv2.cpp)
set_target_properties(amsynth_lv2 PROPERTIES PREFIX "")
target_link_libraries(amsynth_lv2 amsynth_core)


add_library(amsynth_lv2_gtk MODULE
        src/GUI/bitmap_button.c
        src/GUI/bitmap_button.h
        src/GUI/bitmap_knob.c
        src/GUI/bitmap_knob.h
        src/GUI/bitmap_popup.c
        src/GUI/bitmap_popup.h
        src/GUI/controllers.h
        src/GUI/editor_menus.cpp
        src/GUI/editor_menus.h
        src/GUI/editor_pane.c
        src/GUI/editor_pane.h
        src/GUI/gui_main.cpp
        src/GUI/gui_main.h
        src/amsynth_lv2_ui_gtk.cpp
        )
set_target_properties(amsynth_lv2_gtk PROPERTIES PREFIX "")
target_link_libraries(amsynth_lv2_gtk amsynth_core ${GTK_LIBRARIES})

add_dependencies(amsynth_lv2 amsynth_lv2_gtk)

add_library(amsynth_vst MODULE
        src/amsynth_vst.cpp
        src/GUI/bitmap_button.c
        src/GUI/bitmap_button.h
        src/GUI/bitmap_knob.c
        src/GUI/bitmap_knob.h
        src/GUI/bitmap_popup.c
        src/GUI/bitmap_popup.h
        src/GUI/controllers.h
        src/GUI/editor_menus.cpp
        src/GUI/editor_menus.h
        src/GUI/editor_pane.c
        src/GUI/editor_pane.h
        src/GUI/gui_main.cpp
        src/GUI/gui_main.h
        )
target_compile_options(amsynth_vst PUBLIC -DWITH_GUI)
set_target_properties(amsynth_vst PROPERTIES PREFIX "")
target_link_libraries(amsynth_vst amsynth_core ${GTK_LIBRARIES})


add_executable(amsynth_tests src/tests.cpp)
target_link_libraries(amsynth_tests amsynth_core)
