1 | #! /bin/sh
|
---|
2 | #
|
---|
3 | # Update a local CVS tree from the GCC repository, with an emphasis
|
---|
4 | # on treating generated files correctly, so that autoconf, gperf 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/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
|
---|
30 | #
|
---|
31 | #
|
---|
32 | # (C) 1998, 1999, 2000, 2001, 2002, 2003 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.
|
---|
41 | UPDATE_OPTIONS=-Pd
|
---|
42 | # Use -P to prune empty directories.
|
---|
43 | # Use -d to create any directories that exist in the repository but not
|
---|
44 | # locally.
|
---|
45 | # Use -A to reset any sticky tags, dates, or `-k' options.
|
---|
46 |
|
---|
47 | ######## Anything below shouldn't be changed by regular users.
|
---|
48 |
|
---|
49 | # Arrange for the value of $0 to be available for functions
|
---|
50 | self=$0
|
---|
51 |
|
---|
52 | # This function prints a list of all generated files, along with their
|
---|
53 | # dependencies. Note that only one target is supported per line: the
|
---|
54 | # colon is stripped from the output.
|
---|
55 | files_and_dependencies () {
|
---|
56 | sed -e 's/ *#.*//' -e '/^$/d' -e 's/://' <<\EOF
|
---|
57 | # All automake dependencies within texinfo
|
---|
58 | # In fact, not all, since we do not care about sub-directories that
|
---|
59 | # we do not build. In particular, *.po and *.gmo are not touched.
|
---|
60 | texinfo/aclocal.m4: texinfo/configure.in texinfo/acinclude.m4
|
---|
61 | texinfo/Makefile.in: texinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
---|
62 | texinfo/configure: texinfo/configure.in texinfo/aclocal.m4
|
---|
63 | texinfo/stamp-h.in: texinfo/configure.in texinfo/aclocal.m4 texinfo/acconfig.h
|
---|
64 | texinfo/lib/Makefile.in: texinfo/lib/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
---|
65 | texinfo/makeinfo/Makefile.in: texinfo/makeinfo/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
---|
66 | texinfo/util/Makefile.in: texinfo/util/Makefile.am texinfo/configure.in texinfo/aclocal.m4
|
---|
67 | # Now, proceed to gcc automatically generated files
|
---|
68 | gcc/configure: gcc/configure.in
|
---|
69 | gcc/cstamp-h.in: gcc/configure.in gcc/acconfig.h
|
---|
70 | gcc/config.in: gcc/cstamp-h.in
|
---|
71 | gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def
|
---|
72 | gcc/intl/plural.c: gcc/intl/plural.y
|
---|
73 | # And then, language-specific files
|
---|
74 | gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def
|
---|
75 | gcc/cp/cfns.h: gcc/cp/cfns.gperf
|
---|
76 | gcc/java/keyword.h: gcc/java/keyword.gperf
|
---|
77 | gcc/ada/treeprs.ads: gcc/ada/treeprs.adt gcc/ada/sinfo.ads gcc/ada/xtreeprs.adb
|
---|
78 | gcc/ada/einfo.h: gcc/ada/einfo.ads gcc/ada/einfo.adb gcc/ada/xeinfo.adb
|
---|
79 | gcc/ada/sinfo.h: gcc/ada/sinfo.ads gcc/ada/xsinfo.adb
|
---|
80 | gcc/ada/nmake.adb: gcc/ada/sinfo.ads gcc/ada/nmake.adt gcc/ada/xnmake.adb
|
---|
81 | gcc/ada/nmake.ads: gcc/ada/sinfo.ads gcc/ada/nmake.adt gcc/ada/xnmake.adb
|
---|
82 | gcc/ada/gnat_ug_unx.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
|
---|
83 | gcc/ada/gnat_ug_vms.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
|
---|
84 | gcc/ada/gnat_ug_vxw.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
|
---|
85 | gcc/ada/gnat_ug_wnt.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
|
---|
86 | # testsuite
|
---|
87 | # Without this, _Pragma3.c can have a false negative.
|
---|
88 | gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h
|
---|
89 | # And libraries, at last
|
---|
90 | libf2c/configure: libf2c/configure.in
|
---|
91 | libf2c/libF77/configure: libf2c/libF77/configure.in
|
---|
92 | libf2c/libI77/configure: libf2c/libI77/configure.in
|
---|
93 | libf2c/libI77/stamp-h.in: libf2c/libI77/configure.in
|
---|
94 | libf2c/libI77/config.h.in: libf2c/libI77/configure.in libf2c/libI77/stamp-h.in
|
---|
95 | libf2c/libU77/configure: libf2c/libU77/configure.in
|
---|
96 | libf2c/libU77/stamp-h.in: libf2c/libU77/configure.in libf2c/libU77/acconfig.h
|
---|
97 | libobjc/configure: libobjc/configure.in
|
---|
98 | # fastjar
|
---|
99 | fastjar/aclocal.m4: fastjar/configure.in
|
---|
100 | fastjar/Makefile.in: fastjar/Makefile.am fastjar/configure.in fastjar/aclocal.m4
|
---|
101 | fastjar/configure: fastjar/configure.in fastjar/aclocal.m4
|
---|
102 | fastjar/stamp-h.in: fastjar/configure.in fastjar/aclocal.m4
|
---|
103 | boehm-gc/aclocal.m4: boehm-gc/configure.in boehm-gc/acinclude.m4
|
---|
104 | boehm-gc/Makefile.in: boehm-gc/Makefile.am boehm-gc/configure.in boehm-gc/aclocal.m4
|
---|
105 | boehm-gc/configure: boehm-gc/configure.in boehm-gc/aclocal.m4
|
---|
106 | libjava/aclocal.m4: libjava/configure.in libjava/acinclude.m4
|
---|
107 | libjava/Makefile.in: libjava/Makefile.am libjava/configure.in libjava/aclocal.m4
|
---|
108 | libjava/configure: libjava/configure.in libjava/aclocal.m4
|
---|
109 | libjava/libltdl/aclocal.m4: libjava/libltdl/configure.in libjava/libltdl/acinclude.m4
|
---|
110 | libjava/libltdl/Makefile.in: libjava/libltdl/Makefile.am libjava/libltdl/configure.in libjava/libltdl/aclocal.m4
|
---|
111 | libjava/libltdl/configure: libjava/libltdl/configure.in libjava/libltdl/aclocal.m4
|
---|
112 | libjava/libltdl/stamp-h.in: libjava/libltdl/configure.in libjava/libltdl/aclocal.m4 libjava/libltdl/acconfig.h
|
---|
113 | # Top level
|
---|
114 | Makefile.in: Makefile.tpl Makefile.def
|
---|
115 | EOF
|
---|
116 | }
|
---|
117 |
|
---|
118 |
|
---|
119 | # This function touches generated files such that the ``end'' user does
|
---|
120 | # not have to rebuild them.
|
---|
121 | touch_files () {
|
---|
122 | rm -f Makefile.$$
|
---|
123 | echo 'all: \' > Makefile.$$
|
---|
124 | files_and_dependencies | sed 's, .*, \\,' >> Makefile.$$
|
---|
125 | echo '; @true' >> Makefile.$$
|
---|
126 | files_and_dependencies | sed 's, ,: ,' >> Makefile.$$
|
---|
127 | files_and_dependencies | sed 's, .*, \\,' >> Makefile.$$
|
---|
128 | echo ':' >> Makefile.$$
|
---|
129 | echo ' @for f in $? $@; do test -f $$f || exit 0; done; \' >> Makefile.$$
|
---|
130 | echo ' echo Touching $@...; \' >> Makefile.$$
|
---|
131 | echo ' echo Touching $@... 1>&2; \' >> Makefile.$$
|
---|
132 | echo ' touch $@' >> Makefile.$$
|
---|
133 | files_and_dependencies | sed 's,[^ ]* ,,;s,$, :,' >> Makefile.$$
|
---|
134 | while ${MAKE-make} -s -f Makefile.$$ all | grep . > /dev/null; do
|
---|
135 | sleep 1
|
---|
136 | done 2>&1
|
---|
137 | rm -f Makefile.$$
|
---|
138 | }
|
---|
139 |
|
---|
140 |
|
---|
141 | # Whenever we update the tree or install a patch, we may be modifying
|
---|
142 | # this script. By re-execing it, we ensure that the appropriate
|
---|
143 | # dependencies and rules will be used.
|
---|
144 | touch_files_reexec () {
|
---|
145 | echo "Adjusting file timestamps"
|
---|
146 | exec ${CONFIG_SHELL-/bin/sh} $self --touch
|
---|
147 | }
|
---|
148 |
|
---|
149 | # This functions applies a patch to an existing tree.
|
---|
150 | apply_patch () {
|
---|
151 | if [ -f $1 ]; then
|
---|
152 | echo "Applying patch file $1"
|
---|
153 | case "$1" in
|
---|
154 | *gz)
|
---|
155 | gzip -d -c $1 | patch -p1 ;;
|
---|
156 | *bz2)
|
---|
157 | bzip2 -d -c $1 | patch -p1 ;;
|
---|
158 | *)
|
---|
159 | cat $1 | patch -p1 ;;
|
---|
160 | esac
|
---|
161 | fi
|
---|
162 | touch_files_reexec
|
---|
163 | }
|
---|
164 |
|
---|
165 | # Check whether this indeed looks like a local tree.
|
---|
166 | if [ ! -f gcc/version.c ]; then
|
---|
167 | echo "This does not seem to be a GCC tree!"
|
---|
168 | exit
|
---|
169 | fi
|
---|
170 |
|
---|
171 | case "$1" in
|
---|
172 | # First of all, check whether we are going to process a patch.
|
---|
173 | --patch)
|
---|
174 | if test "$#" != 2; then
|
---|
175 | echo "$1" expects only one argument >&2
|
---|
176 | exit 1
|
---|
177 | fi
|
---|
178 | apply_patch "${2}"
|
---|
179 | exit $?
|
---|
180 | ;;
|
---|
181 |
|
---|
182 | --touch)
|
---|
183 | if test "$#" != 1; then
|
---|
184 | echo "$1" does not expect any argument >&2
|
---|
185 | exit 1
|
---|
186 | fi
|
---|
187 | touch_files
|
---|
188 | exit $?
|
---|
189 | ;;
|
---|
190 |
|
---|
191 | --list)
|
---|
192 | if test "$#" != 1; then
|
---|
193 | echo "$1" does not expect any argument >&2
|
---|
194 | exit 1
|
---|
195 | fi
|
---|
196 | files_and_dependencies | sed 's/ /: /'
|
---|
197 | exit $?
|
---|
198 | ;;
|
---|
199 |
|
---|
200 | --help)
|
---|
201 | sed -e '1,2d' -e '/^UPDATE_OPTIONS=/{i\
|
---|
202 | \
|
---|
203 |
|
---|
204 | p
|
---|
205 | }' \
|
---|
206 | -e '/^$/,$d' -e 's/#//' -e 's/^ //' < $0
|
---|
207 | exit $?
|
---|
208 | ;;
|
---|
209 |
|
---|
210 | esac
|
---|
211 |
|
---|
212 | # Check whether this indeed looks like a local CVS tree.
|
---|
213 | if [ ! -d CVS ]; then
|
---|
214 | echo "This does not seem to be a GCC CVS tree!"
|
---|
215 | exit
|
---|
216 | fi
|
---|
217 |
|
---|
218 | # Check command-line options
|
---|
219 | if [ x"${1}"x = x"--nostdflags"x ]; then
|
---|
220 | shift
|
---|
221 | else
|
---|
222 | set -- $UPDATE_OPTIONS ${1+"$@"}
|
---|
223 | fi
|
---|
224 |
|
---|
225 | echo "Updating CVS tree"
|
---|
226 | cvs -q update ${1+"$@"}
|
---|
227 | if [ $? -ne 0 ]; then
|
---|
228 | (touch_files_reexec)
|
---|
229 | echo "CVS update of full tree failed." >&2
|
---|
230 | exit 1
|
---|
231 | fi
|
---|
232 |
|
---|
233 | {
|
---|
234 | date
|
---|
235 | TZ=UTC date
|
---|
236 | } > LAST_UPDATED
|
---|
237 | touch_files_reexec
|
---|