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