#pragma once
// clang-format off

// ABI-breaking language features
#cmakedefine OSSIA_SHARED_MUTEX_AVAILABLE

// Protocols supported by the build
#cmakedefine OSSIA_PROTOCOL_AUDIO
#cmakedefine OSSIA_PROTOCOL_MIDI
#cmakedefine OSSIA_PROTOCOL_OSC
#cmakedefine OSSIA_PROTOCOL_MINUIT
#cmakedefine OSSIA_PROTOCOL_OSCQUERY
#cmakedefine OSSIA_PROTOCOL_HTTP
#cmakedefine OSSIA_PROTOCOL_WEBSOCKETS
#cmakedefine OSSIA_PROTOCOL_SERIAL
#cmakedefine OSSIA_PROTOCOL_JOYSTICK
#cmakedefine OSSIA_PROTOCOL_WIIMOTE
#cmakedefine OSSIA_PROTOCOL_ARTNET
#cmakedefine OSSIA_PROTOCOL_MQTT5

// Additional features
#cmakedefine OSSIA_DNSSD
#cmakedefine OSSIA_QT
#cmakedefine OSSIA_QML
#cmakedefine OSSIA_DATAFLOW
#cmakedefine OSSIA_C
#cmakedefine OSSIA_QML_DEVICE
#cmakedefine OSSIA_QML_SCORE
#cmakedefine OSSIA_EDITOR
#cmakedefine OSSIA_PARALLEL
#cmakedefine OSSIA_TESTING
#cmakedefine OSSIA_ENABLE_JACK
#cmakedefine OSSIA_ENABLE_PORTAUDIO
#cmakedefine OSSIA_ENABLE_PIPEWIRE
#cmakedefine OSSIA_ENABLE_RUBBERBAND
#cmakedefine OSSIA_ENABLE_LIBSAMPLERATE
#cmakedefine OSSIA_ENABLE_SDL
#cmakedefine OSSIA_SCENARIO_DATAFLOW

// FFT support
#cmakedefine OSSIA_ENABLE_FFT
#cmakedefine OSSIA_ENABLE_FFTW
#cmakedefine OSSIA_ENABLE_KFR

#cmakedefine OSSIA_FFT_FFTW
#cmakedefine OSSIA_FFTW_SINGLE_ONLY
#cmakedefine OSSIA_FFTW_DOUBLE_ONLY

#cmakedefine OSSIA_FFT_KFR


#cmakedefine OSSIA_HAS_FMT
#cmakedefine OSSIA_HAS_RE2
#cmakedefine OSSIA_HAS_CTRE
#cmakedefine OSSIA_HAS_RAPIDFUZZ

// Code configuration
#cmakedefine OSSIA_CALLBACK_CONTAINER_MUTEX @OSSIA_CALLBACK_CONTAINER_MUTEX@

// In score we only have one level of callback.
// But in e.g. Max it's possible for someone to write
// a patch where multiple ossia.remote with pattern matches are cascaded,
// leading to multiple callback calls to a single object
#if !defined(OSSIA_CALLBACK_CONTAINER_MUTEX)
#define OSSIA_CALLBACK_CONTAINER_MUTEX std::recursive_mutex
#endif

// clang-format on
