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