xref: /freebsd/contrib/tcpdump/mkdep (revision 4edb46e9a85ca35d3bed523171d11a748861ce82)
14edb46e9SPaul Traina#!/bin/sh -
24edb46e9SPaul Traina#
34edb46e9SPaul Traina# Copyright (c) 1994, 1996
44edb46e9SPaul Traina#	The Regents of the University of California.  All rights reserved.
54edb46e9SPaul Traina#
64edb46e9SPaul Traina# Redistribution and use in source and binary forms are permitted
74edb46e9SPaul Traina# provided that this notice is preserved and that due credit is given
84edb46e9SPaul Traina# to the University of California at Berkeley. The name of the University
94edb46e9SPaul Traina# may not be used to endorse or promote products derived from this
104edb46e9SPaul Traina# software without specific prior written permission. This software
114edb46e9SPaul Traina# is provided ``as is'' without express or implied warranty.
124edb46e9SPaul Traina#
134edb46e9SPaul Traina#	@(#)mkdep.sh	5.11 (Berkeley) 5/5/88
144edb46e9SPaul Traina#
154edb46e9SPaul Traina
164edb46e9SPaul TrainaPATH=/bin:/usr/bin:/usr/ucb:/usr/local:/usr/local/bin
174edb46e9SPaul Trainaexport PATH
184edb46e9SPaul Traina
194edb46e9SPaul TrainaMAKE=Makefile			# default makefile name is "Makefile"
204edb46e9SPaul TrainaCC=cc				# default C compiler is "cc"
214edb46e9SPaul Traina
224edb46e9SPaul Trainawhile :
234edb46e9SPaul Traina	do case "$1" in
244edb46e9SPaul Traina		# -c allows you to specify the C compiler
254edb46e9SPaul Traina		-c)
264edb46e9SPaul Traina			CC=$2
274edb46e9SPaul Traina			shift; shift ;;
284edb46e9SPaul Traina
294edb46e9SPaul Traina		# -f allows you to select a makefile name
304edb46e9SPaul Traina		-f)
314edb46e9SPaul Traina			MAKE=$2
324edb46e9SPaul Traina			shift; shift ;;
334edb46e9SPaul Traina
344edb46e9SPaul Traina		# the -p flag produces "program: program.c" style dependencies
354edb46e9SPaul Traina		# so .o's don't get produced
364edb46e9SPaul Traina		-p)
374edb46e9SPaul Traina			SED='s;\.o;;'
384edb46e9SPaul Traina			shift ;;
394edb46e9SPaul Traina		*)
404edb46e9SPaul Traina			break ;;
414edb46e9SPaul Traina	esac
424edb46e9SPaul Trainadone
434edb46e9SPaul Traina
444edb46e9SPaul Trainaif [ $# = 0 ] ; then
454edb46e9SPaul Traina	echo 'usage: mkdep [-p] [-c cc] [-f makefile] [flags] file ...'
464edb46e9SPaul Traina	exit 1
474edb46e9SPaul Trainafi
484edb46e9SPaul Traina
494edb46e9SPaul Trainaif [ ! -w $MAKE ]; then
504edb46e9SPaul Traina	echo "mkdep: no writeable file \"$MAKE\""
514edb46e9SPaul Traina	exit 1
524edb46e9SPaul Trainafi
534edb46e9SPaul Traina
544edb46e9SPaul TrainaTMP=/tmp/mkdep$$
554edb46e9SPaul Traina
564edb46e9SPaul Trainatrap 'rm -f $TMP ; exit 1' 1 2 3 13 15
574edb46e9SPaul Traina
584edb46e9SPaul Trainacp $MAKE ${MAKE}.bak
594edb46e9SPaul Traina
604edb46e9SPaul Trainased -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
614edb46e9SPaul Traina
624edb46e9SPaul Trainacat << _EOF_ >> $TMP
634edb46e9SPaul Traina# DO NOT DELETE THIS LINE -- mkdep uses it.
644edb46e9SPaul Traina# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
654edb46e9SPaul Traina
664edb46e9SPaul Traina_EOF_
674edb46e9SPaul Traina
684edb46e9SPaul Traina# If your compiler doesn't have -M, add it.  If you can't, the next two
694edb46e9SPaul Traina# lines will try and replace the "cc -M".  The real problem is that this
704edb46e9SPaul Traina# hack can't deal with anything that requires a search path, and doesn't
714edb46e9SPaul Traina# even try for anything using bracket (<>) syntax.
724edb46e9SPaul Traina#
734edb46e9SPaul Traina# egrep '^#include[ 	]*".*"' /dev/null $* |
744edb46e9SPaul Traina# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
754edb46e9SPaul Traina
764edb46e9SPaul Traina# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
774edb46e9SPaul Traina$CC -M $* |
784edb46e9SPaul Trainased "
794edb46e9SPaul Traina	s; \./; ;g
804edb46e9SPaul Traina	$SED" |
814edb46e9SPaul Trainaawk '{
824edb46e9SPaul Traina	if ($1 != prev) {
834edb46e9SPaul Traina		if (rec != "")
844edb46e9SPaul Traina			print rec;
854edb46e9SPaul Traina		rec = $0;
864edb46e9SPaul Traina		prev = $1;
874edb46e9SPaul Traina	}
884edb46e9SPaul Traina	else {
894edb46e9SPaul Traina		if (length(rec $2) > 78) {
904edb46e9SPaul Traina			print rec;
914edb46e9SPaul Traina			rec = $0;
924edb46e9SPaul Traina		}
934edb46e9SPaul Traina		else
944edb46e9SPaul Traina			rec = rec " " $2
954edb46e9SPaul Traina	}
964edb46e9SPaul Traina}
974edb46e9SPaul TrainaEND {
984edb46e9SPaul Traina	print rec
994edb46e9SPaul Traina}' >> $TMP
1004edb46e9SPaul Traina
1014edb46e9SPaul Trainacat << _EOF_ >> $TMP
1024edb46e9SPaul Traina
1034edb46e9SPaul Traina# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
1044edb46e9SPaul Traina_EOF_
1054edb46e9SPaul Traina
1064edb46e9SPaul Traina# copy to preserve permissions
1074edb46e9SPaul Trainacp $TMP $MAKE
1084edb46e9SPaul Trainarm -f ${MAKE}.bak $TMP
1094edb46e9SPaul Trainaexit 0
110