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