Commit 94b82f2b by Alexandre Oliva Committed by Alexandre Oliva

egcs_update (files_and_dependencies): New function...

* egcs_update (files_and_dependencies): New function, with
complete list of files to be updated, as well as their
dependencies.
(touch_files): Check the timestamp of each generated file against
its dependencies'.
(main): New flags --touch, --list and --help.  Remove the
pre-update step.

From-SVN: r28295
parent 3efd811a
1999-07-27 Alexandre Oliva <oliva@dcc.unicamp.br>
* egcs_update (files_and_dependencies): New function, with
complete list of files to be updated, as well as their
dependencies.
(touch_files): Check the timestamp of each generated file against
its dependencies'.
(main): New flags --touch, --list and --help. Remove the
pre-update step.
1999-07-17 Alexandre Oliva <oliva@dcc.unicamp.br> 1999-07-17 Alexandre Oliva <oliva@dcc.unicamp.br>
* test_summary: Replace egcs with gcc. Update e-mail address. * test_summary: Replace egcs with gcc. Update e-mail address.
......
...@@ -12,12 +12,21 @@ ...@@ -12,12 +12,21 @@
# If the first parameter reads --patch, the second parameter is considered # If the first parameter reads --patch, the second parameter is considered
# a patch file. # a patch file.
# #
# If the first parameter is --touch, no cvs operation will be performed,
# only generated files that appear to be out of date in the local tree
# will be touched.
#
# If the first parameter is --list, a list of the generated files and
# their dependencies will be printed; --help prints this message.
#
# Examples: # Examples:
# #
# contrib/egcs_update -r egcs_latest_snapshot # contrib/egcs_update -r egcs_latest_snapshot
# contrib/egcs_update -A # contrib/egcs_update -A
# contrib/egcs_update --nostdflags -P -r egcs_1_1_branch gcc/testsuite # contrib/egcs_update --nostdflags -P -r egcs_1_1_branch gcc/testsuite
# contrib/egcs_update --patch some-patch # contrib/egcs_update --patch some-patch
# contrib/egcs_update --touch
# contrib/egcs_update --list
# #
# #
# (C) 1998-1999 Free Software Foundation # (C) 1998-1999 Free Software Foundation
...@@ -35,49 +44,79 @@ UPDATE_OPTIONS=-P ...@@ -35,49 +44,79 @@ UPDATE_OPTIONS=-P
# Add -A to reset any sticky tags, dates, or `-k' options. # Add -A to reset any sticky tags, dates, or `-k' options.
# This function prints a list of all generated files, along with their
# dependencies. Note that only one target is supported per line: the
# colon is stripped from the output.
files_and_dependencies () {
sed -e 's/ *#.*//' -e '/^$/d' -e 's/://' <<\EOF
# All automake dependencies within texinfo
# In fact, not all, since we do not care about sub-directories that
# we do not build. In particular, *.po and *.gmo are not touched.
texinfo/aclocal.m4: texinfo/configure.in texinfo/acinclude.m4
texinfo/Makefile.in: texinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
texinfo/configure: texinfo/configure.in texinfo/aclocal.m4
texinfo/stamp-h.in: texinfo/configure.in texinfo/aclocal.m4 texinfo/acconfig.h
texinfo/lib/Makefile.in: texinfo/lib/Makefile.am texinfo/configure.in texinfo/aclocal.m4
texinfo/makeinfo/Makefile.in: texinfo/makeinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
texinfo/util/Makefile.in: texinfo/util/Makefile.am texinfo/configure.in texinfo/aclocal.m4
# Now, proceed to gcc automatically generated files
gcc/configure: gcc/configure.in
gcc/c-stamp-h.in: gcc/configure.in gcc/acconfig.h
gcc/c-parse.y: gcc/c-parse.in
gcc/c-parse.c: gcc/c-parse.y
gcc/c-parse.h: gcc/c-parse.c
gcc/c-gperf.h: gcc/c-parse.gperf
gcc/cexp.c: gcc/cexp.y
gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
gcc/fixinc/inclhack.sh: gcc/fixinc/inclhack.def gcc/fixinc/inclhack.tpl gcc/fixinc/hackshell.tpl
gcc/fixinc/fixincl.sh: gcc/fixinc/inclhack.def gcc/fixinc/inclhack.tpl
# And then, language-specific files
gcc/cp/parse.c: gcc/cp/parse.y
gcc/cp/parse.h: gcc/cp/parse.c
gcc/objc/objc-parse.y: gcc/c-parse.in
gcc/objc/objc-parse.c: gcc/objc/objc-parse.y
gcc/java/parse.h: gcc/java/parse.y
gcc/java/parse.c: gcc/java/parse.y gcc/java/lex.c gcc/java/parse.h gcc/java/lex.h
gcc/java/parse-scan.c: gcc/java/parse-scan.y gcc/java/lex.c gcc/java/parse.h gcc/java/lex.h
# And libraries, at last
libchill/configure: libchill/configure.in
libf2c/configure: libf2c/configure.in
libf2c/libF77/configure: libf2c/libF77/configure.in
libf2c/libI77/configure: libf2c/libI77/configure.in
libf2c/libU77/configure: libf2c/libU77/configure.in
libf2c/libU77/stamp-h.in: libf2c/libU77/configure.in libf2c/libU77/acconfig.h
libobjc/configure: libobjc/configure.in
EOF
}
# This function checks whether its first argument is newer than all
# the other arguments. It returns success (0) otherwise.
is_out_of_date () {
test `ls -1dt ${1+"$@"} | sed 1q` != "$1"
}
# This function touches generated files such that the ``end'' user does # This function touches generated files such that the ``end'' user does
# not have to rebuild them. # not have to rebuild them.
# touch_files () {
# Please also update the FAQ accordingly if you change the list of files_and_dependencies | while read f deps; do
# files below. Note that generated files should be touched only if test -f $f && is_out_of_date "$f" $deps; then
# after the corresponding *.y files. echo Touching "$f"...
touch_files()
{
touch `find . -name configure -print`
touch `find texinfo -name Makefile.in -print`
touch `find texinfo -name \*.pot -print`
touch `find texinfo -name \*.gmo -print`
for f in gcc/c-parse.y \
gcc/c-parse.h \
gcc/c-parse.c \
gcc/cstamp-h.in \
gcc/c-gperf.h \
gcc/cexp.c \
gcc/cp/parse.c \
gcc/cp/parse.h \
gcc/objc/objc-parse.y \
gcc/objc/objc-parse.c \
gcc/java/parse.h \
gcc/java/parse.c \
gcc/java/parse-scan.c \
libf2c/libU77/stamp-h.in \
contrib/fixinc/fixincl.x \
contrib/fixinc/inclhack.sh \
contrib/fixinc/fixincl.sh \
gcc/fixinc/fixincl.x \
gcc/fixinc/inclhack.sh \
gcc/fixinc/fixincl.sh
do
if [ -f $f ]; then
touch $f touch $f
if is_out_of_date "$f" $deps; then
# Hmm, it may have got the same timestamp as one of
# its touched dependencies. Wait a second and retry
sleep 1
touch $f
fi
fi fi
done done
} }
# This functions applies a patch to an existing tree. # This functions applies a patch to an existing tree.
apply_patch() apply_patch () {
{
if [ -f $1 ]; then if [ -f $1 ]; then
echo "Applying patch file $1" echo "Applying patch file $1"
case "$1" in case "$1" in
...@@ -87,25 +126,56 @@ apply_patch() ...@@ -87,25 +126,56 @@ apply_patch()
cat $1 | patch -p1 ;; cat $1 | patch -p1 ;;
esac esac
fi fi
echo "Updating file timestamps" echo "Adjusting file timestamps"
touch_files touch_files
} }
# This is where the actual processing starts.
echo "Current directory is `pwd`."
# Check whether this indeed looks like a local tree. # Check whether this indeed looks like a local tree.
if [ ! -f gcc/version.c ]; then if [ ! -f gcc/version.c ]; then
echo "This does not seem to be an egcs tree!" echo "This does not seem to be an egcs tree!"
exit exit
fi fi
case "$1" in
# First of all, check whether we are going to process a patch. # First of all, check whether we are going to process a patch.
if [ x"${1}"x = x"--patch"x ]; then --patch)
apply_patch ${2} if test "$#" != 2; then
exit 0 echo "$1" expects only one argument >&2
fi exit 1
fi
apply_patch "${2}"
exit $?
;;
--touch)
if test "$#" != 1; then
echo "$1" does not expect any argument >&2
exit 1
fi
touch_files
exit $?
;;
--list)
if test "$#" != 1; then
echo "$1" does not expect any argument >&2
exit 1
fi
files_and_dependencies | sed 's/ /: /'
exit $?
;;
--help)
sed -e '1,2d' -e '/^UPDATE_OPTIONS=/{i\
\
p
}' \
-e '/^$/,$d' -e 's/#//' -e 's/^ //' < $0
exit $?
;;
esac
# Check whether this indeed looks like a local CVS tree. # Check whether this indeed looks like a local CVS tree.
if [ ! -d CVS ]; then if [ ! -d CVS ]; then
...@@ -120,29 +190,12 @@ else ...@@ -120,29 +190,12 @@ else
set -- $UPDATE_OPTIONS ${1+"$@"} set -- $UPDATE_OPTIONS ${1+"$@"}
fi fi
echo "Updating CVS tree"
echo "Pass 1: Updating autoconf and bison generated files"
# Do a CVS update on those files that exist in CVS directories. libg++
# makes sense to drop into the tree, but it isn't CVS-controlled.
X=`for i in \`find . -name configure.in -o -name '*.y'\`
do
D=\`dirname $i\`/CVS
if [ -f $i -a -d $D ]; then
echo $i
fi
done`
cvs -q update $X
if [ $? -ne 0 ]; then
echo "CVS update of generated files failed." >&2
exit 1
fi
echo "Pass 2: Updating full tree"
cvs -q update ${1+"$@"} cvs -q update ${1+"$@"}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "CVS update of full tree failed." >&2 echo "CVS update of full tree failed." >&2
exit 1 exit 1
fi fi
echo "Pass 3: Fixing local tree" echo "Adjusting file timestamps"
touch_files touch_files
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment