1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# Perform an audit of which packages provide documentation and which 6*4882a593Smuzhiyun# are missing -doc packages. 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun# Setup requirements: be sure to be building for MACHINE=qemux86. Run 9*4882a593Smuzhiyun# this script after source'ing the build environment script, so you're 10*4882a593Smuzhiyun# running it from build/ directory. 11*4882a593Smuzhiyun# 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunREPORT_DOC_SIMPLE="documentation_exists.txt" 14*4882a593SmuzhiyunREPORT_DOC_DETAIL="documentation_exists_detail.txt" 15*4882a593SmuzhiyunREPORT_MISSING_SIMPLE="documentation_missing.txt" 16*4882a593SmuzhiyunREPORT_MISSING_DETAIL="documentation_missing_detail.txt" 17*4882a593SmuzhiyunREPORT_BUILD_ERRORS="build_errors.txt" 18*4882a593Smuzhiyun 19*4882a593Smuzhiyunrm -rf $REPORT_DOC_SIMPLE $REPORT_DOC_DETAIL $REPORT_MISSING_SIMPLE $REPORT_MISSING_DETAIL 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunBITBAKE=`which bitbake` 22*4882a593Smuzhiyunif [ -z "$BITBAKE" ]; then 23*4882a593Smuzhiyun echo "Error: bitbake command not found." 24*4882a593Smuzhiyun echo "Did you forget to source the build environment script?" 25*4882a593Smuzhiyun exit 1 26*4882a593Smuzhiyunfi 27*4882a593Smuzhiyun 28*4882a593Smuzhiyunecho "REMINDER: you need to build for MACHINE=qemux86 or you won't get useful results" 29*4882a593Smuzhiyunecho "REMINDER: you need to set LICENSE_FLAGS_ACCEPTED appropriately in local.conf or " 30*4882a593Smuzhiyunecho " you'll get false positives. For example, LICENSE_FLAGS_ACCEPTED = \"commercial\"" 31*4882a593Smuzhiyun 32*4882a593Smuzhiyunfor pkg in `bitbake -s | awk '{ print \$1 }'`; do 33*4882a593Smuzhiyun if [[ "$pkg" == "Loading" || "$pkg" == "Loaded" || 34*4882a593Smuzhiyun "$pkg" == "Recipe" || 35*4882a593Smuzhiyun "$pkg" == "Parsing" || "$pkg" == "Package" || 36*4882a593Smuzhiyun "$pkg" == "NOTE:" || "$pkg" == "WARNING:" || 37*4882a593Smuzhiyun "$pkg" == "done." || "$pkg" == "===========" ]] 38*4882a593Smuzhiyun then 39*4882a593Smuzhiyun # Skip initial bitbake output 40*4882a593Smuzhiyun continue 41*4882a593Smuzhiyun fi 42*4882a593Smuzhiyun if [[ "$pkg" =~ -native$ || "$pkg" =~ -nativesdk$ || 43*4882a593Smuzhiyun "$pkg" =~ -cross-canadian ]]; then 44*4882a593Smuzhiyun # Skip native/nativesdk/cross-canadian recipes 45*4882a593Smuzhiyun continue 46*4882a593Smuzhiyun fi 47*4882a593Smuzhiyun if [[ "$pkg" =~ ^meta- || "$pkg" =~ ^packagegroup- || "$pkg" =~ -image ]]; then 48*4882a593Smuzhiyun # Skip meta, task and image recipes 49*4882a593Smuzhiyun continue 50*4882a593Smuzhiyun fi 51*4882a593Smuzhiyun if [[ "$pkg" =~ ^glibc- || "$pkg" =~ ^libiconv$ || 52*4882a593Smuzhiyun "$pkg" =~ -toolchain$ || "$pkg" =~ ^package-index$ || 53*4882a593Smuzhiyun "$pkg" =~ ^linux- || "$pkg" =~ ^adt-installer$ || 54*4882a593Smuzhiyun "$pkg" =~ ^eds-tools$ || "$pkg" =~ ^external-python-tarball$ || 55*4882a593Smuzhiyun "$pkg" =~ ^qt4-embedded$ || "$pkg" =~ ^qt-mobility ]]; then 56*4882a593Smuzhiyun # Skip glibc, libiconv, -toolchain, and other recipes known 57*4882a593Smuzhiyun # to cause build conflicts or trigger false positives. 58*4882a593Smuzhiyun continue 59*4882a593Smuzhiyun fi 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun echo "Building package $pkg..." 62*4882a593Smuzhiyun bitbake $pkg > /dev/null 63*4882a593Smuzhiyun if [ $? -ne 0 ]; then 64*4882a593Smuzhiyun echo "There was an error building package $pkg" >> "$REPORT_MISSING_DETAIL" 65*4882a593Smuzhiyun echo "$pkg" >> $REPORT_BUILD_ERRORS 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun # Do not skip the remaining tests, as sometimes the 68*4882a593Smuzhiyun # exit status is 1 due to QA errors, and we can still 69*4882a593Smuzhiyun # perform the -doc checks. 70*4882a593Smuzhiyun fi 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun echo "$pkg built successfully, checking for a documentation package..." 73*4882a593Smuzhiyun WORKDIR=`bitbake -e $pkg | grep ^WORKDIR | awk -F '=' '{ print \$2 }' | awk -F '"' '{ print \$2 }'` 74*4882a593Smuzhiyun FIND_DOC_PKG=`find $WORKDIR/packages-split/*-doc -maxdepth 0 -type d` 75*4882a593Smuzhiyun if [ -z "$FIND_DOC_PKG" ]; then 76*4882a593Smuzhiyun # No -doc package was generated: 77*4882a593Smuzhiyun echo "No -doc package: $pkg" >> "$REPORT_MISSING_DETAIL" 78*4882a593Smuzhiyun echo "$pkg" >> $REPORT_MISSING_SIMPLE 79*4882a593Smuzhiyun continue 80*4882a593Smuzhiyun fi 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun FIND_DOC_FILES=`find $FIND_DOC_PKG -type f` 83*4882a593Smuzhiyun if [ -z "$FIND_DOC_FILES" ]; then 84*4882a593Smuzhiyun # No files shipped with the -doc package: 85*4882a593Smuzhiyun echo "No files shipped with the -doc package: $pkg" >> "$REPORT_MISSING_DETAIL" 86*4882a593Smuzhiyun echo "$pkg" >> $REPORT_MISSING_SIMPLE 87*4882a593Smuzhiyun continue 88*4882a593Smuzhiyun fi 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun echo "Documentation shipped with $pkg:" >> "$REPORT_DOC_DETAIL" 91*4882a593Smuzhiyun echo "$FIND_DOC_FILES" >> "$REPORT_DOC_DETAIL" 92*4882a593Smuzhiyun echo "" >> "$REPORT_DOC_DETAIL" 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun echo "$pkg" >> "$REPORT_DOC_SIMPLE" 95*4882a593Smuzhiyundone 96