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