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