192b42cb3SPatrick Williams# 292b42cb3SPatrick Williams# Copyright OpenEmbedded Contributors 392b42cb3SPatrick Williams# 492b42cb3SPatrick Williams# SPDX-License-Identifier: MIT 592b42cb3SPatrick Williams# 692b42cb3SPatrick Williams 792b42cb3SPatrick Williams# The following logging mechanisms are to be used in bash functions of recipes. 892b42cb3SPatrick Williams# They are intended to map one to one in intention and output format with the 992b42cb3SPatrick Williams# python recipe logging functions of a similar naming convention: bb.plain(), 1092b42cb3SPatrick Williams# bb.note(), etc. 1192b42cb3SPatrick Williams 1292b42cb3SPatrick WilliamsLOGFIFO = "${T}/fifo.${@os.getpid()}" 1392b42cb3SPatrick Williams 1492b42cb3SPatrick Williams# Print the output exactly as it is passed in. Typically used for output of 1592b42cb3SPatrick Williams# tasks that should be seen on the console. Use sparingly. 1692b42cb3SPatrick Williams# Output: logs console 1792b42cb3SPatrick Williamsbbplain() { 1892b42cb3SPatrick Williams if [ -p ${LOGFIFO} ] ; then 1992b42cb3SPatrick Williams printf "%b\0" "bbplain $*" > ${LOGFIFO} 2092b42cb3SPatrick Williams else 2192b42cb3SPatrick Williams echo "$*" 2292b42cb3SPatrick Williams fi 2392b42cb3SPatrick Williams} 2492b42cb3SPatrick Williams 2592b42cb3SPatrick Williams# Notify the user of a noteworthy condition. 2692b42cb3SPatrick Williams# Output: logs 2792b42cb3SPatrick Williamsbbnote() { 2892b42cb3SPatrick Williams if [ -p ${LOGFIFO} ] ; then 2992b42cb3SPatrick Williams printf "%b\0" "bbnote $*" > ${LOGFIFO} 3092b42cb3SPatrick Williams else 3192b42cb3SPatrick Williams echo "NOTE: $*" 3292b42cb3SPatrick Williams fi 3392b42cb3SPatrick Williams} 3492b42cb3SPatrick Williams 35*96e4b4e1SPatrick Williams# Notify the user of a noteworthy condition. 36*96e4b4e1SPatrick Williams# Output: logs console 37*96e4b4e1SPatrick Williamsbbverbnote() { 38*96e4b4e1SPatrick Williams if [ -p ${LOGFIFO} ]; then 39*96e4b4e1SPatrick Williams printf "%b\0" "bbverbnote $*" > ${LOGFIFO} 40*96e4b4e1SPatrick Williams else 41*96e4b4e1SPatrick Williams echo "NOTE: $*" 42*96e4b4e1SPatrick Williams fi 43*96e4b4e1SPatrick Williams} 44*96e4b4e1SPatrick Williams 4592b42cb3SPatrick Williams# Print a warning to the log. Warnings are non-fatal, and do not 4692b42cb3SPatrick Williams# indicate a build failure. 4792b42cb3SPatrick Williams# Output: logs console 4892b42cb3SPatrick Williamsbbwarn() { 4992b42cb3SPatrick Williams if [ -p ${LOGFIFO} ] ; then 5092b42cb3SPatrick Williams printf "%b\0" "bbwarn $*" > ${LOGFIFO} 5192b42cb3SPatrick Williams else 5292b42cb3SPatrick Williams echo "WARNING: $*" 5392b42cb3SPatrick Williams fi 5492b42cb3SPatrick Williams} 5592b42cb3SPatrick Williams 5692b42cb3SPatrick Williams# Print an error to the log. Errors are non-fatal in that the build can 5792b42cb3SPatrick Williams# continue, but they do indicate a build failure. 5892b42cb3SPatrick Williams# Output: logs console 5992b42cb3SPatrick Williamsbberror() { 6092b42cb3SPatrick Williams if [ -p ${LOGFIFO} ] ; then 6192b42cb3SPatrick Williams printf "%b\0" "bberror $*" > ${LOGFIFO} 6292b42cb3SPatrick Williams else 6392b42cb3SPatrick Williams echo "ERROR: $*" 6492b42cb3SPatrick Williams fi 6592b42cb3SPatrick Williams} 6692b42cb3SPatrick Williams 6792b42cb3SPatrick Williams# Print a fatal error to the log. Fatal errors indicate build failure 6892b42cb3SPatrick Williams# and halt the build, exiting with an error code. 6992b42cb3SPatrick Williams# Output: logs console 7092b42cb3SPatrick Williamsbbfatal() { 7192b42cb3SPatrick Williams if [ -p ${LOGFIFO} ] ; then 7292b42cb3SPatrick Williams printf "%b\0" "bbfatal $*" > ${LOGFIFO} 7392b42cb3SPatrick Williams else 7492b42cb3SPatrick Williams echo "ERROR: $*" 7592b42cb3SPatrick Williams fi 7692b42cb3SPatrick Williams exit 1 7792b42cb3SPatrick Williams} 7892b42cb3SPatrick Williams 7992b42cb3SPatrick Williams# Like bbfatal, except prevents the suppression of the error log by 8092b42cb3SPatrick Williams# bitbake's UI. 8192b42cb3SPatrick Williams# Output: logs console 8292b42cb3SPatrick Williamsbbfatal_log() { 8392b42cb3SPatrick Williams if [ -p ${LOGFIFO} ] ; then 8492b42cb3SPatrick Williams printf "%b\0" "bbfatal_log $*" > ${LOGFIFO} 8592b42cb3SPatrick Williams else 8692b42cb3SPatrick Williams echo "ERROR: $*" 8792b42cb3SPatrick Williams fi 8892b42cb3SPatrick Williams exit 1 8992b42cb3SPatrick Williams} 9092b42cb3SPatrick Williams 9192b42cb3SPatrick Williams# Print debug messages. These are appropriate for progress checkpoint 9292b42cb3SPatrick Williams# messages to the logs. Depending on the debug log level, they may also 9392b42cb3SPatrick Williams# go to the console. 9492b42cb3SPatrick Williams# Output: logs console 9592b42cb3SPatrick Williams# Usage: bbdebug 1 "first level debug message" 9692b42cb3SPatrick Williams# bbdebug 2 "second level debug message" 9792b42cb3SPatrick Williamsbbdebug() { 9892b42cb3SPatrick Williams USAGE='Usage: bbdebug [123] "message"' 9992b42cb3SPatrick Williams if [ $# -lt 2 ]; then 10092b42cb3SPatrick Williams bbfatal "$USAGE" 10192b42cb3SPatrick Williams fi 10292b42cb3SPatrick Williams 10392b42cb3SPatrick Williams # Strip off the debug level and ensure it is an integer 10492b42cb3SPatrick Williams DBGLVL=$1; shift 10592b42cb3SPatrick Williams NONDIGITS=$(echo "$DBGLVL" | tr -d "[:digit:]") 10692b42cb3SPatrick Williams if [ "$NONDIGITS" ]; then 10792b42cb3SPatrick Williams bbfatal "$USAGE" 10892b42cb3SPatrick Williams fi 10992b42cb3SPatrick Williams 11092b42cb3SPatrick Williams # All debug output is printed to the logs 11192b42cb3SPatrick Williams if [ -p ${LOGFIFO} ] ; then 11292b42cb3SPatrick Williams printf "%b\0" "bbdebug $DBGLVL $*" > ${LOGFIFO} 11392b42cb3SPatrick Williams else 11492b42cb3SPatrick Williams echo "DEBUG: $*" 11592b42cb3SPatrick Williams fi 11692b42cb3SPatrick Williams} 11792b42cb3SPatrick Williams 118