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