For what it's worth, I found the following utility at the QNX web site. It seems to work a lot better than makedepend from X. I'm also including the modified depcomp needed to use mkdep. ### begin mkdep ### #! /bin/ksh #ifdef __USAGE #%C - build a dependency table for the make utility. # #%C [options] file [file ...] # #Options: # -a Append to the dependencies file. # -f <file> Specify the name of the dependencies file (Default: .depend). # -h Show usage. # -p Don't append .o suffix to target file names. # -u Build standard /usr/include files into dependencies. # -I <path> Specify an additional include path. # -D <sym=txt> Define a symbol. #endif # Get my name and setup a unique tmp file. me=${0##*/} tmp=$TMPDIR/$me.$NODE.$$ # Signal handler trapper () { echo "$me: interrupted by user, exiting." >&2 rm -f $tmp $tmp.? exit 1 } # Print usage message and exit print_usage () { echo; echo use $1 exit 1 } # Process any command line options typeset -i aflag=0 pflag=0 uflag=0 outfile="" suffix=".o" # Set the C preprocessor to use, and any default options. cpp="cc -E" options="" while getopts ":ahf:puD:I:" opt $* do case $opt in a) aflag=1 ;; f) outfile=$OPTARG ;; h) print_usage $0 ;; p) suffix="" ;; u) uflag=1 ;; D) options="$options -D$OPTARG" ;; I) options="$options -I$OPTARG" ;; \?) print_usage $0 ;; esac done # If an output filename was not specified we use .depend for standard # make dependencies and .dependfull for the full cross-reference table . if test "$outfile" = "" then outfile=".depend" fi # Use the .o suffix for standard make dependencies and use the .c suffix # for the full cross-reference table. # Shift options out of command line let i=OPTIND-1 shift $i # Trap to signal handler trap trapper INT QUIT # Make dependencies for a file. # # mkdep file mkdep () { # Preprocess the file, grep for #line directives, use sed to strip # the #line directives down to a simple path and file name, use sort -u # to remove duplicate file names, store the output in the tmp file. $cpp $options $1 |grep "#line" | \ sed -e "s/^ *.*#line [0123456789]* \"//" -e "s/\"[ ]*.*$//" | \ sort -u >$tmp.a # Remove standard /usr/include files unless specified. if test $uflag -eq 0 then grep -v /usr/include $tmp.a >$tmp.b else mv $tmp.a $tmp.b fi # Remove reference to current file. grep -v $1 $tmp.b >$tmp.c case $1 in *.cpp) target=${1%.cpp}$suffix;; *.cc) target=${1%.cc}$suffix;; *.[cC]) target=${1%.[cC]}$suffix;; *) esac # Massage the info into standard make dependency notation. echo $target': \\' for f in $(<$tmp.c) do echo "\t$f"' \\' done # Add reference to current file. echo "\t./$1" echo } # Remove output file if not in append mode. if test $aflag -ne 1 then if test -f $outfile then rm -f $outfile fi echo "###" >> $outfile echo "# Begin dependencies " >> $outfile echo >> $outfile fi # Make dependencies for each file. for f in $* do mkdep $f >> $outfile done # Remove tmp files and exit. rm -f $tmp $tmp.? exit 0 ### end mkdep ### ### begin modified depcomp ### #! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright (C) 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # Originally written by Alexandre Oliva <[EMAIL PROTECTED]>. if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi if "$@" -Wp,"$gccflag$tmpdepfile"; then : else stat=$? rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" sed 's/^[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; dashmd) # The Java front end to gcc doesn't run cpp, so we can't use the -Wp # trick. Instead we must use -M and then rename the resulting .d # file. This is also the case for older versions of gcc, which # don't implement -Wp. if "$@" -MD; then : else stat=$? rm -f FIXME exit $stat fi FIXME: rewrite the file ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else stat=$? rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and remove the tr invocations, as IRIX sed won't handle # lines with more than 8192 characters. tr ' ' ' ' < "$tmpdepfile" | sed 's/^[^\.]*\.o://' | tr ' ' ' ' >> $depfile tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. test -z "$dashmflag" && dashmflag=-M ( IFS=" " case " $* " in *" --mode=compile "*) # this is libtool, let us make it quiet for arg do # cycle over the arguments case "$arg" in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; mkdep) # mkdep from QNX ( MKDEP="/usr/local/bin/mkdep -u" shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift;; -*) ;; *.o) # removes *.o arguments... set fnord "$@"; shift;; *) set fnord "$@" "$arg"; shift;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MKDEP} 2>/dev/null -f"$tmpdepfile" "$@" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; makedepend) # X makedepend ( shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift;; -*) ;; *) set fnord "$@" "$arg"; shift;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tail +3 "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case "$arg" in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)"/ s::'"$object"'\: \1:p' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed < "$tmpdepfile" -e 's/^[^:]*: //' -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 ### end modified depcomp ### Jiann-Ming Su, [EMAIL PROTECTED] Criminals, by definition, break the law...