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