| #!/bin/bash | |
| # Test Script for task re-execution | |
| # | |
| # Copyright 2012 Intel Corporation | |
| # | |
| # SPDX-License-Identifier: GPL-2.0-or-later | |
| # | |
| # DESCRIPTION | |
| # This script is intended to address issues for re-execution of | |
| # tasks. The test results are saved in ./reexeclogs. Force build | |
| # logs are saved with prefix "force". Build failure logs are saved with | |
| # prefix "failed". Log files with prefix "initial" are used to save | |
| # initial build logs for each recipe. Log files with prefix "clean" are | |
| # used to save logs of clean task after testing for a recipe is finished. | |
| # | |
| targets=`bitbake -s | cut -d " " -f 1` | |
| LOGS=./reexeclogs | |
| mkdir -p $LOGS | |
| # Clear sstate files for specified recipe | |
| function clearsstate { | |
| target=$1 | |
| sstate_dir=`bitbake $target -e | grep "^SSTATE_DIR=" | cut -d "\"" -f 2` | |
| sstate_pkgspec=`bitbake $target -e | grep "^SSTATE_PKGSPEC=" | cut -d "\"" -f 2` | |
| sstasks=`bitbake $target -e | grep "^SSTATETASKS=" | cut -d "\"" -f 2` | |
| for sstask in $sstasks | |
| do | |
| sstask=${sstask:3} | |
| case $sstask in | |
| populate_sysroot) sstask="populate-sysroot" | |
| ;; | |
| populate_lic) sstask="populate-lic" | |
| ;; | |
| package_write_ipk) sstask="deploy-ipk" | |
| ;; | |
| package_write_deb) sstask="deploy-deb" | |
| ;; | |
| package_write_rpm) sstask="deploy-rpm" | |
| ;; | |
| package) sstask="package" | |
| ;; | |
| deploy) sstask="deploy" | |
| ;; | |
| *) | |
| ;; | |
| esac | |
| echo "Removing ${sstate_dir}/${sstate_pkgspec}*_${sstask}.tgz* for $target" | |
| rm -rf ${sstate_dir}/${sstate_pkgspec}*_${sstask}.tgz* | |
| done | |
| } | |
| # Function to re-execute specified task of recipe | |
| function testit { | |
| target=$1 | |
| task=$2 | |
| task=`echo $task | sed 's/_setscene//'` | |
| if [ -f $LOGS/force.$target.$task ]; then | |
| return | |
| fi | |
| case $task in | |
| clean|build|cleansstate|cleanall|package|cleansstate2|package_write|package_write_ipk|package_write_rpm|package_write_deb|fetch|populate_lic) return;; | |
| fetchall|devshell|buildall|listtasks|checkuri|checkuriall) return;; | |
| esac | |
| echo "Attempting target $target, task $task" | |
| echo "Initial build" | |
| bitbake $target -c cleansstate > $LOGS/initial.$target.$task | |
| bitbake $target >> $LOGS/initial.$target.$task | |
| clearsstate $target >> $LOGS/initial.$target.$task | |
| echo "Re-execution build" | |
| bitbake $target -c $task -f > $LOGS/force.$target.$task | |
| if [ "$?" != 0 ]; then | |
| echo "FAILURE for $target $task" | |
| cp $LOGS/force.$target.$task $LOGS/failed.$target.$task | |
| bitbake $target -c clean > $LOGS/clean.$target.$task | |
| else | |
| bitbake $target >> $LOGS/force.$target.$task | |
| if [ "$?" != 0 ]; then | |
| echo "FAILURE2 for $target $task" | |
| cp $LOGS/force.$target.$task $LOGS/failed.$target.$task | |
| bitbake $target -c clean > $LOGS/clean.$target.$task | |
| fi | |
| fi | |
| echo "Done" | |
| } | |
| # Go through the recipe list and these recipes' task list | |
| # Then re-execute them | |
| for target in $targets; do | |
| # Remove log messages from bitbake output | |
| case $target in | |
| Summary*|WARNING*|Loading*|Loaded*|Package*|=====*) continue;; | |
| esac | |
| tasks=`bitbake $target -c listtasks | grep ^do_ | sed s/do_//` | |
| for task in $tasks; do | |
| testit $target $task | |
| done | |
| done | |