| #!/bin/bash |
| # |
| # SPDX-License-Identifier: GPL-2.0-only |
| # |
| # Perform an audit of which packages provide documentation and which |
| # are missing -doc packages. |
| # |
| # Setup requirements: be sure to be building for MACHINE=qemux86. Run |
| # this script after source'ing the build environment script, so you're |
| # running it from build/ directory. |
| # |
| |
| REPORT_DOC_SIMPLE="documentation_exists.txt" |
| REPORT_DOC_DETAIL="documentation_exists_detail.txt" |
| REPORT_MISSING_SIMPLE="documentation_missing.txt" |
| REPORT_MISSING_DETAIL="documentation_missing_detail.txt" |
| REPORT_BUILD_ERRORS="build_errors.txt" |
| |
| rm -rf $REPORT_DOC_SIMPLE $REPORT_DOC_DETAIL $REPORT_MISSING_SIMPLE $REPORT_MISSING_DETAIL |
| |
| BITBAKE=`which bitbake` |
| if [ -z "$BITBAKE" ]; then |
| echo "Error: bitbake command not found." |
| echo "Did you forget to source the build environment script?" |
| exit 1 |
| fi |
| |
| echo "REMINDER: you need to build for MACHINE=qemux86 or you won't get useful results" |
| echo "REMINDER: you need to set LICENSE_FLAGS_WHITELIST appropriately in local.conf or " |
| echo " you'll get false positives. For example, LICENSE_FLAGS_WHITELIST = \"commercial\"" |
| |
| for pkg in `bitbake -s | awk '{ print \$1 }'`; do |
| if [[ "$pkg" == "Loading" || "$pkg" == "Loaded" || |
| "$pkg" == "Recipe" || |
| "$pkg" == "Parsing" || "$pkg" == "Package" || |
| "$pkg" == "NOTE:" || "$pkg" == "WARNING:" || |
| "$pkg" == "done." || "$pkg" == "===========" ]] |
| then |
| # Skip initial bitbake output |
| continue |
| fi |
| if [[ "$pkg" =~ -native$ || "$pkg" =~ -nativesdk$ || |
| "$pkg" =~ -cross-canadian ]]; then |
| # Skip native/nativesdk/cross-canadian recipes |
| continue |
| fi |
| if [[ "$pkg" =~ ^meta- || "$pkg" =~ ^packagegroup- || "$pkg" =~ -image ]]; then |
| # Skip meta, task and image recipes |
| continue |
| fi |
| if [[ "$pkg" =~ ^glibc- || "$pkg" =~ ^libiconv$ || |
| "$pkg" =~ -toolchain$ || "$pkg" =~ ^package-index$ || |
| "$pkg" =~ ^linux- || "$pkg" =~ ^adt-installer$ || |
| "$pkg" =~ ^eds-tools$ || "$pkg" =~ ^external-python-tarball$ || |
| "$pkg" =~ ^qt4-embedded$ || "$pkg" =~ ^qt-mobility ]]; then |
| # Skip glibc, libiconv, -toolchain, and other recipes known |
| # to cause build conflicts or trigger false positives. |
| continue |
| fi |
| |
| echo "Building package $pkg..." |
| bitbake $pkg > /dev/null |
| if [ $? -ne 0 ]; then |
| echo "There was an error building package $pkg" >> "$REPORT_MISSING_DETAIL" |
| echo "$pkg" >> $REPORT_BUILD_ERRORS |
| |
| # Do not skip the remaining tests, as sometimes the |
| # exit status is 1 due to QA errors, and we can still |
| # perform the -doc checks. |
| fi |
| |
| echo "$pkg built successfully, checking for a documentation package..." |
| WORKDIR=`bitbake -e $pkg | grep ^WORKDIR | awk -F '=' '{ print \$2 }' | awk -F '"' '{ print \$2 }'` |
| FIND_DOC_PKG=`find $WORKDIR/packages-split/*-doc -maxdepth 0 -type d` |
| if [ -z "$FIND_DOC_PKG" ]; then |
| # No -doc package was generated: |
| echo "No -doc package: $pkg" >> "$REPORT_MISSING_DETAIL" |
| echo "$pkg" >> $REPORT_MISSING_SIMPLE |
| continue |
| fi |
| |
| FIND_DOC_FILES=`find $FIND_DOC_PKG -type f` |
| if [ -z "$FIND_DOC_FILES" ]; then |
| # No files shipped with the -doc package: |
| echo "No files shipped with the -doc package: $pkg" >> "$REPORT_MISSING_DETAIL" |
| echo "$pkg" >> $REPORT_MISSING_SIMPLE |
| continue |
| fi |
| |
| echo "Documentation shipped with $pkg:" >> "$REPORT_DOC_DETAIL" |
| echo "$FIND_DOC_FILES" >> "$REPORT_DOC_DETAIL" |
| echo "" >> "$REPORT_DOC_DETAIL" |
| |
| echo "$pkg" >> "$REPORT_DOC_SIMPLE" |
| done |