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