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