mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-23 01:59:16 +08:00
9902495604
From-SVN: r18731
188 lines
4.8 KiB
Smarty
188 lines
4.8 KiB
Smarty
[= autogen include
|
|
=]
|
|
[=
|
|
# $Id: hackshell.tpl,v 1.1 1998/03/20 16:19:41 korbb Exp $
|
|
#
|
|
# This file contanes the shell template replacement for the
|
|
# fixincl program. It is the repetitive guts of the fixincludes logic.
|
|
#
|
|
=]
|
|
if $LINKS; then
|
|
files=`find . -name '*.h' \( -type f -o -type l \) -print`
|
|
else
|
|
files=`find . -name '*.h' -type f -print`
|
|
fi
|
|
echo Checking header files
|
|
for file in $files; do
|
|
|
|
if ( test ! -r $file -o \
|
|
-n "`fgrep 'This file is part of the GNU C Library' $file`" )
|
|
then continue ; fi
|
|
|
|
fixlist=""
|
|
[=
|
|
#
|
|
# FOR every fix description,
|
|
# DO: emit the shell text to apply the fix to the current file
|
|
#
|
|
# =][=
|
|
|
|
_FOR fix "\n\n" =]
|
|
#
|
|
# Fix [=_eval _index 1 + #%3d _printf=]: [=hackname _Cap=]
|
|
#[=
|
|
_IF files _exist=]
|
|
case "$file" in [=_FOR files " | \\\n\t"=]./[=files=][=/files=] )[=
|
|
_ENDIF=][=
|
|
|
|
_IF mach _exist=]
|
|
case "$target_canonical" in [=
|
|
_FOR mach " | \\\n\t" =][=
|
|
mach =][=
|
|
/mach =] )[=
|
|
_IF mach_unmatched _exist =] : ;;
|
|
* )[=
|
|
_ENDIF =][=
|
|
|
|
_ENDIF=][=
|
|
|
|
# There are three conditional tests: select, bypass and test.
|
|
They may appear as often as desired. They must all pass for
|
|
the fix to be applied. "select" and "bypass" are egrep expressions
|
|
that must each appear (or not appear) in the target file.
|
|
"test" is an arbitrary test program expression that must yield
|
|
true or false. It is enclosed in parenthesis to avoid
|
|
precedence problems. The output looks like this:
|
|
|
|
if ( test -n "`egrep 'find-expr' $file`" -a
|
|
-z "`egrep 'not-find' $file`" -a
|
|
'(' <some-test-expression> ')'
|
|
) > /dev/null 2>&1 ; then
|
|
|
|
# =][=
|
|
|
|
_IF select _exist =]
|
|
if ( test [=
|
|
_FOR select " -a \\\n "
|
|
=]-n [=select _shrstr "#`egrep %s $file`"
|
|
_printf _shstr =][=
|
|
/select=][=
|
|
|
|
_IF bypass _exist =][=
|
|
_FOR bypass=] -a \
|
|
-z [=bypass _shrstr "#`egrep %s $file`"
|
|
_printf _shstr =][=
|
|
/bypass=][=
|
|
_ENDIF=][=
|
|
|
|
_IF test _exist=][=
|
|
_FOR test=] -a \
|
|
'(' [=test=] ')'[=
|
|
/test=][=
|
|
_ENDIF=]
|
|
) > /dev/null 2>&1 ; then[=
|
|
|
|
|
|
_ELIF test _exist =]
|
|
if ( test [=
|
|
_FOR test " -a \\\n "
|
|
=]'(' [=test=] ')'[=
|
|
/test=][=
|
|
|
|
_IF bypass _exist=][=
|
|
_FOR bypass=] -a \
|
|
-z [=bypass _shrstr "#`egrep %s $file`"
|
|
_printf _shstr=][=
|
|
/bypass=][=
|
|
_ENDIF=]
|
|
) > /dev/null 2>&1 ; then[=
|
|
|
|
|
|
_ELIF bypass _exist =]
|
|
if ( test [=_FOR bypass " -a \\\n "
|
|
=]-z [=bypass _shrstr "#`egrep %s $file`"
|
|
_printf _shstr=][=/bypass=]
|
|
) > /dev/null 2>&1 ; then[=
|
|
|
|
_ENDIF=]
|
|
fixlist="${fixlist}
|
|
[=hackname=]"
|
|
if [ ! -r ${DESTDIR}/$file ]
|
|
then infile=$file
|
|
else infile=${DESTDIR}/$file ; fi [=
|
|
|
|
_IF sed _exist=][=
|
|
_IF shell _exist =][=
|
|
_ERROR hackname _get
|
|
"fixincludes Error: %s fix has multiple fixups" _printf=][=
|
|
_ENDIF=]
|
|
|
|
sed [=
|
|
_FOR sed =]-e [=sed _shrstr=] \
|
|
[=
|
|
/sed=] < $infile > ${DESTDIR}/$file.[=
|
|
|
|
|
|
_ELIF shell _exist =]
|
|
( [=shell=] ) < $infile > ${DESTDIR}/$file.
|
|
|
|
# Shell scripts have the potential of removing the output
|
|
# We interpret that to mean the file is not to be altered
|
|
#
|
|
if test ! -f ${DESTDIR}/$file.
|
|
then continue ; fi [=
|
|
|
|
|
|
_ELSE=][=
|
|
_ERROR hackname _get "ERROR: %s has no fixup" _printf=][=
|
|
|
|
_ENDIF=]
|
|
|
|
mv -f ${DESTDIR}/$file. ${DESTDIR}/$file[=
|
|
|
|
# Close off any opened "if" or "case" statements in reverse order
|
|
|
|
# =][=
|
|
|
|
_IF select _exist test _exist | bypass _exist | =]
|
|
fi # end of selection 'if'[=
|
|
_ENDIF =][=
|
|
|
|
_IF mach _exist=]
|
|
;; # case end for machine type test
|
|
esac[=
|
|
_ENDIF =][=
|
|
|
|
_IF files _exist=]
|
|
;; # case end for file name test
|
|
esac[=
|
|
_ENDIF =][=
|
|
|
|
/fix =][=
|
|
#
|
|
# DONE with every fix for the current file
|
|
#
|
|
#=]
|
|
# IF the output has been removed OR it is unchanged,
|
|
# THEN ensure the output is gone
|
|
# ELSE look for local directory include syntax
|
|
#
|
|
if ( test ! -f ${DESTDIR}/$file || \
|
|
cmp $file ${DESTDIR}/$file ) > /dev/null 2>&1
|
|
then
|
|
rm -f ${DESTDIR}/$file
|
|
else
|
|
echo "Fixed $file:${fixlist}"
|
|
|
|
# Find any include directives that use "file".
|
|
#
|
|
for include in `
|
|
egrep '^[ ]*#[ ]*include[ ]*"[^/]' ${DESTDIR}/$file |
|
|
sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`
|
|
do
|
|
dir=`echo $file | sed -e s'|/[^/]*$||'`
|
|
required="$required ${SRCDIR} $dir/$include ${DESTDIR}/$dir/$include"
|
|
done
|
|
fi
|
|
done # for file in $files
|