1 1.1 maya #! /bin/sh 2 1.1 maya # depcomp - compile a program generating dependencies as side-effects 3 1.1 maya 4 1.1.1.2 christos scriptversion=2018-03-07.03; # UTC 5 1.1 maya 6 1.1.1.3 wiz # Copyright (C) 1999-2021 Free Software Foundation, Inc. 7 1.1 maya 8 1.1 maya # This program is free software; you can redistribute it and/or modify 9 1.1 maya # it under the terms of the GNU General Public License as published by 10 1.1 maya # the Free Software Foundation; either version 2, or (at your option) 11 1.1 maya # any later version. 12 1.1 maya 13 1.1 maya # This program is distributed in the hope that it will be useful, 14 1.1 maya # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 1.1 maya # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 1.1 maya # GNU General Public License for more details. 17 1.1 maya 18 1.1 maya # You should have received a copy of the GNU General Public License 19 1.1.1.2 christos # along with this program. If not, see <https://www.gnu.org/licenses/>. 20 1.1 maya 21 1.1 maya # As a special exception to the GNU General Public License, if you 22 1.1 maya # distribute this file as part of a program that contains a 23 1.1 maya # configuration script generated by Autoconf, you may include it under 24 1.1 maya # the same distribution terms that you use for the rest of that program. 25 1.1 maya 26 1.1 maya # Originally written by Alexandre Oliva <oliva (at] dcc.unicamp.br>. 27 1.1 maya 28 1.1 maya case $1 in 29 1.1 maya '') 30 1.1 maya echo "$0: No command. Try '$0 --help' for more information." 1>&2 31 1.1 maya exit 1; 32 1.1 maya ;; 33 1.1 maya -h | --h*) 34 1.1 maya cat <<\EOF 35 1.1 maya Usage: depcomp [--help] [--version] PROGRAM [ARGS] 36 1.1 maya 37 1.1 maya Run PROGRAMS ARGS to compile a file, generating dependencies 38 1.1 maya as side-effects. 39 1.1 maya 40 1.1 maya Environment variables: 41 1.1 maya depmode Dependency tracking mode. 42 1.1 maya source Source file read by 'PROGRAMS ARGS'. 43 1.1 maya object Object file output by 'PROGRAMS ARGS'. 44 1.1 maya DEPDIR directory where to store dependencies. 45 1.1 maya depfile Dependency file to output. 46 1.1 maya tmpdepfile Temporary file to use when outputting dependencies. 47 1.1 maya libtool Whether libtool is used (yes/no). 48 1.1 maya 49 1.1 maya Report bugs to <bug-automake@gnu.org>. 50 1.1 maya EOF 51 1.1 maya exit $? 52 1.1 maya ;; 53 1.1 maya -v | --v*) 54 1.1 maya echo "depcomp $scriptversion" 55 1.1 maya exit $? 56 1.1 maya ;; 57 1.1 maya esac 58 1.1 maya 59 1.1 maya # Get the directory component of the given path, and save it in the 60 1.1 maya # global variables '$dir'. Note that this directory component will 61 1.1 maya # be either empty or ending with a '/' character. This is deliberate. 62 1.1 maya set_dir_from () 63 1.1 maya { 64 1.1 maya case $1 in 65 1.1 maya */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66 1.1 maya *) dir=;; 67 1.1 maya esac 68 1.1 maya } 69 1.1 maya 70 1.1 maya # Get the suffix-stripped basename of the given path, and save it the 71 1.1 maya # global variable '$base'. 72 1.1 maya set_base_from () 73 1.1 maya { 74 1.1 maya base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75 1.1 maya } 76 1.1 maya 77 1.1 maya # If no dependency file was actually created by the compiler invocation, 78 1.1 maya # we still have to create a dummy depfile, to avoid errors with the 79 1.1 maya # Makefile "include basename.Plo" scheme. 80 1.1 maya make_dummy_depfile () 81 1.1 maya { 82 1.1 maya echo "#dummy" > "$depfile" 83 1.1 maya } 84 1.1 maya 85 1.1 maya # Factor out some common post-processing of the generated depfile. 86 1.1 maya # Requires the auxiliary global variable '$tmpdepfile' to be set. 87 1.1 maya aix_post_process_depfile () 88 1.1 maya { 89 1.1 maya # If the compiler actually managed to produce a dependency file, 90 1.1 maya # post-process it. 91 1.1 maya if test -f "$tmpdepfile"; then 92 1.1 maya # Each line is of the form 'foo.o: dependency.h'. 93 1.1 maya # Do two passes, one to just change these to 94 1.1 maya # $object: dependency.h 95 1.1 maya # and one to simply output 96 1.1 maya # dependency.h: 97 1.1 maya # which is needed to avoid the deleted-header problem. 98 1.1 maya { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99 1.1 maya sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100 1.1 maya } > "$depfile" 101 1.1 maya rm -f "$tmpdepfile" 102 1.1 maya else 103 1.1 maya make_dummy_depfile 104 1.1 maya fi 105 1.1 maya } 106 1.1 maya 107 1.1 maya # A tabulation character. 108 1.1 maya tab=' ' 109 1.1 maya # A newline character. 110 1.1 maya nl=' 111 1.1 maya ' 112 1.1 maya # Character ranges might be problematic outside the C locale. 113 1.1 maya # These definitions help. 114 1.1 maya upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115 1.1 maya lower=abcdefghijklmnopqrstuvwxyz 116 1.1 maya digits=0123456789 117 1.1 maya alpha=${upper}${lower} 118 1.1 maya 119 1.1 maya if test -z "$depmode" || test -z "$source" || test -z "$object"; then 120 1.1 maya echo "depcomp: Variables source, object and depmode must be set" 1>&2 121 1.1 maya exit 1 122 1.1 maya fi 123 1.1 maya 124 1.1 maya # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 125 1.1 maya depfile=${depfile-`echo "$object" | 126 1.1 maya sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 127 1.1 maya tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 128 1.1 maya 129 1.1 maya rm -f "$tmpdepfile" 130 1.1 maya 131 1.1 maya # Avoid interferences from the environment. 132 1.1 maya gccflag= dashmflag= 133 1.1 maya 134 1.1 maya # Some modes work just like other modes, but use different flags. We 135 1.1 maya # parameterize here, but still list the modes in the big case below, 136 1.1 maya # to make depend.m4 easier to write. Note that we *cannot* use a case 137 1.1 maya # here, because this file can only contain one case statement. 138 1.1 maya if test "$depmode" = hp; then 139 1.1 maya # HP compiler uses -M and no extra arg. 140 1.1 maya gccflag=-M 141 1.1 maya depmode=gcc 142 1.1 maya fi 143 1.1 maya 144 1.1 maya if test "$depmode" = dashXmstdout; then 145 1.1 maya # This is just like dashmstdout with a different argument. 146 1.1 maya dashmflag=-xM 147 1.1 maya depmode=dashmstdout 148 1.1 maya fi 149 1.1 maya 150 1.1 maya cygpath_u="cygpath -u -f -" 151 1.1 maya if test "$depmode" = msvcmsys; then 152 1.1 maya # This is just like msvisualcpp but w/o cygpath translation. 153 1.1 maya # Just convert the backslash-escaped backslashes to single forward 154 1.1 maya # slashes to satisfy depend.m4 155 1.1 maya cygpath_u='sed s,\\\\,/,g' 156 1.1 maya depmode=msvisualcpp 157 1.1 maya fi 158 1.1 maya 159 1.1 maya if test "$depmode" = msvc7msys; then 160 1.1 maya # This is just like msvc7 but w/o cygpath translation. 161 1.1 maya # Just convert the backslash-escaped backslashes to single forward 162 1.1 maya # slashes to satisfy depend.m4 163 1.1 maya cygpath_u='sed s,\\\\,/,g' 164 1.1 maya depmode=msvc7 165 1.1 maya fi 166 1.1 maya 167 1.1 maya if test "$depmode" = xlc; then 168 1.1 maya # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169 1.1 maya gccflag=-qmakedep=gcc,-MF 170 1.1 maya depmode=gcc 171 1.1 maya fi 172 1.1 maya 173 1.1 maya case "$depmode" in 174 1.1 maya gcc3) 175 1.1 maya ## gcc 3 implements dependency tracking that does exactly what 176 1.1 maya ## we want. Yay! Note: for some reason libtool 1.4 doesn't like 177 1.1 maya ## it if -MD -MP comes after the -MF stuff. Hmm. 178 1.1 maya ## Unfortunately, FreeBSD c89 acceptance of flags depends upon 179 1.1 maya ## the command line argument order; so add the flags where they 180 1.1 maya ## appear in depend2.am. Note that the slowdown incurred here 181 1.1 maya ## affects only configure: in makefiles, %FASTDEP% shortcuts this. 182 1.1 maya for arg 183 1.1 maya do 184 1.1 maya case $arg in 185 1.1 maya -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 186 1.1 maya *) set fnord "$@" "$arg" ;; 187 1.1 maya esac 188 1.1 maya shift # fnord 189 1.1 maya shift # $arg 190 1.1 maya done 191 1.1 maya "$@" 192 1.1 maya stat=$? 193 1.1 maya if test $stat -ne 0; then 194 1.1 maya rm -f "$tmpdepfile" 195 1.1 maya exit $stat 196 1.1 maya fi 197 1.1 maya mv "$tmpdepfile" "$depfile" 198 1.1 maya ;; 199 1.1 maya 200 1.1 maya gcc) 201 1.1 maya ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202 1.1 maya ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203 1.1 maya ## (see the conditional assignment to $gccflag above). 204 1.1 maya ## There are various ways to get dependency output from gcc. Here's 205 1.1 maya ## why we pick this rather obscure method: 206 1.1 maya ## - Don't want to use -MD because we'd like the dependencies to end 207 1.1 maya ## up in a subdir. Having to rename by hand is ugly. 208 1.1 maya ## (We might end up doing this anyway to support other compilers.) 209 1.1 maya ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210 1.1 maya ## -MM, not -M (despite what the docs say). Also, it might not be 211 1.1 maya ## supported by the other compilers which use the 'gcc' depmode. 212 1.1 maya ## - Using -M directly means running the compiler twice (even worse 213 1.1 maya ## than renaming). 214 1.1 maya if test -z "$gccflag"; then 215 1.1 maya gccflag=-MD, 216 1.1 maya fi 217 1.1 maya "$@" -Wp,"$gccflag$tmpdepfile" 218 1.1 maya stat=$? 219 1.1 maya if test $stat -ne 0; then 220 1.1 maya rm -f "$tmpdepfile" 221 1.1 maya exit $stat 222 1.1 maya fi 223 1.1 maya rm -f "$depfile" 224 1.1 maya echo "$object : \\" > "$depfile" 225 1.1 maya # The second -e expression handles DOS-style file names with drive 226 1.1 maya # letters. 227 1.1 maya sed -e 's/^[^:]*: / /' \ 228 1.1 maya -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229 1.1 maya ## This next piece of magic avoids the "deleted header file" problem. 230 1.1 maya ## The problem is that when a header file which appears in a .P file 231 1.1 maya ## is deleted, the dependency causes make to die (because there is 232 1.1 maya ## typically no way to rebuild the header). We avoid this by adding 233 1.1 maya ## dummy dependencies for each header file. Too bad gcc doesn't do 234 1.1 maya ## this for us directly. 235 1.1 maya ## Some versions of gcc put a space before the ':'. On the theory 236 1.1 maya ## that the space means something, we add a space to the output as 237 1.1 maya ## well. hp depmode also adds that space, but also prefixes the VPATH 238 1.1 maya ## to the object. Take care to not repeat it in the output. 239 1.1 maya ## Some versions of the HPUX 10.20 sed can't process this invocation 240 1.1 maya ## correctly. Breaking it into two sed invocations is a workaround. 241 1.1 maya tr ' ' "$nl" < "$tmpdepfile" \ 242 1.1 maya | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243 1.1 maya | sed -e 's/$/ :/' >> "$depfile" 244 1.1 maya rm -f "$tmpdepfile" 245 1.1 maya ;; 246 1.1 maya 247 1.1 maya hp) 248 1.1 maya # This case exists only to let depend.m4 do its work. It works by 249 1.1 maya # looking at the text of this script. This case will never be run, 250 1.1 maya # since it is checked for above. 251 1.1 maya exit 1 252 1.1 maya ;; 253 1.1 maya 254 1.1 maya sgi) 255 1.1 maya if test "$libtool" = yes; then 256 1.1 maya "$@" "-Wp,-MDupdate,$tmpdepfile" 257 1.1 maya else 258 1.1 maya "$@" -MDupdate "$tmpdepfile" 259 1.1 maya fi 260 1.1 maya stat=$? 261 1.1 maya if test $stat -ne 0; then 262 1.1 maya rm -f "$tmpdepfile" 263 1.1 maya exit $stat 264 1.1 maya fi 265 1.1 maya rm -f "$depfile" 266 1.1 maya 267 1.1 maya if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268 1.1 maya echo "$object : \\" > "$depfile" 269 1.1 maya # Clip off the initial element (the dependent). Don't try to be 270 1.1 maya # clever and replace this with sed code, as IRIX sed won't handle 271 1.1 maya # lines with more than a fixed number of characters (4096 in 272 1.1 maya # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 273 1.1 maya # the IRIX cc adds comments like '#:fec' to the end of the 274 1.1 maya # dependency line. 275 1.1 maya tr ' ' "$nl" < "$tmpdepfile" \ 276 1.1 maya | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277 1.1 maya | tr "$nl" ' ' >> "$depfile" 278 1.1 maya echo >> "$depfile" 279 1.1 maya # The second pass generates a dummy entry for each header file. 280 1.1 maya tr ' ' "$nl" < "$tmpdepfile" \ 281 1.1 maya | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 282 1.1 maya >> "$depfile" 283 1.1 maya else 284 1.1 maya make_dummy_depfile 285 1.1 maya fi 286 1.1 maya rm -f "$tmpdepfile" 287 1.1 maya ;; 288 1.1 maya 289 1.1 maya xlc) 290 1.1 maya # This case exists only to let depend.m4 do its work. It works by 291 1.1 maya # looking at the text of this script. This case will never be run, 292 1.1 maya # since it is checked for above. 293 1.1 maya exit 1 294 1.1 maya ;; 295 1.1 maya 296 1.1 maya aix) 297 1.1 maya # The C for AIX Compiler uses -M and outputs the dependencies 298 1.1 maya # in a .u file. In older versions, this file always lives in the 299 1.1 maya # current directory. Also, the AIX compiler puts '$object:' at the 300 1.1 maya # start of each line; $object doesn't have directory information. 301 1.1 maya # Version 6 uses the directory in both cases. 302 1.1 maya set_dir_from "$object" 303 1.1 maya set_base_from "$object" 304 1.1 maya if test "$libtool" = yes; then 305 1.1 maya tmpdepfile1=$dir$base.u 306 1.1 maya tmpdepfile2=$base.u 307 1.1 maya tmpdepfile3=$dir.libs/$base.u 308 1.1 maya "$@" -Wc,-M 309 1.1 maya else 310 1.1 maya tmpdepfile1=$dir$base.u 311 1.1 maya tmpdepfile2=$dir$base.u 312 1.1 maya tmpdepfile3=$dir$base.u 313 1.1 maya "$@" -M 314 1.1 maya fi 315 1.1 maya stat=$? 316 1.1 maya if test $stat -ne 0; then 317 1.1 maya rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318 1.1 maya exit $stat 319 1.1 maya fi 320 1.1 maya 321 1.1 maya for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 322 1.1 maya do 323 1.1 maya test -f "$tmpdepfile" && break 324 1.1 maya done 325 1.1 maya aix_post_process_depfile 326 1.1 maya ;; 327 1.1 maya 328 1.1 maya tcc) 329 1.1 maya # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330 1.1 maya # FIXME: That version still under development at the moment of writing. 331 1.1 maya # Make that this statement remains true also for stable, released 332 1.1 maya # versions. 333 1.1 maya # It will wrap lines (doesn't matter whether long or short) with a 334 1.1 maya # trailing '\', as in: 335 1.1 maya # 336 1.1 maya # foo.o : \ 337 1.1 maya # foo.c \ 338 1.1 maya # foo.h \ 339 1.1 maya # 340 1.1 maya # It will put a trailing '\' even on the last line, and will use leading 341 1.1 maya # spaces rather than leading tabs (at least since its commit 0394caf7 342 1.1 maya # "Emit spaces for -MD"). 343 1.1 maya "$@" -MD -MF "$tmpdepfile" 344 1.1 maya stat=$? 345 1.1 maya if test $stat -ne 0; then 346 1.1 maya rm -f "$tmpdepfile" 347 1.1 maya exit $stat 348 1.1 maya fi 349 1.1 maya rm -f "$depfile" 350 1.1 maya # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351 1.1 maya # We have to change lines of the first kind to '$object: \'. 352 1.1 maya sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353 1.1 maya # And for each line of the second kind, we have to emit a 'dep.h:' 354 1.1 maya # dummy dependency, to avoid the deleted-header problem. 355 1.1 maya sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356 1.1 maya rm -f "$tmpdepfile" 357 1.1 maya ;; 358 1.1 maya 359 1.1 maya ## The order of this option in the case statement is important, since the 360 1.1 maya ## shell code in configure will try each of these formats in the order 361 1.1 maya ## listed in this file. A plain '-MD' option would be understood by many 362 1.1 maya ## compilers, so we must ensure this comes after the gcc and icc options. 363 1.1 maya pgcc) 364 1.1 maya # Portland's C compiler understands '-MD'. 365 1.1 maya # Will always output deps to 'file.d' where file is the root name of the 366 1.1 maya # source file under compilation, even if file resides in a subdirectory. 367 1.1 maya # The object file name does not affect the name of the '.d' file. 368 1.1 maya # pgcc 10.2 will output 369 1.1 maya # foo.o: sub/foo.c sub/foo.h 370 1.1 maya # and will wrap long lines using '\' : 371 1.1 maya # foo.o: sub/foo.c ... \ 372 1.1 maya # sub/foo.h ... \ 373 1.1 maya # ... 374 1.1 maya set_dir_from "$object" 375 1.1 maya # Use the source, not the object, to determine the base name, since 376 1.1 maya # that's sadly what pgcc will do too. 377 1.1 maya set_base_from "$source" 378 1.1 maya tmpdepfile=$base.d 379 1.1 maya 380 1.1 maya # For projects that build the same source file twice into different object 381 1.1 maya # files, the pgcc approach of using the *source* file root name can cause 382 1.1 maya # problems in parallel builds. Use a locking strategy to avoid stomping on 383 1.1 maya # the same $tmpdepfile. 384 1.1 maya lockdir=$base.d-lock 385 1.1 maya trap " 386 1.1 maya echo '$0: caught signal, cleaning up...' >&2 387 1.1 maya rmdir '$lockdir' 388 1.1 maya exit 1 389 1.1 maya " 1 2 13 15 390 1.1 maya numtries=100 391 1.1 maya i=$numtries 392 1.1 maya while test $i -gt 0; do 393 1.1 maya # mkdir is a portable test-and-set. 394 1.1 maya if mkdir "$lockdir" 2>/dev/null; then 395 1.1 maya # This process acquired the lock. 396 1.1 maya "$@" -MD 397 1.1 maya stat=$? 398 1.1 maya # Release the lock. 399 1.1 maya rmdir "$lockdir" 400 1.1 maya break 401 1.1 maya else 402 1.1 maya # If the lock is being held by a different process, wait 403 1.1 maya # until the winning process is done or we timeout. 404 1.1 maya while test -d "$lockdir" && test $i -gt 0; do 405 1.1 maya sleep 1 406 1.1 maya i=`expr $i - 1` 407 1.1 maya done 408 1.1 maya fi 409 1.1 maya i=`expr $i - 1` 410 1.1 maya done 411 1.1 maya trap - 1 2 13 15 412 1.1 maya if test $i -le 0; then 413 1.1 maya echo "$0: failed to acquire lock after $numtries attempts" >&2 414 1.1 maya echo "$0: check lockdir '$lockdir'" >&2 415 1.1 maya exit 1 416 1.1 maya fi 417 1.1 maya 418 1.1 maya if test $stat -ne 0; then 419 1.1 maya rm -f "$tmpdepfile" 420 1.1 maya exit $stat 421 1.1 maya fi 422 1.1 maya rm -f "$depfile" 423 1.1 maya # Each line is of the form `foo.o: dependent.h', 424 1.1 maya # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 425 1.1 maya # Do two passes, one to just change these to 426 1.1 maya # `$object: dependent.h' and one to simply `dependent.h:'. 427 1.1 maya sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428 1.1 maya # Some versions of the HPUX 10.20 sed can't process this invocation 429 1.1 maya # correctly. Breaking it into two sed invocations is a workaround. 430 1.1 maya sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431 1.1 maya | sed -e 's/$/ :/' >> "$depfile" 432 1.1 maya rm -f "$tmpdepfile" 433 1.1 maya ;; 434 1.1 maya 435 1.1 maya hp2) 436 1.1 maya # The "hp" stanza above does not work with aCC (C++) and HP's ia64 437 1.1 maya # compilers, which have integrated preprocessors. The correct option 438 1.1 maya # to use with these is +Maked; it writes dependencies to a file named 439 1.1 maya # 'foo.d', which lands next to the object file, wherever that 440 1.1 maya # happens to be. 441 1.1 maya # Much of this is similar to the tru64 case; see comments there. 442 1.1 maya set_dir_from "$object" 443 1.1 maya set_base_from "$object" 444 1.1 maya if test "$libtool" = yes; then 445 1.1 maya tmpdepfile1=$dir$base.d 446 1.1 maya tmpdepfile2=$dir.libs/$base.d 447 1.1 maya "$@" -Wc,+Maked 448 1.1 maya else 449 1.1 maya tmpdepfile1=$dir$base.d 450 1.1 maya tmpdepfile2=$dir$base.d 451 1.1 maya "$@" +Maked 452 1.1 maya fi 453 1.1 maya stat=$? 454 1.1 maya if test $stat -ne 0; then 455 1.1 maya rm -f "$tmpdepfile1" "$tmpdepfile2" 456 1.1 maya exit $stat 457 1.1 maya fi 458 1.1 maya 459 1.1 maya for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 460 1.1 maya do 461 1.1 maya test -f "$tmpdepfile" && break 462 1.1 maya done 463 1.1 maya if test -f "$tmpdepfile"; then 464 1.1 maya sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 465 1.1 maya # Add 'dependent.h:' lines. 466 1.1 maya sed -ne '2,${ 467 1.1 maya s/^ *// 468 1.1 maya s/ \\*$// 469 1.1 maya s/$/:/ 470 1.1 maya p 471 1.1 maya }' "$tmpdepfile" >> "$depfile" 472 1.1 maya else 473 1.1 maya make_dummy_depfile 474 1.1 maya fi 475 1.1 maya rm -f "$tmpdepfile" "$tmpdepfile2" 476 1.1 maya ;; 477 1.1 maya 478 1.1 maya tru64) 479 1.1 maya # The Tru64 compiler uses -MD to generate dependencies as a side 480 1.1 maya # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481 1.1 maya # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482 1.1 maya # dependencies in 'foo.d' instead, so we check for that too. 483 1.1 maya # Subdirectories are respected. 484 1.1 maya set_dir_from "$object" 485 1.1 maya set_base_from "$object" 486 1.1 maya 487 1.1 maya if test "$libtool" = yes; then 488 1.1 maya # Libtool generates 2 separate objects for the 2 libraries. These 489 1.1 maya # two compilations output dependencies in $dir.libs/$base.o.d and 490 1.1 maya # in $dir$base.o.d. We have to check for both files, because 491 1.1 maya # one of the two compilations can be disabled. We should prefer 492 1.1 maya # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493 1.1 maya # automatically cleaned when .libs/ is deleted, while ignoring 494 1.1 maya # the former would cause a distcleancheck panic. 495 1.1 maya tmpdepfile1=$dir$base.o.d # libtool 1.5 496 1.1 maya tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497 1.1 maya tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498 1.1 maya "$@" -Wc,-MD 499 1.1 maya else 500 1.1 maya tmpdepfile1=$dir$base.d 501 1.1 maya tmpdepfile2=$dir$base.d 502 1.1 maya tmpdepfile3=$dir$base.d 503 1.1 maya "$@" -MD 504 1.1 maya fi 505 1.1 maya 506 1.1 maya stat=$? 507 1.1 maya if test $stat -ne 0; then 508 1.1 maya rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509 1.1 maya exit $stat 510 1.1 maya fi 511 1.1 maya 512 1.1 maya for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513 1.1 maya do 514 1.1 maya test -f "$tmpdepfile" && break 515 1.1 maya done 516 1.1 maya # Same post-processing that is required for AIX mode. 517 1.1 maya aix_post_process_depfile 518 1.1 maya ;; 519 1.1 maya 520 1.1 maya msvc7) 521 1.1 maya if test "$libtool" = yes; then 522 1.1 maya showIncludes=-Wc,-showIncludes 523 1.1 maya else 524 1.1 maya showIncludes=-showIncludes 525 1.1 maya fi 526 1.1 maya "$@" $showIncludes > "$tmpdepfile" 527 1.1 maya stat=$? 528 1.1 maya grep -v '^Note: including file: ' "$tmpdepfile" 529 1.1 maya if test $stat -ne 0; then 530 1.1 maya rm -f "$tmpdepfile" 531 1.1 maya exit $stat 532 1.1 maya fi 533 1.1 maya rm -f "$depfile" 534 1.1 maya echo "$object : \\" > "$depfile" 535 1.1 maya # The first sed program below extracts the file names and escapes 536 1.1 maya # backslashes for cygpath. The second sed program outputs the file 537 1.1 maya # name when reading, but also accumulates all include files in the 538 1.1 maya # hold buffer in order to output them again at the end. This only 539 1.1 maya # works with sed implementations that can handle large buffers. 540 1.1 maya sed < "$tmpdepfile" -n ' 541 1.1 maya /^Note: including file: *\(.*\)/ { 542 1.1 maya s//\1/ 543 1.1 maya s/\\/\\\\/g 544 1.1 maya p 545 1.1 maya }' | $cygpath_u | sort -u | sed -n ' 546 1.1 maya s/ /\\ /g 547 1.1 maya s/\(.*\)/'"$tab"'\1 \\/p 548 1.1 maya s/.\(.*\) \\/\1:/ 549 1.1 maya H 550 1.1 maya $ { 551 1.1 maya s/.*/'"$tab"'/ 552 1.1 maya G 553 1.1 maya p 554 1.1 maya }' >> "$depfile" 555 1.1 maya echo >> "$depfile" # make sure the fragment doesn't end with a backslash 556 1.1 maya rm -f "$tmpdepfile" 557 1.1 maya ;; 558 1.1 maya 559 1.1 maya msvc7msys) 560 1.1 maya # This case exists only to let depend.m4 do its work. It works by 561 1.1 maya # looking at the text of this script. This case will never be run, 562 1.1 maya # since it is checked for above. 563 1.1 maya exit 1 564 1.1 maya ;; 565 1.1 maya 566 1.1 maya #nosideeffect) 567 1.1 maya # This comment above is used by automake to tell side-effect 568 1.1 maya # dependency tracking mechanisms from slower ones. 569 1.1 maya 570 1.1 maya dashmstdout) 571 1.1 maya # Important note: in order to support this mode, a compiler *must* 572 1.1 maya # always write the preprocessed file to stdout, regardless of -o. 573 1.1 maya "$@" || exit $? 574 1.1 maya 575 1.1 maya # Remove the call to Libtool. 576 1.1 maya if test "$libtool" = yes; then 577 1.1 maya while test "X$1" != 'X--mode=compile'; do 578 1.1 maya shift 579 1.1 maya done 580 1.1 maya shift 581 1.1 maya fi 582 1.1 maya 583 1.1 maya # Remove '-o $object'. 584 1.1 maya IFS=" " 585 1.1 maya for arg 586 1.1 maya do 587 1.1 maya case $arg in 588 1.1 maya -o) 589 1.1 maya shift 590 1.1 maya ;; 591 1.1 maya $object) 592 1.1 maya shift 593 1.1 maya ;; 594 1.1 maya *) 595 1.1 maya set fnord "$@" "$arg" 596 1.1 maya shift # fnord 597 1.1 maya shift # $arg 598 1.1 maya ;; 599 1.1 maya esac 600 1.1 maya done 601 1.1 maya 602 1.1 maya test -z "$dashmflag" && dashmflag=-M 603 1.1 maya # Require at least two characters before searching for ':' 604 1.1 maya # in the target name. This is to cope with DOS-style filenames: 605 1.1 maya # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 606 1.1 maya "$@" $dashmflag | 607 1.1 maya sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 608 1.1 maya rm -f "$depfile" 609 1.1 maya cat < "$tmpdepfile" > "$depfile" 610 1.1 maya # Some versions of the HPUX 10.20 sed can't process this sed invocation 611 1.1 maya # correctly. Breaking it into two sed invocations is a workaround. 612 1.1 maya tr ' ' "$nl" < "$tmpdepfile" \ 613 1.1 maya | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614 1.1 maya | sed -e 's/$/ :/' >> "$depfile" 615 1.1 maya rm -f "$tmpdepfile" 616 1.1 maya ;; 617 1.1 maya 618 1.1 maya dashXmstdout) 619 1.1 maya # This case only exists to satisfy depend.m4. It is never actually 620 1.1 maya # run, as this mode is specially recognized in the preamble. 621 1.1 maya exit 1 622 1.1 maya ;; 623 1.1 maya 624 1.1 maya makedepend) 625 1.1 maya "$@" || exit $? 626 1.1 maya # Remove any Libtool call 627 1.1 maya if test "$libtool" = yes; then 628 1.1 maya while test "X$1" != 'X--mode=compile'; do 629 1.1 maya shift 630 1.1 maya done 631 1.1 maya shift 632 1.1 maya fi 633 1.1 maya # X makedepend 634 1.1 maya shift 635 1.1 maya cleared=no eat=no 636 1.1 maya for arg 637 1.1 maya do 638 1.1 maya case $cleared in 639 1.1 maya no) 640 1.1 maya set ""; shift 641 1.1 maya cleared=yes ;; 642 1.1 maya esac 643 1.1 maya if test $eat = yes; then 644 1.1 maya eat=no 645 1.1 maya continue 646 1.1 maya fi 647 1.1 maya case "$arg" in 648 1.1 maya -D*|-I*) 649 1.1 maya set fnord "$@" "$arg"; shift ;; 650 1.1 maya # Strip any option that makedepend may not understand. Remove 651 1.1 maya # the object too, otherwise makedepend will parse it as a source file. 652 1.1 maya -arch) 653 1.1 maya eat=yes ;; 654 1.1 maya -*|$object) 655 1.1 maya ;; 656 1.1 maya *) 657 1.1 maya set fnord "$@" "$arg"; shift ;; 658 1.1 maya esac 659 1.1 maya done 660 1.1 maya obj_suffix=`echo "$object" | sed 's/^.*\././'` 661 1.1 maya touch "$tmpdepfile" 662 1.1 maya ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 663 1.1 maya rm -f "$depfile" 664 1.1 maya # makedepend may prepend the VPATH from the source file name to the object. 665 1.1 maya # No need to regex-escape $object, excess matching of '.' is harmless. 666 1.1 maya sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667 1.1 maya # Some versions of the HPUX 10.20 sed can't process the last invocation 668 1.1 maya # correctly. Breaking it into two sed invocations is a workaround. 669 1.1 maya sed '1,2d' "$tmpdepfile" \ 670 1.1 maya | tr ' ' "$nl" \ 671 1.1 maya | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672 1.1 maya | sed -e 's/$/ :/' >> "$depfile" 673 1.1 maya rm -f "$tmpdepfile" "$tmpdepfile".bak 674 1.1 maya ;; 675 1.1 maya 676 1.1 maya cpp) 677 1.1 maya # Important note: in order to support this mode, a compiler *must* 678 1.1 maya # always write the preprocessed file to stdout. 679 1.1 maya "$@" || exit $? 680 1.1 maya 681 1.1 maya # Remove the call to Libtool. 682 1.1 maya if test "$libtool" = yes; then 683 1.1 maya while test "X$1" != 'X--mode=compile'; do 684 1.1 maya shift 685 1.1 maya done 686 1.1 maya shift 687 1.1 maya fi 688 1.1 maya 689 1.1 maya # Remove '-o $object'. 690 1.1 maya IFS=" " 691 1.1 maya for arg 692 1.1 maya do 693 1.1 maya case $arg in 694 1.1 maya -o) 695 1.1 maya shift 696 1.1 maya ;; 697 1.1 maya $object) 698 1.1 maya shift 699 1.1 maya ;; 700 1.1 maya *) 701 1.1 maya set fnord "$@" "$arg" 702 1.1 maya shift # fnord 703 1.1 maya shift # $arg 704 1.1 maya ;; 705 1.1 maya esac 706 1.1 maya done 707 1.1 maya 708 1.1 maya "$@" -E \ 709 1.1 maya | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710 1.1 maya -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711 1.1 maya | sed '$ s: \\$::' > "$tmpdepfile" 712 1.1 maya rm -f "$depfile" 713 1.1 maya echo "$object : \\" > "$depfile" 714 1.1 maya cat < "$tmpdepfile" >> "$depfile" 715 1.1 maya sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 716 1.1 maya rm -f "$tmpdepfile" 717 1.1 maya ;; 718 1.1 maya 719 1.1 maya msvisualcpp) 720 1.1 maya # Important note: in order to support this mode, a compiler *must* 721 1.1 maya # always write the preprocessed file to stdout. 722 1.1 maya "$@" || exit $? 723 1.1 maya 724 1.1 maya # Remove the call to Libtool. 725 1.1 maya if test "$libtool" = yes; then 726 1.1 maya while test "X$1" != 'X--mode=compile'; do 727 1.1 maya shift 728 1.1 maya done 729 1.1 maya shift 730 1.1 maya fi 731 1.1 maya 732 1.1 maya IFS=" " 733 1.1 maya for arg 734 1.1 maya do 735 1.1 maya case "$arg" in 736 1.1 maya -o) 737 1.1 maya shift 738 1.1 maya ;; 739 1.1 maya $object) 740 1.1 maya shift 741 1.1 maya ;; 742 1.1 maya "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743 1.1 maya set fnord "$@" 744 1.1 maya shift 745 1.1 maya shift 746 1.1 maya ;; 747 1.1 maya *) 748 1.1 maya set fnord "$@" "$arg" 749 1.1 maya shift 750 1.1 maya shift 751 1.1 maya ;; 752 1.1 maya esac 753 1.1 maya done 754 1.1 maya "$@" -E 2>/dev/null | 755 1.1 maya sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 756 1.1 maya rm -f "$depfile" 757 1.1 maya echo "$object : \\" > "$depfile" 758 1.1 maya sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 759 1.1 maya echo "$tab" >> "$depfile" 760 1.1 maya sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761 1.1 maya rm -f "$tmpdepfile" 762 1.1 maya ;; 763 1.1 maya 764 1.1 maya msvcmsys) 765 1.1 maya # This case exists only to let depend.m4 do its work. It works by 766 1.1 maya # looking at the text of this script. This case will never be run, 767 1.1 maya # since it is checked for above. 768 1.1 maya exit 1 769 1.1 maya ;; 770 1.1 maya 771 1.1 maya none) 772 1.1 maya exec "$@" 773 1.1 maya ;; 774 1.1 maya 775 1.1 maya *) 776 1.1 maya echo "Unknown depmode $depmode" 1>&2 777 1.1 maya exit 1 778 1.1 maya ;; 779 1.1 maya esac 780 1.1 maya 781 1.1 maya exit 0 782 1.1 maya 783 1.1 maya # Local Variables: 784 1.1 maya # mode: shell-script 785 1.1 maya # sh-indentation: 2 786 1.1.1.2 christos # eval: (add-hook 'before-save-hook 'time-stamp) 787 1.1 maya # time-stamp-start: "scriptversion=" 788 1.1 maya # time-stamp-format: "%:y-%02m-%02d.%02H" 789 1.1 maya # time-stamp-time-zone: "UTC0" 790 1.1 maya # time-stamp-end: "; # UTC" 791 1.1 maya # End: 792