]>
Commit | Line | Data |
---|---|---|
e63ea00c RW |
1 | #! /bin/sh |
2 | # | |
3 | # Check for accurate dependencies in gcc/Makefile.in. | |
4 | # | |
a945c346 | 5 | # Copyright (C) 2008-2024 Free Software Foundation, Inc. |
e63ea00c RW |
6 | # Written by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>. |
7 | # | |
8 | # This script is Free Software, and it can be copied, distributed and | |
9 | # modified as defined in the GNU General Public License. A copy of | |
10 | # its license can be downloaded from http://www.gnu.org/copyleft/gpl.html | |
11 | # | |
12 | # Start this script in an up to date build-tree/gcc directory. | |
13 | # Using it in stage1 only works if the host compiler is GCC. | |
14 | ||
15 | # To continue an interrupted check, make sure there are no *.o.backup | |
16 | # files lying around (i.e., move them back to their original name), | |
17 | # and set $start_after to the name of the last object that should be skipped. | |
18 | start_after= | |
19 | ||
20 | # Skip some objects unconditionally; make sure each name in this list is | |
21 | # surrounded by spaces. | |
c85fd25b | 22 | skip=" crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o crtfastmath.o crtprec64.o crtprec80.o crtprec32.o ecrti.o ecrtn.o ncrti.o ncrtn.o " |
e63ea00c RW |
23 | |
24 | # Files which show up as dependencies other than through unconditional #include. | |
25 | # This is an egrep pattern. | |
26 | hidden_dep_files='(BASE-VER|DATESTAMP|DEV-PHASE|Makefile|xcoffout\.h|basic-block\.h|bconfig\.h)$' | |
27 | ||
28 | : ${MAKE=make} | |
29 | : ${EGREP="grep -E"} | |
30 | ||
31 | # ------------------------------------------------------------------------- | |
32 | # There should be no need for changes beyond this point. | |
33 | ||
34 | set -e | |
35 | st=0 | |
36 | ||
c85fd25b | 37 | if test -f c-family/c-common.o; then :; else |
e63ea00c RW |
38 | echo "$0: rerun in an up to date build-tree/gcc directory" >&2 |
39 | exit 1 | |
40 | fi | |
41 | ||
42 | for obj in *.o | |
43 | do | |
44 | if test -n "$start_after"; then | |
45 | if test $obj = $start_after; then | |
46 | start_after= | |
47 | fi | |
48 | continue | |
49 | fi | |
50 | case $skip in *\ $obj\ *) continue ;; esac | |
51 | ||
52 | mv -f $obj $obj.backup | |
53 | ${MAKE} $obj CFLAGS='-MM -MF depfile' | |
54 | mv -f $obj.backup $obj | |
55 | ${MAKE} -t | |
56 | LC_ALL=C ${MAKE} -d $obj >make-d-log | |
57 | hdrs=`cat depfile` | |
58 | for hdr in $hdrs; do | |
59 | case $hdr in | |
60 | *: | *.o | \\ | /* ) ;; | |
61 | *) | |
62 | echo $hdr ;; | |
63 | esac | |
64 | done < depfile | | |
65 | LC_ALL=C sort -u > hdrs | |
66 | ||
67 | ||
68 | sed -n '/.*Prerequisite..\([^ ]*\). is newer than target .'"$obj"'.*/s//\1/p' \ | |
69 | < make-d-log | | |
70 | LC_ALL=C sort -u > not-up-to-date | |
71 | if test -s not-up-to-date; then | |
72 | st=1 | |
73 | echo "$0: error: prerequisites for $obj are not up to date:" >&2 | |
74 | cat not-up-to-date >&2 | |
75 | fi | |
76 | sed -n '/.*Prerequisite..\([^ ]*\). is older than target .'"$obj"'.*/s//\1/p' \ | |
77 | < make-d-log | | |
78 | LC_ALL=C sort -u > deps | |
79 | missing_deps=`LC_ALL=C join -v 1 hdrs deps` | |
80 | unneeded_deps=`LC_ALL=C join -v 2 hdrs deps | $EGREP -v "$hidden_dep_files" || :` | |
81 | if test -n "$missing_deps"; then | |
82 | st=1 | |
83 | echo "missing deps for $obj:" | |
84 | echo "$missing_deps" | sed 's/^/ /' | |
85 | fi | |
86 | if test -n "$unneeded_deps"; then | |
87 | # unneeded dependencies are not a big problem, so they cause no failure. | |
88 | echo "unneeded deps for $obj:" | |
89 | echo "$unneeded_deps" | sed 's/^/ /' | |
90 | fi | |
91 | done | |
92 | exit $st | |
93 | ||
94 | # vi:sw=2: |