cmake_minimum_required(VERSION 3.22)
project(Patina VERSION 0.2.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(CTest)
option(PATINA_CORE_ONLY "Build DSP tests without JUCE" OFF)
add_executable(PatinaCoreTests Tests/CoreTests.cpp)
target_include_directories(PatinaCoreTests PRIVATE Source)
add_test(NAME PatinaCore COMMAND PatinaCoreTests)
if(PATINA_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()
set(formats VST3)
if(APPLE)
    list(APPEND formats AU)
endif()
juce_add_plugin(Patina COMPANY_NAME "Century Century" BUNDLE_ID "com.centurycentury.patina"
    PLUGIN_MANUFACTURER_CODE Cnty PLUGIN_CODE Ptnx PRODUCT_NAME "Patina"
    FORMATS ${formats} IS_SYNTH FALSE IS_MIDI_EFFECT FALSE NEEDS_MIDI_INPUT FALSE NEEDS_MIDI_OUTPUT FALSE
    COPY_PLUGIN_AFTER_BUILD FALSE)
target_sources(Patina PRIVATE Source/Processor.cpp Source/Editor.cpp)
target_compile_definitions(Patina PUBLIC JUCE_WEB_BROWSER=0 JUCE_USE_CURL=0 JUCE_VST3_CAN_REPLACE_VST2=0)
target_link_libraries(Patina PRIVATE juce::juce_audio_utils
    PUBLIC juce::juce_recommended_config_flags juce::juce_recommended_warning_flags)
if(BUILD_TESTING)
    add_executable(PatinaProcessorTests Tests/ProcessorTests.cpp)
    target_include_directories(PatinaProcessorTests PRIVATE Source "$<TARGET_PROPERTY:Patina,INCLUDE_DIRECTORIES>")
    target_compile_definitions(PatinaProcessorTests PRIVATE JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1)
    target_link_libraries(PatinaProcessorTests PRIVATE Patina)
    add_test(NAME PatinaProcessor COMMAND PatinaProcessorTests)
endif()
