You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.1 KiB
86 lines
3.1 KiB
#!/bin/bash
|
|
# This script uses log file saved from make >log 2>&1. It parses and
|
|
# fixes the "file not found" errors by adding dependencies to reported
|
|
# modules' Android.mk file. It works for following types of issues:
|
|
# error: 'hardware/<file>.h' file not found
|
|
# error: 'system/<file>.h' file not found
|
|
# error: 'cutils/<file>.h' file not found
|
|
# error: 'utils/<file>.h' file not found
|
|
# error: 'log/<file>.h' file not found
|
|
#
|
|
# More can be added by expanding ADD_TO_*_LIBS string
|
|
#
|
|
# This script will create temp files log.<type> and log.<type>.paths
|
|
#
|
|
# This script requires manual intervention in 2 places:
|
|
# 1. Visually inspecting log.<type>.paths and removing undesirable lines
|
|
# 2. Manually checking in uncommitted files reported by repo status
|
|
|
|
|
|
if [ "$PWD" != "$ANDROID_BUILD_TOP" ]; then
|
|
echo "This script needs to be run at top level folder"
|
|
exit 1
|
|
fi
|
|
if [ ! -f "log" ]; then
|
|
echo "log file not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Parsing log"
|
|
cat log | grep "FAILED\|error:" > log.error
|
|
|
|
#libs that should be added to LOCAL_HEADER_LIBRARIES
|
|
ADD_TO_HEADER_LIBS=(hardware system cutils utils)
|
|
|
|
#libs that should be added to LOCAL_SHARED_LIBRARIES
|
|
ADD_TO_SHARED_LIBS=(log)
|
|
|
|
ALL_LIBS=(${ADD_TO_HEADER_LIBS[@]} ${ADD_TO_SHARED_LIBS[@]})
|
|
|
|
for lib in "${ALL_LIBS[@]}"; do
|
|
echo "Parsing log.error for $lib"
|
|
cat log.error | grep -B1 "error: '$lib\/" | grep FAILED | awk 'BEGIN{FS="_intermediates"}{print $1}' | awk 'BEGIN{FS="S/";}{print $2}' | sort -u > log.$lib
|
|
|
|
echo "Parsing log.$lib"
|
|
for module in `cat log.$lib`; do find . -name Android.\* | xargs grep -w -H $module | grep "LOCAL_MODULE\|name:"; done > log.$lib.paths
|
|
|
|
echo "Please inspect log.$lib.paths and remove lines for devices other than the one you are compiling for."
|
|
echo "Also remove duplicate makefile paths, even if they have different module names."
|
|
echo "Then press Enter"
|
|
read enter
|
|
if [ -s "log.$lib.paths" ]; then
|
|
not_vendor_list=`cat log.$lib.paths | awk 'BEGIN{FS=":"}{print $1}' | xargs grep -L 'LOCAL_PROPRIETARY_MODULE\|LOCAL_VENDOR_MODULE'`
|
|
else
|
|
not_vendor_list=
|
|
fi
|
|
if [ ! -z "$not_vendor_list" ]; then
|
|
echo "These modules do NOT have proprietary or vendor flag set."
|
|
printf "%s\n" $not_vendor_list
|
|
echo "Please check the makefile and update log."$lib".paths, then press Enter"
|
|
read enter
|
|
fi
|
|
done
|
|
|
|
for lib in "${ADD_TO_HEADER_LIBS[@]}"; do
|
|
echo "Patching makefiles to fix "$lib" errors"
|
|
cat log.$lib.paths | awk 'BEGIN{FS=":"}{print $1}' | xargs sed -i '/include \$(BUILD/i LOCAL_HEADER_LIBRARIES += lib'$lib'_headers'
|
|
echo "Checking for unsaved files"
|
|
repo status
|
|
echo "Please COMMIT them, then press Enter:"
|
|
read enter
|
|
done
|
|
|
|
for lib in "${ADD_TO_SHARED_LIBS[@]}"; do
|
|
echo "Patching makefiles to fix "$lib" errors"
|
|
if [ $lib -eq "log" ]; then
|
|
cat log.$lib.paths | awk 'BEGIN{FS=":"}{print $1}' | xargs sed -i '/include \$(BUILD/i ifdef BOARD_VNDK_VERSION\nLOCAL_SHARED_LIBRARIES += lib'$lib'\nendif'
|
|
else
|
|
cat log.$lib.paths | awk 'BEGIN{FS=":"}{print $1}' | xargs sed -i '/include \$(BUILD/i LOCAL_SHARED_LIBRARIES += lib'$lib
|
|
fi
|
|
echo "Checking for unsaved files"
|
|
repo status
|
|
echo "Please COMMIT them, then press Enter:"
|
|
read enter
|
|
done
|
|
|