xref: /freebsd/contrib/tcpdump/mkdep (revision 3c602fabf9b894ff79f08a80cbb7ad3b1eb84e62)
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"
21*3c602fabSXin LIDEPENDENCY_CFLAG=-M		# default dependency-generation flag is -M
224edb46e9SPaul Traina
234edb46e9SPaul Trainawhile :
244edb46e9SPaul Traina	do case "$1" in
254edb46e9SPaul Traina		# -c allows you to specify the C compiler
264edb46e9SPaul Traina		-c)
274edb46e9SPaul Traina			CC=$2
284edb46e9SPaul Traina			shift; shift ;;
294edb46e9SPaul Traina
304edb46e9SPaul Traina		# -f allows you to select a makefile name
314edb46e9SPaul Traina		-f)
324edb46e9SPaul Traina			MAKE=$2
334edb46e9SPaul Traina			shift; shift ;;
344edb46e9SPaul Traina
35*3c602fabSXin LI		# -m allows you to specify the dependency-generation flag
36*3c602fabSXin LI		-m)
37*3c602fabSXin LI			DEPENDENCY_CFLAG=$2
38*3c602fabSXin LI			shift; shift ;;
39*3c602fabSXin LI
404edb46e9SPaul Traina		# the -p flag produces "program: program.c" style dependencies
414edb46e9SPaul Traina		# so .o's don't get produced
424edb46e9SPaul Traina		-p)
434edb46e9SPaul Traina			SED='s;\.o;;'
444edb46e9SPaul Traina			shift ;;
454edb46e9SPaul Traina		*)
464edb46e9SPaul Traina			break ;;
474edb46e9SPaul Traina	esac
484edb46e9SPaul Trainadone
494edb46e9SPaul Traina
504edb46e9SPaul Trainaif [ $# = 0 ] ; then
51*3c602fabSXin LI	echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [flags] file ...'
524edb46e9SPaul Traina	exit 1
534edb46e9SPaul Trainafi
544edb46e9SPaul Traina
554edb46e9SPaul Trainaif [ ! -w $MAKE ]; then
564edb46e9SPaul Traina	echo "mkdep: no writeable file \"$MAKE\""
574edb46e9SPaul Traina	exit 1
584edb46e9SPaul Trainafi
594edb46e9SPaul Traina
604edb46e9SPaul TrainaTMP=/tmp/mkdep$$
614edb46e9SPaul Traina
624edb46e9SPaul Trainatrap 'rm -f $TMP ; exit 1' 1 2 3 13 15
634edb46e9SPaul Traina
644edb46e9SPaul Trainacp $MAKE ${MAKE}.bak
654edb46e9SPaul Traina
664edb46e9SPaul Trainased -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
674edb46e9SPaul Traina
684edb46e9SPaul Trainacat << _EOF_ >> $TMP
694edb46e9SPaul Traina# DO NOT DELETE THIS LINE -- mkdep uses it.
704edb46e9SPaul Traina# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
714edb46e9SPaul Traina
724edb46e9SPaul Traina_EOF_
734edb46e9SPaul Traina
744edb46e9SPaul Traina# If your compiler doesn't have -M, add it.  If you can't, the next two
754edb46e9SPaul Traina# lines will try and replace the "cc -M".  The real problem is that this
764edb46e9SPaul Traina# hack can't deal with anything that requires a search path, and doesn't
774edb46e9SPaul Traina# even try for anything using bracket (<>) syntax.
784edb46e9SPaul Traina#
794edb46e9SPaul Traina# egrep '^#include[ 	]*".*"' /dev/null $* |
804edb46e9SPaul Traina# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
814edb46e9SPaul Traina
824edb46e9SPaul Traina# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
83*3c602fabSXin LI$CC $DEPENDENCY_CFLAG $* |
844edb46e9SPaul Trainased "
854edb46e9SPaul Traina	s; \./; ;g
864edb46e9SPaul Traina	$SED" |
874edb46e9SPaul Trainaawk '{
884edb46e9SPaul Traina	if ($1 != prev) {
894edb46e9SPaul Traina		if (rec != "")
904edb46e9SPaul Traina			print rec;
914edb46e9SPaul Traina		rec = $0;
924edb46e9SPaul Traina		prev = $1;
934edb46e9SPaul Traina	}
944edb46e9SPaul Traina	else {
954edb46e9SPaul Traina		if (length(rec $2) > 78) {
964edb46e9SPaul Traina			print rec;
974edb46e9SPaul Traina			rec = $0;
984edb46e9SPaul Traina		}
994edb46e9SPaul Traina		else
1004edb46e9SPaul Traina			rec = rec " " $2
1014edb46e9SPaul Traina	}
1024edb46e9SPaul Traina}
1034edb46e9SPaul TrainaEND {
1044edb46e9SPaul Traina	print rec
1054edb46e9SPaul Traina}' >> $TMP
1064edb46e9SPaul Traina
1074edb46e9SPaul Trainacat << _EOF_ >> $TMP
1084edb46e9SPaul Traina
1094edb46e9SPaul Traina# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
1104edb46e9SPaul Traina_EOF_
1114edb46e9SPaul Traina
1124edb46e9SPaul Traina# copy to preserve permissions
1134edb46e9SPaul Trainacp $TMP $MAKE
1144edb46e9SPaul Trainarm -f ${MAKE}.bak $TMP
1154edb46e9SPaul Trainaexit 0
116