xref: /freebsd/contrib/tcpdump/mkdep (revision 0a7e5f1f02aad2ff5fff1c60f44c6975fd07e1d9)
1*0a7e5f1fSJoseph Mingrone#!/bin/sh -e
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 TrainaMAKE=Makefile			# default makefile name is "Makefile"
174edb46e9SPaul TrainaCC=cc				# default C compiler is "cc"
183c602fabSXin LIDEPENDENCY_CFLAG=-M		# default dependency-generation flag is -M
19ee67461eSJoseph MingroneSOURCE_DIRECTORY=.		# default source directory is the current directory
204edb46e9SPaul Traina
21ee67461eSJoseph Mingrone# No command-line flags seen yet.
22ee67461eSJoseph Mingroneflags=""
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
353c602fabSXin LI		# -m allows you to specify the dependency-generation flag
363c602fabSXin LI		-m)
373c602fabSXin LI			DEPENDENCY_CFLAG=$2
383c602fabSXin LI			shift; shift ;;
393c602fabSXin 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 ;;
45ee67461eSJoseph Mingrone
46ee67461eSJoseph Mingrone		# -s allows you to specify the source directory
47ee67461eSJoseph Mingrone		-s)
48ee67461eSJoseph Mingrone			SOURCE_DIRECTORY=$2
49ee67461eSJoseph Mingrone			shift; shift ;;
50ee67461eSJoseph Mingrone
51ee67461eSJoseph Mingrone		# other command-line flag
52ee67461eSJoseph Mingrone		-*)
53ee67461eSJoseph Mingrone			flags="$flags $1"
54ee67461eSJoseph Mingrone			shift ;;
55ee67461eSJoseph Mingrone
564edb46e9SPaul Traina		*)
574edb46e9SPaul Traina			break ;;
584edb46e9SPaul Traina	esac
594edb46e9SPaul Trainadone
604edb46e9SPaul Traina
614edb46e9SPaul Trainaif [ $# = 0 ] ; then
62ee67461eSJoseph Mingrone	echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [-s source-directory] [flags] file ...'
634edb46e9SPaul Traina	exit 1
644edb46e9SPaul Trainafi
654edb46e9SPaul Traina
66*0a7e5f1fSJoseph Mingroneif [ ! -w "$MAKE" ]; then
674edb46e9SPaul Traina	echo "mkdep: no writeable file \"$MAKE\""
684edb46e9SPaul Traina	exit 1
694edb46e9SPaul Trainafi
704edb46e9SPaul Traina
71*0a7e5f1fSJoseph MingroneTMP=${TMPDIR:-/tmp}/mkdep$$
724edb46e9SPaul Traina
73*0a7e5f1fSJoseph Mingronetrap 'rm -f "$TMP" ; exit 1' HUP INT QUIT PIPE TERM
744edb46e9SPaul Traina
75*0a7e5f1fSJoseph Mingronecp "$MAKE" "${MAKE}.bak"
764edb46e9SPaul Traina
77*0a7e5f1fSJoseph Mingronesed -e '/DO NOT DELETE THIS LINE/,$d' < "$MAKE" > "$TMP"
784edb46e9SPaul Traina
79*0a7e5f1fSJoseph Mingronecat << _EOF_ >> "$TMP"
804edb46e9SPaul Traina# DO NOT DELETE THIS LINE -- mkdep uses it.
814edb46e9SPaul Traina# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
824edb46e9SPaul Traina
834edb46e9SPaul Traina_EOF_
844edb46e9SPaul Traina
854edb46e9SPaul Traina# If your compiler doesn't have -M, add it.  If you can't, the next two
864edb46e9SPaul Traina# lines will try and replace the "cc -M".  The real problem is that this
874edb46e9SPaul Traina# hack can't deal with anything that requires a search path, and doesn't
884edb46e9SPaul Traina# even try for anything using bracket (<>) syntax.
894edb46e9SPaul Traina#
90ee67461eSJoseph Mingrone# grep -E '^#include[[:blank:]]*".*"' /dev/null $* |
914edb46e9SPaul Traina# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
924edb46e9SPaul Traina
93ee67461eSJoseph Mingrone#
94ee67461eSJoseph Mingrone# Construct a list of source files with paths relative to the source directory.
95ee67461eSJoseph Mingrone#
96ee67461eSJoseph Mingronesources=""
97*0a7e5f1fSJoseph Mingronefor srcfile in "$@"
98ee67461eSJoseph Mingronedo
99ee67461eSJoseph Mingrone	sources="$sources $SOURCE_DIRECTORY/$srcfile"
100ee67461eSJoseph Mingronedone
101ee67461eSJoseph Mingrone
1024edb46e9SPaul Traina# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
103*0a7e5f1fSJoseph Mingrone# $flags and $sources are meant to expand
104*0a7e5f1fSJoseph Mingrone# shellcheck disable=SC2086
105*0a7e5f1fSJoseph Mingrone"$CC" "$DEPENDENCY_CFLAG" $flags $sources |
1064edb46e9SPaul Trainased "
1074edb46e9SPaul Traina	s; \./; ;g
108*0a7e5f1fSJoseph Mingrone	$SED" >> "$TMP"
1094edb46e9SPaul Traina
110*0a7e5f1fSJoseph Mingronecat << _EOF_ >> "$TMP"
1114edb46e9SPaul Traina
1124edb46e9SPaul Traina# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
1134edb46e9SPaul Traina_EOF_
1144edb46e9SPaul Traina
1154edb46e9SPaul Traina# copy to preserve permissions
116*0a7e5f1fSJoseph Mingronecp "$TMP" "$MAKE"
117*0a7e5f1fSJoseph Mingronerm -f "${MAKE}.bak" "$TMP"
1184edb46e9SPaul Trainaexit 0
119