# Maintainer: Jon Turney <jon.turney@dronecode.org.uk>
# Contributor: Renato Silva <br.renatosilva@gmail.com>
# Contributor: Alexey Pavlov <alexpux@gmail.com>

_realname=breakpad
pkgbase="mingw-w64-${_realname}"
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=r2267.79099fdf
pkgrel=1
url='https://code.google.com/p/google-breakpad'
pkgdesc='An open-source multi-platform crash reporting system (mingw-w64)'
license=('BSD')
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64')
msys2_references=(
  'aur: google-breakpad'
  'cygwin: google-breakpad-devel'
)
provides=("${MINGW_PACKAGE_PREFIX}-${_realname}-git=${pkgver}")
conflicts=(${MINGW_PACKAGE_PREFIX}-${_realname}-git)
replaces=(${MINGW_PACKAGE_PREFIX}-${_realname}-git)
depends=(${MINGW_PACKAGE_PREFIX}-cc-libs)
makedepends=(${MINGW_PACKAGE_PREFIX}-curl rsync git "${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc")
_commit="79099fdf668ae097c9eca7052fd5c4c5de6c9098"
source=(${_realname}.git::"git+https://chromium.googlesource.com/breakpad/breakpad#commit=${_commit}"
        0001-Remove-local-copy-of-curl-headers.patch
        0002-Link-minidump_upload-and-sym_upload-with-curl.patch
        0003-Build-minidump_upload-and-sym_upload-for-all-targets.patch
        0004-Add-support-for-DWARF-in-PECOFF-as-used-by-Cygwin-an.patch
        0005-Fix-building-minidump-processor-for-MinGW.patch
        0006-Build-PECOFF-DWARF-dump_syms-for-MinGW.patch
        0007-Fix-building-client-library-and-upload-tools-for-Min.patch
        0008-Default-debug_file-to-the-code_file-basename.patch
        0009-Fix-Windows-client-unit-tests-with-gcc.patch
        0010-Add-symsrv_convert.patch
        0011-Use-a-default-debug-id-of-all-zeros-when-no-CV-recor.patch
        0012-Fallback-to-synthesizing-a-debug-id-from-version-and.patch
        0013-Fix-typo-in-the-name-of-the-info-entry-containing-up.patch
        0014-Fix-a-missing-r-in-crash_generation_app.patch
        0015-Disable-DwpReader-for-MinGW.patch
        0016-port-memory_allocator.h-to-Windows.patch
        0017-libcurl_wrapper-port-to-Windows.patch
        0018-Makefile.am-build-libbreakpad_client.a-and-crash_gen.patch
        0019-build-remove-static-from-SymUploadV2ProtocolSend.patch
        Makefile
        README.sample)

pkgver() {
    cd "${srcdir}/${_realname}.git"
    printf "r%s.%s" "$(git rev-list --count "${_commit}")" "$(git rev-parse --short "${_commit}")"
}

prepare() {
    # Apply patches
    cd "${srcdir}/${_realname}.git"
    for patch in "${srcdir}"/*.patch; do
        msg2 "Applying ${patch} ..."
        patch -p1 -i "${patch}"
    done

    msg2 "Running autoreconf"
    autoreconf -sif
}

build() {
    msg2 "Synchronizing build directory"
    rsync --recursive --times --links "${srcdir}/${_realname}.git"/* "${srcdir}/${_realname}.build.${MSYSTEM}"

    cd "${srcdir}/${_realname}.build.${MSYSTEM}"
    ./configure \
      --prefix=${MINGW_PREFIX} \
      --build=${MINGW_CHOST} \
      --host=${MINGW_CHOST}

    # use the autotooled makefile to build the minidump processor library and tools
    make CXXFLAGS="-DUNICODE -D_UNICODE -Wno-error" AR=${MINGW_PREFIX}/bin/ar RC=${MINGW_PREFIX}/bin/windres
}

package() {
    cd "${srcdir}/${_realname}.build.${MSYSTEM}"
    make CXXFLAGS="-DUNICODE -D_UNICODE" AR=${MINGW_PREFIX}/bin/ar RC=${MINGW_PREFIX}/bin/windres DESTDIR="${pkgdir}" install

    # Install headers
    mkdir -p "${pkgdir}${MINGW_PREFIX}/include/breakpad"
    cd "${pkgdir}${MINGW_PREFIX}/include/breakpad"

    mkdir -p "${pkgdir}${MINGW_PREFIX}/include/breakpad/common/"
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/google_breakpad/common/* common/
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/common/scoped_ptr.h common/

    mkdir -p "${pkgdir}${MINGW_PREFIX}/include/breakpad/common/windows"
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/common/windows/string_utils-inl.h common/windows/

    mkdir -p "${pkgdir}${MINGW_PREFIX}/include/breakpad/client/windows/crash_generation"
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/crash_generation/client_info.h client/windows/crash_generation/
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/crash_generation/crash_generation_client.h client/windows/crash_generation/
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/crash_generation/crash_generation_server.h client/windows/crash_generation/
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/crash_generation/minidump_generator.h client/windows/crash_generation/

    mkdir -p "${pkgdir}${MINGW_PREFIX}/include/breakpad/client/windows/common"
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/common/ipc_protocol.h client/windows/common/

    mkdir -p "${pkgdir}${MINGW_PREFIX}/include/breakpad/client/windows/handler"
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/handler/exception_handler.h client/windows/handler/

    mkdir -p "${pkgdir}${MINGW_PREFIX}/include/breakpad/client/windows/sender"
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/sender/crash_report_sender.h client/windows/sender/

    # Headers aren't really designed to be installed, so we need to do some
    # rewriting to make them usefully included using "include <breakpad/somepath/someheader>"
    find "${pkgdir}" -name *.h -exec sed -i -e's#client/windows/#breakpad/client/windows/#' {} \;
    find "${pkgdir}" -name *.h -exec sed -i -e's#common/scoped_ptr#breakpad/common/scoped_ptr#' {} \;
    find "${pkgdir}" -name *.h -exec sed -i -e's#common/windows/#breakpad/common/windows/#' {} \;
    find "${pkgdir}" -name *.h -exec sed -i -e's#google_breakpad/common/#breakpad/common/#' {} \;

    # Install a single client library
    cp "${srcdir}/${_realname}.build.${MSYSTEM}/src/client/windows/libbreakpad_client.a" "${pkgdir}${MINGW_PREFIX}/lib"

    # Install the pkgconfig file
    cp -v "${srcdir}/${_realname}.build.${MSYSTEM}/breakpad-client.pc" pkgconfig

    # License
    cd "${pkgdir}${MINGW_PREFIX}/share"
    mkdir -p licenses/${_realname}
    mv doc/${_realname}-0.1 doc/${_realname}
    mv -v doc/${_realname}/LICENSE licenses/${_realname}/LICENSE

    # Install crash_generation_app sample source and instructions
    mkdir -p "${pkgdir}${MINGW_PREFIX}/share/doc/${_realname}/sample"
    cd "${pkgdir}${MINGW_PREFIX}/share/doc/${_realname}/sample"
    cp -v "${srcdir}"/README.sample .
    cp -v "${srcdir}"/Makefile .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/abstract_class.cc .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/abstract_class.h .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/crash_generation_app.cc .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/crash_generation_app.h .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/crash_generation_app.ico .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/resource.h .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/crash_generation_app.rc .
    cp -v "${srcdir}"/${_realname}.build.${MSYSTEM}/src/client/windows/tests/crash_generation_app/small.ico .

    # Rewrite includes in sample for the rewritten installed headers
    sed -i -e's#client/windows/tests/crash_generation_app/##' "${pkgdir}"${MINGW_PREFIX}/share/doc/${_realname}/sample/*
    sed -i -e's#client/windows/#breakpad/client/windows/#' "${pkgdir}"${MINGW_PREFIX}/share/doc/${_realname}/sample/*
}

sha256sums=('3599cf734a7eacf4217d986a4e73fdc7d70fabeabee449cb6efdc36e9ab10263'
            '1799c4a3bdc67c191cfe0992daab7bfab132371552cb0b5d050880020fd1458f'
            'a78a5cb25ca5e1918ff49286a9b316bcb605736136cc4375f31d19bb0c09ef24'
            '66e091a3d65d3a468f3dc63876998700ce5e670a56196ccac6b561d9a90ee1bb'
            '5253eb5b1fc041553202a04a0f05f8336953a689bfa9f1fcc45697897b168a96'
            '80da1660f4b4b75940f7ac8cd5b2a18c049f26edc7f38432c25c3361313b8a6a'
            '177ba4794b0731841da539196ce493a8457dd71b593a9640eccb34dda4f8a8cd'
            '0cd8eaa9d9b2455c084a7a9f7b87f8f0e663330355983fbcd10c2dc7724ede7a'
            'a2655074ba23f6b20bbd5efe5d350ff83ffa4b3da46b02bb25afb2573da78fe5'
            '2bfbd7e9032f9d2c7f2faa5dad533b858921b0633cfe21a2f8dc15afcc02609d'
            '976d89366e6be8c1cfd451a144ca8c14d52265886f2ad16cacf8eb4e2186bc92'
            '0153d2758267f74e536ad0b96e3175d9258723ee04998e0ca83b6a81fa3330c6'
            '9f9a225c40718ff807279d5f7d267a8d67b7011361f36899f6d87a94dff03704'
            'c655360d434cea48ce30b9c04b2862eaaf90cb2b8e356301a85383046e8d741f'
            'de1fea1b5eb703fd7aaa3c10ae5f861b818bed96ddd2f2083c684f2a0c29d7e5'
            '3fc8bf1a3b2aa4cbcd9621f46cd78b60fadd61229835c2b3e45a09ab9cc7745c'
            'bf09d67deba0ee900e6024a28685b7e4bb8f40c88f51f9e9f7c9b299be2c8e01'
            'b98728d705de960725a67adb6de185ffb2471af667f2eacf63a1072278ed3ba9'
            'f2026610f08f4c336634226627b0225ab4a006a466cc4d16b336854429d8eb05'
            'a21d0442078496ec90fc9e2eaa97aa35893a51b57e9a2c41280bc7db4422d291'
            'b1a4025d888bcd1d752b3b6c93d6e6ae353eae050197b1ae2c54f9b90bfb1292'
            '25abf4b40df33284a6fbafd80f824085316f709e027217028f79078c5ce67fbb')
