]> git.ipfire.org Git - thirdparty/gcc.git/blame - contrib/gcc_update
* gcc_update: Don't touch tradcif.c or java/parse.h.
[thirdparty/gcc.git] / contrib / gcc_update
CommitLineData
f717c7e4
GP
1#! /bin/sh
2#
b9550bfb 3# Update a local CVS tree from the GCC repository, with an emphasis
d9ddcc6a 4# on treating generated files correctly, so that autoconf, gperf et
f717c7e4
GP
5# al are not required for the ``end'' user.
6#
9b14b81c
GP
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
12acf3a9
AJ
10# are omitted.
11#
9d59f307
GP
12# If the first parameter reads --patch, the second parameter is considered
13# a patch file.
12acf3a9 14#
94b82f2b
AO
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#
9b14b81c
GP
22# Examples:
23#
b9550bfb
GP
24# contrib/gcc_update -r gcc_latest_snapshot
25# contrib/gcc_update -A
26# contrib/gcc_update --nostdflags -P -r gcc-2_95-branch gcc/testsuite
27# contrib/gcc_update --patch some-patch
28# contrib/gcc_update --touch
29# contrib/gcc_update --list
9b14b81c 30#
23a05d03 31#
b9550bfb 32# (C) 1998-2000 Free Software Foundation
23a05d03
GP
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
f717c7e4 39
9d59f307 40# Default options used when updating via CVS.
f717c7e4
GP
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
fda73e41
AO
46# Arrange for the value of $0 to be available for functions
47self=$0
f717c7e4 48
94b82f2b
AO
49# This function prints a list of all generated files, along with their
50# dependencies. Note that only one target is supported per line: the
51# colon is stripped from the output.
52files_and_dependencies () {
53 sed -e 's/ *#.*//' -e '/^$/d' -e 's/://' <<\EOF
54# All automake dependencies within texinfo
55# In fact, not all, since we do not care about sub-directories that
56# we do not build. In particular, *.po and *.gmo are not touched.
57texinfo/aclocal.m4: texinfo/configure.in texinfo/acinclude.m4
58texinfo/Makefile.in: texinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
59texinfo/configure: texinfo/configure.in texinfo/aclocal.m4
60texinfo/stamp-h.in: texinfo/configure.in texinfo/aclocal.m4 texinfo/acconfig.h
61texinfo/lib/Makefile.in: texinfo/lib/Makefile.am texinfo/configure.in texinfo/aclocal.m4
62texinfo/makeinfo/Makefile.in: texinfo/makeinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
63texinfo/util/Makefile.in: texinfo/util/Makefile.am texinfo/configure.in texinfo/aclocal.m4
64# Now, proceed to gcc automatically generated files
65gcc/configure: gcc/configure.in
1a618a5a
AO
66gcc/cstamp-h.in: gcc/configure.in gcc/acconfig.h
67gcc/config.in: gcc/cstamp-h.in
94b82f2b 68gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
c01a508e 69gcc/gcov.1: gcc/gcov.texi
94b82f2b 70# And then, language-specific files
beb039fe 71# (None at present.)
94b82f2b
AO
72# And libraries, at last
73libchill/configure: libchill/configure.in
74libf2c/configure: libf2c/configure.in
75libf2c/libF77/configure: libf2c/libF77/configure.in
76libf2c/libI77/configure: libf2c/libI77/configure.in
77libf2c/libU77/configure: libf2c/libU77/configure.in
78libf2c/libU77/stamp-h.in: libf2c/libU77/configure.in libf2c/libU77/acconfig.h
79libobjc/configure: libobjc/configure.in
80EOF
81}
82
83
84# This function checks whether its first argument is newer than all
85# the other arguments. It returns success (0) otherwise.
86is_out_of_date () {
87 test `ls -1dt ${1+"$@"} | sed 1q` != "$1"
88}
89
90
9d59f307
GP
91# This function touches generated files such that the ``end'' user does
92# not have to rebuild them.
94b82f2b
AO
93touch_files () {
94 files_and_dependencies | while read f deps; do
95 if test -f $f && is_out_of_date "$f" $deps; then
96 echo Touching "$f"...
9d59f307 97 touch $f
94b82f2b
AO
98 if is_out_of_date "$f" $deps; then
99 # Hmm, it may have got the same timestamp as one of
2d89ce6a 100 # its touched dependencies. Wait a second and retry.
94b82f2b 101 sleep 1
2d89ce6a 102 echo Touching "$f" once more...
94b82f2b
AO
103 touch $f
104 fi
9d59f307
GP
105 fi
106 done
107}
108
25a9b3e5
AO
109# Whenever we update the tree or install a patch, we may be modifying
110# this script. By re-execing it, we ensure that the appropriate
111# dependencies and rules will be used.
112touch_files_reexec () {
113 echo "Adjusting file timestamps"
fda73e41 114 exec ${CONFIG_SHELL-/bin/sh} $self --touch
12acf3a9 115}
9d59f307
GP
116
117# This functions applies a patch to an existing tree.
94b82f2b 118apply_patch () {
9d59f307
GP
119 if [ -f $1 ]; then
120 echo "Applying patch file $1"
121 case "$1" in
122 *gz)
123 gzip -d -c $1 | patch -p1 ;;
5c96cc3b
WB
124 *bz2)
125 bzip2 -d -c $1 | patch -p1 ;;
9d59f307
GP
126 *)
127 cat $1 | patch -p1 ;;
128 esac
129 fi
25a9b3e5 130 touch_files_reexec
9d59f307
GP
131}
132
9d59f307
GP
133# Check whether this indeed looks like a local tree.
134if [ ! -f gcc/version.c ]; then
b9550bfb 135 echo "This does not seem to be a GCC tree!"
9d59f307 136 exit
f717c7e4
GP
137fi
138
94b82f2b 139case "$1" in
9d59f307 140# First of all, check whether we are going to process a patch.
12acf3a9 141--patch)
94b82f2b
AO
142 if test "$#" != 2; then
143 echo "$1" expects only one argument >&2
144 exit 1
145 fi
146 apply_patch "${2}"
147 exit $?
148 ;;
149
150--touch)
151 if test "$#" != 1; then
152 echo "$1" does not expect any argument >&2
153 exit 1
154 fi
155 touch_files
156 exit $?
157 ;;
158
159--list)
160 if test "$#" != 1; then
161 echo "$1" does not expect any argument >&2
162 exit 1
163 fi
164 files_and_dependencies | sed 's/ /: /'
165 exit $?
166 ;;
167
168--help)
169 sed -e '1,2d' -e '/^UPDATE_OPTIONS=/{i\
170\
171
172p
173}' \
174 -e '/^$/,$d' -e 's/#//' -e 's/^ //' < $0
175 exit $?
176 ;;
177
178esac
9d59f307
GP
179
180# Check whether this indeed looks like a local CVS tree.
181if [ ! -d CVS ]; then
b9550bfb 182 echo "This does not seem to be a GCC CVS tree!"
9d59f307
GP
183 exit
184fi
9b14b81c 185
9d59f307 186# Check command-line options
9b14b81c
GP
187if [ x"${1}"x = x"--nostdflags"x ]; then
188 shift
189else
190 set -- $UPDATE_OPTIONS ${1+"$@"}
191fi
192
94b82f2b 193echo "Updating CVS tree"
9b14b81c 194cvs -q update ${1+"$@"}
12acf3a9 195if [ $? -ne 0 ]; then
41343a8f 196 (touch_files_reexec)
7a19950e
RL
197 echo "CVS update of full tree failed." >&2
198 exit 1
199fi
f717c7e4 200
25a9b3e5 201touch_files_reexec