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