xref: /OK3568_Linux_fs/yocto/poky/scripts/contrib/documentation-audit.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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