Make this support the same new options as recently added to the mkdep program.

This commit is contained in:
dsl 2003-11-10 17:57:43 +00:00
parent cffe183eef
commit 198a6cd602
1 changed files with 133 additions and 65 deletions

View File

@ -1,6 +1,6 @@
#!@BSHELL@ - #!@BSHELL@ -
# #
# $NetBSD: host-mkdep.in,v 1.10 2003/06/11 13:20:38 christos Exp $ # $NetBSD: host-mkdep.in,v 1.11 2003/11/10 17:57:43 dsl Exp $
# #
# Copyright (c) 1991, 1993 # Copyright (c) 1991, 1993
# The Regents of the University of California. All rights reserved. # The Regents of the University of California. All rights reserved.
@ -37,11 +37,31 @@
# #
APPEND=false APPEND=false
MERGE=false
OPTIONAL=false
AWK_OPTIONAL=
QUIET=false
CPPFLAGS= CPPFLAGS=
NEWEXT=.o NEWEXT=.o
OUTFILE=.depend OUTFILE=.depend
SRCS= SRCS=
USAGE="Usage: $0 [-a] [-p] [-f makefile] [flags] file ..." USAGE="Usage: $0 [-a] [-d] [-o] [-p] [-q] [-s suffix] [-f makefile] [flags] file ..."
set_objlist()
{
if [ -n "$NEWEXT" ]; then
oifs="$IFS"
IFS=" ,"
set -- $NEWEXT
IFS="$oifs"
objlist=
for suf in $*; do
objlist="$objlist${objlist:+ }$file$suf"
done
else
objlist="$file"
fi
}
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
@ -49,14 +69,36 @@ while [ $# -gt 0 ]; do
shift shift
;; ;;
-d) MERGE=true
shift
;;
-f) OUTFILE=$2 -f) OUTFILE=$2
shift 2 shift 2
;; ;;
-o) OPTIONAL=true
AWK_OPTIONAL='print ".OPTIONAL:" $0'
shift
;;
-p) NEWEXT= -p) NEWEXT=
shift shift
;; ;;
-q) QUIET=true
shift
;;
-s) NEWEXT="$2"
shift 2
;;
-*) $MERGE || break;
echo "$USAGE" >&2
exit 1
;;
*) break *) break
;; ;;
esac esac
@ -67,51 +109,55 @@ if [ $# = 0 ]; then
exit 1 exit 1
fi fi
while [ $# -gt 0 ]; do if $MERGE; then
case "$1" in SRCS="$*"
-L) # takes an arg, but ignored else
shift 2 while [ $# -gt 0 ]; do
;; case "$1" in
-L) # takes an arg, but ignored
-c|-[lLMOW]*) # takes no extra args shift 2
shift
;;
-[IDU]*)
CPPFLAGS="$CPPFLAGS $1"
shift
;;
-[IDU]|-include|-isystem)
CPPFLAGS="$CPPFLAGS $1 $2"
shift 2
;;
-no-cpp-precomp) # This is a Darwin-specific option.
CPPFLAGS="$CPPFLAGS $1"
shift
;;
-nostdinc*) # This is a gcc/g++ ism; ignore if not gcc/g++
case "@CFLAGS@" in
*-O2*) # Autoconf puts -O2 when gcc only
CPPFLAGS="$CPPFLAGS $1"
;; ;;
esac
shift
;;
-*) -c|-[lLMOW]*) # takes no extra args
echo "$0: Unknown option: $1" 1>&2 # all other -options shift
exit 1 ;;
;;
*) -[IDU]*)
SRCS="$SRCS $1" # source file CPPFLAGS="$CPPFLAGS $1"
shift shift
;; ;;
esac
done -[IDU]|-include|-isystem)
CPPFLAGS="$CPPFLAGS $1 $2"
shift 2
;;
-no-cpp-precomp) # This is a Darwin-specific option.
CPPFLAGS="$CPPFLAGS $1"
shift
;;
-nostdinc*) # This is a gcc/g++ ism; ignore if not gcc/g++
case "@CFLAGS@" in
*-O2*) # Autoconf puts -O2 when gcc only
CPPFLAGS="$CPPFLAGS $1"
;;
esac
shift
;;
-*)
echo "$0: Unknown option: $1" 1>&2 # all other -options
exit 1
;;
*)
SRCS="$SRCS $1" # source file
shift
;;
esac
done
fi
if [ -z "$SRCS" ]; then if [ -z "$SRCS" ]; then
echo "$USAGE" 1>&2 echo "$USAGE" 1>&2
@ -123,29 +169,51 @@ rm -f $TMP
trap 'rm -f $TMP; exit 1' 1 2 3 13 15 trap 'rm -f $TMP; exit 1' 1 2 3 13 15
for f in $SRCS; do if $MERGE; then
@CPP@ $CPPFLAGS $f | @AWK@ ' for f in $SRCS; do
BEGIN { if [ ! -f "$f" ]; then
objfile = "'$f'" if ! $QUIET; then echo "$0: Ignoring $f" >&2; fi
sub(/^.*\//, "", objfile) continue
sub(/\.(c|cc|m)$/, "'$NEWEXT'", objfile) fi
} while IFS=':'; read target dependants; do
/^#/ { IFS=
# Be as tolerant as possible. t1="${target#* }"
sub(/^#(line)? [ 0-9]*\"?/, "") file="${target%.o}"
sub(/^#(pragma).*/, "") if [ "$t" = "$target" -a "$file" != "$target" ]; then
sub(/^<.*/, "") set_objlist $file
sub(/\".*$/, "") target="$objlist"
sub(/ [ 0-9]*$/, "") fi
echo "$target:$dependants"
if "$OPTIONAL"; then
echo ".OPTIONAL:$dependants"
fi
done <$f
done >$TMP
else
for f in $SRCS; do
file=${f##*/}
file=${file%.*}
set_objlist $file
if ($0 in seenfiles) next @CPP@ $CPPFLAGS $f | @AWK@ '
if ($0 ~ /y.tab.c/) next /^#/ {
# Be as tolerant as possible.
sub(/^#(line)? [ 0-9]*\"?/, "")
sub(/^#(pragma).*/, "")
sub(/^<.*/, "")
sub(/\".*$/, "")
sub(/ [ 0-9]*$/, "")
seenfiles[$0] = 1 if ($0 in seenfiles) next
print objfile ": " $0 if ($0 ~ /y.tab.c/) next
}
' >> $TMP seenfiles[$0] = 1
done print "'"$objlist"'" ": " $0
'"$AWK_OPTIONAL"'
}
' >> $TMP
done
fi
if $APPEND; then if $APPEND; then
cat $TMP >> $OUTFILE cat $TMP >> $OUTFILE