Expand PMF_FN_* macros.
[netbsd-mini2440.git] / tools / host-mkdep / host-mkdep.in
blob4a1acba093a31a1e13305777b8acf8f074043df4
1 #!@BSHELL@ -
3 #       $NetBSD: host-mkdep.in,v 1.16 2005/09/01 21:51:11 jwise Exp $
5 # Copyright (c) 1991, 1993
6 #       The Regents of the University of California.  All rights reserved.
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. All advertising materials mentioning features or use of this software
17 #    must display the following acknowledgement:
18 #       This product includes software developed by the University of
19 #       California, Berkeley and its contributors.
20 # 4. Neither the name of the University nor the names of its contributors
21 #    may be used to endorse or promote products derived from this software
22 #    without specific prior written permission.
24 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 # SUCH DAMAGE.
36 #       @(#)mkdep.old.compiler  8.1 (Berkeley) 6/6/93
39 APPEND=false
40 MERGE=false
41 OPTIONAL=false
42 AWK_OPTIONAL=
43 QUIET=false
44 CPPFLAGS=
45 NEWEXT=.o
46 OUTFILE=.depend
47 SRCS=
49 usage()
51         echo "Usage: $0 [-adopq] [-s .suffixes] [-f .depend] -- [flags] file ..." >&2
52         exit 1
55 set_objlist()
57         if [ -n "$NEWEXT" ]; then
58                 oifs="$IFS"
59                 IFS=" ,"
60                 set -- $NEWEXT
61                 IFS="$oifs"
62                 objlist=
63                 for suf in "$@"; do
64                         objlist="$objlist${objlist:+ }$file$suf"
65                 done
66         else
67                 objlist="$file"
68         fi
71 # A getopt compatible command line parser in shell comands.
72 # (don't trust the shell builtin getopts to be in a known state on error)
73 while [ $# -gt 0 ]; do
74         option="${1#-}"
75         [ "$option" = "$1" -o -z "$option" ] && break
76         while
77                 optarg="${option#?}"
78                 option="${option%$optarg}"
80                 case "-$option" in
81                 -a)     APPEND=true;;
82                 -d)     MERGE=true;;
83                 -o)     OPTIONAL=true; AWK_OPTIONAL='print ".OPTIONAL:" $0';;
84                 -p)     NEWEXT=;;
85                 -q)     QUIET=true;;
87                 -[fs])  # Options with arguments
88                         [ -z "$optarg" ] && {
89                                 [ $# = 1 ] && usage
90                                 shift
91                                 optarg="$1"
92                         }
93                         case "-$option" in
94                         -f)     OUTFILE="$optarg";;
95                         -s)     NEWEXT="$optarg";;
96                         esac
97                         optarg=
98                         ;;
100                 --)     [ -z "$optarg" ] && shift
101                         break 2
102                         ;;
104                 *)      $MERGE && usage
105                         break 2;
106                         ;;
107                 esac
108                 [ -n "$optarg" ]
109         do
110                 option="$optarg"
111         done
112         shift
113 done
115 [ $# = 0 ] && usage
117 if $MERGE; then
118         SRCS="$*"
119 else
120         while [ $# -gt 0 ]; do
121                 case "$1" in
122                 -L)                     # takes an arg, but ignored
123                                 shift 2
124                                 ;;
126                 -c|-[lLMOW]*)           # takes no extra args
127                                 shift
128                                 ;;
130                 -[IDU]*)
131                                 CPPFLAGS="$CPPFLAGS $1"
132                                 shift
133                                 ;;
135                 -[IDU]|-include|-isystem)
136                                 CPPFLAGS="$CPPFLAGS $1 $2"
137                                 shift 2
138                                 ;;
139                                 
140                 -isystem-cxx|-cxx-isystem)
141                                 CPPFLAGS="$CPPFLAGS -isystem $2"
142                                 shift 2
143                                 ;;
145                 -no-cpp-precomp)        # This is a Darwin-specific option.
146                                 CPPFLAGS="$CPPFLAGS $1"
147                                 shift
148                                 ;;
150                 -nostdinc*)     # This is a gcc/g++ ism; ignore if not gcc/g++
151                                 case "@CFLAGS@" in
152                                 *-O2*)  # Autoconf puts -O2 when gcc only
153                                         CPPFLAGS="$CPPFLAGS $1"
154                                         ;;
155                                 esac    
156                                 shift
157                                 ;;
159                 -*)             
160                                 echo "$0: Unknown option: $1" 1>&2 # all other -options
161                                 exit 1
162                                 ;;
164                 *)      
165                                 SRCS="$SRCS $1" # source file
166                                 shift
167                                 ;;
168                 esac
169         done
172 [ -z "$SRCS" ] && usage
174 TMP=/tmp/mkdep$$
175 rm -f $TMP
177 trap 'rm -f $TMP; exit 1' 1 2 3 13 15
179 if $MERGE; then
180         for f in $SRCS; do
181                 if [ ! -f "$f" ]; then
182                         if ! $QUIET; then echo "$0: Ignoring $f" >&2; fi
183                         continue
184                 fi
185                 while IFS=':'; read target dependants; do
186                         IFS=
187                         t1="${target#* }"
188                         file="${target%.o}"
189                         if [ "$t1" = "$target" -a "$file" != "$target" ]; then
190                                 set_objlist $file
191                                 target="$objlist"
192                         fi
193                         echo "$target:$dependants"
194                         if "$OPTIONAL"; then
195                                 echo ".OPTIONAL:$dependants"
196                         fi
197                 done <$f
198         done >$TMP
199 else
200         for f in $SRCS; do
201                 file=${f##*/}
202                 file=${file%.*}
203                 set_objlist $file
205                 @CPP@ $CPPFLAGS $f | @AWK@ '
206                         /^#/ {
207                                 # Be as tolerant as possible.
208                                 sub(/^#(line)? [ 0-9]*\"?/, "")
209                                 sub(/^#(pragma).*/, "")
210                                 sub(/^<.*/, "")
211                                 sub(/\".*$/, "")
212                                 sub(/ [ 0-9]*$/, "")
214                                 if ($0 in seenfiles) next
215                                 if ($0 ~ /y.tab.c/) next
217                                 seenfiles[$0] = 1
218                                 print "'"$objlist"'" ": " $0
219                                 '"$AWK_OPTIONAL"'
220                         }
221                 ' >> $TMP
222         done
225 if $APPEND; then
226         cat $TMP >> $OUTFILE
227 else
228         cat $TMP > $OUTFILE
231 rm -f $TMP
232 exit 0