cmake_minimum_required(VERSION 3.22)
project(ChordPalette VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(CHORDPALETTE_CORE_ONLY "Build dependency-free MIDI engine tests only" OFF)
include(CTest)
add_executable(ChordPaletteTests Tests/CoreTests.cpp)
target_include_directories(ChordPaletteTests PRIVATE Source)
add_test(NAME ChordPaletteCore COMMAND ChordPaletteTests)
if(CHORDPALETTE_CORE_ONLY)
    return()
endif()
set(JUCE_DIR "" CACHE PATH "Optional local JUCE checkout")
if(JUCE_DIR)
    add_subdirectory("${JUCE_DIR}" JUCE)
else()
    include(FetchContent)
    FetchContent_Declare(JUCE GIT_REPOSITORY https://github.com/juce-framework/JUCE.git
        GIT_TAG 8.0.12 GIT_SHALLOW TRUE)
    FetchContent_MakeAvailable(JUCE)
endif()
function(chordpalette_sources target preview)
    target_sources(${target} PRIVATE Source/PluginProcessor.cpp Source/PluginEditor.cpp)
    target_compile_definitions(${target} PUBLIC JUCE_WEB_BROWSER=0 JUCE_USE_CURL=0
        JUCE_VST3_CAN_REPLACE_VST2=0 CHORDPALETTE_AUDIO_PREVIEW=${preview})
    target_link_libraries(${target} PRIVATE juce::juce_audio_utils
        PUBLIC juce::juce_recommended_config_flags juce::juce_recommended_warning_flags)
endfunction()
if(APPLE)
    juce_add_plugin(ChordPalette COMPANY_NAME "Century Century" BUNDLE_ID "com.centurycentury.chordpalette"
        PLUGIN_MANUFACTURER_CODE Cnty PLUGIN_CODE Chpl PRODUCT_NAME "ChordPalette"
        FORMATS AU IS_SYNTH FALSE IS_MIDI_EFFECT TRUE NEEDS_MIDI_INPUT TRUE NEEDS_MIDI_OUTPUT TRUE
        AU_MAIN_TYPE kAudioUnitType_MIDIProcessor COPY_PLUGIN_AFTER_BUILD FALSE)
    chordpalette_sources(ChordPalette 0)
endif()
juce_add_plugin(ChordPalettePlayer COMPANY_NAME "Century Century" BUNDLE_ID "com.centurycentury.chordpaletteplayer"
    PLUGIN_MANUFACTURER_CODE Cnty PLUGIN_CODE Chpp PRODUCT_NAME "ChordPalette Player"
    FORMATS VST3 Standalone IS_SYNTH TRUE IS_MIDI_EFFECT FALSE
    NEEDS_MIDI_INPUT TRUE NEEDS_MIDI_OUTPUT TRUE COPY_PLUGIN_AFTER_BUILD FALSE)
chordpalette_sources(ChordPalettePlayer 1)
if(BUILD_TESTING)
    add_executable(ChordPaletteProcessorTests Tests/ProcessorTests.cpp)
    target_include_directories(ChordPaletteProcessorTests PRIVATE
        Source "$<TARGET_PROPERTY:ChordPalettePlayer,INCLUDE_DIRECTORIES>")
    target_compile_definitions(ChordPaletteProcessorTests PRIVATE JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1)
    target_link_libraries(ChordPaletteProcessorTests PRIVATE ChordPalettePlayer)
    add_test(NAME ChordPaletteProcessor COMMAND ChordPaletteProcessorTests)
endif()
