depcomp revision 4f6cd06f
1c35d236eSmrg#! /bin/sh 2c35d236eSmrg# depcomp - compile a program generating dependencies as side-effects 3c35d236eSmrg 44f6cd06fSmrgscriptversion=2006-10-15.18 5c35d236eSmrg 64f6cd06fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software 74f6cd06fSmrg# Foundation, Inc. 8c35d236eSmrg 9c35d236eSmrg# This program is free software; you can redistribute it and/or modify 10c35d236eSmrg# it under the terms of the GNU General Public License as published by 11c35d236eSmrg# the Free Software Foundation; either version 2, or (at your option) 12c35d236eSmrg# any later version. 13c35d236eSmrg 14c35d236eSmrg# This program is distributed in the hope that it will be useful, 15c35d236eSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16c35d236eSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17c35d236eSmrg# GNU General Public License for more details. 18c35d236eSmrg 19c35d236eSmrg# You should have received a copy of the GNU General Public License 20c35d236eSmrg# along with this program; if not, write to the Free Software 21c35d236eSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22c35d236eSmrg# 02110-1301, USA. 23c35d236eSmrg 24c35d236eSmrg# As a special exception to the GNU General Public License, if you 25c35d236eSmrg# distribute this file as part of a program that contains a 26c35d236eSmrg# configuration script generated by Autoconf, you may include it under 27c35d236eSmrg# the same distribution terms that you use for the rest of that program. 28c35d236eSmrg 29c35d236eSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30c35d236eSmrg 31c35d236eSmrgcase $1 in 32c35d236eSmrg '') 33c35d236eSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34c35d236eSmrg exit 1; 35c35d236eSmrg ;; 36c35d236eSmrg -h | --h*) 37c35d236eSmrg cat <<\EOF 38c35d236eSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39c35d236eSmrg 40c35d236eSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41c35d236eSmrgas side-effects. 42c35d236eSmrg 43c35d236eSmrgEnvironment variables: 44c35d236eSmrg depmode Dependency tracking mode. 45c35d236eSmrg source Source file read by `PROGRAMS ARGS'. 46c35d236eSmrg object Object file output by `PROGRAMS ARGS'. 47c35d236eSmrg DEPDIR directory where to store dependencies. 48c35d236eSmrg depfile Dependency file to output. 49c35d236eSmrg tmpdepfile Temporary file to use when outputing dependencies. 50c35d236eSmrg libtool Whether libtool is used (yes/no). 51c35d236eSmrg 52c35d236eSmrgReport bugs to <bug-automake@gnu.org>. 53c35d236eSmrgEOF 54c35d236eSmrg exit $? 55c35d236eSmrg ;; 56c35d236eSmrg -v | --v*) 57c35d236eSmrg echo "depcomp $scriptversion" 58c35d236eSmrg exit $? 59c35d236eSmrg ;; 60c35d236eSmrgesac 61c35d236eSmrg 62c35d236eSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63c35d236eSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64c35d236eSmrg exit 1 65c35d236eSmrgfi 66c35d236eSmrg 67c35d236eSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68c35d236eSmrgdepfile=${depfile-`echo "$object" | 69c35d236eSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70c35d236eSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71c35d236eSmrg 72c35d236eSmrgrm -f "$tmpdepfile" 73c35d236eSmrg 74c35d236eSmrg# Some modes work just like other modes, but use different flags. We 75c35d236eSmrg# parameterize here, but still list the modes in the big case below, 76c35d236eSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77c35d236eSmrg# here, because this file can only contain one case statement. 78c35d236eSmrgif test "$depmode" = hp; then 79c35d236eSmrg # HP compiler uses -M and no extra arg. 80c35d236eSmrg gccflag=-M 81c35d236eSmrg depmode=gcc 82c35d236eSmrgfi 83c35d236eSmrg 84c35d236eSmrgif test "$depmode" = dashXmstdout; then 85c35d236eSmrg # This is just like dashmstdout with a different argument. 86c35d236eSmrg dashmflag=-xM 87c35d236eSmrg depmode=dashmstdout 88c35d236eSmrgfi 89c35d236eSmrg 90c35d236eSmrgcase "$depmode" in 91c35d236eSmrggcc3) 92c35d236eSmrg## gcc 3 implements dependency tracking that does exactly what 93c35d236eSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94c35d236eSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 954f6cd06fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 964f6cd06fSmrg## the command line argument order; so add the flags where they 974f6cd06fSmrg## appear in depend2.am. Note that the slowdown incurred here 984f6cd06fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 994f6cd06fSmrg for arg 1004f6cd06fSmrg do 1014f6cd06fSmrg case $arg in 1024f6cd06fSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1034f6cd06fSmrg *) set fnord "$@" "$arg" ;; 1044f6cd06fSmrg esac 1054f6cd06fSmrg shift # fnord 1064f6cd06fSmrg shift # $arg 1074f6cd06fSmrg done 1084f6cd06fSmrg "$@" 109c35d236eSmrg stat=$? 110c35d236eSmrg if test $stat -eq 0; then : 111c35d236eSmrg else 112c35d236eSmrg rm -f "$tmpdepfile" 113c35d236eSmrg exit $stat 114c35d236eSmrg fi 115c35d236eSmrg mv "$tmpdepfile" "$depfile" 116c35d236eSmrg ;; 117c35d236eSmrg 118c35d236eSmrggcc) 119c35d236eSmrg## There are various ways to get dependency output from gcc. Here's 120c35d236eSmrg## why we pick this rather obscure method: 121c35d236eSmrg## - Don't want to use -MD because we'd like the dependencies to end 122c35d236eSmrg## up in a subdir. Having to rename by hand is ugly. 123c35d236eSmrg## (We might end up doing this anyway to support other compilers.) 124c35d236eSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125c35d236eSmrg## -MM, not -M (despite what the docs say). 126c35d236eSmrg## - Using -M directly means running the compiler twice (even worse 127c35d236eSmrg## than renaming). 128c35d236eSmrg if test -z "$gccflag"; then 129c35d236eSmrg gccflag=-MD, 130c35d236eSmrg fi 131c35d236eSmrg "$@" -Wp,"$gccflag$tmpdepfile" 132c35d236eSmrg stat=$? 133c35d236eSmrg if test $stat -eq 0; then : 134c35d236eSmrg else 135c35d236eSmrg rm -f "$tmpdepfile" 136c35d236eSmrg exit $stat 137c35d236eSmrg fi 138c35d236eSmrg rm -f "$depfile" 139c35d236eSmrg echo "$object : \\" > "$depfile" 140c35d236eSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141c35d236eSmrg## The second -e expression handles DOS-style file names with drive letters. 142c35d236eSmrg sed -e 's/^[^:]*: / /' \ 143c35d236eSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144c35d236eSmrg## This next piece of magic avoids the `deleted header file' problem. 145c35d236eSmrg## The problem is that when a header file which appears in a .P file 146c35d236eSmrg## is deleted, the dependency causes make to die (because there is 147c35d236eSmrg## typically no way to rebuild the header). We avoid this by adding 148c35d236eSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 149c35d236eSmrg## this for us directly. 150c35d236eSmrg tr ' ' ' 151c35d236eSmrg' < "$tmpdepfile" | 152c35d236eSmrg## Some versions of gcc put a space before the `:'. On the theory 153c35d236eSmrg## that the space means something, we add a space to the output as 154c35d236eSmrg## well. 155c35d236eSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 156c35d236eSmrg## correctly. Breaking it into two sed invocations is a workaround. 157c35d236eSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158c35d236eSmrg rm -f "$tmpdepfile" 159c35d236eSmrg ;; 160c35d236eSmrg 161c35d236eSmrghp) 162c35d236eSmrg # This case exists only to let depend.m4 do its work. It works by 163c35d236eSmrg # looking at the text of this script. This case will never be run, 164c35d236eSmrg # since it is checked for above. 165c35d236eSmrg exit 1 166c35d236eSmrg ;; 167c35d236eSmrg 168c35d236eSmrgsgi) 169c35d236eSmrg if test "$libtool" = yes; then 170c35d236eSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171c35d236eSmrg else 172c35d236eSmrg "$@" -MDupdate "$tmpdepfile" 173c35d236eSmrg fi 174c35d236eSmrg stat=$? 175c35d236eSmrg if test $stat -eq 0; then : 176c35d236eSmrg else 177c35d236eSmrg rm -f "$tmpdepfile" 178c35d236eSmrg exit $stat 179c35d236eSmrg fi 180c35d236eSmrg rm -f "$depfile" 181c35d236eSmrg 182c35d236eSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183c35d236eSmrg echo "$object : \\" > "$depfile" 184c35d236eSmrg 185c35d236eSmrg # Clip off the initial element (the dependent). Don't try to be 186c35d236eSmrg # clever and replace this with sed code, as IRIX sed won't handle 187c35d236eSmrg # lines with more than a fixed number of characters (4096 in 188c35d236eSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189c35d236eSmrg # the IRIX cc adds comments like `#:fec' to the end of the 190c35d236eSmrg # dependency line. 191c35d236eSmrg tr ' ' ' 192c35d236eSmrg' < "$tmpdepfile" \ 193c35d236eSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194c35d236eSmrg tr ' 195c35d236eSmrg' ' ' >> $depfile 196c35d236eSmrg echo >> $depfile 197c35d236eSmrg 198c35d236eSmrg # The second pass generates a dummy entry for each header file. 199c35d236eSmrg tr ' ' ' 200c35d236eSmrg' < "$tmpdepfile" \ 201c35d236eSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202c35d236eSmrg >> $depfile 203c35d236eSmrg else 204c35d236eSmrg # The sourcefile does not contain any dependencies, so just 205c35d236eSmrg # store a dummy comment line, to avoid errors with the Makefile 206c35d236eSmrg # "include basename.Plo" scheme. 207c35d236eSmrg echo "#dummy" > "$depfile" 208c35d236eSmrg fi 209c35d236eSmrg rm -f "$tmpdepfile" 210c35d236eSmrg ;; 211c35d236eSmrg 212c35d236eSmrgaix) 213c35d236eSmrg # The C for AIX Compiler uses -M and outputs the dependencies 214c35d236eSmrg # in a .u file. In older versions, this file always lives in the 215c35d236eSmrg # current directory. Also, the AIX compiler puts `$object:' at the 216c35d236eSmrg # start of each line; $object doesn't have directory information. 217c35d236eSmrg # Version 6 uses the directory in both cases. 218c35d236eSmrg stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 219c35d236eSmrg tmpdepfile="$stripped.u" 220c35d236eSmrg if test "$libtool" = yes; then 221c35d236eSmrg "$@" -Wc,-M 222c35d236eSmrg else 223c35d236eSmrg "$@" -M 224c35d236eSmrg fi 225c35d236eSmrg stat=$? 226c35d236eSmrg 227c35d236eSmrg if test -f "$tmpdepfile"; then : 228c35d236eSmrg else 229c35d236eSmrg stripped=`echo "$stripped" | sed 's,^.*/,,'` 230c35d236eSmrg tmpdepfile="$stripped.u" 231c35d236eSmrg fi 232c35d236eSmrg 233c35d236eSmrg if test $stat -eq 0; then : 234c35d236eSmrg else 235c35d236eSmrg rm -f "$tmpdepfile" 236c35d236eSmrg exit $stat 237c35d236eSmrg fi 238c35d236eSmrg 239c35d236eSmrg if test -f "$tmpdepfile"; then 240c35d236eSmrg outname="$stripped.o" 241c35d236eSmrg # Each line is of the form `foo.o: dependent.h'. 242c35d236eSmrg # Do two passes, one to just change these to 243c35d236eSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 244c35d236eSmrg sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 245c35d236eSmrg sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 246c35d236eSmrg else 247c35d236eSmrg # The sourcefile does not contain any dependencies, so just 248c35d236eSmrg # store a dummy comment line, to avoid errors with the Makefile 249c35d236eSmrg # "include basename.Plo" scheme. 250c35d236eSmrg echo "#dummy" > "$depfile" 251c35d236eSmrg fi 252c35d236eSmrg rm -f "$tmpdepfile" 253c35d236eSmrg ;; 254c35d236eSmrg 255c35d236eSmrgicc) 256c35d236eSmrg # Intel's C compiler understands `-MD -MF file'. However on 257c35d236eSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 258c35d236eSmrg # ICC 7.0 will fill foo.d with something like 259c35d236eSmrg # foo.o: sub/foo.c 260c35d236eSmrg # foo.o: sub/foo.h 261c35d236eSmrg # which is wrong. We want: 262c35d236eSmrg # sub/foo.o: sub/foo.c 263c35d236eSmrg # sub/foo.o: sub/foo.h 264c35d236eSmrg # sub/foo.c: 265c35d236eSmrg # sub/foo.h: 266c35d236eSmrg # ICC 7.1 will output 267c35d236eSmrg # foo.o: sub/foo.c sub/foo.h 268c35d236eSmrg # and will wrap long lines using \ : 269c35d236eSmrg # foo.o: sub/foo.c ... \ 270c35d236eSmrg # sub/foo.h ... \ 271c35d236eSmrg # ... 272c35d236eSmrg 273c35d236eSmrg "$@" -MD -MF "$tmpdepfile" 274c35d236eSmrg stat=$? 275c35d236eSmrg if test $stat -eq 0; then : 276c35d236eSmrg else 277c35d236eSmrg rm -f "$tmpdepfile" 278c35d236eSmrg exit $stat 279c35d236eSmrg fi 280c35d236eSmrg rm -f "$depfile" 281c35d236eSmrg # Each line is of the form `foo.o: dependent.h', 282c35d236eSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 283c35d236eSmrg # Do two passes, one to just change these to 284c35d236eSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 285c35d236eSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 286c35d236eSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 287c35d236eSmrg # correctly. Breaking it into two sed invocations is a workaround. 288c35d236eSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 289c35d236eSmrg sed -e 's/$/ :/' >> "$depfile" 290c35d236eSmrg rm -f "$tmpdepfile" 291c35d236eSmrg ;; 292c35d236eSmrg 2934f6cd06fSmrghp2) 2944f6cd06fSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 2954f6cd06fSmrg # compilers, which have integrated preprocessors. The correct option 2964f6cd06fSmrg # to use with these is +Maked; it writes dependencies to a file named 2974f6cd06fSmrg # 'foo.d', which lands next to the object file, wherever that 2984f6cd06fSmrg # happens to be. 2994f6cd06fSmrg # Much of this is similar to the tru64 case; see comments there. 3004f6cd06fSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3014f6cd06fSmrg test "x$dir" = "x$object" && dir= 3024f6cd06fSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3034f6cd06fSmrg if test "$libtool" = yes; then 3044f6cd06fSmrg tmpdepfile1=$dir$base.d 3054f6cd06fSmrg tmpdepfile2=$dir.libs/$base.d 3064f6cd06fSmrg "$@" -Wc,+Maked 3074f6cd06fSmrg else 3084f6cd06fSmrg tmpdepfile1=$dir$base.d 3094f6cd06fSmrg tmpdepfile2=$dir$base.d 3104f6cd06fSmrg "$@" +Maked 3114f6cd06fSmrg fi 3124f6cd06fSmrg stat=$? 3134f6cd06fSmrg if test $stat -eq 0; then : 3144f6cd06fSmrg else 3154f6cd06fSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 3164f6cd06fSmrg exit $stat 3174f6cd06fSmrg fi 3184f6cd06fSmrg 3194f6cd06fSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3204f6cd06fSmrg do 3214f6cd06fSmrg test -f "$tmpdepfile" && break 3224f6cd06fSmrg done 3234f6cd06fSmrg if test -f "$tmpdepfile"; then 3244f6cd06fSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3254f6cd06fSmrg # Add `dependent.h:' lines. 3264f6cd06fSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 3274f6cd06fSmrg else 3284f6cd06fSmrg echo "#dummy" > "$depfile" 3294f6cd06fSmrg fi 3304f6cd06fSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 3314f6cd06fSmrg ;; 3324f6cd06fSmrg 333c35d236eSmrgtru64) 334c35d236eSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 335c35d236eSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 336c35d236eSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 337c35d236eSmrg # dependencies in `foo.d' instead, so we check for that too. 338c35d236eSmrg # Subdirectories are respected. 339c35d236eSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 340c35d236eSmrg test "x$dir" = "x$object" && dir= 341c35d236eSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 342c35d236eSmrg 343c35d236eSmrg if test "$libtool" = yes; then 344c35d236eSmrg # With Tru64 cc, shared objects can also be used to make a 3454f6cd06fSmrg # static library. This mechanism is used in libtool 1.4 series to 346c35d236eSmrg # handle both shared and static libraries in a single compilation. 347c35d236eSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 348c35d236eSmrg # 349c35d236eSmrg # With libtool 1.5 this exception was removed, and libtool now 350c35d236eSmrg # generates 2 separate objects for the 2 libraries. These two 3514f6cd06fSmrg # compilations output dependencies in $dir.libs/$base.o.d and 352c35d236eSmrg # in $dir$base.o.d. We have to check for both files, because 353c35d236eSmrg # one of the two compilations can be disabled. We should prefer 354c35d236eSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 355c35d236eSmrg # automatically cleaned when .libs/ is deleted, while ignoring 356c35d236eSmrg # the former would cause a distcleancheck panic. 357c35d236eSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 358c35d236eSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 359c35d236eSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 360c35d236eSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 361c35d236eSmrg "$@" -Wc,-MD 362c35d236eSmrg else 363c35d236eSmrg tmpdepfile1=$dir$base.o.d 364c35d236eSmrg tmpdepfile2=$dir$base.d 365c35d236eSmrg tmpdepfile3=$dir$base.d 366c35d236eSmrg tmpdepfile4=$dir$base.d 367c35d236eSmrg "$@" -MD 368c35d236eSmrg fi 369c35d236eSmrg 370c35d236eSmrg stat=$? 371c35d236eSmrg if test $stat -eq 0; then : 372c35d236eSmrg else 373c35d236eSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 374c35d236eSmrg exit $stat 375c35d236eSmrg fi 376c35d236eSmrg 377c35d236eSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 378c35d236eSmrg do 379c35d236eSmrg test -f "$tmpdepfile" && break 380c35d236eSmrg done 381c35d236eSmrg if test -f "$tmpdepfile"; then 382c35d236eSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 383c35d236eSmrg # That's a tab and a space in the []. 384c35d236eSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 385c35d236eSmrg else 386c35d236eSmrg echo "#dummy" > "$depfile" 387c35d236eSmrg fi 388c35d236eSmrg rm -f "$tmpdepfile" 389c35d236eSmrg ;; 390c35d236eSmrg 391c35d236eSmrg#nosideeffect) 392c35d236eSmrg # This comment above is used by automake to tell side-effect 393c35d236eSmrg # dependency tracking mechanisms from slower ones. 394c35d236eSmrg 395c35d236eSmrgdashmstdout) 396c35d236eSmrg # Important note: in order to support this mode, a compiler *must* 397c35d236eSmrg # always write the preprocessed file to stdout, regardless of -o. 398c35d236eSmrg "$@" || exit $? 399c35d236eSmrg 400c35d236eSmrg # Remove the call to Libtool. 401c35d236eSmrg if test "$libtool" = yes; then 402c35d236eSmrg while test $1 != '--mode=compile'; do 403c35d236eSmrg shift 404c35d236eSmrg done 405c35d236eSmrg shift 406c35d236eSmrg fi 407c35d236eSmrg 408c35d236eSmrg # Remove `-o $object'. 409c35d236eSmrg IFS=" " 410c35d236eSmrg for arg 411c35d236eSmrg do 412c35d236eSmrg case $arg in 413c35d236eSmrg -o) 414c35d236eSmrg shift 415c35d236eSmrg ;; 416c35d236eSmrg $object) 417c35d236eSmrg shift 418c35d236eSmrg ;; 419c35d236eSmrg *) 420c35d236eSmrg set fnord "$@" "$arg" 421c35d236eSmrg shift # fnord 422c35d236eSmrg shift # $arg 423c35d236eSmrg ;; 424c35d236eSmrg esac 425c35d236eSmrg done 426c35d236eSmrg 427c35d236eSmrg test -z "$dashmflag" && dashmflag=-M 428c35d236eSmrg # Require at least two characters before searching for `:' 429c35d236eSmrg # in the target name. This is to cope with DOS-style filenames: 430c35d236eSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 431c35d236eSmrg "$@" $dashmflag | 432c35d236eSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 433c35d236eSmrg rm -f "$depfile" 434c35d236eSmrg cat < "$tmpdepfile" > "$depfile" 435c35d236eSmrg tr ' ' ' 436c35d236eSmrg' < "$tmpdepfile" | \ 437c35d236eSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 438c35d236eSmrg## correctly. Breaking it into two sed invocations is a workaround. 439c35d236eSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 440c35d236eSmrg rm -f "$tmpdepfile" 441c35d236eSmrg ;; 442c35d236eSmrg 443c35d236eSmrgdashXmstdout) 444c35d236eSmrg # This case only exists to satisfy depend.m4. It is never actually 445c35d236eSmrg # run, as this mode is specially recognized in the preamble. 446c35d236eSmrg exit 1 447c35d236eSmrg ;; 448c35d236eSmrg 449c35d236eSmrgmakedepend) 450c35d236eSmrg "$@" || exit $? 451c35d236eSmrg # Remove any Libtool call 452c35d236eSmrg if test "$libtool" = yes; then 453c35d236eSmrg while test $1 != '--mode=compile'; do 454c35d236eSmrg shift 455c35d236eSmrg done 456c35d236eSmrg shift 457c35d236eSmrg fi 458c35d236eSmrg # X makedepend 459c35d236eSmrg shift 460c35d236eSmrg cleared=no 461c35d236eSmrg for arg in "$@"; do 462c35d236eSmrg case $cleared in 463c35d236eSmrg no) 464c35d236eSmrg set ""; shift 465c35d236eSmrg cleared=yes ;; 466c35d236eSmrg esac 467c35d236eSmrg case "$arg" in 468c35d236eSmrg -D*|-I*) 469c35d236eSmrg set fnord "$@" "$arg"; shift ;; 470c35d236eSmrg # Strip any option that makedepend may not understand. Remove 471c35d236eSmrg # the object too, otherwise makedepend will parse it as a source file. 472c35d236eSmrg -*|$object) 473c35d236eSmrg ;; 474c35d236eSmrg *) 475c35d236eSmrg set fnord "$@" "$arg"; shift ;; 476c35d236eSmrg esac 477c35d236eSmrg done 478c35d236eSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 479c35d236eSmrg touch "$tmpdepfile" 480c35d236eSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 481c35d236eSmrg rm -f "$depfile" 482c35d236eSmrg cat < "$tmpdepfile" > "$depfile" 483c35d236eSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 484c35d236eSmrg' | \ 485c35d236eSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 486c35d236eSmrg## correctly. Breaking it into two sed invocations is a workaround. 487c35d236eSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 488c35d236eSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 489c35d236eSmrg ;; 490c35d236eSmrg 491c35d236eSmrgcpp) 492c35d236eSmrg # Important note: in order to support this mode, a compiler *must* 493c35d236eSmrg # always write the preprocessed file to stdout. 494c35d236eSmrg "$@" || exit $? 495c35d236eSmrg 496c35d236eSmrg # Remove the call to Libtool. 497c35d236eSmrg if test "$libtool" = yes; then 498c35d236eSmrg while test $1 != '--mode=compile'; do 499c35d236eSmrg shift 500c35d236eSmrg done 501c35d236eSmrg shift 502c35d236eSmrg fi 503c35d236eSmrg 504c35d236eSmrg # Remove `-o $object'. 505c35d236eSmrg IFS=" " 506c35d236eSmrg for arg 507c35d236eSmrg do 508c35d236eSmrg case $arg in 509c35d236eSmrg -o) 510c35d236eSmrg shift 511c35d236eSmrg ;; 512c35d236eSmrg $object) 513c35d236eSmrg shift 514c35d236eSmrg ;; 515c35d236eSmrg *) 516c35d236eSmrg set fnord "$@" "$arg" 517c35d236eSmrg shift # fnord 518c35d236eSmrg shift # $arg 519c35d236eSmrg ;; 520c35d236eSmrg esac 521c35d236eSmrg done 522c35d236eSmrg 523c35d236eSmrg "$@" -E | 524c35d236eSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 525c35d236eSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 526c35d236eSmrg sed '$ s: \\$::' > "$tmpdepfile" 527c35d236eSmrg rm -f "$depfile" 528c35d236eSmrg echo "$object : \\" > "$depfile" 529c35d236eSmrg cat < "$tmpdepfile" >> "$depfile" 530c35d236eSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 531c35d236eSmrg rm -f "$tmpdepfile" 532c35d236eSmrg ;; 533c35d236eSmrg 534c35d236eSmrgmsvisualcpp) 535c35d236eSmrg # Important note: in order to support this mode, a compiler *must* 536c35d236eSmrg # always write the preprocessed file to stdout, regardless of -o, 537c35d236eSmrg # because we must use -o when running libtool. 538c35d236eSmrg "$@" || exit $? 539c35d236eSmrg IFS=" " 540c35d236eSmrg for arg 541c35d236eSmrg do 542c35d236eSmrg case "$arg" in 543c35d236eSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 544c35d236eSmrg set fnord "$@" 545c35d236eSmrg shift 546c35d236eSmrg shift 547c35d236eSmrg ;; 548c35d236eSmrg *) 549c35d236eSmrg set fnord "$@" "$arg" 550c35d236eSmrg shift 551c35d236eSmrg shift 552c35d236eSmrg ;; 553c35d236eSmrg esac 554c35d236eSmrg done 555c35d236eSmrg "$@" -E | 556c35d236eSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 557c35d236eSmrg rm -f "$depfile" 558c35d236eSmrg echo "$object : \\" > "$depfile" 559c35d236eSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 560c35d236eSmrg echo " " >> "$depfile" 561c35d236eSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 562c35d236eSmrg rm -f "$tmpdepfile" 563c35d236eSmrg ;; 564c35d236eSmrg 565c35d236eSmrgnone) 566c35d236eSmrg exec "$@" 567c35d236eSmrg ;; 568c35d236eSmrg 569c35d236eSmrg*) 570c35d236eSmrg echo "Unknown depmode $depmode" 1>&2 571c35d236eSmrg exit 1 572c35d236eSmrg ;; 573c35d236eSmrgesac 574c35d236eSmrg 575c35d236eSmrgexit 0 576c35d236eSmrg 577c35d236eSmrg# Local Variables: 578c35d236eSmrg# mode: shell-script 579c35d236eSmrg# sh-indentation: 2 580c35d236eSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 581c35d236eSmrg# time-stamp-start: "scriptversion=" 582c35d236eSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 583c35d236eSmrg# time-stamp-end: "$" 584c35d236eSmrg# End: 585