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