xref: /aosp_15_r20/external/tcpdump/mkdep (revision 05b00f6010a2396e3db2409989fc67270046269f)
1*05b00f60SXin Li#!/bin/sh -
2*05b00f60SXin Li#
3*05b00f60SXin Li# Copyright (c) 1994, 1996
4*05b00f60SXin Li#	The Regents of the University of California.  All rights reserved.
5*05b00f60SXin Li#
6*05b00f60SXin Li# Redistribution and use in source and binary forms are permitted
7*05b00f60SXin Li# provided that this notice is preserved and that due credit is given
8*05b00f60SXin Li# to the University of California at Berkeley. The name of the University
9*05b00f60SXin Li# may not be used to endorse or promote products derived from this
10*05b00f60SXin Li# software without specific prior written permission. This software
11*05b00f60SXin Li# is provided ``as is'' without express or implied warranty.
12*05b00f60SXin Li#
13*05b00f60SXin Li#	@(#)mkdep.sh	5.11 (Berkeley) 5/5/88
14*05b00f60SXin Li#
15*05b00f60SXin Li
16*05b00f60SXin LiMAKE=Makefile			# default makefile name is "Makefile"
17*05b00f60SXin LiCC=cc				# default C compiler is "cc"
18*05b00f60SXin LiDEPENDENCY_CFLAG=-M		# default dependency-generation flag is -M
19*05b00f60SXin LiSOURCE_DIRECTORY=.		# default source directory is the current directory
20*05b00f60SXin Li
21*05b00f60SXin Li# No command-line flags seen yet.
22*05b00f60SXin Liflags=""
23*05b00f60SXin Liwhile :
24*05b00f60SXin Li	do case "$1" in
25*05b00f60SXin Li		# -c allows you to specify the C compiler
26*05b00f60SXin Li		-c)
27*05b00f60SXin Li			CC=$2
28*05b00f60SXin Li			shift; shift ;;
29*05b00f60SXin Li
30*05b00f60SXin Li		# -f allows you to select a makefile name
31*05b00f60SXin Li		-f)
32*05b00f60SXin Li			MAKE=$2
33*05b00f60SXin Li			shift; shift ;;
34*05b00f60SXin Li
35*05b00f60SXin Li		# -m allows you to specify the dependency-generation flag
36*05b00f60SXin Li		-m)
37*05b00f60SXin Li			DEPENDENCY_CFLAG=$2
38*05b00f60SXin Li			shift; shift ;;
39*05b00f60SXin Li
40*05b00f60SXin Li		# the -p flag produces "program: program.c" style dependencies
41*05b00f60SXin Li		# so .o's don't get produced
42*05b00f60SXin Li		-p)
43*05b00f60SXin Li			SED='s;\.o;;'
44*05b00f60SXin Li			shift ;;
45*05b00f60SXin Li
46*05b00f60SXin Li		# -s allows you to specify the source directory
47*05b00f60SXin Li		-s)
48*05b00f60SXin Li			SOURCE_DIRECTORY=$2
49*05b00f60SXin Li			shift; shift ;;
50*05b00f60SXin Li
51*05b00f60SXin Li		# other command-line flag
52*05b00f60SXin Li		-*)
53*05b00f60SXin Li			flags="$flags $1"
54*05b00f60SXin Li			shift ;;
55*05b00f60SXin Li
56*05b00f60SXin Li		*)
57*05b00f60SXin Li			break ;;
58*05b00f60SXin Li	esac
59*05b00f60SXin Lidone
60*05b00f60SXin Li
61*05b00f60SXin Liif [ $# = 0 ] ; then
62*05b00f60SXin Li	echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [-s source-directory] [flags] file ...'
63*05b00f60SXin Li	exit 1
64*05b00f60SXin Lifi
65*05b00f60SXin Li
66*05b00f60SXin Liif [ ! -w $MAKE ]; then
67*05b00f60SXin Li	echo "mkdep: no writeable file \"$MAKE\""
68*05b00f60SXin Li	exit 1
69*05b00f60SXin Lifi
70*05b00f60SXin Li
71*05b00f60SXin LiTMP=/tmp/mkdep$$
72*05b00f60SXin Li
73*05b00f60SXin Litrap 'rm -f $TMP ; exit 1' 1 2 3 13 15
74*05b00f60SXin Li
75*05b00f60SXin Licp $MAKE ${MAKE}.bak
76*05b00f60SXin Li
77*05b00f60SXin Lised -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
78*05b00f60SXin Li
79*05b00f60SXin Licat << _EOF_ >> $TMP
80*05b00f60SXin Li# DO NOT DELETE THIS LINE -- mkdep uses it.
81*05b00f60SXin Li# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
82*05b00f60SXin Li
83*05b00f60SXin Li_EOF_
84*05b00f60SXin Li
85*05b00f60SXin Li# If your compiler doesn't have -M, add it.  If you can't, the next two
86*05b00f60SXin Li# lines will try and replace the "cc -M".  The real problem is that this
87*05b00f60SXin Li# hack can't deal with anything that requires a search path, and doesn't
88*05b00f60SXin Li# even try for anything using bracket (<>) syntax.
89*05b00f60SXin Li#
90*05b00f60SXin Li# grep -E '^#include[[:blank:]]*".*"' /dev/null $* |
91*05b00f60SXin Li# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
92*05b00f60SXin Li
93*05b00f60SXin Li#
94*05b00f60SXin Li# Construct a list of source files with paths relative to the source directory.
95*05b00f60SXin Li#
96*05b00f60SXin Lisources=""
97*05b00f60SXin Lifor srcfile in $*
98*05b00f60SXin Lido
99*05b00f60SXin Li	sources="$sources $SOURCE_DIRECTORY/$srcfile"
100*05b00f60SXin Lidone
101*05b00f60SXin Li
102*05b00f60SXin Li# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
103*05b00f60SXin Li$CC $DEPENDENCY_CFLAG $flags $sources |
104*05b00f60SXin Lised "
105*05b00f60SXin Li	s; \./; ;g
106*05b00f60SXin Li	$SED" >> $TMP
107*05b00f60SXin Li
108*05b00f60SXin Licat << _EOF_ >> $TMP
109*05b00f60SXin Li
110*05b00f60SXin Li# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
111*05b00f60SXin Li_EOF_
112*05b00f60SXin Li
113*05b00f60SXin Li# copy to preserve permissions
114*05b00f60SXin Licp $TMP $MAKE
115*05b00f60SXin Lirm -f ${MAKE}.bak $TMP
116*05b00f60SXin Liexit 0
117