host-mkdep.in revision 1.10       1 #!@BSHELL@ -
      2 #
      3 #	$NetBSD: host-mkdep.in,v 1.10 2003/06/11 13:20:38 christos Exp $
      4 #
      5 # Copyright (c) 1991, 1993
      6 #	The Regents of the University of California.  All rights reserved.
      7 #
      8 # Redistribution and use in source and binary forms, with or without
      9 # modification, are permitted provided that the following conditions
     10 # are met:
     11 # 1. Redistributions of source code must retain the above copyright
     12 #    notice, this list of conditions and the following disclaimer.
     13 # 2. Redistributions in binary form must reproduce the above copyright
     14 #    notice, this list of conditions and the following disclaimer in the
     15 #    documentation and/or other materials provided with the distribution.
     16 # 3. All advertising materials mentioning features or use of this software
     17 #    must display the following acknowledgement:
     18 #	This product includes software developed by the University of
     19 #	California, Berkeley and its contributors.
     20 # 4. Neither the name of the University nor the names of its contributors
     21 #    may be used to endorse or promote products derived from this software
     22 #    without specific prior written permission.
     23 #
     24 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     25 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     26 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     27 # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     28 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     29 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     30 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     31 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     32 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     33 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     34 # SUCH DAMAGE.
     35 #
     36 #	@(#)mkdep.old.compiler	8.1 (Berkeley) 6/6/93
     37 #
     38 
     39 APPEND=false
     40 CPPFLAGS=
     41 NEWEXT=.o
     42 OUTFILE=.depend
     43 SRCS=
     44 USAGE="Usage: $0 [-a] [-p] [-f makefile] [flags] file ..."
     45 
     46 while [ $# -gt 0 ]; do
     47 	case "$1" in
     48 	-a)	APPEND=true
     49 		shift
     50 		;;
     51 
     52 	-f)	OUTFILE=$2
     53 		shift 2
     54 		;;
     55 
     56 	-p)	NEWEXT=
     57 		shift
     58 		;;
     59 
     60 	*)	break
     61 		;;
     62 	esac
     63 done
     64 
     65 if [ $# = 0 ]; then
     66 	echo "$USAGE" 1>&2
     67 	exit 1
     68 fi
     69 
     70 while [ $# -gt 0 ]; do
     71 	case "$1" in
     72 	-L)			# takes an arg, but ignored
     73 			shift 2
     74 			;;
     75 
     76 	-c|-[lLMOW]*)		# takes no extra args
     77 			shift
     78 			;;
     79 
     80 	-[IDU]*)
     81 			CPPFLAGS="$CPPFLAGS $1"
     82 			shift
     83 			;;
     84 
     85 	-[IDU]|-include|-isystem)
     86 			CPPFLAGS="$CPPFLAGS $1 $2"
     87 			shift 2
     88 			;;
     89 
     90 	-no-cpp-precomp)	# This is a Darwin-specific option.
     91 			CPPFLAGS="$CPPFLAGS $1"
     92 			shift
     93 			;;
     94 
     95 	-nostdinc*)	# This is a gcc/g++ ism; ignore if not gcc/g++
     96 			case "@CFLAGS@" in
     97 			*-O2*)	# Autoconf puts -O2 when gcc only
     98 				CPPFLAGS="$CPPFLAGS $1"
     99 				;;
    100 			esac	
    101 			shift
    102 			;;
    103 
    104 	-*)		
    105 			echo "$0: Unknown option: $1" 1>&2 # all other -options
    106 			exit 1
    107 			;;
    108 
    109 	*)	
    110 			SRCS="$SRCS $1"	# source file
    111 			shift
    112 			;;
    113 	esac
    114 done
    115 
    116 if [ -z "$SRCS" ]; then
    117 	echo "$USAGE" 1>&2
    118 	exit 1
    119 fi
    120 
    121 TMP=/tmp/mkdep$$
    122 rm -f $TMP
    123 
    124 trap 'rm -f $TMP; exit 1' 1 2 3 13 15
    125 
    126 for f in $SRCS; do
    127 	@CPP@ $CPPFLAGS $f | @AWK@ '
    128 		BEGIN {
    129 			objfile = "'$f'"
    130 			sub(/^.*\//, "", objfile)
    131 			sub(/\.(c|cc|m)$/, "'$NEWEXT'", objfile)
    132 		}
    133 		/^#/ {
    134 			# Be as tolerant as possible.
    135 			sub(/^#(line)? [ 0-9]*\"?/, "")
    136 			sub(/^#(pragma).*/, "")
    137 			sub(/^<.*/, "")
    138 			sub(/\".*$/, "")
    139 			sub(/ [ 0-9]*$/, "")
    140 
    141 			if ($0 in seenfiles) next
    142 			if ($0 ~ /y.tab.c/) next
    143 
    144 			seenfiles[$0] = 1
    145 			print objfile ": " $0
    146 		}
    147 	' >> $TMP
    148 done
    149 
    150 if $APPEND; then
    151 	cat $TMP >> $OUTFILE
    152 else
    153 	cat $TMP > $OUTFILE
    154 fi
    155 
    156 rm -f $TMP
    157 exit 0
    158