cmake_minimum_required(VERSION 3.2)

project(airwindows-lv2 LANGUAGES C)

include(GNUInstallDirs)

# Default to release builds
if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

if(APPLE)
  if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    set(INSTALL_DIR $ENV{HOME}/Library/Audio/Plug-Ins/LV2)
  else()
    set(INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
  endif()
elseif(UNIX)
  set(INSTALL_DIR ${CMAKE_INSTALL_FULL_LIBDIR}/lv2)
endif()

include(FindPkgConfig)
pkg_check_modules(LV2 lv2 REQUIRED)
if(MSYS OR MINGW)
  # Ugly but it should work in most cases
  string(REGEX REPLACE "C:" "/c/" LV2_INCLUDE_DIRS ${LV2_INCLUDE_DIRS})
endif()

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Airwindows.lv2)


function(add_plugin PLUGIN_NAME)
  add_library(${PLUGIN_NAME} SHARED src/${PLUGIN_NAME}/${PLUGIN_NAME}.c)
  target_include_directories(${PLUGIN_NAME} PRIVATE ${LV2_INCLUDE_DIRS})
  target_link_libraries(${PLUGIN_NAME} m)
  set_target_properties(${PLUGIN_NAME} PROPERTIES PREFIX "")

  if(MSVC)
    target_compile_options(${PLUGIN_NAME} PRIVATE /Wall)
  else()
    target_compile_options(${PLUGIN_NAME} PRIVATE -Wall -Wextra -Wpedantic -Wno-unused-parameter)
  endif()

  configure_file(src/${PLUGIN_NAME}/${PLUGIN_NAME}.ttl ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${PLUGIN_NAME}.ttl)
endfunction()

add_plugin(Acceleration)
add_plugin(Acceleration2)
add_plugin(ADClip7)
add_plugin(Baxandall)
add_plugin(BitShiftGain)
add_plugin(Capacitor)
add_plugin(Capacitor2)
add_plugin(Channel8)
add_plugin(Channel9)
add_plugin(ClipOnly)
add_plugin(ClipOnly2)
add_plugin(Console7Buss)
add_plugin(Console7Cascade)
add_plugin(Console7Channel)
add_plugin(Console7Crunch)
add_plugin(DCVoltage)
add_plugin(DeBess)
add_plugin(Dyno)
add_plugin(EdIsDim)
add_plugin(EveryTrim)
add_plugin(Galactic)
add_plugin(HermeTrim)
add_plugin(Hypersonic)
add_plugin(Infrasonic)
add_plugin(Interstage)
add_plugin(LeftoMono)
add_plugin(Mackity)
add_plugin(MidSide)
add_plugin(Mojo)
add_plugin(MoNoam)
add_plugin(MV)
add_plugin(Nikola)
add_plugin(PocketVerbs)
add_plugin(Pressure5)
add_plugin(PurestConsoleBuss)
add_plugin(PurestConsoleChannel)
add_plugin(PurestConsole2Buss)
add_plugin(PurestConsole2Channel)
add_plugin(PurestGain)
add_plugin(RightoMono)
add_plugin(Sidepass)
add_plugin(Slew)
add_plugin(SlewOnly)
add_plugin(Spiral)
add_plugin(StarChild)
add_plugin(SubsOnly)
add_plugin(Ultrasonic)
add_plugin(UltrasonicLite)
add_plugin(UltrasonicMed)
add_plugin(Vibrato)

configure_file(src/manifest.ttl.in ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/manifest.ttl)

if(APPLE OR UNIX)
  install(DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} DESTINATION ${INSTALL_DIR})
endif()
