source: trunk/third/gcc/contrib/egcs_update @ 14548

Revision 14548, 6.0 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14547, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
Line 
1#! /bin/sh
2#
3# Update a local CVS tree from the egcs repository, with an emphasis
4# on treating generated files correctly, so that autoconf, bison et
5# al are not required for the ``end'' user.
6#
7# By default all command-line options are passed to `cvs update` in
8# addition to $UPDATE_OPTIONS (defined below). If the first parameter
9# reads --nostdflags, $UPDATE_OPTIONS as well as this parameter itself
10# are omitted.
11#
12# If the first parameter reads --patch, the second parameter is considered
13# a patch file.
14#
15# If the first parameter is --touch, no cvs operation will be performed,
16# only generated files that appear to be out of date in the local tree
17# will be touched.
18#
19# If the first parameter is --list, a list of the generated files and
20# their dependencies will be printed; --help prints this message.
21#
22# Examples:
23#
24# contrib/egcs_update -r egcs_latest_snapshot
25# contrib/egcs_update -A
26# contrib/egcs_update --nostdflags -P -r egcs_1_1_branch gcc/testsuite
27# contrib/egcs_update --patch some-patch
28# contrib/egcs_update --touch
29# contrib/egcs_update --list
30#
31#
32# (C) 1998-1999 Free Software Foundation
33# Originally by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>, August 1998.
34#
35# This script is Free Software, and it can be copied, distributed and
36# modified as defined in the GNU General Public License.  A copy of
37# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
38
39
40# Default options used when updating via CVS.
41UPDATE_OPTIONS=-P
42# Add -d to create any directories that exist in the repository but not
43#        locally.
44# Add -A to reset any sticky tags, dates, or `-k' options.
45
46
47# This function prints a list of all generated files, along with their
48# dependencies.  Note that only one target is supported per line: the
49# colon is stripped from the output.
50files_and_dependencies () {
51    sed -e 's/ *#.*//' -e '/^$/d' -e 's/://' <<\EOF
52# All automake dependencies within texinfo
53# In fact, not all, since we do not care about sub-directories that
54# we do not build.  In particular, *.po and *.gmo are not touched.
55texinfo/aclocal.m4: texinfo/configure.in texinfo/acinclude.m4
56texinfo/Makefile.in: texinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
57texinfo/configure: texinfo/configure.in texinfo/aclocal.m4
58texinfo/stamp-h.in: texinfo/configure.in texinfo/aclocal.m4 texinfo/acconfig.h
59texinfo/lib/Makefile.in: texinfo/lib/Makefile.am texinfo/configure.in texinfo/aclocal.m4
60texinfo/makeinfo/Makefile.in: texinfo/makeinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
61texinfo/util/Makefile.in: texinfo/util/Makefile.am texinfo/configure.in texinfo/aclocal.m4
62# Now, proceed to gcc automatically generated files
63gcc/configure: gcc/configure.in
64gcc/cstamp-h.in: gcc/configure.in gcc/acconfig.h
65gcc/config.in: gcc/cstamp-h.in
66gcc/c-parse.y: gcc/c-parse.in
67gcc/c-parse.c: gcc/c-parse.y
68gcc/c-parse.h: gcc/c-parse.c
69gcc/c-gperf.h: gcc/c-parse.gperf
70gcc/cexp.c: gcc/cexp.y
71gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
72gcc/fixinc/inclhack.sh: gcc/fixinc/inclhack.def gcc/fixinc/inclhack.tpl gcc/fixinc/hackshell.tpl
73gcc/fixinc/fixincl.sh: gcc/fixinc/inclhack.def gcc/fixinc/inclhack.tpl
74# And then, language-specific files
75gcc/cp/parse.c: gcc/cp/parse.y
76gcc/cp/parse.h: gcc/cp/parse.c
77gcc/objc/objc-parse.y: gcc/c-parse.in
78gcc/objc/objc-parse.c: gcc/objc/objc-parse.y
79gcc/java/parse.h: gcc/java/parse.y
80gcc/java/parse.c: gcc/java/parse.y gcc/java/lex.c gcc/java/parse.h gcc/java/lex.h
81gcc/java/parse-scan.c: gcc/java/parse-scan.y gcc/java/lex.c gcc/java/parse.h gcc/java/lex.h
82# And libraries, at last
83libchill/configure: libchill/configure.in
84libf2c/configure: libf2c/configure.in
85libf2c/libF77/configure: libf2c/libF77/configure.in
86libf2c/libI77/configure: libf2c/libI77/configure.in
87libf2c/libU77/configure: libf2c/libU77/configure.in
88libf2c/libU77/stamp-h.in: libf2c/libU77/configure.in libf2c/libU77/acconfig.h
89libobjc/configure: libobjc/configure.in
90EOF
91}
92
93
94# This function checks whether its first argument is newer than all
95# the other arguments.  It returns success (0) otherwise.
96is_out_of_date () {
97  test `ls -1dt ${1+"$@"} | sed 1q` != "$1"
98}
99
100
101# This function touches generated files such that the ``end'' user does
102# not have to rebuild them.
103touch_files () {
104    files_and_dependencies | while read f deps; do
105        if test -f $f && is_out_of_date "$f" $deps; then
106            echo Touching "$f"...
107            touch $f
108            if is_out_of_date "$f" $deps; then
109                # Hmm, it may have got the same timestamp as one of
110                # its touched dependencies.  Wait a second and retry
111                sleep 1
112                touch $f
113            fi
114        fi
115    done
116}
117
118
119# This functions applies a patch to an existing tree.
120apply_patch () {
121    if [ -f $1 ]; then
122        echo "Applying patch file $1"
123        case "$1" in
124        *gz)
125            gzip -d -c $1 | patch -p1 ;;
126        *)
127            cat $1 | patch -p1 ;;
128        esac
129    fi
130    echo "Adjusting file timestamps"
131    touch_files
132}
133
134# Check whether this indeed looks like a local tree.
135if [ ! -f gcc/version.c ]; then
136    echo "This does not seem to be an egcs tree!"
137    exit
138fi
139
140case "$1" in
141# First of all, check whether we are going to process a patch.
142--patch)
143    if test "$#" != 2; then
144        echo "$1" expects only one argument >&2
145        exit 1
146    fi
147    apply_patch "${2}"
148    exit $?
149    ;;
150
151--touch)
152    if test "$#" != 1; then
153        echo "$1" does not expect any argument >&2
154        exit 1
155    fi
156    touch_files
157    exit $?
158    ;;
159
160--list)
161    if test "$#" != 1; then
162        echo "$1" does not expect any argument >&2
163        exit 1
164    fi
165    files_and_dependencies | sed 's/ /: /'
166    exit $?
167    ;;
168
169--help)
170    sed -e '1,2d' -e '/^UPDATE_OPTIONS=/{i\
171\
172
173p
174}' \
175        -e '/^$/,$d' -e 's/#//' -e 's/^ //' < $0
176    exit $?
177    ;;
178
179esac
180
181# Check whether this indeed looks like a local CVS tree.
182if [ ! -d CVS ]; then
183    echo "This does not seem to be an egcs CVS tree!"
184    exit
185fi
186
187# Check command-line options
188if [ x"${1}"x = x"--nostdflags"x ]; then
189    shift
190else
191    set -- $UPDATE_OPTIONS ${1+"$@"}
192fi
193
194echo "Updating CVS tree"
195cvs -q update ${1+"$@"}
196if [ $? -ne 0 ]; then
197    echo "CVS update of full tree failed." >&2
198    exit 1
199fi
200
201echo "Adjusting file timestamps"
202touch_files
Note: See TracBrowser for help on using the repository browser.