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