#!/bin/sh
ARCH=arm
MACH=sunxi
FILE_IN=$1
FILE_OUT=$2
# .c
SOURCE_LIST=""
# generated file list
FILE_LIST=""
# nest depth for function get_includes()
NEST_DTPTH=0
# recursive function, used to get included files from files.
# result is stored in FILE_LIST
# $1 : file list, e.g. "fs/ext4/file.c fs/ext4/fsync.c"
get_includes()
{
local includes
local file
for file in $1
do
if [ ! -e ${file} ]; then
continue
fi
if echo "${FILE_LIST}" | grep -E ${file} > /dev/null; then
continue
fi
FILE_LIST="${FILE_LIST} ${file}"
NEST_DTPTH=$((NEST_DTPTH+1))
echo "
includes=$( \
grep -E -H '^#include' ${file} | \
sed -r \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@'\
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e 's@^.*@include/\1@' \
-e "s@^.*@arch/${ARCH}/include/\1 arch/${ARCH}/include/generated/\1@" \
-e "s@^.*@arch/${ARCH}/mach-${MACH}/include/\1@" \
-e 's@(^.*/)[^/]+\.c.*\"(.*)\"@\1\2@' \
-e 's@/\*.*@@' \
-e 's@^.*\#include.*$@@' \
-e 's@^@ @' | \
sort | \
uniq | \
tr -d '\n' | \
tr -d '\r' \
)
if [ -n "${includes}" ]; then
get_includes "${includes}"
fi
echo ">${NEST_DTPTH}) : ${file}"
NEST_DTPTH=$((NEST_DTPTH-1))
done
}
# get *.c from kernel build log
SOURCE_LIST=$( \
grep -E '^\s*CC' ${FILE_IN} | \
sed -r \
-e 's/^\s*CC\s*/ /' \
-e 's/\.o/\.c/' | \
tr -d '\n' | \
tr -d '\r' \
)
echo ${SOURCE_LIST}
get_includes "${SOURCE_LIST}"
FILE_LIST=$(echo "${FILE_LIST}" | sed -r -e 's/\s/\r\n/g' )
echo "${FILE_LIST}" > ${FILE_OUT}