depcomp revision c5629e66
1266e564dSmrg#! /bin/sh 2266e564dSmrg# depcomp - compile a program generating dependencies as side-effects 3266e564dSmrg 4c5629e66Smrgscriptversion=2007-03-29.01 5266e564dSmrg 6c5629e66Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software 7266e564dSmrg# Foundation, Inc. 8266e564dSmrg 9266e564dSmrg# This program is free software; you can redistribute it and/or modify 10266e564dSmrg# it under the terms of the GNU General Public License as published by 11266e564dSmrg# the Free Software Foundation; either version 2, or (at your option) 12266e564dSmrg# any later version. 13266e564dSmrg 14266e564dSmrg# This program is distributed in the hope that it will be useful, 15266e564dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 16266e564dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17266e564dSmrg# GNU General Public License for more details. 18266e564dSmrg 19266e564dSmrg# You should have received a copy of the GNU General Public License 20266e564dSmrg# along with this program; if not, write to the Free Software 21266e564dSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22266e564dSmrg# 02110-1301, USA. 23266e564dSmrg 24266e564dSmrg# As a special exception to the GNU General Public License, if you 25266e564dSmrg# distribute this file as part of a program that contains a 26266e564dSmrg# configuration script generated by Autoconf, you may include it under 27266e564dSmrg# the same distribution terms that you use for the rest of that program. 28266e564dSmrg 29266e564dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 30266e564dSmrg 31266e564dSmrgcase $1 in 32266e564dSmrg '') 33266e564dSmrg echo "$0: No command. Try \`$0 --help' for more information." 1>&2 34266e564dSmrg exit 1; 35266e564dSmrg ;; 36266e564dSmrg -h | --h*) 37266e564dSmrg cat <<\EOF 38266e564dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 39266e564dSmrg 40266e564dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 41266e564dSmrgas side-effects. 42266e564dSmrg 43266e564dSmrgEnvironment variables: 44266e564dSmrg depmode Dependency tracking mode. 45266e564dSmrg source Source file read by `PROGRAMS ARGS'. 46266e564dSmrg object Object file output by `PROGRAMS ARGS'. 47266e564dSmrg DEPDIR directory where to store dependencies. 48266e564dSmrg depfile Dependency file to output. 49266e564dSmrg tmpdepfile Temporary file to use when outputing dependencies. 50266e564dSmrg libtool Whether libtool is used (yes/no). 51266e564dSmrg 52266e564dSmrgReport bugs to <bug-automake@gnu.org>. 53266e564dSmrgEOF 54266e564dSmrg exit $? 55266e564dSmrg ;; 56266e564dSmrg -v | --v*) 57266e564dSmrg echo "depcomp $scriptversion" 58266e564dSmrg exit $? 59266e564dSmrg ;; 60266e564dSmrgesac 61266e564dSmrg 62266e564dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 63266e564dSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 64266e564dSmrg exit 1 65266e564dSmrgfi 66266e564dSmrg 67266e564dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 68266e564dSmrgdepfile=${depfile-`echo "$object" | 69266e564dSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 70266e564dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 71266e564dSmrg 72266e564dSmrgrm -f "$tmpdepfile" 73266e564dSmrg 74266e564dSmrg# Some modes work just like other modes, but use different flags. We 75266e564dSmrg# parameterize here, but still list the modes in the big case below, 76266e564dSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 77266e564dSmrg# here, because this file can only contain one case statement. 78266e564dSmrgif test "$depmode" = hp; then 79266e564dSmrg # HP compiler uses -M and no extra arg. 80266e564dSmrg gccflag=-M 81266e564dSmrg depmode=gcc 82266e564dSmrgfi 83266e564dSmrg 84266e564dSmrgif test "$depmode" = dashXmstdout; then 85266e564dSmrg # This is just like dashmstdout with a different argument. 86266e564dSmrg dashmflag=-xM 87266e564dSmrg depmode=dashmstdout 88266e564dSmrgfi 89266e564dSmrg 90266e564dSmrgcase "$depmode" in 91266e564dSmrggcc3) 92266e564dSmrg## gcc 3 implements dependency tracking that does exactly what 93266e564dSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 94266e564dSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 95266e564dSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 96266e564dSmrg## the command line argument order; so add the flags where they 97266e564dSmrg## appear in depend2.am. Note that the slowdown incurred here 98266e564dSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 99266e564dSmrg for arg 100266e564dSmrg do 101266e564dSmrg case $arg in 102266e564dSmrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 103266e564dSmrg *) set fnord "$@" "$arg" ;; 104266e564dSmrg esac 105266e564dSmrg shift # fnord 106266e564dSmrg shift # $arg 107266e564dSmrg done 108266e564dSmrg "$@" 109266e564dSmrg stat=$? 110266e564dSmrg if test $stat -eq 0; then : 111266e564dSmrg else 112266e564dSmrg rm -f "$tmpdepfile" 113266e564dSmrg exit $stat 114266e564dSmrg fi 115266e564dSmrg mv "$tmpdepfile" "$depfile" 116266e564dSmrg ;; 117266e564dSmrg 118266e564dSmrggcc) 119266e564dSmrg## There are various ways to get dependency output from gcc. Here's 120266e564dSmrg## why we pick this rather obscure method: 121266e564dSmrg## - Don't want to use -MD because we'd like the dependencies to end 122266e564dSmrg## up in a subdir. Having to rename by hand is ugly. 123266e564dSmrg## (We might end up doing this anyway to support other compilers.) 124266e564dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 125266e564dSmrg## -MM, not -M (despite what the docs say). 126266e564dSmrg## - Using -M directly means running the compiler twice (even worse 127266e564dSmrg## than renaming). 128266e564dSmrg if test -z "$gccflag"; then 129266e564dSmrg gccflag=-MD, 130266e564dSmrg fi 131266e564dSmrg "$@" -Wp,"$gccflag$tmpdepfile" 132266e564dSmrg stat=$? 133266e564dSmrg if test $stat -eq 0; then : 134266e564dSmrg else 135266e564dSmrg rm -f "$tmpdepfile" 136266e564dSmrg exit $stat 137266e564dSmrg fi 138266e564dSmrg rm -f "$depfile" 139266e564dSmrg echo "$object : \\" > "$depfile" 140266e564dSmrg alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 141266e564dSmrg## The second -e expression handles DOS-style file names with drive letters. 142266e564dSmrg sed -e 's/^[^:]*: / /' \ 143266e564dSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 144266e564dSmrg## This next piece of magic avoids the `deleted header file' problem. 145266e564dSmrg## The problem is that when a header file which appears in a .P file 146266e564dSmrg## is deleted, the dependency causes make to die (because there is 147266e564dSmrg## typically no way to rebuild the header). We avoid this by adding 148266e564dSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 149266e564dSmrg## this for us directly. 150266e564dSmrg tr ' ' ' 151266e564dSmrg' < "$tmpdepfile" | 152266e564dSmrg## Some versions of gcc put a space before the `:'. On the theory 153266e564dSmrg## that the space means something, we add a space to the output as 154266e564dSmrg## well. 155266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 156266e564dSmrg## correctly. Breaking it into two sed invocations is a workaround. 157266e564dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 158266e564dSmrg rm -f "$tmpdepfile" 159266e564dSmrg ;; 160266e564dSmrg 161266e564dSmrghp) 162266e564dSmrg # This case exists only to let depend.m4 do its work. It works by 163266e564dSmrg # looking at the text of this script. This case will never be run, 164266e564dSmrg # since it is checked for above. 165266e564dSmrg exit 1 166266e564dSmrg ;; 167266e564dSmrg 168266e564dSmrgsgi) 169266e564dSmrg if test "$libtool" = yes; then 170266e564dSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 171266e564dSmrg else 172266e564dSmrg "$@" -MDupdate "$tmpdepfile" 173266e564dSmrg fi 174266e564dSmrg stat=$? 175266e564dSmrg if test $stat -eq 0; then : 176266e564dSmrg else 177266e564dSmrg rm -f "$tmpdepfile" 178266e564dSmrg exit $stat 179266e564dSmrg fi 180266e564dSmrg rm -f "$depfile" 181266e564dSmrg 182266e564dSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 183266e564dSmrg echo "$object : \\" > "$depfile" 184266e564dSmrg 185266e564dSmrg # Clip off the initial element (the dependent). Don't try to be 186266e564dSmrg # clever and replace this with sed code, as IRIX sed won't handle 187266e564dSmrg # lines with more than a fixed number of characters (4096 in 188266e564dSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 189266e564dSmrg # the IRIX cc adds comments like `#:fec' to the end of the 190266e564dSmrg # dependency line. 191266e564dSmrg tr ' ' ' 192266e564dSmrg' < "$tmpdepfile" \ 193266e564dSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 194266e564dSmrg tr ' 195266e564dSmrg' ' ' >> $depfile 196266e564dSmrg echo >> $depfile 197266e564dSmrg 198266e564dSmrg # The second pass generates a dummy entry for each header file. 199266e564dSmrg tr ' ' ' 200266e564dSmrg' < "$tmpdepfile" \ 201266e564dSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 202266e564dSmrg >> $depfile 203266e564dSmrg else 204266e564dSmrg # The sourcefile does not contain any dependencies, so just 205266e564dSmrg # store a dummy comment line, to avoid errors with the Makefile 206266e564dSmrg # "include basename.Plo" scheme. 207266e564dSmrg echo "#dummy" > "$depfile" 208266e564dSmrg fi 209266e564dSmrg rm -f "$tmpdepfile" 210266e564dSmrg ;; 211266e564dSmrg 212266e564dSmrgaix) 213266e564dSmrg # The C for AIX Compiler uses -M and outputs the dependencies 214266e564dSmrg # in a .u file. In older versions, this file always lives in the 215266e564dSmrg # current directory. Also, the AIX compiler puts `$object:' at the 216266e564dSmrg # start of each line; $object doesn't have directory information. 217266e564dSmrg # Version 6 uses the directory in both cases. 218c5629e66Smrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 219c5629e66Smrg test "x$dir" = "x$object" && dir= 220c5629e66Smrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 221266e564dSmrg if test "$libtool" = yes; then 222c5629e66Smrg tmpdepfile1=$dir$base.u 223c5629e66Smrg tmpdepfile2=$base.u 224c5629e66Smrg tmpdepfile3=$dir.libs/$base.u 225266e564dSmrg "$@" -Wc,-M 226266e564dSmrg else 227c5629e66Smrg tmpdepfile1=$dir$base.u 228c5629e66Smrg tmpdepfile2=$dir$base.u 229c5629e66Smrg tmpdepfile3=$dir$base.u 230266e564dSmrg "$@" -M 231266e564dSmrg fi 232266e564dSmrg stat=$? 233266e564dSmrg 234266e564dSmrg if test $stat -eq 0; then : 235266e564dSmrg else 236c5629e66Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 237266e564dSmrg exit $stat 238266e564dSmrg fi 239266e564dSmrg 240c5629e66Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 241c5629e66Smrg do 242c5629e66Smrg test -f "$tmpdepfile" && break 243c5629e66Smrg done 244266e564dSmrg if test -f "$tmpdepfile"; then 245266e564dSmrg # Each line is of the form `foo.o: dependent.h'. 246266e564dSmrg # Do two passes, one to just change these to 247266e564dSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 248c5629e66Smrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 249c5629e66Smrg # That's a tab and a space in the []. 250c5629e66Smrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 251266e564dSmrg else 252266e564dSmrg # The sourcefile does not contain any dependencies, so just 253266e564dSmrg # store a dummy comment line, to avoid errors with the Makefile 254266e564dSmrg # "include basename.Plo" scheme. 255266e564dSmrg echo "#dummy" > "$depfile" 256266e564dSmrg fi 257266e564dSmrg rm -f "$tmpdepfile" 258266e564dSmrg ;; 259266e564dSmrg 260266e564dSmrgicc) 261266e564dSmrg # Intel's C compiler understands `-MD -MF file'. However on 262266e564dSmrg # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 263266e564dSmrg # ICC 7.0 will fill foo.d with something like 264266e564dSmrg # foo.o: sub/foo.c 265266e564dSmrg # foo.o: sub/foo.h 266266e564dSmrg # which is wrong. We want: 267266e564dSmrg # sub/foo.o: sub/foo.c 268266e564dSmrg # sub/foo.o: sub/foo.h 269266e564dSmrg # sub/foo.c: 270266e564dSmrg # sub/foo.h: 271266e564dSmrg # ICC 7.1 will output 272266e564dSmrg # foo.o: sub/foo.c sub/foo.h 273266e564dSmrg # and will wrap long lines using \ : 274266e564dSmrg # foo.o: sub/foo.c ... \ 275266e564dSmrg # sub/foo.h ... \ 276266e564dSmrg # ... 277266e564dSmrg 278266e564dSmrg "$@" -MD -MF "$tmpdepfile" 279266e564dSmrg stat=$? 280266e564dSmrg if test $stat -eq 0; then : 281266e564dSmrg else 282266e564dSmrg rm -f "$tmpdepfile" 283266e564dSmrg exit $stat 284266e564dSmrg fi 285266e564dSmrg rm -f "$depfile" 286266e564dSmrg # Each line is of the form `foo.o: dependent.h', 287266e564dSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 288266e564dSmrg # Do two passes, one to just change these to 289266e564dSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 290266e564dSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 291266e564dSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 292266e564dSmrg # correctly. Breaking it into two sed invocations is a workaround. 293266e564dSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 294266e564dSmrg sed -e 's/$/ :/' >> "$depfile" 295266e564dSmrg rm -f "$tmpdepfile" 296266e564dSmrg ;; 297266e564dSmrg 298266e564dSmrghp2) 299266e564dSmrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 300266e564dSmrg # compilers, which have integrated preprocessors. The correct option 301266e564dSmrg # to use with these is +Maked; it writes dependencies to a file named 302266e564dSmrg # 'foo.d', which lands next to the object file, wherever that 303266e564dSmrg # happens to be. 304266e564dSmrg # Much of this is similar to the tru64 case; see comments there. 305266e564dSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 306266e564dSmrg test "x$dir" = "x$object" && dir= 307266e564dSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 308266e564dSmrg if test "$libtool" = yes; then 309266e564dSmrg tmpdepfile1=$dir$base.d 310266e564dSmrg tmpdepfile2=$dir.libs/$base.d 311266e564dSmrg "$@" -Wc,+Maked 312266e564dSmrg else 313266e564dSmrg tmpdepfile1=$dir$base.d 314266e564dSmrg tmpdepfile2=$dir$base.d 315266e564dSmrg "$@" +Maked 316266e564dSmrg fi 317266e564dSmrg stat=$? 318266e564dSmrg if test $stat -eq 0; then : 319266e564dSmrg else 320266e564dSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" 321266e564dSmrg exit $stat 322266e564dSmrg fi 323266e564dSmrg 324266e564dSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 325266e564dSmrg do 326266e564dSmrg test -f "$tmpdepfile" && break 327266e564dSmrg done 328266e564dSmrg if test -f "$tmpdepfile"; then 329266e564dSmrg sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 330266e564dSmrg # Add `dependent.h:' lines. 331266e564dSmrg sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" 332266e564dSmrg else 333266e564dSmrg echo "#dummy" > "$depfile" 334266e564dSmrg fi 335266e564dSmrg rm -f "$tmpdepfile" "$tmpdepfile2" 336266e564dSmrg ;; 337266e564dSmrg 338266e564dSmrgtru64) 339266e564dSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 340266e564dSmrg # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 341266e564dSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 342266e564dSmrg # dependencies in `foo.d' instead, so we check for that too. 343266e564dSmrg # Subdirectories are respected. 344266e564dSmrg dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 345266e564dSmrg test "x$dir" = "x$object" && dir= 346266e564dSmrg base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 347266e564dSmrg 348266e564dSmrg if test "$libtool" = yes; then 349266e564dSmrg # With Tru64 cc, shared objects can also be used to make a 350266e564dSmrg # static library. This mechanism is used in libtool 1.4 series to 351266e564dSmrg # handle both shared and static libraries in a single compilation. 352266e564dSmrg # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 353266e564dSmrg # 354266e564dSmrg # With libtool 1.5 this exception was removed, and libtool now 355266e564dSmrg # generates 2 separate objects for the 2 libraries. These two 356266e564dSmrg # compilations output dependencies in $dir.libs/$base.o.d and 357266e564dSmrg # in $dir$base.o.d. We have to check for both files, because 358266e564dSmrg # one of the two compilations can be disabled. We should prefer 359266e564dSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 360266e564dSmrg # automatically cleaned when .libs/ is deleted, while ignoring 361266e564dSmrg # the former would cause a distcleancheck panic. 362266e564dSmrg tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 363266e564dSmrg tmpdepfile2=$dir$base.o.d # libtool 1.5 364266e564dSmrg tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 365266e564dSmrg tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 366266e564dSmrg "$@" -Wc,-MD 367266e564dSmrg else 368266e564dSmrg tmpdepfile1=$dir$base.o.d 369266e564dSmrg tmpdepfile2=$dir$base.d 370266e564dSmrg tmpdepfile3=$dir$base.d 371266e564dSmrg tmpdepfile4=$dir$base.d 372266e564dSmrg "$@" -MD 373266e564dSmrg fi 374266e564dSmrg 375266e564dSmrg stat=$? 376266e564dSmrg if test $stat -eq 0; then : 377266e564dSmrg else 378266e564dSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 379266e564dSmrg exit $stat 380266e564dSmrg fi 381266e564dSmrg 382266e564dSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 383266e564dSmrg do 384266e564dSmrg test -f "$tmpdepfile" && break 385266e564dSmrg done 386266e564dSmrg if test -f "$tmpdepfile"; then 387266e564dSmrg sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 388266e564dSmrg # That's a tab and a space in the []. 389266e564dSmrg sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 390266e564dSmrg else 391266e564dSmrg echo "#dummy" > "$depfile" 392266e564dSmrg fi 393266e564dSmrg rm -f "$tmpdepfile" 394266e564dSmrg ;; 395266e564dSmrg 396266e564dSmrg#nosideeffect) 397266e564dSmrg # This comment above is used by automake to tell side-effect 398266e564dSmrg # dependency tracking mechanisms from slower ones. 399266e564dSmrg 400266e564dSmrgdashmstdout) 401266e564dSmrg # Important note: in order to support this mode, a compiler *must* 402266e564dSmrg # always write the preprocessed file to stdout, regardless of -o. 403266e564dSmrg "$@" || exit $? 404266e564dSmrg 405266e564dSmrg # Remove the call to Libtool. 406266e564dSmrg if test "$libtool" = yes; then 407266e564dSmrg while test $1 != '--mode=compile'; do 408266e564dSmrg shift 409266e564dSmrg done 410266e564dSmrg shift 411266e564dSmrg fi 412266e564dSmrg 413266e564dSmrg # Remove `-o $object'. 414266e564dSmrg IFS=" " 415266e564dSmrg for arg 416266e564dSmrg do 417266e564dSmrg case $arg in 418266e564dSmrg -o) 419266e564dSmrg shift 420266e564dSmrg ;; 421266e564dSmrg $object) 422266e564dSmrg shift 423266e564dSmrg ;; 424266e564dSmrg *) 425266e564dSmrg set fnord "$@" "$arg" 426266e564dSmrg shift # fnord 427266e564dSmrg shift # $arg 428266e564dSmrg ;; 429266e564dSmrg esac 430266e564dSmrg done 431266e564dSmrg 432266e564dSmrg test -z "$dashmflag" && dashmflag=-M 433266e564dSmrg # Require at least two characters before searching for `:' 434266e564dSmrg # in the target name. This is to cope with DOS-style filenames: 435266e564dSmrg # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 436266e564dSmrg "$@" $dashmflag | 437266e564dSmrg sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 438266e564dSmrg rm -f "$depfile" 439266e564dSmrg cat < "$tmpdepfile" > "$depfile" 440266e564dSmrg tr ' ' ' 441266e564dSmrg' < "$tmpdepfile" | \ 442266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 443266e564dSmrg## correctly. Breaking it into two sed invocations is a workaround. 444266e564dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 445266e564dSmrg rm -f "$tmpdepfile" 446266e564dSmrg ;; 447266e564dSmrg 448266e564dSmrgdashXmstdout) 449266e564dSmrg # This case only exists to satisfy depend.m4. It is never actually 450266e564dSmrg # run, as this mode is specially recognized in the preamble. 451266e564dSmrg exit 1 452266e564dSmrg ;; 453266e564dSmrg 454266e564dSmrgmakedepend) 455266e564dSmrg "$@" || exit $? 456266e564dSmrg # Remove any Libtool call 457266e564dSmrg if test "$libtool" = yes; then 458266e564dSmrg while test $1 != '--mode=compile'; do 459266e564dSmrg shift 460266e564dSmrg done 461266e564dSmrg shift 462266e564dSmrg fi 463266e564dSmrg # X makedepend 464266e564dSmrg shift 465266e564dSmrg cleared=no 466266e564dSmrg for arg in "$@"; do 467266e564dSmrg case $cleared in 468266e564dSmrg no) 469266e564dSmrg set ""; shift 470266e564dSmrg cleared=yes ;; 471266e564dSmrg esac 472266e564dSmrg case "$arg" in 473266e564dSmrg -D*|-I*) 474266e564dSmrg set fnord "$@" "$arg"; shift ;; 475266e564dSmrg # Strip any option that makedepend may not understand. Remove 476266e564dSmrg # the object too, otherwise makedepend will parse it as a source file. 477266e564dSmrg -*|$object) 478266e564dSmrg ;; 479266e564dSmrg *) 480266e564dSmrg set fnord "$@" "$arg"; shift ;; 481266e564dSmrg esac 482266e564dSmrg done 483266e564dSmrg obj_suffix="`echo $object | sed 's/^.*\././'`" 484266e564dSmrg touch "$tmpdepfile" 485266e564dSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 486266e564dSmrg rm -f "$depfile" 487266e564dSmrg cat < "$tmpdepfile" > "$depfile" 488266e564dSmrg sed '1,2d' "$tmpdepfile" | tr ' ' ' 489266e564dSmrg' | \ 490266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 491266e564dSmrg## correctly. Breaking it into two sed invocations is a workaround. 492266e564dSmrg sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 493266e564dSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 494266e564dSmrg ;; 495266e564dSmrg 496266e564dSmrgcpp) 497266e564dSmrg # Important note: in order to support this mode, a compiler *must* 498266e564dSmrg # always write the preprocessed file to stdout. 499266e564dSmrg "$@" || exit $? 500266e564dSmrg 501266e564dSmrg # Remove the call to Libtool. 502266e564dSmrg if test "$libtool" = yes; then 503266e564dSmrg while test $1 != '--mode=compile'; do 504266e564dSmrg shift 505266e564dSmrg done 506266e564dSmrg shift 507266e564dSmrg fi 508266e564dSmrg 509266e564dSmrg # Remove `-o $object'. 510266e564dSmrg IFS=" " 511266e564dSmrg for arg 512266e564dSmrg do 513266e564dSmrg case $arg in 514266e564dSmrg -o) 515266e564dSmrg shift 516266e564dSmrg ;; 517266e564dSmrg $object) 518266e564dSmrg shift 519266e564dSmrg ;; 520266e564dSmrg *) 521266e564dSmrg set fnord "$@" "$arg" 522266e564dSmrg shift # fnord 523266e564dSmrg shift # $arg 524266e564dSmrg ;; 525266e564dSmrg esac 526266e564dSmrg done 527266e564dSmrg 528266e564dSmrg "$@" -E | 529266e564dSmrg sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 530266e564dSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 531266e564dSmrg sed '$ s: \\$::' > "$tmpdepfile" 532266e564dSmrg rm -f "$depfile" 533266e564dSmrg echo "$object : \\" > "$depfile" 534266e564dSmrg cat < "$tmpdepfile" >> "$depfile" 535266e564dSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 536266e564dSmrg rm -f "$tmpdepfile" 537266e564dSmrg ;; 538266e564dSmrg 539266e564dSmrgmsvisualcpp) 540266e564dSmrg # Important note: in order to support this mode, a compiler *must* 541266e564dSmrg # always write the preprocessed file to stdout, regardless of -o, 542266e564dSmrg # because we must use -o when running libtool. 543266e564dSmrg "$@" || exit $? 544266e564dSmrg IFS=" " 545266e564dSmrg for arg 546266e564dSmrg do 547266e564dSmrg case "$arg" in 548266e564dSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 549266e564dSmrg set fnord "$@" 550266e564dSmrg shift 551266e564dSmrg shift 552266e564dSmrg ;; 553266e564dSmrg *) 554266e564dSmrg set fnord "$@" "$arg" 555266e564dSmrg shift 556266e564dSmrg shift 557266e564dSmrg ;; 558266e564dSmrg esac 559266e564dSmrg done 560266e564dSmrg "$@" -E | 561266e564dSmrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 562266e564dSmrg rm -f "$depfile" 563266e564dSmrg echo "$object : \\" > "$depfile" 564266e564dSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 565266e564dSmrg echo " " >> "$depfile" 566266e564dSmrg . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 567266e564dSmrg rm -f "$tmpdepfile" 568266e564dSmrg ;; 569266e564dSmrg 570266e564dSmrgnone) 571266e564dSmrg exec "$@" 572266e564dSmrg ;; 573266e564dSmrg 574266e564dSmrg*) 575266e564dSmrg echo "Unknown depmode $depmode" 1>&2 576266e564dSmrg exit 1 577266e564dSmrg ;; 578266e564dSmrgesac 579266e564dSmrg 580266e564dSmrgexit 0 581266e564dSmrg 582266e564dSmrg# Local Variables: 583266e564dSmrg# mode: shell-script 584266e564dSmrg# sh-indentation: 2 585266e564dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp) 586266e564dSmrg# time-stamp-start: "scriptversion=" 587266e564dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 588266e564dSmrg# time-stamp-end: "$" 589266e564dSmrg# End: 590