set(CMAKE_C_CLANG_TIDY)
set(CMAKE_CXX_CLANG_TIDY)

if(DOWNLOAD_DEPENDENCIES)
    include(FetchContent)
    FetchContent_Declare(
        miniaudio
        URL https://github.com/mackron/miniaudio/archive/refs/tags/0.11.24.tar.gz
        URL_MD5 19e8eb21223c56a4a2d167d04decddc9
    )
    block()
        set(BUILD_SHARED_LIBS OFF)
        FetchContent_MakeAvailable(miniaudio)
    endblock()
else()
    add_library(miniaudio STATIC
        miniaudio/extras/miniaudio_split/miniaudio.c
    )
    target_include_directories(miniaudio PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/miniaudio/extras/miniaudio_split")
endif()

# Disable most features since we don't need them.
target_compile_definitions(miniaudio PUBLIC
    MA_ENABLE_ONLY_SPECIFIC_BACKENDS
    MA_NO_DECODING
    MA_NO_ENCODING
    MA_NO_WAV
    MA_NO_FLAC
    MA_NO_MP3
    MA_NO_DEVICE_IO
    MA_NO_RESOURCE_MANAGER
    MA_NO_GENERATION
    MA_NO_THREADING
    MA_NO_RUNTIME_LINKING
)

if(DOWNLOAD_DEPENDENCIES)
    include(FetchContent)
    FetchContent_Declare(
        libsmacker
        URL https://github.com/foxtacles/libsmacker/archive/b3d4e97e0c95d5259d858495a5addd2d93bce5f4.tar.gz
        URL_MD5 7f822319c489ec1a8e41c9f1e2629195
    )
    FetchContent_MakeAvailable(libsmacker)
else()
    set(libsmacker_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libsmacker")
endif()

add_library(libsmacker STATIC
    ${libsmacker_SOURCE_DIR}/smacker.c
)
target_include_directories(libsmacker PUBLIC ${libsmacker_SOURCE_DIR})

if(DOWNLOAD_DEPENDENCIES)
    include(FetchContent)
    FetchContent_Populate(
        libweaver
        URL https://github.com/isledecomp/SIEdit/archive/afd4933844b95ef739a7e77b097deb7efe4ec576.tar.gz
        URL_MD5 59fd3c36f4f380f730cd9bedfc846397
    )
    add_library(libweaver STATIC
        ${libweaver_SOURCE_DIR}/lib/core.cpp
        ${libweaver_SOURCE_DIR}/lib/file.cpp
        ${libweaver_SOURCE_DIR}/lib/interleaf.cpp
        ${libweaver_SOURCE_DIR}/lib/object.cpp
        ${libweaver_SOURCE_DIR}/lib/sitypes.cpp
    )
    add_library(libweaver::libweaver ALIAS libweaver)
    target_compile_definitions(libweaver PRIVATE $<$<BOOL:${WIN32}>:NOMINMAX>)
    target_include_directories(libweaver PUBLIC ${libweaver_SOURCE_DIR}/include/libweaver)
    set_property(TARGET libweaver PROPERTY CXX_STANDARD 98)
    set_property(TARGET libweaver PROPERTY CXX_STANDARD_REQUIRED ON)
endif()

