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