incfile=$2
excfile=$3
extfile=$4
+extexcfile=$5
process_includes_1() {
sed -e '/^[ \t]*$/d' -e '/^[ \t]*#/d' $1 > $2
process_includes $incfile $outfile.inc
if test x$extfile != x -a -f "$extfile"; then
- cat $extfile >> $outfile.inc
+ 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 -z "$excfile"; then
- mv $outfile.inc_s $outfile
-else
+
+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
- sort -u $outfile.exc > $outfile.exc_s
- rm -f $outfile.exc
+ # Duplicate excludes
+ cat $outfile.exc_s >> $outfile.exc_s_dup
+ cat $outfile.exc_s >> $outfile.exc_s_dup
- sort -m $outfile.inc_s $outfile.exc_s | uniq -u > $outfile
- rm -f $outfile.inc_s $outfile.exc_s
+ 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