summaryrefslogtreecommitdiffstats
path: root/make/mkdep.in
blob: 9699b407b1316b89a8caa3cbf00b78a44fab8c91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/sh -

##
## Modified to handle -vpath <path> option by Michael Graff, ISC.
## The purpose of this is to allow this script to run outside of the
## source directory, for instance when running configure with
##   ../bind9-mainline/configure
## and still have "make depend" work.
##

# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
# Copyright (c) 1987 Regents of the University of California.
# Copyright (c) 1993 by Digital Equipment Corporation.
#
# SPDX-License-Identifier: MPL-2.0
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0.  If a copy of the MPL was not distributed with this
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.

#
#	@(#)mkdep.sh	5.12 (Berkeley) 6/30/88
#

MAKE=Makefile			# default makefile name is "Makefile"

while :
	do case "$1" in
		# -vpath allows one to select a virtual path for .c files
		-vpath)
			VPATH=$2;
			shift; shift ;;
		# -f allows you to select a makefile name
		-f)
			MAKE=$2
			shift; shift ;;

		# the -p flag produces "program: program.c" style dependencies
		# so .o's don't get produced
		-p)
			SED='s;\.o;;'
			shift ;;
		*)
			break ;;
	esac
done

if [ $# = 0 ] ; then
	echo 'usage: mkdep [-vpath path] [-p] [-f makefile] [flags] file ...'
	exit 1
fi

if [ ! -w $MAKE ]; then
	echo "mkdep: no writeable file \"$MAKE\""
	exit 1
fi

TMP=mkdep$$

trap 'rm -f $TMP ; exit 1' 1 2 3 13 15

cp $MAKE ${MAKE}.bak

sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP

cat << _EOF_ >> $TMP
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.

_EOF_

# If your compiler doesn't have -M, add it.  If you can't, the next two
# lines will try and replace the "cc -M".  The real problem is that this
# hack can't deal with anything that requires a search path, and doesn't
# even try for anything using bracket (<>) syntax.
#
# egrep '^#include[ 	]*".*"' /dev/null $* |
# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |

if [ X"${VPATH}" != X ] ; then
    for arg in $* ; do
	case "$arg" in
	    -*)
		newargs="$newargs $arg"
		;;
	    *)
		newargs="$newargs $VPATH/$arg"
		;;
	esac
    done
else
    newargs="$*";
fi

MKDEPPROG="@MKDEPPROG@"
if [ X"${MKDEPPROG}" != X ]; then
    @SHELL@ -c "${MKDEPPROG} ${newargs}"
else
    @MKDEPCC@ @MKDEPCFLAGS@ ${newargs} |
    sed "
	s; \\./; ;g
	s; \\\\; ;g
	@LIBTOOL_MKDEP_SED@
	$SED" |
    awk '$1 ~ /:$/ {
		if (rec != "")
			 print rec;
		if (NF == 1)
			rec = $1;
		else
			rec = $1 " " $2;
		for (i = 3; i <= NF; i++) {
			if (length(rec $i) > 76) {
				print rec " \\";
				rec = "    " $i;
			} else {
				rec = rec " " $i;
			}
		}
		next;
	}
	{
		for (i = 1; i <= NF; i++) {
			if (length(rec $i) > 76) {
				print rec, "\\";
				rec =  "    " $i;
			} else {
				rec = rec " " $i;
			}
		}
	}
    END {
	print rec
    }' >> $TMP
fi

cat << _EOF_ >> $TMP

# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
_EOF_

# copy to preserve permissions
cp $TMP $MAKE
rm -f ${MAKE}.bak $TMP
exit 0