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