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