depcomp revision fc27e79c
1659607e0Smrg#! /bin/sh 2659607e0Smrg# depcomp - compile a program generating dependencies as side-effects 3659607e0Smrg 4fc27e79cSmrgscriptversion=2007-03-29.01 5659607e0Smrg 6fc27e79cSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 7659607e0Smrg# Foundation, Inc. 8659607e0Smrg 9659607e0Smrg# This program is free software; you can redistribute it and/or modify 10659607e0Smrg# it under the terms of the GNU General Public License as published by 11659607e0Smrg# the Free Software Foundation; either version 2, or (at your option) 12659607e0Smrg# any later version. 13659607e0Smrg 14659607e0Smrg# This program is distributed in the hope that it will be useful, 15659607e0Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16659607e0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17659607e0Smrg# GNU General Public License for more details. 18659607e0Smrg 19659607e0Smrg# You should have received a copy of the GNU General Public License 20659607e0Smrg# along with this program; if not, write to the Free Software 21659607e0Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22659607e0Smrg# 02110-1301, USA. 23659607e0Smrg 24659607e0Smrg# As a special exception to the GNU General Public License, if you 25659607e0Smrg# distribute this file as part of a program that contains a 26659607e0Smrg# configuration script generated by Autoconf, you may include it under 27659607e0Smrg# the same distribution terms that you use for the rest of that program. 28659607e0Smrg 29659607e0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30659607e0Smrg 31659607e0Smrgcase $1 in 32659607e0Smrg '') 33659607e0Smrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34659607e0Smrg exit 1; 35659607e0Smrg ;; 36659607e0Smrg -h | --h*) 37659607e0Smrg cat <<\EOF 38659607e0SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39659607e0Smrg 40659607e0SmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41659607e0Smrgas side-effects. 42659607e0Smrg 43659607e0SmrgEnvironment variables: 44659607e0Smrg depmode Dependency tracking mode. 45659607e0Smrg source Source file read by `PROGRAMS ARGS'. 46659607e0Smrg object Object file output by `PROGRAMS ARGS'. 47659607e0Smrg DEPDIR directory where to store dependencies. 48659607e0Smrg depfile Dependency file to output. 49659607e0Smrg tmpdepfile Temporary file to use when outputing dependencies. 50659607e0Smrg libtool Whether libtool is used (yes/no). 51659607e0Smrg 52659607e0SmrgReport bugs to <bug-automake@gnu.org>. 53659607e0SmrgEOF 54659607e0Smrg exit $? 55659607e0Smrg ;; 56659607e0Smrg -v | --v*) 57659607e0Smrg echo "depcomp $scriptversion" 58659607e0Smrg exit $? 59659607e0Smrg ;; 60659607e0Smrgesac 61659607e0Smrg 62659607e0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63659607e0Smrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64659607e0Smrg exit 1 65659607e0Smrgfi 66659607e0Smrg 67659607e0Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68659607e0Smrgdepfile=${depfile-`echo "$object" | 69659607e0Smrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70659607e0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71659607e0Smrg 72659607e0Smrgrm -f "$tmpdepfile" 73659607e0Smrg 74659607e0Smrg# Some modes work just like other modes, but use different flags. We 75659607e0Smrg# parameterize here, but still list the modes in the big case below, 76659607e0Smrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77659607e0Smrg# here, because this file can only contain one case statement. 78659607e0Smrgif test "$depmode" = hp; then 79659607e0Smrg # HP compiler uses -M and no extra arg. 80659607e0Smrg gccflag=-M 81659607e0Smrg depmode=gcc 82659607e0Smrgfi 83659607e0Smrg 84659607e0Smrgif test "$depmode" = dashXmstdout; then 85659607e0Smrg # This is just like dashmstdout with a different argument. 86659607e0Smrg dashmflag=-xM 87659607e0Smrg depmode=dashmstdout 88659607e0Smrgfi 89659607e0Smrg 90659607e0Smrgcase "$depmode" in 91659607e0Smrggcc3) 92659607e0Smrg## gcc 3 implements dependency tracking that does exactly what 93659607e0Smrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94659607e0Smrg## it if -MD -MP comes after the -MF stuff. Hmm. 95659607e0Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 96659607e0Smrg## the command line argument order; so add the flags where they 97659607e0Smrg## appear in depend2.am. Note that the slowdown incurred here 98659607e0Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 99659607e0Smrg for arg 100659607e0Smrg do 101659607e0Smrg case $arg in 102659607e0Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 103659607e0Smrg *) set fnord "$@" "$arg" ;; 104659607e0Smrg esac 105659607e0Smrg shift # fnord 106659607e0Smrg shift # $arg 107659607e0Smrg done 108659607e0Smrg "$@" 109659607e0Smrg stat=$? 110659607e0Smrg if test $stat -eq 0; then : 111659607e0Smrg else 112659607e0Smrg rm -f "$tmpdepfile" 113659607e0Smrg exit $stat 114659607e0Smrg fi 115659607e0Smrg mv "$tmpdepfile" "$depfile" 116659607e0Smrg ;; 117659607e0Smrg 118659607e0Smrggcc) 119659607e0Smrg## There are various ways to get dependency output from gcc. Here's 120659607e0Smrg## why we pick this rather obscure method: 121659607e0Smrg## - Don't want to use -MD because we'd like the dependencies to end 122659607e0Smrg## up in a subdir. Having to rename by hand is ugly. 123659607e0Smrg## (We might end up doing this anyway to support other compilers.) 124659607e0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125659607e0Smrg## -MM, not -M (despite what the docs say). 126659607e0Smrg## - Using -M directly means running the compiler twice (even worse 127659607e0Smrg## than renaming). 128659607e0Smrg if test -z "$gccflag"; then 129659607e0Smrg gccflag=-MD, 130659607e0Smrg fi 131659607e0Smrg "$@" -Wp,"$gccflag$tmpdepfile" 132659607e0Smrg stat=$? 133659607e0Smrg if test $stat -eq 0; then : 134659607e0Smrg else 135659607e0Smrg rm -f "$tmpdepfile" 136659607e0Smrg exit $stat 137659607e0Smrg fi 138659607e0Smrg rm -f "$depfile" 139659607e0Smrg echo "$object : \\" > "$depfile" 140659607e0Smrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141659607e0Smrg## The second -e expression handles DOS-style file names with drive letters. 142659607e0Smrg sed -e 's/^[^:]*: / /' \ 143659607e0Smrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144659607e0Smrg## This next piece of magic avoids the `deleted header file' problem. 145659607e0Smrg## The problem is that when a header file which appears in a .P file 146659607e0Smrg## is deleted, the dependency causes make to die (because there is 147659607e0Smrg## typically no way to rebuild the header). We avoid this by adding 148659607e0Smrg## dummy dependencies for each header file. Too bad gcc doesn't do 149659607e0Smrg## this for us directly. 150659607e0Smrg tr ' ' ' 151659607e0Smrg' < "$tmpdepfile" | 152659607e0Smrg## Some versions of gcc put a space before the `:'. On the theory 153659607e0Smrg## that the space means something, we add a space to the output as 154659607e0Smrg## well. 155659607e0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 156659607e0Smrg## correctly. Breaking it into two sed invocations is a workaround. 157659607e0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158659607e0Smrg rm -f "$tmpdepfile" 159659607e0Smrg ;; 160659607e0Smrg 161659607e0Smrghp) 162659607e0Smrg # This case exists only to let depend.m4 do its work. It works by 163659607e0Smrg # looking at the text of this script. This case will never be run, 164659607e0Smrg # since it is checked for above. 165659607e0Smrg exit 1 166659607e0Smrg ;; 167659607e0Smrg 168659607e0Smrgsgi) 169659607e0Smrg if test "$libtool" = yes; then 170659607e0Smrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171659607e0Smrg else 172659607e0Smrg "$@" -MDupdate "$tmpdepfile" 173659607e0Smrg fi 174659607e0Smrg stat=$? 175659607e0Smrg if test $stat -eq 0; then : 176659607e0Smrg else 177659607e0Smrg rm -f "$tmpdepfile" 178659607e0Smrg exit $stat 179659607e0Smrg fi 180659607e0Smrg rm -f "$depfile" 181659607e0Smrg 182659607e0Smrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183659607e0Smrg echo "$object : \\" > "$depfile" 184659607e0Smrg 185659607e0Smrg # Clip off the initial element (the dependent). Don't try to be 186659607e0Smrg # clever and replace this with sed code, as IRIX sed won't handle 187659607e0Smrg # lines with more than a fixed number of characters (4096 in 188659607e0Smrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189659607e0Smrg # the IRIX cc adds comments like `#:fec' to the end of the 190659607e0Smrg # dependency line. 191659607e0Smrg tr ' ' ' 192659607e0Smrg' < "$tmpdepfile" \ 193659607e0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194659607e0Smrg tr ' 195659607e0Smrg' ' ' >> $depfile 196659607e0Smrg echo >> $depfile 197659607e0Smrg 198659607e0Smrg # The second pass generates a dummy entry for each header file. 199659607e0Smrg tr ' ' ' 200659607e0Smrg' < "$tmpdepfile" \ 201659607e0Smrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202659607e0Smrg >> $depfile 203659607e0Smrg else 204659607e0Smrg # The sourcefile does not contain any dependencies, so just 205659607e0Smrg # store a dummy comment line, to avoid errors with the Makefile 206659607e0Smrg # "include basename.Plo" scheme. 207659607e0Smrg echo "#dummy" > "$depfile" 208659607e0Smrg fi 209659607e0Smrg rm -f "$tmpdepfile" 210659607e0Smrg ;; 211659607e0Smrg 212659607e0Smrgaix) 213659607e0Smrg # The C for AIX Compiler uses -M and outputs the dependencies 214659607e0Smrg # in a .u file. In older versions, this file always lives in the 215659607e0Smrg # current directory. Also, the AIX compiler puts `$object:' at the 216659607e0Smrg # start of each line; $object doesn't have directory information. 217659607e0Smrg # Version 6 uses the directory in both cases. 218fc27e79cSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 219fc27e79cSmrg test "x$dir" = "x$object" && dir= 220fc27e79cSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 221659607e0Smrg if test "$libtool" = yes; then 222fc27e79cSmrg tmpdepfile1=$dir$base.u 223fc27e79cSmrg tmpdepfile2=$base.u 224fc27e79cSmrg tmpdepfile3=$dir.libs/$base.u 225659607e0Smrg "$@" -Wc,-M 226659607e0Smrg else 227fc27e79cSmrg tmpdepfile1=$dir$base.u 228fc27e79cSmrg tmpdepfile2=$dir$base.u 229fc27e79cSmrg tmpdepfile3=$dir$base.u 230659607e0Smrg "$@" -M 231659607e0Smrg fi 232659607e0Smrg stat=$? 233659607e0Smrg 234659607e0Smrg if test $stat -eq 0; then : 235659607e0Smrg else 236fc27e79cSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 237659607e0Smrg exit $stat 238659607e0Smrg fi 239659607e0Smrg 240fc27e79cSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 241fc27e79cSmrg do 242fc27e79cSmrg test -f "$tmpdepfile" && break 243fc27e79cSmrg done 244659607e0Smrg if test -f "$tmpdepfile"; then 245659607e0Smrg # Each line is of the form `foo.o: dependent.h'. 246659607e0Smrg # Do two passes, one to just change these to 247659607e0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 248fc27e79cSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 249fc27e79cSmrg # That's a tab and a space in the []. 250fc27e79cSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 251659607e0Smrg else 252659607e0Smrg # The sourcefile does not contain any dependencies, so just 253659607e0Smrg # store a dummy comment line, to avoid errors with the Makefile 254659607e0Smrg # "include basename.Plo" scheme. 255659607e0Smrg echo "#dummy" > "$depfile" 256659607e0Smrg fi 257659607e0Smrg rm -f "$tmpdepfile" 258659607e0Smrg ;; 259659607e0Smrg 260659607e0Smrgicc) 261659607e0Smrg # Intel's C compiler understands `-MD -MF file'. However on 262659607e0Smrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 263659607e0Smrg # ICC 7.0 will fill foo.d with something like 264659607e0Smrg # foo.o: sub/foo.c 265659607e0Smrg # foo.o: sub/foo.h 266659607e0Smrg # which is wrong. We want: 267659607e0Smrg # sub/foo.o: sub/foo.c 268659607e0Smrg # sub/foo.o: sub/foo.h 269659607e0Smrg # sub/foo.c: 270659607e0Smrg # sub/foo.h: 271659607e0Smrg # ICC 7.1 will output 272659607e0Smrg # foo.o: sub/foo.c sub/foo.h 273659607e0Smrg # and will wrap long lines using \ : 274659607e0Smrg # foo.o: sub/foo.c ... \ 275659607e0Smrg # sub/foo.h ... \ 276659607e0Smrg # ... 277659607e0Smrg 278659607e0Smrg "$@" -MD -MF "$tmpdepfile" 279659607e0Smrg stat=$? 280659607e0Smrg if test $stat -eq 0; then : 281659607e0Smrg else 282659607e0Smrg rm -f "$tmpdepfile" 283659607e0Smrg exit $stat 284659607e0Smrg fi 285659607e0Smrg rm -f "$depfile" 286659607e0Smrg # Each line is of the form `foo.o: dependent.h', 287659607e0Smrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 288659607e0Smrg # Do two passes, one to just change these to 289659607e0Smrg # `$object: dependent.h' and one to simply `dependent.h:'. 290659607e0Smrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 291659607e0Smrg # Some versions of the HPUX 10.20 sed can't process this invocation 292659607e0Smrg # correctly. Breaking it into two sed invocations is a workaround. 293659607e0Smrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 294659607e0Smrg sed -e 's/$/ :/' >> "$depfile" 295659607e0Smrg rm -f "$tmpdepfile" 296659607e0Smrg ;; 297659607e0Smrg 298659607e0Smrghp2) 299659607e0Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 300659607e0Smrg # compilers, which have integrated preprocessors. The correct option 301659607e0Smrg # to use with these is +Maked; it writes dependencies to a file named 302659607e0Smrg # 'foo.d', which lands next to the object file, wherever that 303659607e0Smrg # happens to be. 304659607e0Smrg # Much of this is similar to the tru64 case; see comments there. 305659607e0Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 306659607e0Smrg test "x$dir" = "x$object" && dir= 307659607e0Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 308659607e0Smrg if test "$libtool" = yes; then 309659607e0Smrg tmpdepfile1=$dir$base.d 310659607e0Smrg tmpdepfile2=$dir.libs/$base.d 311659607e0Smrg "$@" -Wc,+Maked 312659607e0Smrg else 313659607e0Smrg tmpdepfile1=$dir$base.d 314659607e0Smrg tmpdepfile2=$dir$base.d 315659607e0Smrg "$@" +Maked 316659607e0Smrg fi 317659607e0Smrg stat=$? 318659607e0Smrg if test $stat -eq 0; then : 319659607e0Smrg else 320659607e0Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 321659607e0Smrg exit $stat 322659607e0Smrg fi 323659607e0Smrg 324659607e0Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 325659607e0Smrg do 326659607e0Smrg test -f "$tmpdepfile" && break 327659607e0Smrg done 328659607e0Smrg if test -f "$tmpdepfile"; then 329659607e0Smrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 330659607e0Smrg # Add `dependent.h:' lines. 331659607e0Smrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 332659607e0Smrg else 333659607e0Smrg echo "#dummy" > "$depfile" 334659607e0Smrg fi 335659607e0Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 336659607e0Smrg ;; 337659607e0Smrg 338659607e0Smrgtru64) 339659607e0Smrg # The Tru64 compiler uses -MD to generate dependencies as a side 340659607e0Smrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 341659607e0Smrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 342659607e0Smrg # dependencies in `foo.d' instead, so we check for that too. 343659607e0Smrg # Subdirectories are respected. 344659607e0Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345659607e0Smrg test "x$dir" = "x$object" && dir= 346659607e0Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347659607e0Smrg 348659607e0Smrg if test "$libtool" = yes; then 349659607e0Smrg # With Tru64 cc, shared objects can also be used to make a 350659607e0Smrg # static library. This mechanism is used in libtool 1.4 series to 351659607e0Smrg # handle both shared and static libraries in a single compilation. 352659607e0Smrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 353659607e0Smrg # 354659607e0Smrg # With libtool 1.5 this exception was removed, and libtool now 355659607e0Smrg # generates 2 separate objects for the 2 libraries. These two 356659607e0Smrg # compilations output dependencies in $dir.libs/$base.o.d and 357659607e0Smrg # in $dir$base.o.d. We have to check for both files, because 358659607e0Smrg # one of the two compilations can be disabled. We should prefer 359659607e0Smrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 360659607e0Smrg # automatically cleaned when .libs/ is deleted, while ignoring 361659607e0Smrg # the former would cause a distcleancheck panic. 362659607e0Smrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 363659607e0Smrg tmpdepfile2=$dir$base.o.d # libtool 1.5 364659607e0Smrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 365659607e0Smrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 366659607e0Smrg "$@" -Wc,-MD 367659607e0Smrg else 368659607e0Smrg tmpdepfile1=$dir$base.o.d 369659607e0Smrg tmpdepfile2=$dir$base.d 370659607e0Smrg tmpdepfile3=$dir$base.d 371659607e0Smrg tmpdepfile4=$dir$base.d 372659607e0Smrg "$@" -MD 373659607e0Smrg fi 374659607e0Smrg 375659607e0Smrg stat=$? 376659607e0Smrg if test $stat -eq 0; then : 377659607e0Smrg else 378659607e0Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 379659607e0Smrg exit $stat 380659607e0Smrg fi 381659607e0Smrg 382659607e0Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 383659607e0Smrg do 384659607e0Smrg test -f "$tmpdepfile" && break 385659607e0Smrg done 386659607e0Smrg if test -f "$tmpdepfile"; then 387659607e0Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 388659607e0Smrg # That's a tab and a space in the []. 389659607e0Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 390659607e0Smrg else 391659607e0Smrg echo "#dummy" > "$depfile" 392659607e0Smrg fi 393659607e0Smrg rm -f "$tmpdepfile" 394659607e0Smrg ;; 395659607e0Smrg 396659607e0Smrg#nosideeffect) 397659607e0Smrg # This comment above is used by automake to tell side-effect 398659607e0Smrg # dependency tracking mechanisms from slower ones. 399659607e0Smrg 400659607e0Smrgdashmstdout) 401659607e0Smrg # Important note: in order to support this mode, a compiler *must* 402659607e0Smrg # always write the preprocessed file to stdout, regardless of -o. 403659607e0Smrg "$@" || exit $? 404659607e0Smrg 405659607e0Smrg # Remove the call to Libtool. 406659607e0Smrg if test "$libtool" = yes; then 407659607e0Smrg while test $1 != '--mode=compile'; do 408659607e0Smrg shift 409659607e0Smrg done 410659607e0Smrg shift 411659607e0Smrg fi 412659607e0Smrg 413659607e0Smrg # Remove `-o $object'. 414659607e0Smrg IFS=" " 415659607e0Smrg for arg 416659607e0Smrg do 417659607e0Smrg case $arg in 418659607e0Smrg -o) 419659607e0Smrg shift 420659607e0Smrg ;; 421659607e0Smrg $object) 422659607e0Smrg shift 423659607e0Smrg ;; 424659607e0Smrg *) 425659607e0Smrg set fnord "$@" "$arg" 426659607e0Smrg shift # fnord 427659607e0Smrg shift # $arg 428659607e0Smrg ;; 429659607e0Smrg esac 430659607e0Smrg done 431659607e0Smrg 432659607e0Smrg test -z "$dashmflag" && dashmflag=-M 433659607e0Smrg # Require at least two characters before searching for `:' 434659607e0Smrg # in the target name. This is to cope with DOS-style filenames: 435659607e0Smrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 436659607e0Smrg "$@" $dashmflag | 437659607e0Smrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 438659607e0Smrg rm -f "$depfile" 439659607e0Smrg cat < "$tmpdepfile" > "$depfile" 440659607e0Smrg tr ' ' ' 441659607e0Smrg' < "$tmpdepfile" | \ 442659607e0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 443659607e0Smrg## correctly. Breaking it into two sed invocations is a workaround. 444659607e0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 445659607e0Smrg rm -f "$tmpdepfile" 446659607e0Smrg ;; 447659607e0Smrg 448659607e0SmrgdashXmstdout) 449659607e0Smrg # This case only exists to satisfy depend.m4. It is never actually 450659607e0Smrg # run, as this mode is specially recognized in the preamble. 451659607e0Smrg exit 1 452659607e0Smrg ;; 453659607e0Smrg 454659607e0Smrgmakedepend) 455659607e0Smrg "$@" || exit $? 456659607e0Smrg # Remove any Libtool call 457659607e0Smrg if test "$libtool" = yes; then 458659607e0Smrg while test $1 != '--mode=compile'; do 459659607e0Smrg shift 460659607e0Smrg done 461659607e0Smrg shift 462659607e0Smrg fi 463659607e0Smrg # X makedepend 464659607e0Smrg shift 465659607e0Smrg cleared=no 466659607e0Smrg for arg in "$@"; do 467659607e0Smrg case $cleared in 468659607e0Smrg no) 469659607e0Smrg set ""; shift 470659607e0Smrg cleared=yes ;; 471659607e0Smrg esac 472659607e0Smrg case "$arg" in 473659607e0Smrg -D*|-I*) 474659607e0Smrg set fnord "$@" "$arg"; shift ;; 475659607e0Smrg # Strip any option that makedepend may not understand. Remove 476659607e0Smrg # the object too, otherwise makedepend will parse it as a source file. 477659607e0Smrg -*|$object) 478659607e0Smrg ;; 479659607e0Smrg *) 480659607e0Smrg set fnord "$@" "$arg"; shift ;; 481659607e0Smrg esac 482659607e0Smrg done 483659607e0Smrg obj_suffix="`echo $object | sed 's/^.*\././'`" 484659607e0Smrg touch "$tmpdepfile" 485659607e0Smrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 486659607e0Smrg rm -f "$depfile" 487659607e0Smrg cat < "$tmpdepfile" > "$depfile" 488659607e0Smrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 489659607e0Smrg' | \ 490659607e0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation 491659607e0Smrg## correctly. Breaking it into two sed invocations is a workaround. 492659607e0Smrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 493659607e0Smrg rm -f "$tmpdepfile" "$tmpdepfile".bak 494659607e0Smrg ;; 495659607e0Smrg 496659607e0Smrgcpp) 497659607e0Smrg # Important note: in order to support this mode, a compiler *must* 498659607e0Smrg # always write the preprocessed file to stdout. 499659607e0Smrg "$@" || exit $? 500659607e0Smrg 501659607e0Smrg # Remove the call to Libtool. 502659607e0Smrg if test "$libtool" = yes; then 503659607e0Smrg while test $1 != '--mode=compile'; do 504659607e0Smrg shift 505659607e0Smrg done 506659607e0Smrg shift 507659607e0Smrg fi 508659607e0Smrg 509659607e0Smrg # Remove `-o $object'. 510659607e0Smrg IFS=" " 511659607e0Smrg for arg 512659607e0Smrg do 513659607e0Smrg case $arg in 514659607e0Smrg -o) 515659607e0Smrg shift 516659607e0Smrg ;; 517659607e0Smrg $object) 518659607e0Smrg shift 519659607e0Smrg ;; 520659607e0Smrg *) 521659607e0Smrg set fnord "$@" "$arg" 522659607e0Smrg shift # fnord 523659607e0Smrg shift # $arg 524659607e0Smrg ;; 525659607e0Smrg esac 526659607e0Smrg done 527659607e0Smrg 528659607e0Smrg "$@" -E | 529659607e0Smrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 530659607e0Smrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 531659607e0Smrg sed '$ s: \\$::' > "$tmpdepfile" 532659607e0Smrg rm -f "$depfile" 533659607e0Smrg echo "$object : \\" > "$depfile" 534659607e0Smrg cat < "$tmpdepfile" >> "$depfile" 535659607e0Smrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 536659607e0Smrg rm -f "$tmpdepfile" 537659607e0Smrg ;; 538659607e0Smrg 539659607e0Smrgmsvisualcpp) 540659607e0Smrg # Important note: in order to support this mode, a compiler *must* 541659607e0Smrg # always write the preprocessed file to stdout, regardless of -o, 542659607e0Smrg # because we must use -o when running libtool. 543659607e0Smrg "$@" || exit $? 544659607e0Smrg IFS=" " 545659607e0Smrg for arg 546659607e0Smrg do 547659607e0Smrg case "$arg" in 548659607e0Smrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 549659607e0Smrg set fnord "$@" 550659607e0Smrg shift 551659607e0Smrg shift 552659607e0Smrg ;; 553659607e0Smrg *) 554659607e0Smrg set fnord "$@" "$arg" 555659607e0Smrg shift 556659607e0Smrg shift 557659607e0Smrg ;; 558659607e0Smrg esac 559659607e0Smrg done 560659607e0Smrg "$@" -E | 561659607e0Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 562659607e0Smrg rm -f "$depfile" 563659607e0Smrg echo "$object : \\" > "$depfile" 564659607e0Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 565659607e0Smrg echo " " >> "$depfile" 566659607e0Smrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 567659607e0Smrg rm -f "$tmpdepfile" 568659607e0Smrg ;; 569659607e0Smrg 570659607e0Smrgnone) 571659607e0Smrg exec "$@" 572659607e0Smrg ;; 573659607e0Smrg 574659607e0Smrg*) 575659607e0Smrg echo "Unknown depmode $depmode" 1>&2 576659607e0Smrg exit 1 577659607e0Smrg ;; 578659607e0Smrgesac 579659607e0Smrg 580659607e0Smrgexit 0 581659607e0Smrg 582659607e0Smrg# Local Variables: 583659607e0Smrg# mode: shell-script 584659607e0Smrg# sh-indentation: 2 585659607e0Smrg# eval: (add-hook 'write-file-hooks 'time-stamp) 586659607e0Smrg# time-stamp-start: "scriptversion=" 587659607e0Smrg# time-stamp-format: "%:y-%02m-%02d.%02H" 588659607e0Smrg# time-stamp-end: "$" 589659607e0Smrg# End: 590