vcpkg_download_distfile(ARCHIVE
    URLS "https://dlcdn.apache.org/serf/serf-${VERSION}.tar.bz2"
    FILENAME "serf-${VERSION}.tar.bz2"
    SHA512 19165274d35c694935cda33f99ef92a7663a5d9c540fb7fd6792aa0efe39941b2fa87ff8b61afd060c6676baec634fd33dc2e9d34ecbee45ed99dfaed077802c
)

vcpkg_extract_source_archive(
    SOURCE_PATH
    ARCHIVE "${ARCHIVE}"
    PATCHES
        dependencies.diff
        hardcoded-msvc-versions.diff # ~= https://github.com/apache/serf/commit/57bb8775665a724d6db648ca30689de04103873b
)

# Note: custom architecture is not supported on Unix.
if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
    set(SCONS_ARCH "TARGET_ARCH=x86_64")
elseif(VCPKG_TARGET_IS_WINDOWS AND VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
    set(SCONS_ARCH "TARGET_ARCH=x86")
else()
    set(SCONS_ARCH "")
endif()

if(EXISTS "${CURRENT_INSTALLED_DIR}/bin/libapr-1.dll")
    set(APR_STATIC "no")
else()
    set(APR_STATIC "yes")
endif()

vcpkg_find_acquire_program(SCONS)

message(STATUS "Building ${TARGET_TRIPLET}-rel")

if(VCPKG_TARGET_IS_WINDOWS)
    SET(apr_opts
        "APR=${CURRENT_INSTALLED_DIR}"
        "APU=${CURRENT_INSTALLED_DIR}"
        "APR_STATIC=${APR_STATIC}"
    )
    if(EXISTS "${CURRENT_INSTALLED_DIR}/lib/zs.lib")
        set(ENV{ZLIB_BASENAME} "zs")
    elseif(EXISTS "${CURRENT_INSTALLED_DIR}/lib/z.lib")
        set(ENV{ZLIB_BASENAME} "z")
    endif()
else()
    SET(apr_opts
        "APR=${CURRENT_INSTALLED_DIR}/tools/apr/bin/apr-1-config"
        "APU=${CURRENT_INSTALLED_DIR}/tools/apr-util/bin/apu-1-config"
    )
endif()

vcpkg_execute_build_process(
    COMMAND ${SCONS}
        "SOURCE_LAYOUT=no"
        "PREFIX=${CURRENT_PACKAGES_DIR}"
        "LIBDIR=${CURRENT_PACKAGES_DIR}/lib"
        "OPENSSL=${CURRENT_INSTALLED_DIR}"
        "ZLIB=${CURRENT_INSTALLED_DIR}"
        ${apr_opts}
        "${SCONS_ARCH}"
        "DEBUG=no"
        "install-lib" "install-inc" "install-pc"
    WORKING_DIRECTORY "${SOURCE_PATH}"
    LOGNAME "scons-rel"
)

# Fixup installed files.
if(VCPKG_TARGET_IS_WINDOWS)
    if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "dynamic" AND VCPKG_TARGET_IS_WINDOWS)
        file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/bin")
        file(RENAME
            "${CURRENT_PACKAGES_DIR}/lib/libserf-1.dll"
            "${CURRENT_PACKAGES_DIR}/bin/libserf-1.dll"
        )
        file(RENAME
            "${CURRENT_PACKAGES_DIR}/lib/libserf-1.pdb"
            "${CURRENT_PACKAGES_DIR}/bin/libserf-1.pdb"
        )
    else()
        file(REMOVE
            "${CURRENT_PACKAGES_DIR}/lib/libserf-1.dll"
            "${CURRENT_PACKAGES_DIR}/lib/libserf-1.pdb"
            "${CURRENT_PACKAGES_DIR}/lib/libserf-1.lib"
        )
    endif()
    file(REMOVE "${CURRENT_PACKAGES_DIR}/lib/libserf-1.exp")
endif()

if(NOT VCPKG_BUILD_TYPE)
    message(STATUS "Building ${TARGET_TRIPLET}-dbg")

    if(VCPKG_TARGET_IS_WINDOWS)
        SET(apr_opts
            "APR=${CURRENT_INSTALLED_DIR}/debug"
            "APU=${CURRENT_INSTALLED_DIR}/debug"
            "APR_STATIC=${APR_STATIC}"
        )
    else()
        SET(apr_opts
            "APR=${CURRENT_INSTALLED_DIR}/tools/apr/debug/bin/apr-1-config"
            "APU=${CURRENT_INSTALLED_DIR}/tools/apr-util/debug/bin/apu-1-config"
        )
    endif()

    vcpkg_execute_build_process(
        COMMAND ${SCONS}
            "SOURCE_LAYOUT=no"
            "PREFIX=${CURRENT_PACKAGES_DIR}/debug"
            "LIBDIR=${CURRENT_PACKAGES_DIR}/debug/lib"
            "OPENSSL=${CURRENT_INSTALLED_DIR}/debug"
            "ZLIB=${CURRENT_INSTALLED_DIR}/debug"
            ${apr_opts}
            "${SCONS_ARCH}"
            "DEBUG=yes"
            "install-lib" "install-pc"
        WORKING_DIRECTORY "${SOURCE_PATH}"
        LOGNAME "scons-dbg"
    )

    # Fixup installed files.
    if(VCPKG_TARGET_IS_WINDOWS)
      if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "dynamic")
        file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/bin")
        file(RENAME
            "${CURRENT_PACKAGES_DIR}/debug/lib/libserf-1.dll"
            "${CURRENT_PACKAGES_DIR}/debug/bin/libserf-1.dll"
        )
        file(RENAME
            "${CURRENT_PACKAGES_DIR}/debug/lib/libserf-1.pdb"
            "${CURRENT_PACKAGES_DIR}/debug/bin/libserf-1.pdb"
        )
        else()
        file(REMOVE
            "${CURRENT_PACKAGES_DIR}/debug/lib/libserf-1.dll"
            "${CURRENT_PACKAGES_DIR}/debug/lib/libserf-1.pdb"
            "${CURRENT_PACKAGES_DIR}/debug/lib/libserf-1.lib"
        )
        endif()
        file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/lib/libserf-1.exp")
    endif()
endif()

vcpkg_fixup_pkgconfig()

vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
