summaryrefslogtreecommitdiff
path: root/scripts/contrib/documentation-audit.sh
blob: 5070fee8a088b9b9fcb2c4e64568fb06cbdd1328 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash
#
# 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.
#
# Maintainer: Scott Garman <scott.a.garman@intel.com>

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 have COMMERCIAL_LICENSE = \"\" in local.conf or you'll get false positives"

for pkg in `bitbake -s | awk '{ print \$1 }'`; do
	if [[ "$pkg" == "Loading" || "$pkg" == "Loaded" ||
          "$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" =~ ^task- || "$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