Home | History | Annotate | Line # | Download | only in contrib
      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