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