# Class to inherit when you want to build against Breakpad.
# Apart from inheriting this class, you need to set BREAKPAD_BIN in
# your recipe, and make sure that you link against libbreakpad_client.a.

DEPENDS += "breakpad breakpad-native"

CFLAGS += "-I${STAGING_DIR_TARGET}${includedir}/breakpad "
CXXFLAGS += "-I${STAGING_DIR_TARGET}${includedir}/breakpad "

BREAKPAD_BIN ?= ""

python () {
    breakpad_bin = d.getVar("BREAKPAD_BIN")

    if not breakpad_bin:
       PN = d.getVar("PN")
       FILE = os.path.basename(d.getVar("FILE"))
       bb.error("To build %s, see breakpad.bbclass for instructions on \
                 setting up your Breakpad configuration" % PN)
       raise ValueError('BREAKPAD_BIN not defined in %s' % PN)
}

# Add creation of symbols here
PACKAGE_PREPROCESS_FUNCS += "breakpad_package_preprocess"
breakpad_package_preprocess () {
    mkdir -p ${PKGD}/usr/share/breakpad-syms
    find ${D} -name ${BREAKPAD_BIN} -exec sh -c "dump_syms {} > ${PKGD}/usr/share/breakpad-syms/${BREAKPAD_BIN}.sym" \;
    HASH=$(head -n1 ${PKGD}/usr/share/breakpad-syms/${BREAKPAD_BIN}.sym | rev | cut -d ' ' -f2 | rev)
    mkdir -p ${PKGD}/usr/share/breakpad-syms/${BREAKPAD_BIN}/${HASH}
    mv ${PKGD}/usr/share/breakpad-syms/${BREAKPAD_BIN}.sym ${PKGD}/usr/share/breakpad-syms/${BREAKPAD_BIN}/${HASH}
}

PACKAGES =+ "${PN}-breakpad"

FILES:${PN}-breakpad = "/usr/share/breakpad-syms"

