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