Remove building with NOCRYPTO option
[minix3.git] / tools / host-mkdep / host-mkdep.in
blob0764cc001f43eea61032bbb3b7d6a9c936743acd
1 #!@BSHELL@ -
3 #       $NetBSD: host-mkdep.in,v 1.31 2015/05/12 00:04:34 christos 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 PREFIX=
47 OUTFILE=.depend
48 SRCS=
50 usage()
52         echo "Usage: $0 [-adopq] [-s .suffixes] [-f .depend] -- [flags] file ..." >&2
53         exit 1
56 set_objlist()
58         if [ -n "$NEWEXT" ]; then
59                 oifs="$IFS"
60                 IFS=" ,"
61                 set -- $NEWEXT
62                 IFS="$oifs"
63                 objlist=
64                 for suf in "$@"; do
65                         objlist="$objlist${objlist:+ }$PREFIX$file$suf"
66                 done
67         else
68                 objlist="$PREFIX$file"
69         fi
72 # A getopt compatible command line parser in shell comands.
73 # (don't trust the shell builtin getopts to be in a known state on error)
74 while [ $# -gt 0 ]; do
75         option="${1#-}"
76         [ "$option" = "$1" -o -z "$option" ] && break
77         while
78                 optarg="${option#?}"
79                 option="${option%$optarg}"
81                 case "-$option" in
82                 -a)     APPEND=true;;
83                 -d)     MERGE=true;;
84                 -o)     OPTIONAL=true; AWK_OPTIONAL='print ".OPTIONAL:" $0';;
85                 -p)     NEWEXT=;;
86                 -q)     QUIET=true;;
87                 -[iv])  ;;
89                 -[fPs]) # Options with arguments
90                         [ -z "$optarg" ] && {
91                                 [ $# = 1 ] && usage
92                                 shift
93                                 optarg="$1"
94                         }
95                         case "-$option" in
96                         -f)     OUTFILE="$optarg";;
97                         -P)     PREFIX="$optarg";;
98                         -s)     NEWEXT="$optarg";;
99                         esac
100                         optarg=
101                         ;;
103                 --)     [ -z "$optarg" ] && shift
104                         break 2
105                         ;;
107                 *)      $MERGE && usage
108                         break 2;
109                         ;;
110                 esac
111                 [ -n "$optarg" ]
112         do
113                 option="$optarg"
114         done
115         shift
116 done
118 [ $# = 0 ] && usage
120 if $MERGE; then
121         SRCS="$*"
122 else
123         #
124         # Process argument list.
125         # This is tricky, because arguments may contain spaces and other
126         # escapes characters.  The argument list is used like a tail queue.
127         # $cppargs has one x for each unprocessed argument, so when an
128         # argument is processed, it is shifted and the corresponding number
129         # of x's is removed.  The advantage to counting is that suffix removal
130         # works without fork.
131         #
132         cppargs=
133         for arg; do
134                 cppargs="x$cppargs"
135         done
136         while [ -n "$cppargs" ]; do
137                 case "$1" in
138                 -L)                     # takes an arg, but ignored
139                                 shift 2
140                                 cppargs=${cppargs%xx}
141                                 ;;
143                 -c|-[lLMOW]*)           # takes no extra args
144                                 shift
145                                 cppargs=${cppargs%x}
146                                 ;;
148                 -[IDU]*)
149                                 set -- "$@" "$1"
150                                 shift
151                                 cppargs=${cppargs%x}
152                                 ;;
154                 -[IDU]|-include|-isystem|-isysroot)
155                                 set -- "$@" "$1" "$2"
156                                 shift 2
157                                 cppargs=${cppargs%xx}
158                                 ;;
159                                 
160                 -isystem-cxx|-cxx-isystem)
161                                 set -- "$@" "-isystem" "$2"
162                                 shift 2
163                                 cppargs=${cppargs%xx}
164                                 ;;
165                 -std=*)
166                                 set -- "$@" "$1"
167                                 shift
168                                 cppargs=${cppargs%x}
169                                 ;;
171                 -no-cpp-precomp)        # This is a Darwin-specific option.
172                                 set -- "$@" "$1"
173                                 shift
174                                 cppargs=${cppargs%x}
175                                 ;;
177                 -nostdinc*)     # This is a gcc/g++ ism; ignore if not gcc/g++
178                                 case "@CFLAGS@" in
179                                 *-O2*)  # Autoconf puts -O2 when gcc only
180                                         set -- "$@" "$1"
181                                         ;;
182                                 esac    
183                                 shift
184                                 cppargs=${cppargs%x}
185                                 ;;
186                 --sysroot*)
187                                 shift
188                                 ;;
189                 -[iv])
190                                 shift
191                                 ;;
192                 -*)             
193                                 echo "$0: Unknown option: $1" 1>&2 # all other -options
194                                 exit 1
195                                 ;;
197                 *)      
198                                 SRCS="$SRCS $1" # source file
199                                 shift
200                                 cppargs=${cppargs%x}
201                                 ;;
202                 esac
203         done
206 [ -z "$SRCS" ] && usage
208 TMP=/tmp/mkdep$$
209 rm -f $TMP
211 trap 'rm -f $TMP; exit 1' 1 2 3 13 15
213 if $MERGE; then
214         for f in $SRCS; do
215                 if [ ! -f "$f" ]; then
216                         if ! $QUIET; then echo "$0: Ignoring $f" >&2; fi
217                         continue
218                 fi
219                 while IFS=':'; read target dependents; do
220                         IFS=
221                         t1="${target#* }"
222                         file="${target%.o}"
223                         if [ "$t1" = "$target" -a "$file" != "$target" ]; then
224                                 set_objlist $file
225                                 target="$objlist"
226                         fi
227                         echo "$target:$dependents"
228                         if "$OPTIONAL"; then
229                                 echo ".OPTIONAL:$dependents"
230                         fi
231                 done <$f
232         done >$TMP
233 else
234         for f in $SRCS; do
235                 file=${f##*/}
236                 file=${file%.*}
237                 set_objlist $file
239                 ( (@CPP@ "$@" $f; echo $? >&3) | @AWK@ '
240                         /^#/ {
241                                 # Be as tolerant as possible.
242                                 sub(/^#(line)? [ 0-9]*\"?/, "")
243                                 sub(/^#(pragma).*/, "")
244                                 sub(/^<.*/, "")
245                                 sub(/\".*$/, "")
246                                 sub(/^\.\//, "")
247                                 sub(/ [ 0-9]*$/, "")
249                                 if ($0 in seenfiles) next
250                                 if ($0 ~ /y.tab.c/) next
252                                 seenfiles[$0] = 1
253                                 print "'"$objlist"'" ": " $0
254                                 '"$AWK_OPTIONAL"'
255                         }
256                 ' >> $TMP) 3>&1 | (read a; exit $a)
257         done
260 if $APPEND; then
261         cat $TMP >> $OUTFILE
262 else
263         cat $TMP > $OUTFILE
266 rm -f $TMP
267 exit 0