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