Xamarin Public Jenkins (auto-signing) 536cd135cc Imported Upstream version 5.4.0.167
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
2017-08-21 15:34:15 +00:00

89 lines
2.0 KiB
Bash

#! /bin/sh
outfile=$1
incfile=$2
excfile=$3
extfile=$4
extexcfile=$5
process_includes_1() {
sed -e '/^[ \t]*$/d' -e '/^[ \t]*#/d' $1 > $2
if cmp -s $1 $2; then
false
else
sed -n 's,^[ \t]*#include ,,p' $1 |
while read inc; do
cat $inc >> $2
echo $outfile: $inc >> $outfile.makefrag
echo $inc: >> $outfile.makefrag
done
fi
}
process_includes() {
i=$1; o=$2; t=${2}.tmp
while process_includes_1 $i $o; do
mv $o $t
i=$t
done
rm -f $t
}
check_newline_eof() {
file=$1
if ! test -f "$file"; then return; fi
if ! test -z "$(tail -c 1 "$file")"; then echo "$file: missing newline at end of file."; exit 1; fi
}
check_newline_eof $incfile
check_newline_eof $excfile
check_newline_eof $extfile
check_newline_eof $extexcfile
rm -f $outfile.makefrag
process_includes $incfile $outfile.inc
if test x$extfile != x -a -f "$extfile"; then
process_includes $extfile $outfile.ext.inc
cat $outfile.ext.inc >> $outfile.inc
rm -f $outfile.ext.inc
fi
sort -u $outfile.inc > $outfile.inc_s
rm -f $outfile.inc
if test -n "$excfile" -a -f "$excfile"; then
process_includes $excfile $outfile.exc
fi
if test -n "$extexcfile"; then
process_includes $extexcfile $outfile.ext_exc
cat $outfile.ext_exc >> $outfile.exc
rm -f $outfile.ext_exc
fi
if test -f $outfile.exc; then
# So what we're doing below with uniq -u is that we take
# lines that have not been duplicated. This computes the
# symmetric difference between the files. This is not
# what we want. If a file is in the excludes but not in
# the sources, we want that file not to show up. By duplicating the
# excludes, we ensure that we won't end up in this failure state.
sort -u $outfile.exc > $outfile.exc_s
# Duplicate excludes
cat $outfile.exc_s >> $outfile.exc_s_dup
cat $outfile.exc_s >> $outfile.exc_s_dup
rm -f $outfile.exc $outfile.exc_s
cat $outfile.inc_s $outfile.exc_s_dup | sort | uniq -u > $outfile
rm -f $outfile.inc_s $outfile.exc_s_dup
else
mv $outfile.inc_s $outfile
fi