inherit mender-helpers

# ------------------------------ CONFIGURATION ---------------------------------

# Extra arguments that should be passed to mender-artifact.
MENDER_ARTIFACT_EXTRA_ARGS ?= ""

# The key used to sign the mender update.
MENDER_ARTIFACT_SIGNING_KEY ?= ""

# --------------------------- END OF CONFIGURATION -----------------------------

do_image_mender[depends] += "mender-artifact-native:do_populate_sysroot"

ARTIFACTIMG_FSTYPE ??= "${ARTIFACTIMG_FSTYPE_DEFAULT}"
ARTIFACTIMG_FSTYPE_DEFAULT = "ext4"

ARTIFACTIMG_NAME ??= "${ARTIFACTIMG_NAME_DEFAULT}"
ARTIFACTIMG_NAME_DEFAULT = "${IMAGE_LINK_NAME}"

MENDER_ARTIFACT_NAME_DEPENDS ?= ""

MENDER_ARTIFACT_PROVIDES ?= ""
MENDER_ARTIFACT_PROVIDES_GROUP ?= ""

MENDER_ARTIFACT_DEPENDS ?= ""
MENDER_ARTIFACT_DEPENDS_GROUPS ?= ""

apply_arguments () {
    #
    # $1 -- the command line flag to apply to each element
    # $@ -- the list of arguments to give each its own flag
    #
    local res=""
    flag=$1
    shift
    for arg in $@; do
        res="$res $flag $arg"
    done
    cmd=$res
}

artifact_provides_modules_arguments () {
    local modules_provides=""
    for module in $(ls ${IMAGE_ROOTFS}/${datadir}/mender/modules/v3); do
        if [ -x "${IMAGE_ROOTFS}/${datadir}/mender/modules/v3/${module}" ]; then
            modules_provides="${modules_provides} \
                rootfs-image.update-module.${module}.version:${MENDER_ARTIFACT_NAME} \
                rootfs-image.update-module.${module}.mender_update_module:${module} \
            "
        else
            bbwarn "File ${datadir}/mender/modules/v3/${module} has no execution permissions, is it an Update Module?"
        fi
    done
    cmd=""
    apply_arguments "--provides" "${modules_provides}"
}

IMAGE_CMD:mender () {
    set -x

    if [ -z "${MENDER_ARTIFACT_NAME}" ]; then
        bbfatal "Need to define MENDER_ARTIFACT_NAME variable."
    fi

    rootfs_size=$(stat -Lc %s ${IMGDEPLOYDIR}/${ARTIFACTIMG_NAME}.${ARTIFACTIMG_FSTYPE})
    calc_rootfs_size=$(expr ${MENDER_CALC_ROOTFS_SIZE} \* 1024)
    if [ $rootfs_size -gt $calc_rootfs_size ]; then
        bbfatal "Size of rootfs is greater than the calculated partition space ($rootfs_size > $calc_rootfs_size). This image won't fit on a device with the current storage configuration. Try reducing IMAGE_OVERHEAD_FACTOR if it is higher than 1.0, or raise MENDER_STORAGE_TOTAL_SIZE_MB if the device in fact has more storage."
    fi

    if [ -z "${MENDER_DEVICE_TYPES_COMPATIBLE}" ]; then
        bbfatal "MENDER_DEVICE_TYPES_COMPATIBLE variable cannot be empty."
    fi

    extra_args=

    for dev in ${MENDER_DEVICE_TYPES_COMPATIBLE}; do
        extra_args="$extra_args -t $dev"
    done

    if [ -n "${MENDER_ARTIFACT_SIGNING_KEY}" ]; then
        extra_args="$extra_args -k ${MENDER_ARTIFACT_SIGNING_KEY}"
    fi

    if [ -d "${DEPLOY_DIR_IMAGE}/mender-state-scripts" ]; then
        extra_args="$extra_args -s ${DEPLOY_DIR_IMAGE}/mender-state-scripts"
    fi

    if mender-artifact write rootfs-image --help | grep -e '-u FILE'; then
        image_flag=-u
    else
        image_flag=-f
    fi

    if [ -n "${MENDER_ARTIFACT_NAME_DEPENDS}" ]; then
        cmd=""
        apply_arguments "--artifact-name-depends" "${MENDER_ARTIFACT_NAME_DEPENDS}"
        extra_args="$extra_args  $cmd"
    fi

    if [ -n "${MENDER_ARTIFACT_PROVIDES}" ]; then
        cmd=""
        apply_arguments "--provides" "${MENDER_ARTIFACT_PROVIDES}"
        extra_args="$extra_args  $cmd"
    fi

    if [ -n "${MENDER_ARTIFACT_PROVIDES_GROUP}" ]; then
        cmd=""
        apply_arguments "--provides-group" "${MENDER_ARTIFACT_PROVIDES_GROUP}"
        extra_args="$extra_args $cmd"
    fi

    if [ -n "${MENDER_ARTIFACT_DEPENDS}" ]; then
        cmd=""
        apply_arguments "--depends" "${MENDER_ARTIFACT_DEPENDS}"
        extra_args="$extra_args $cmd"
    fi

    if [ -n "${MENDER_ARTIFACT_DEPENDS_GROUPS}" ]; then
        cmd=""
        apply_arguments "--depends-groups" "${MENDER_ARTIFACT_DEPENDS_GROUPS}"
        extra_args="$extra_args $cmd"
    fi

    cmd=""
    artifact_provides_modules_arguments
    extra_args="$extra_args $cmd"

    mender-artifact write rootfs-image \
        -n ${MENDER_ARTIFACT_NAME} \
        $extra_args \
        $image_flag ${IMGDEPLOYDIR}/${ARTIFACTIMG_NAME}.${ARTIFACTIMG_FSTYPE} \
        ${MENDER_ARTIFACT_EXTRA_ARGS} \
        -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.mender
}

IMAGE_CMD:mender[vardepsexclude] += "IMAGE_ID"
# We need to have the filesystem image generated already.
IMAGE_TYPEDEP:mender:append = " ${ARTIFACTIMG_FSTYPE}"