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