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