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