xref: /freebsd/usr.bin/mkdep/mkdep.gcc.sh (revision 2e3507c25e42292b45a5482e116d278f5515d04d)
1#!/bin/sh -
2#
3# SPDX-License-Identifier: BSD-3-Clause
4#
5# Copyright (c) 1991, 1993
6#	The Regents of the University of California.  All rights reserved.
7#
8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions
10# are met:
11# 1. Redistributions of source code must retain the above copyright
12#    notice, this list of conditions and the following disclaimer.
13# 2. Redistributions in binary form must reproduce the above copyright
14#    notice, this list of conditions and the following disclaimer in the
15#    documentation and/or other materials provided with the distribution.
16# 3. Neither the name of the University nor the names of its contributors
17#    may be used to endorse or promote products derived from this software
18#    without specific prior written permission.
19#
20# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30# SUCH DAMAGE.
31
32D=.depend			# default dependency file is .depend
33append=0
34pflag=
35
36while :
37	do case "$1" in
38		# -a appends to the depend file
39		-a)
40			append=1
41			shift ;;
42
43		# -f allows you to select a makefile name
44		-f)
45			D=$2
46			shift; shift ;;
47
48		# the -p flag produces "program: program.c" style dependencies
49		# so .o's don't get produced
50		-p)
51			pflag=p
52			shift ;;
53		*)
54			break ;;
55	esac
56done
57
58case $# in 0)
59	echo 'usage: mkdep [-ap] [-f file] [flags] file ...' >&2
60	exit 1;;
61esac
62
63TMP=_mkdep$$
64trap 'rm -f $TMP ; trap 2 ; kill -2 $$' 1 2 3 13 15
65trap 'rm -f $TMP' 0
66
67# For C sources, mkdep must use exactly the same cpp and predefined flags
68# as the compiler would.  This is easily arranged by letting the compiler
69# pick the cpp.  mkdep must be told the cpp to use for exceptional cases.
70CC=${CC-"cc"}
71MKDEP_CPP=${MKDEP_CPP-"${CC} -E"}
72MKDEP_CPP_OPTS=${MKDEP_CPP_OPTS-"-M"};
73
74echo "# $@" > $TMP	# store arguments for debugging
75
76if $MKDEP_CPP $MKDEP_CPP_OPTS "$@" >> $TMP; then :
77else
78	echo 'mkdep: compile failed' >&2
79	exit 1
80fi
81
82case x$pflag in
83	x) case $append in
84		0) sed -e 's; \./; ;g' < $TMP >  $D;;
85		*) sed -e 's; \./; ;g' < $TMP >> $D;;
86	   esac
87	;;
88	*) case $append in
89		0) sed -e 's;\.o:;:;' -e 's; \./; ;g' < $TMP >  $D;;
90		*) sed -e 's;\.o:;:;' -e 's; \./; ;g' < $TMP >> $D;;
91	   esac
92	;;
93esac
94
95exit $?
96