set(AVIF_LOCAL_LIBSHARPYUV_GIT_TAG v1.3.2)

set(LIB_FILENAME "${CMAKE_CURRENT_SOURCE_DIR}/ext/libwebp/build/libsharpyuv${CMAKE_STATIC_LIBRARY_SUFFIX}")
if(EXISTS "${LIB_FILENAME}")
    message(STATUS "libavif(AVIF_LIBSHARPYUV=LOCAL): compiled library found at ${LIB_FILENAME}")
    add_library(sharpyuv::sharpyuv STATIC IMPORTED GLOBAL)
    set_target_properties(sharpyuv::sharpyuv PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON FOLDER "ext/libwebp")
    target_include_directories(sharpyuv::sharpyuv INTERFACE "${AVIF_SOURCE_DIR}/ext/libwebp")

    set(libsharpyuv_FOUND ON)
else()
    message(STATUS "libavif(AVIF_LIBSHARPYUV=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")

    if(EXISTS "${AVIF_SOURCE_DIR}/ext/libwebp")
        message(STATUS "libavif(AVIF_LIBSHARPYUV=LOCAL): ext/libwebp found; using as FetchContent SOURCE_DIR")
        set(FETCHCONTENT_SOURCE_DIR_LIBWEBP "${AVIF_SOURCE_DIR}/ext/libwebp")
        message(CHECK_START "libavif(AVIF_LIBSHARPYUV=LOCAL): configuring libwebp")
    else()
        message(CHECK_START "libavif(AVIF_LIBSHARPYUV=LOCAL): fetching and configuring libwebp")
    endif()

    set(WEBP_BUILD_ANIM_UTILS OFF CACHE BOOL "")
    set(WEBP_BUILD_CWEBP OFF CACHE BOOL "")
    set(WEBP_BUILD_DWEBP OFF CACHE BOOL "")
    set(WEBP_BUILD_GIF2WEBP OFF CACHE BOOL "")
    set(WEBP_BUILD_IMG2WEBP OFF CACHE BOOL "")
    set(WEBP_BUILD_VWEBP OFF CACHE BOOL "")
    set(WEBP_BUILD_WEBPINFO OFF CACHE BOOL "")
    set(WEBP_BUILD_LIBWEBPMUX OFF CACHE BOOL "")
    set(WEBP_BUILD_WEBPMUX OFF CACHE BOOL "")
    set(WEBP_BUILD_EXTRAS OFF CACHE BOOL "")

    set(LIBSHARPYUV_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libwebp")
    if(ANDROID_ABI)
        set(LIBSHARPYUV_BINARY_DIR "${LIBSHARPYUV_BINARY_DIR}/${ANDROID_ABI}")
    endif()

    FetchContent_Declare(
        libwebp
        GIT_REPOSITORY "https://chromium.googlesource.com/webm/libwebp"
        BINARY_DIR "${LIBSHARPYUV_BINARY_DIR}"
        GIT_TAG "${AVIF_LOCAL_LIBSHARPYUV_GIT_TAG}"
        GIT_SHALLOW ON
        UPDATE_COMMAND ""
    )

    avif_fetchcontent_populate_cmake(libwebp)

    set_property(TARGET sharpyuv PROPERTY POSITION_INDEPENDENT_CODE ON)
    set_property(TARGET sharpyuv PROPERTY AVIF_LOCAL ON)

    target_include_directories(
        sharpyuv INTERFACE $<BUILD_INTERFACE:${libwebp_SOURCE_DIR}> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDE_DIR}>
    )

    add_library(sharpyuv::sharpyuv ALIAS sharpyuv)

    if(EXISTS "${AVIF_SOURCE_DIR}/ext/libwebp")
        set_property(TARGET sharpyuv PROPERTY FOLDER "ext/libwebp")
    endif()
    message(CHECK_PASS "complete")
endif()
