set(AVIF_LIBXML_GIT_TAG "v2.15.1")

# First, whether the library exists.
set(PREFIXES lib ${AVIF_LIBRARY_PREFIX})
set(SUFFIXES "s" "sd" "")
foreach(PREFIX IN LISTS PREFIXES)
    foreach(SUFFIX IN LISTS SUFFIXES)
        set(LIB_FILENAME
            "${AVIF_SOURCE_DIR}/ext/libxml2/install.libavif/lib/${PREFIX}xml2${SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
        )
        if(EXISTS "${LIB_FILENAME}")
            message(INFO ${CMAKE_LINK_LIBRARY_FLAG})
            message(STATUS "libavif(AVIF_LIBXML2=LOCAL): compiled library found at ${LIB_FILENAME}")
            add_library(LibXml2 STATIC IMPORTED GLOBAL)
            set_target_properties(LibXml2 PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON)
            if(WIN32)
                target_link_libraries(LibXml2 INTERFACE bcrypt.lib)
            endif()
            target_compile_definitions(LibXml2 INTERFACE LIBXML_STATIC)
            target_include_directories(LibXml2 INTERFACE "${AVIF_SOURCE_DIR}/ext/libxml2/install.libavif/include/libxml2")
            add_library(LibXml2::LibXml2 ALIAS LibXml2)
        endif()
    endforeach()
endforeach()

if(TARGET LibXml2::LibXml2)
    return()
endif()

message(STATUS "libavif(AVIF_LIBXML2=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")
if(EXISTS "${AVIF_SOURCE_DIR}/ext/libxml2")
    message(STATUS "libavif(AVIF_LIBXML2=LOCAL): ext/libxml2 found; using as FetchContent SOURCE_DIR")
    set(FETCHCONTENT_SOURCE_DIR_LIBXML2 "${AVIF_SOURCE_DIR}/ext/libxml2")
    message(CHECK_START "libavif(AVIF_LIBXML2=LOCAL): configuring libxml2")
else()
    message(CHECK_START "libavif(AVIF_LIBXML2=LOCAL): fetching and configuring libxml2")
endif()

set(LIBXML2_WITH_ICONV OFF CACHE INTERNAL "-")
set(LIBXML2_WITH_PROGRAMS OFF CACHE INTERNAL "-")
set(LIBXML2_WITH_PYTHON OFF CACHE INTERNAL "-")
set(LIBXML2_WITH_TESTS OFF CACHE INTERNAL "-")
set(LIBXML2_WITH_ZLIB OFF CACHE INTERNAL "-")

set(LIBXML2_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libxml2-build")
if(ANDROID_ABI)
    set(LIBXML2_BINARY_DIR "${LIBXML2_BINARY_DIR}/${ANDROID_ABI}")
endif()

FetchContent_Declare(
    libxml2
    GIT_REPOSITORY "https://github.com/GNOME/libxml2.git"
    BINARY_DIR "${LIBXML2_BINARY_DIR}"
    GIT_TAG "${AVIF_LIBXML_GIT_TAG}"
    GIT_SHALLOW ON
    UPDATE_COMMAND ""
)

avif_fetchcontent_populate_cmake(libxml2)

set_property(TARGET LibXml2 PROPERTY AVIF_LOCAL ON)
get_target_property(VAR1 LibXml2 LINKER_LANGUAGE)
get_target_property(VAR2 LibXml2 LINK_LIBRARIES)
get_target_property(VAR3 LibXml2 LINK_DIRECTORIES)
get_target_property(VAR4 LibXml2 LINKER_TYPE)
get_target_property(VAR5 LibXml2 LINK_FLAGS)
get_target_property(VAR6 LibXml2 LINK_OPTIONS)

message(CHECK_PASS "complete")
