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