cmake_minimum_required(VERSION 3.0)
project(SDL2_MIXER C)

find_path(SDL_INCLUDE_DIR SDL.h PATH_SUFFIXES SDL2)
find_library(SDL_LIBRARY SDL2)
set(SDL_MIXER_INCLUDES ${SDL_INCLUDE_DIR})
set(SDL_MIXER_LIBRARIES ${SDL_LIBRARY})

# builtin formats
set(SDL_MIXER_DEFINES 
    WAV_MUSIC
    MID_MUSIC
    USE_NATIVE_MIDI)

# MP3 support
if(SDL_MIXER_ENABLE_MP3)
    find_path(SMPEG_INCLUDE_DIR smpeg.h)
    find_library(SMPEG_LIBRARY smpeg2)
    list(APPEND SDL_MIXER_INCLUDES ${SMPEG_INCLUDE_DIR})
    list(APPEND SDL_MIXER_LIBRARIES ${SMPEG_LIBRARY})
    list(APPEND SDL_MIXER_DEFINES MP3_MUSIC)
endif()

# FLAC support
if(SDL_MIXER_ENABLE_FLAC)
    find_path(FLAC_INCLUDE_DIR flac/all.h)
    find_library(FLAC_LIBRARY flac)
    list(APPEND SDL_MIXER_INCLUDES ${FLAC_INCLUDE_DIR})
    list(APPEND SDL_MIXER_LIBRARIES ${FLAC_LIBRARY})
    list(APPEND SDL_MIXER_DEFINES FLAC_MUSIC)
endif()

# MOD support
if(SDL_MIXER_ENABLE_MOD)
    find_path(MODPLUG_INCLUDE_DIR libmodplug/modplug.h)
    find_library(MODPLUG_LIBRARY modplug)
    list(APPEND SDL_MIXER_INCLUDES ${MODPLUG_INCLUDE_DIR})
    list(APPEND SDL_MIXER_LIBRARIES ${MODPLUG_LIBRARY})
    list(APPEND SDL_MIXER_DEFINES MODPLUG_MUSIC)
endif()

# Ogg-Vorbis support
if(SDL_MIXER_ENABLE_OGGVORBIS)
    find_path(VORBIS_INCLUDE_DIR vorbis/codec.h)
    find_library(VORBISFILE_LIBRARY vorbisfile)
    list(APPEND SDL_MIXER_INCLUDES ${VORBIS_INCLUDE_DIR})
    list(APPEND SDL_MIXER_LIBRARIES ${VORBISFILE_LIBRARY})
    list(APPEND SDL_MIXER_DEFINES OGG_MUSIC)
endif()

add_library(SDL2_mixer 
    dynamic_flac.c
    dynamic_fluidsynth.c
    dynamic_mod.c
    dynamic_modplug.c
    dynamic_mp3.c
    dynamic_ogg.c
    effect_position.c
    effect_stereoreverse.c
    effects_internal.c
    fluidsynth.c
    load_aiff.c
    load_flac.c
    load_mp3.c
    load_ogg.c
    load_voc.c
    mixer.c
    music.c
    music_cmd.c
    music_flac.c
    music_mad.c
    music_mod.c
    music_modplug.c
    music_ogg.c
    wavestream.c
    native_midi/native_midi_common.c
    native_midi/native_midi_win32.c)

set_target_properties(SDL2_mixer PROPERTIES DEFINE_SYMBOL SDL2_EXPORTS)
target_compile_definitions(SDL2_mixer PRIVATE ${SDL_MIXER_DEFINES})
target_include_directories(SDL2_mixer PRIVATE ${SDL_MIXER_INCLUDES} ./native_midi)
target_link_libraries(SDL2_mixer ${SDL_MIXER_LIBRARIES} Winmm)

install(TARGETS SDL2_mixer
    RUNTIME DESTINATION bin
    ARCHIVE DESTINATION lib
    LIBRARY DESTINATION lib)

if(NOT SDL_MIXER_SKIP_HEADERS)
    install(FILES SDL_mixer.h DESTINATION include/SDL2)
endif()

message(STATUS "Link-time dependencies:")
foreach(LIBRARY ${SDL_MIXER_LIBRARIES})
    message(STATUS "  " ${LIBRARY})
endforeach()
