1937a2000SPeter Wemm#! /bin/sh 2937a2000SPeter Wemm# depcomp - compile a program generating dependencies as side-effects 3937a2000SPeter Wemm 4*70b56f4bSCy Schubertscriptversion=2018-03-07.03; # UTC 5937a2000SPeter Wemm 6*70b56f4bSCy Schubert# Copyright (C) 1999-2021 Free Software Foundation, Inc. 7937a2000SPeter Wemm 8937a2000SPeter Wemm# This program is free software; you can redistribute it and/or modify 9937a2000SPeter Wemm# it under the terms of the GNU General Public License as published by 10937a2000SPeter Wemm# the Free Software Foundation; either version 2, or (at your option) 11937a2000SPeter Wemm# any later version. 12937a2000SPeter Wemm 13937a2000SPeter Wemm# This program is distributed in the hope that it will be useful, 14937a2000SPeter Wemm# but WITHOUT ANY WARRANTY; without even the implied warranty of 15937a2000SPeter Wemm# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16937a2000SPeter Wemm# GNU General Public License for more details. 17937a2000SPeter Wemm 18937a2000SPeter Wemm# You should have received a copy of the GNU General Public License 19*70b56f4bSCy Schubert# along with this program. If not, see <https://www.gnu.org/licenses/>. 20937a2000SPeter Wemm 21937a2000SPeter Wemm# As a special exception to the GNU General Public License, if you 22937a2000SPeter Wemm# distribute this file as part of a program that contains a 23937a2000SPeter Wemm# configuration script generated by Autoconf, you may include it under 24937a2000SPeter Wemm# the same distribution terms that you use for the rest of that program. 25937a2000SPeter Wemm 26937a2000SPeter Wemm# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27937a2000SPeter Wemm 28937a2000SPeter Wemmcase $1 in 29937a2000SPeter Wemm '') 308bc5c7c0SPeter Wemm echo "$0: No command. Try '$0 --help' for more information." 1>&2 31937a2000SPeter Wemm exit 1; 32937a2000SPeter Wemm ;; 33937a2000SPeter Wemm -h | --h*) 34937a2000SPeter Wemm cat <<\EOF 35937a2000SPeter WemmUsage: depcomp [--help] [--version] PROGRAM [ARGS] 36937a2000SPeter Wemm 37937a2000SPeter WemmRun PROGRAMS ARGS to compile a file, generating dependencies 38937a2000SPeter Wemmas side-effects. 39937a2000SPeter Wemm 40937a2000SPeter WemmEnvironment variables: 41937a2000SPeter Wemm depmode Dependency tracking mode. 428bc5c7c0SPeter Wemm source Source file read by 'PROGRAMS ARGS'. 438bc5c7c0SPeter Wemm object Object file output by 'PROGRAMS ARGS'. 44937a2000SPeter Wemm DEPDIR directory where to store dependencies. 45937a2000SPeter Wemm depfile Dependency file to output. 468bc5c7c0SPeter Wemm tmpdepfile Temporary file to use when outputting dependencies. 47937a2000SPeter Wemm libtool Whether libtool is used (yes/no). 48937a2000SPeter Wemm 49937a2000SPeter WemmReport bugs to <bug-automake@gnu.org>. 50937a2000SPeter WemmEOF 51937a2000SPeter Wemm exit $? 52937a2000SPeter Wemm ;; 53937a2000SPeter Wemm -v | --v*) 54937a2000SPeter Wemm echo "depcomp $scriptversion" 55937a2000SPeter Wemm exit $? 56937a2000SPeter Wemm ;; 57937a2000SPeter Wemmesac 58937a2000SPeter Wemm 59d915215eSBaptiste Daroussin# Get the directory component of the given path, and save it in the 60d915215eSBaptiste Daroussin# global variables '$dir'. Note that this directory component will 61d915215eSBaptiste Daroussin# be either empty or ending with a '/' character. This is deliberate. 62d915215eSBaptiste Daroussinset_dir_from () 63d915215eSBaptiste Daroussin{ 64d915215eSBaptiste Daroussin case $1 in 65d915215eSBaptiste Daroussin */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66d915215eSBaptiste Daroussin *) dir=;; 67d915215eSBaptiste Daroussin esac 68d915215eSBaptiste Daroussin} 69d915215eSBaptiste Daroussin 70d915215eSBaptiste Daroussin# Get the suffix-stripped basename of the given path, and save it the 71d915215eSBaptiste Daroussin# global variable '$base'. 72d915215eSBaptiste Daroussinset_base_from () 73d915215eSBaptiste Daroussin{ 74d915215eSBaptiste Daroussin base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75d915215eSBaptiste Daroussin} 76d915215eSBaptiste Daroussin 77d915215eSBaptiste Daroussin# If no dependency file was actually created by the compiler invocation, 78d915215eSBaptiste Daroussin# we still have to create a dummy depfile, to avoid errors with the 79d915215eSBaptiste Daroussin# Makefile "include basename.Plo" scheme. 80d915215eSBaptiste Daroussinmake_dummy_depfile () 81d915215eSBaptiste Daroussin{ 82d915215eSBaptiste Daroussin echo "#dummy" > "$depfile" 83d915215eSBaptiste Daroussin} 84d915215eSBaptiste Daroussin 85d915215eSBaptiste Daroussin# Factor out some common post-processing of the generated depfile. 86d915215eSBaptiste Daroussin# Requires the auxiliary global variable '$tmpdepfile' to be set. 87d915215eSBaptiste Daroussinaix_post_process_depfile () 88d915215eSBaptiste Daroussin{ 89d915215eSBaptiste Daroussin # If the compiler actually managed to produce a dependency file, 90d915215eSBaptiste Daroussin # post-process it. 91d915215eSBaptiste Daroussin if test -f "$tmpdepfile"; then 92d915215eSBaptiste Daroussin # Each line is of the form 'foo.o: dependency.h'. 93d915215eSBaptiste Daroussin # Do two passes, one to just change these to 94d915215eSBaptiste Daroussin # $object: dependency.h 95d915215eSBaptiste Daroussin # and one to simply output 96d915215eSBaptiste Daroussin # dependency.h: 97d915215eSBaptiste Daroussin # which is needed to avoid the deleted-header problem. 98d915215eSBaptiste Daroussin { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99d915215eSBaptiste Daroussin sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100d915215eSBaptiste Daroussin } > "$depfile" 101d915215eSBaptiste Daroussin rm -f "$tmpdepfile" 102d915215eSBaptiste Daroussin else 103d915215eSBaptiste Daroussin make_dummy_depfile 104d915215eSBaptiste Daroussin fi 105d915215eSBaptiste Daroussin} 106d915215eSBaptiste Daroussin 1078bc5c7c0SPeter Wemm# A tabulation character. 1088bc5c7c0SPeter Wemmtab=' ' 1098bc5c7c0SPeter Wemm# A newline character. 1108bc5c7c0SPeter Wemmnl=' 1118bc5c7c0SPeter Wemm' 112d915215eSBaptiste Daroussin# Character ranges might be problematic outside the C locale. 113d915215eSBaptiste Daroussin# These definitions help. 114d915215eSBaptiste Daroussinupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115d915215eSBaptiste Daroussinlower=abcdefghijklmnopqrstuvwxyz 116d915215eSBaptiste Daroussindigits=0123456789 117d915215eSBaptiste Daroussinalpha=${upper}${lower} 1188bc5c7c0SPeter Wemm 119937a2000SPeter Wemmif test -z "$depmode" || test -z "$source" || test -z "$object"; then 120937a2000SPeter Wemm echo "depcomp: Variables source, object and depmode must be set" 1>&2 121937a2000SPeter Wemm exit 1 122937a2000SPeter Wemmfi 123937a2000SPeter Wemm 124937a2000SPeter Wemm# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 125937a2000SPeter Wemmdepfile=${depfile-`echo "$object" | 126937a2000SPeter Wemm sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 127937a2000SPeter Wemmtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 128937a2000SPeter Wemm 129937a2000SPeter Wemmrm -f "$tmpdepfile" 130937a2000SPeter Wemm 131d915215eSBaptiste Daroussin# Avoid interferences from the environment. 132d915215eSBaptiste Daroussingccflag= dashmflag= 133d915215eSBaptiste Daroussin 134937a2000SPeter Wemm# Some modes work just like other modes, but use different flags. We 135937a2000SPeter Wemm# parameterize here, but still list the modes in the big case below, 136937a2000SPeter Wemm# to make depend.m4 easier to write. Note that we *cannot* use a case 137937a2000SPeter Wemm# here, because this file can only contain one case statement. 138937a2000SPeter Wemmif test "$depmode" = hp; then 139937a2000SPeter Wemm # HP compiler uses -M and no extra arg. 140937a2000SPeter Wemm gccflag=-M 141937a2000SPeter Wemm depmode=gcc 142937a2000SPeter Wemmfi 143937a2000SPeter Wemm 144937a2000SPeter Wemmif test "$depmode" = dashXmstdout; then 145937a2000SPeter Wemm # This is just like dashmstdout with a different argument. 146937a2000SPeter Wemm dashmflag=-xM 147937a2000SPeter Wemm depmode=dashmstdout 148937a2000SPeter Wemmfi 149937a2000SPeter Wemm 1508bc5c7c0SPeter Wemmcygpath_u="cygpath -u -f -" 1518bc5c7c0SPeter Wemmif test "$depmode" = msvcmsys; then 1528bc5c7c0SPeter Wemm # This is just like msvisualcpp but w/o cygpath translation. 1538bc5c7c0SPeter Wemm # Just convert the backslash-escaped backslashes to single forward 1548bc5c7c0SPeter Wemm # slashes to satisfy depend.m4 1558bc5c7c0SPeter Wemm cygpath_u='sed s,\\\\,/,g' 1568bc5c7c0SPeter Wemm depmode=msvisualcpp 1578bc5c7c0SPeter Wemmfi 1588bc5c7c0SPeter Wemm 1598bc5c7c0SPeter Wemmif test "$depmode" = msvc7msys; then 1608bc5c7c0SPeter Wemm # This is just like msvc7 but w/o cygpath translation. 1618bc5c7c0SPeter Wemm # Just convert the backslash-escaped backslashes to single forward 1628bc5c7c0SPeter Wemm # slashes to satisfy depend.m4 1638bc5c7c0SPeter Wemm cygpath_u='sed s,\\\\,/,g' 1648bc5c7c0SPeter Wemm depmode=msvc7 1658bc5c7c0SPeter Wemmfi 1668bc5c7c0SPeter Wemm 1678bc5c7c0SPeter Wemmif test "$depmode" = xlc; then 168d915215eSBaptiste Daroussin # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 1698bc5c7c0SPeter Wemm gccflag=-qmakedep=gcc,-MF 1708bc5c7c0SPeter Wemm depmode=gcc 1718bc5c7c0SPeter Wemmfi 1728bc5c7c0SPeter Wemm 173937a2000SPeter Wemmcase "$depmode" in 174937a2000SPeter Wemmgcc3) 175937a2000SPeter Wemm## gcc 3 implements dependency tracking that does exactly what 176937a2000SPeter Wemm## we want. Yay! Note: for some reason libtool 1.4 doesn't like 177937a2000SPeter Wemm## it if -MD -MP comes after the -MF stuff. Hmm. 1788bc5c7c0SPeter Wemm## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1798bc5c7c0SPeter Wemm## the command line argument order; so add the flags where they 1808bc5c7c0SPeter Wemm## appear in depend2.am. Note that the slowdown incurred here 1818bc5c7c0SPeter Wemm## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1828bc5c7c0SPeter Wemm for arg 1838bc5c7c0SPeter Wemm do 1848bc5c7c0SPeter Wemm case $arg in 1858bc5c7c0SPeter Wemm -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1868bc5c7c0SPeter Wemm *) set fnord "$@" "$arg" ;; 1878bc5c7c0SPeter Wemm esac 1888bc5c7c0SPeter Wemm shift # fnord 1898bc5c7c0SPeter Wemm shift # $arg 1908bc5c7c0SPeter Wemm done 1918bc5c7c0SPeter Wemm "$@" 192937a2000SPeter Wemm stat=$? 193d915215eSBaptiste Daroussin if test $stat -ne 0; then 194937a2000SPeter Wemm rm -f "$tmpdepfile" 195937a2000SPeter Wemm exit $stat 196937a2000SPeter Wemm fi 197937a2000SPeter Wemm mv "$tmpdepfile" "$depfile" 198937a2000SPeter Wemm ;; 199937a2000SPeter Wemm 200937a2000SPeter Wemmgcc) 201d915215eSBaptiste Daroussin## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202d915215eSBaptiste Daroussin## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203d915215eSBaptiste Daroussin## (see the conditional assignment to $gccflag above). 204937a2000SPeter Wemm## There are various ways to get dependency output from gcc. Here's 205937a2000SPeter Wemm## why we pick this rather obscure method: 206937a2000SPeter Wemm## - Don't want to use -MD because we'd like the dependencies to end 207937a2000SPeter Wemm## up in a subdir. Having to rename by hand is ugly. 208937a2000SPeter Wemm## (We might end up doing this anyway to support other compilers.) 209937a2000SPeter Wemm## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210d915215eSBaptiste Daroussin## -MM, not -M (despite what the docs say). Also, it might not be 211d915215eSBaptiste Daroussin## supported by the other compilers which use the 'gcc' depmode. 212937a2000SPeter Wemm## - Using -M directly means running the compiler twice (even worse 213937a2000SPeter Wemm## than renaming). 214937a2000SPeter Wemm if test -z "$gccflag"; then 215937a2000SPeter Wemm gccflag=-MD, 216937a2000SPeter Wemm fi 217937a2000SPeter Wemm "$@" -Wp,"$gccflag$tmpdepfile" 218937a2000SPeter Wemm stat=$? 219d915215eSBaptiste Daroussin if test $stat -ne 0; then 220937a2000SPeter Wemm rm -f "$tmpdepfile" 221937a2000SPeter Wemm exit $stat 222937a2000SPeter Wemm fi 223937a2000SPeter Wemm rm -f "$depfile" 224937a2000SPeter Wemm echo "$object : \\" > "$depfile" 225d915215eSBaptiste Daroussin # The second -e expression handles DOS-style file names with drive 226d915215eSBaptiste Daroussin # letters. 227937a2000SPeter Wemm sed -e 's/^[^:]*: / /' \ 228937a2000SPeter Wemm -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 2298bc5c7c0SPeter Wemm## This next piece of magic avoids the "deleted header file" problem. 230937a2000SPeter Wemm## The problem is that when a header file which appears in a .P file 231937a2000SPeter Wemm## is deleted, the dependency causes make to die (because there is 232937a2000SPeter Wemm## typically no way to rebuild the header). We avoid this by adding 233937a2000SPeter Wemm## dummy dependencies for each header file. Too bad gcc doesn't do 234937a2000SPeter Wemm## this for us directly. 2358bc5c7c0SPeter Wemm## Some versions of gcc put a space before the ':'. On the theory 236937a2000SPeter Wemm## that the space means something, we add a space to the output as 2378bc5c7c0SPeter Wemm## well. hp depmode also adds that space, but also prefixes the VPATH 2388bc5c7c0SPeter Wemm## to the object. Take care to not repeat it in the output. 239937a2000SPeter Wemm## Some versions of the HPUX 10.20 sed can't process this invocation 240937a2000SPeter Wemm## correctly. Breaking it into two sed invocations is a workaround. 241d915215eSBaptiste Daroussin tr ' ' "$nl" < "$tmpdepfile" \ 242d915215eSBaptiste Daroussin | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 2438bc5c7c0SPeter Wemm | sed -e 's/$/ :/' >> "$depfile" 244937a2000SPeter Wemm rm -f "$tmpdepfile" 245937a2000SPeter Wemm ;; 246937a2000SPeter Wemm 247937a2000SPeter Wemmhp) 248937a2000SPeter Wemm # This case exists only to let depend.m4 do its work. It works by 249937a2000SPeter Wemm # looking at the text of this script. This case will never be run, 250937a2000SPeter Wemm # since it is checked for above. 251937a2000SPeter Wemm exit 1 252937a2000SPeter Wemm ;; 253937a2000SPeter Wemm 254937a2000SPeter Wemmsgi) 255937a2000SPeter Wemm if test "$libtool" = yes; then 256937a2000SPeter Wemm "$@" "-Wp,-MDupdate,$tmpdepfile" 257937a2000SPeter Wemm else 258937a2000SPeter Wemm "$@" -MDupdate "$tmpdepfile" 259937a2000SPeter Wemm fi 260937a2000SPeter Wemm stat=$? 261d915215eSBaptiste Daroussin if test $stat -ne 0; then 262937a2000SPeter Wemm rm -f "$tmpdepfile" 263937a2000SPeter Wemm exit $stat 264937a2000SPeter Wemm fi 265937a2000SPeter Wemm rm -f "$depfile" 266937a2000SPeter Wemm 267937a2000SPeter Wemm if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268937a2000SPeter Wemm echo "$object : \\" > "$depfile" 269937a2000SPeter Wemm # Clip off the initial element (the dependent). Don't try to be 270937a2000SPeter Wemm # clever and replace this with sed code, as IRIX sed won't handle 271937a2000SPeter Wemm # lines with more than a fixed number of characters (4096 in 272937a2000SPeter Wemm # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 2738bc5c7c0SPeter Wemm # the IRIX cc adds comments like '#:fec' to the end of the 274937a2000SPeter Wemm # dependency line. 2758bc5c7c0SPeter Wemm tr ' ' "$nl" < "$tmpdepfile" \ 276d915215eSBaptiste Daroussin | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277d915215eSBaptiste Daroussin | tr "$nl" ' ' >> "$depfile" 2788bc5c7c0SPeter Wemm echo >> "$depfile" 279937a2000SPeter Wemm # The second pass generates a dummy entry for each header file. 2808bc5c7c0SPeter Wemm tr ' ' "$nl" < "$tmpdepfile" \ 281937a2000SPeter Wemm | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2828bc5c7c0SPeter Wemm >> "$depfile" 283937a2000SPeter Wemm else 284d915215eSBaptiste Daroussin make_dummy_depfile 285937a2000SPeter Wemm fi 286937a2000SPeter Wemm rm -f "$tmpdepfile" 287937a2000SPeter Wemm ;; 288937a2000SPeter Wemm 2898bc5c7c0SPeter Wemmxlc) 2908bc5c7c0SPeter Wemm # This case exists only to let depend.m4 do its work. It works by 2918bc5c7c0SPeter Wemm # looking at the text of this script. This case will never be run, 2928bc5c7c0SPeter Wemm # since it is checked for above. 2938bc5c7c0SPeter Wemm exit 1 2948bc5c7c0SPeter Wemm ;; 2958bc5c7c0SPeter Wemm 296937a2000SPeter Wemmaix) 297937a2000SPeter Wemm # The C for AIX Compiler uses -M and outputs the dependencies 298937a2000SPeter Wemm # in a .u file. In older versions, this file always lives in the 2998bc5c7c0SPeter Wemm # current directory. Also, the AIX compiler puts '$object:' at the 300937a2000SPeter Wemm # start of each line; $object doesn't have directory information. 301937a2000SPeter Wemm # Version 6 uses the directory in both cases. 302d915215eSBaptiste Daroussin set_dir_from "$object" 303d915215eSBaptiste Daroussin set_base_from "$object" 304937a2000SPeter Wemm if test "$libtool" = yes; then 3058bc5c7c0SPeter Wemm tmpdepfile1=$dir$base.u 3068bc5c7c0SPeter Wemm tmpdepfile2=$base.u 3078bc5c7c0SPeter Wemm tmpdepfile3=$dir.libs/$base.u 308937a2000SPeter Wemm "$@" -Wc,-M 309937a2000SPeter Wemm else 3108bc5c7c0SPeter Wemm tmpdepfile1=$dir$base.u 3118bc5c7c0SPeter Wemm tmpdepfile2=$dir$base.u 3128bc5c7c0SPeter Wemm tmpdepfile3=$dir$base.u 313937a2000SPeter Wemm "$@" -M 314937a2000SPeter Wemm fi 315937a2000SPeter Wemm stat=$? 316d915215eSBaptiste Daroussin if test $stat -ne 0; then 3178bc5c7c0SPeter Wemm rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318937a2000SPeter Wemm exit $stat 319937a2000SPeter Wemm fi 320937a2000SPeter Wemm 3218bc5c7c0SPeter Wemm for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 3228bc5c7c0SPeter Wemm do 3238bc5c7c0SPeter Wemm test -f "$tmpdepfile" && break 3248bc5c7c0SPeter Wemm done 325d915215eSBaptiste Daroussin aix_post_process_depfile 326d915215eSBaptiste Daroussin ;; 327d915215eSBaptiste Daroussin 328d915215eSBaptiste Daroussintcc) 329d915215eSBaptiste Daroussin # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330d915215eSBaptiste Daroussin # FIXME: That version still under development at the moment of writing. 331d915215eSBaptiste Daroussin # Make that this statement remains true also for stable, released 332d915215eSBaptiste Daroussin # versions. 333d915215eSBaptiste Daroussin # It will wrap lines (doesn't matter whether long or short) with a 334d915215eSBaptiste Daroussin # trailing '\', as in: 335d915215eSBaptiste Daroussin # 336d915215eSBaptiste Daroussin # foo.o : \ 337d915215eSBaptiste Daroussin # foo.c \ 338d915215eSBaptiste Daroussin # foo.h \ 339d915215eSBaptiste Daroussin # 340d915215eSBaptiste Daroussin # It will put a trailing '\' even on the last line, and will use leading 341d915215eSBaptiste Daroussin # spaces rather than leading tabs (at least since its commit 0394caf7 342d915215eSBaptiste Daroussin # "Emit spaces for -MD"). 343d915215eSBaptiste Daroussin "$@" -MD -MF "$tmpdepfile" 344d915215eSBaptiste Daroussin stat=$? 345d915215eSBaptiste Daroussin if test $stat -ne 0; then 346d915215eSBaptiste Daroussin rm -f "$tmpdepfile" 347d915215eSBaptiste Daroussin exit $stat 348937a2000SPeter Wemm fi 349d915215eSBaptiste Daroussin rm -f "$depfile" 350d915215eSBaptiste Daroussin # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351d915215eSBaptiste Daroussin # We have to change lines of the first kind to '$object: \'. 352d915215eSBaptiste Daroussin sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353d915215eSBaptiste Daroussin # And for each line of the second kind, we have to emit a 'dep.h:' 354d915215eSBaptiste Daroussin # dummy dependency, to avoid the deleted-header problem. 355d915215eSBaptiste Daroussin sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356937a2000SPeter Wemm rm -f "$tmpdepfile" 357937a2000SPeter Wemm ;; 358937a2000SPeter Wemm 359d915215eSBaptiste Daroussin## The order of this option in the case statement is important, since the 360d915215eSBaptiste Daroussin## shell code in configure will try each of these formats in the order 361d915215eSBaptiste Daroussin## listed in this file. A plain '-MD' option would be understood by many 362d915215eSBaptiste Daroussin## compilers, so we must ensure this comes after the gcc and icc options. 363d915215eSBaptiste Daroussinpgcc) 364d915215eSBaptiste Daroussin # Portland's C compiler understands '-MD'. 365d915215eSBaptiste Daroussin # Will always output deps to 'file.d' where file is the root name of the 366d915215eSBaptiste Daroussin # source file under compilation, even if file resides in a subdirectory. 367d915215eSBaptiste Daroussin # The object file name does not affect the name of the '.d' file. 368d915215eSBaptiste Daroussin # pgcc 10.2 will output 369937a2000SPeter Wemm # foo.o: sub/foo.c sub/foo.h 3708bc5c7c0SPeter Wemm # and will wrap long lines using '\' : 371937a2000SPeter Wemm # foo.o: sub/foo.c ... \ 372937a2000SPeter Wemm # sub/foo.h ... \ 373937a2000SPeter Wemm # ... 374d915215eSBaptiste Daroussin set_dir_from "$object" 375d915215eSBaptiste Daroussin # Use the source, not the object, to determine the base name, since 376d915215eSBaptiste Daroussin # that's sadly what pgcc will do too. 377d915215eSBaptiste Daroussin set_base_from "$source" 378d915215eSBaptiste Daroussin tmpdepfile=$base.d 379d915215eSBaptiste Daroussin 380d915215eSBaptiste Daroussin # For projects that build the same source file twice into different object 381d915215eSBaptiste Daroussin # files, the pgcc approach of using the *source* file root name can cause 382d915215eSBaptiste Daroussin # problems in parallel builds. Use a locking strategy to avoid stomping on 383d915215eSBaptiste Daroussin # the same $tmpdepfile. 384d915215eSBaptiste Daroussin lockdir=$base.d-lock 385d915215eSBaptiste Daroussin trap " 386d915215eSBaptiste Daroussin echo '$0: caught signal, cleaning up...' >&2 387d915215eSBaptiste Daroussin rmdir '$lockdir' 388d915215eSBaptiste Daroussin exit 1 389d915215eSBaptiste Daroussin " 1 2 13 15 390d915215eSBaptiste Daroussin numtries=100 391d915215eSBaptiste Daroussin i=$numtries 392d915215eSBaptiste Daroussin while test $i -gt 0; do 393d915215eSBaptiste Daroussin # mkdir is a portable test-and-set. 394d915215eSBaptiste Daroussin if mkdir "$lockdir" 2>/dev/null; then 395d915215eSBaptiste Daroussin # This process acquired the lock. 396d915215eSBaptiste Daroussin "$@" -MD 397937a2000SPeter Wemm stat=$? 398d915215eSBaptiste Daroussin # Release the lock. 399d915215eSBaptiste Daroussin rmdir "$lockdir" 400d915215eSBaptiste Daroussin break 401937a2000SPeter Wemm else 402d915215eSBaptiste Daroussin # If the lock is being held by a different process, wait 403d915215eSBaptiste Daroussin # until the winning process is done or we timeout. 404d915215eSBaptiste Daroussin while test -d "$lockdir" && test $i -gt 0; do 405d915215eSBaptiste Daroussin sleep 1 406d915215eSBaptiste Daroussin i=`expr $i - 1` 407d915215eSBaptiste Daroussin done 408d915215eSBaptiste Daroussin fi 409d915215eSBaptiste Daroussin i=`expr $i - 1` 410d915215eSBaptiste Daroussin done 411d915215eSBaptiste Daroussin trap - 1 2 13 15 412d915215eSBaptiste Daroussin if test $i -le 0; then 413d915215eSBaptiste Daroussin echo "$0: failed to acquire lock after $numtries attempts" >&2 414d915215eSBaptiste Daroussin echo "$0: check lockdir '$lockdir'" >&2 415d915215eSBaptiste Daroussin exit 1 416d915215eSBaptiste Daroussin fi 417d915215eSBaptiste Daroussin 418d915215eSBaptiste Daroussin if test $stat -ne 0; then 419937a2000SPeter Wemm rm -f "$tmpdepfile" 420937a2000SPeter Wemm exit $stat 421937a2000SPeter Wemm fi 422937a2000SPeter Wemm rm -f "$depfile" 423d915215eSBaptiste Daroussin # Each line is of the form `foo.o: dependent.h', 424d915215eSBaptiste Daroussin # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 425937a2000SPeter Wemm # Do two passes, one to just change these to 426d915215eSBaptiste Daroussin # `$object: dependent.h' and one to simply `dependent.h:'. 427d915215eSBaptiste Daroussin sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428d915215eSBaptiste Daroussin # Some versions of the HPUX 10.20 sed can't process this invocation 429d915215eSBaptiste Daroussin # correctly. Breaking it into two sed invocations is a workaround. 430d915215eSBaptiste Daroussin sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431d915215eSBaptiste Daroussin | sed -e 's/$/ :/' >> "$depfile" 432937a2000SPeter Wemm rm -f "$tmpdepfile" 433937a2000SPeter Wemm ;; 434937a2000SPeter Wemm 4358bc5c7c0SPeter Wemmhp2) 4368bc5c7c0SPeter Wemm # The "hp" stanza above does not work with aCC (C++) and HP's ia64 4378bc5c7c0SPeter Wemm # compilers, which have integrated preprocessors. The correct option 4388bc5c7c0SPeter Wemm # to use with these is +Maked; it writes dependencies to a file named 4398bc5c7c0SPeter Wemm # 'foo.d', which lands next to the object file, wherever that 4408bc5c7c0SPeter Wemm # happens to be. 4418bc5c7c0SPeter Wemm # Much of this is similar to the tru64 case; see comments there. 442d915215eSBaptiste Daroussin set_dir_from "$object" 443d915215eSBaptiste Daroussin set_base_from "$object" 4448bc5c7c0SPeter Wemm if test "$libtool" = yes; then 4458bc5c7c0SPeter Wemm tmpdepfile1=$dir$base.d 4468bc5c7c0SPeter Wemm tmpdepfile2=$dir.libs/$base.d 4478bc5c7c0SPeter Wemm "$@" -Wc,+Maked 4488bc5c7c0SPeter Wemm else 4498bc5c7c0SPeter Wemm tmpdepfile1=$dir$base.d 4508bc5c7c0SPeter Wemm tmpdepfile2=$dir$base.d 4518bc5c7c0SPeter Wemm "$@" +Maked 4528bc5c7c0SPeter Wemm fi 4538bc5c7c0SPeter Wemm stat=$? 454d915215eSBaptiste Daroussin if test $stat -ne 0; then 4558bc5c7c0SPeter Wemm rm -f "$tmpdepfile1" "$tmpdepfile2" 4568bc5c7c0SPeter Wemm exit $stat 4578bc5c7c0SPeter Wemm fi 4588bc5c7c0SPeter Wemm 4598bc5c7c0SPeter Wemm for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 4608bc5c7c0SPeter Wemm do 4618bc5c7c0SPeter Wemm test -f "$tmpdepfile" && break 4628bc5c7c0SPeter Wemm done 4638bc5c7c0SPeter Wemm if test -f "$tmpdepfile"; then 464d915215eSBaptiste Daroussin sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 4658bc5c7c0SPeter Wemm # Add 'dependent.h:' lines. 4668bc5c7c0SPeter Wemm sed -ne '2,${ 4678bc5c7c0SPeter Wemm s/^ *// 4688bc5c7c0SPeter Wemm s/ \\*$// 4698bc5c7c0SPeter Wemm s/$/:/ 4708bc5c7c0SPeter Wemm p 4718bc5c7c0SPeter Wemm }' "$tmpdepfile" >> "$depfile" 4728bc5c7c0SPeter Wemm else 473d915215eSBaptiste Daroussin make_dummy_depfile 4748bc5c7c0SPeter Wemm fi 4758bc5c7c0SPeter Wemm rm -f "$tmpdepfile" "$tmpdepfile2" 4768bc5c7c0SPeter Wemm ;; 4778bc5c7c0SPeter Wemm 478937a2000SPeter Wemmtru64) 479937a2000SPeter Wemm # The Tru64 compiler uses -MD to generate dependencies as a side 4808bc5c7c0SPeter Wemm # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481937a2000SPeter Wemm # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 4828bc5c7c0SPeter Wemm # dependencies in 'foo.d' instead, so we check for that too. 483937a2000SPeter Wemm # Subdirectories are respected. 484d915215eSBaptiste Daroussin set_dir_from "$object" 485d915215eSBaptiste Daroussin set_base_from "$object" 486937a2000SPeter Wemm 487937a2000SPeter Wemm if test "$libtool" = yes; then 488d915215eSBaptiste Daroussin # Libtool generates 2 separate objects for the 2 libraries. These 489d915215eSBaptiste Daroussin # two compilations output dependencies in $dir.libs/$base.o.d and 490937a2000SPeter Wemm # in $dir$base.o.d. We have to check for both files, because 491937a2000SPeter Wemm # one of the two compilations can be disabled. We should prefer 492937a2000SPeter Wemm # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493937a2000SPeter Wemm # automatically cleaned when .libs/ is deleted, while ignoring 494937a2000SPeter Wemm # the former would cause a distcleancheck panic. 495d915215eSBaptiste Daroussin tmpdepfile1=$dir$base.o.d # libtool 1.5 496d915215eSBaptiste Daroussin tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497d915215eSBaptiste Daroussin tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498937a2000SPeter Wemm "$@" -Wc,-MD 499937a2000SPeter Wemm else 500d915215eSBaptiste Daroussin tmpdepfile1=$dir$base.d 501937a2000SPeter Wemm tmpdepfile2=$dir$base.d 502937a2000SPeter Wemm tmpdepfile3=$dir$base.d 503937a2000SPeter Wemm "$@" -MD 504937a2000SPeter Wemm fi 505937a2000SPeter Wemm 506937a2000SPeter Wemm stat=$? 507d915215eSBaptiste Daroussin if test $stat -ne 0; then 508d915215eSBaptiste Daroussin rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509937a2000SPeter Wemm exit $stat 510937a2000SPeter Wemm fi 511937a2000SPeter Wemm 512d915215eSBaptiste Daroussin for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513937a2000SPeter Wemm do 514937a2000SPeter Wemm test -f "$tmpdepfile" && break 515937a2000SPeter Wemm done 516d915215eSBaptiste Daroussin # Same post-processing that is required for AIX mode. 517d915215eSBaptiste Daroussin aix_post_process_depfile 518937a2000SPeter Wemm ;; 519937a2000SPeter Wemm 5208bc5c7c0SPeter Wemmmsvc7) 5218bc5c7c0SPeter Wemm if test "$libtool" = yes; then 5228bc5c7c0SPeter Wemm showIncludes=-Wc,-showIncludes 5238bc5c7c0SPeter Wemm else 5248bc5c7c0SPeter Wemm showIncludes=-showIncludes 5258bc5c7c0SPeter Wemm fi 5268bc5c7c0SPeter Wemm "$@" $showIncludes > "$tmpdepfile" 5278bc5c7c0SPeter Wemm stat=$? 5288bc5c7c0SPeter Wemm grep -v '^Note: including file: ' "$tmpdepfile" 529d915215eSBaptiste Daroussin if test $stat -ne 0; then 5308bc5c7c0SPeter Wemm rm -f "$tmpdepfile" 5318bc5c7c0SPeter Wemm exit $stat 5328bc5c7c0SPeter Wemm fi 5338bc5c7c0SPeter Wemm rm -f "$depfile" 5348bc5c7c0SPeter Wemm echo "$object : \\" > "$depfile" 5358bc5c7c0SPeter Wemm # The first sed program below extracts the file names and escapes 5368bc5c7c0SPeter Wemm # backslashes for cygpath. The second sed program outputs the file 5378bc5c7c0SPeter Wemm # name when reading, but also accumulates all include files in the 5388bc5c7c0SPeter Wemm # hold buffer in order to output them again at the end. This only 5398bc5c7c0SPeter Wemm # works with sed implementations that can handle large buffers. 5408bc5c7c0SPeter Wemm sed < "$tmpdepfile" -n ' 5418bc5c7c0SPeter Wemm/^Note: including file: *\(.*\)/ { 5428bc5c7c0SPeter Wemm s//\1/ 5438bc5c7c0SPeter Wemm s/\\/\\\\/g 5448bc5c7c0SPeter Wemm p 5458bc5c7c0SPeter Wemm}' | $cygpath_u | sort -u | sed -n ' 5468bc5c7c0SPeter Wemms/ /\\ /g 5478bc5c7c0SPeter Wemms/\(.*\)/'"$tab"'\1 \\/p 5488bc5c7c0SPeter Wemms/.\(.*\) \\/\1:/ 5498bc5c7c0SPeter WemmH 5508bc5c7c0SPeter Wemm$ { 5518bc5c7c0SPeter Wemm s/.*/'"$tab"'/ 5528bc5c7c0SPeter Wemm G 5538bc5c7c0SPeter Wemm p 5548bc5c7c0SPeter Wemm}' >> "$depfile" 555d915215eSBaptiste Daroussin echo >> "$depfile" # make sure the fragment doesn't end with a backslash 5568bc5c7c0SPeter Wemm rm -f "$tmpdepfile" 5578bc5c7c0SPeter Wemm ;; 5588bc5c7c0SPeter Wemm 5598bc5c7c0SPeter Wemmmsvc7msys) 5608bc5c7c0SPeter Wemm # This case exists only to let depend.m4 do its work. It works by 5618bc5c7c0SPeter Wemm # looking at the text of this script. This case will never be run, 5628bc5c7c0SPeter Wemm # since it is checked for above. 5638bc5c7c0SPeter Wemm exit 1 5648bc5c7c0SPeter Wemm ;; 5658bc5c7c0SPeter Wemm 566937a2000SPeter Wemm#nosideeffect) 567937a2000SPeter Wemm # This comment above is used by automake to tell side-effect 568937a2000SPeter Wemm # dependency tracking mechanisms from slower ones. 569937a2000SPeter Wemm 570937a2000SPeter Wemmdashmstdout) 571937a2000SPeter Wemm # Important note: in order to support this mode, a compiler *must* 572937a2000SPeter Wemm # always write the preprocessed file to stdout, regardless of -o. 573937a2000SPeter Wemm "$@" || exit $? 574937a2000SPeter Wemm 575937a2000SPeter Wemm # Remove the call to Libtool. 576937a2000SPeter Wemm if test "$libtool" = yes; then 5778bc5c7c0SPeter Wemm while test "X$1" != 'X--mode=compile'; do 578937a2000SPeter Wemm shift 579937a2000SPeter Wemm done 580937a2000SPeter Wemm shift 581937a2000SPeter Wemm fi 582937a2000SPeter Wemm 5838bc5c7c0SPeter Wemm # Remove '-o $object'. 584937a2000SPeter Wemm IFS=" " 585937a2000SPeter Wemm for arg 586937a2000SPeter Wemm do 587937a2000SPeter Wemm case $arg in 588937a2000SPeter Wemm -o) 589937a2000SPeter Wemm shift 590937a2000SPeter Wemm ;; 591937a2000SPeter Wemm $object) 592937a2000SPeter Wemm shift 593937a2000SPeter Wemm ;; 594937a2000SPeter Wemm *) 595937a2000SPeter Wemm set fnord "$@" "$arg" 596937a2000SPeter Wemm shift # fnord 597937a2000SPeter Wemm shift # $arg 598937a2000SPeter Wemm ;; 599937a2000SPeter Wemm esac 600937a2000SPeter Wemm done 601937a2000SPeter Wemm 602937a2000SPeter Wemm test -z "$dashmflag" && dashmflag=-M 6038bc5c7c0SPeter Wemm # Require at least two characters before searching for ':' 604937a2000SPeter Wemm # in the target name. This is to cope with DOS-style filenames: 6058bc5c7c0SPeter Wemm # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 606937a2000SPeter Wemm "$@" $dashmflag | 607d915215eSBaptiste Daroussin sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 608937a2000SPeter Wemm rm -f "$depfile" 609937a2000SPeter Wemm cat < "$tmpdepfile" > "$depfile" 610d915215eSBaptiste Daroussin # Some versions of the HPUX 10.20 sed can't process this sed invocation 611d915215eSBaptiste Daroussin # correctly. Breaking it into two sed invocations is a workaround. 612d915215eSBaptiste Daroussin tr ' ' "$nl" < "$tmpdepfile" \ 613d915215eSBaptiste Daroussin | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614d915215eSBaptiste Daroussin | sed -e 's/$/ :/' >> "$depfile" 615937a2000SPeter Wemm rm -f "$tmpdepfile" 616937a2000SPeter Wemm ;; 617937a2000SPeter Wemm 618937a2000SPeter WemmdashXmstdout) 619937a2000SPeter Wemm # This case only exists to satisfy depend.m4. It is never actually 620937a2000SPeter Wemm # run, as this mode is specially recognized in the preamble. 621937a2000SPeter Wemm exit 1 622937a2000SPeter Wemm ;; 623937a2000SPeter Wemm 624937a2000SPeter Wemmmakedepend) 625937a2000SPeter Wemm "$@" || exit $? 626937a2000SPeter Wemm # Remove any Libtool call 627937a2000SPeter Wemm if test "$libtool" = yes; then 6288bc5c7c0SPeter Wemm while test "X$1" != 'X--mode=compile'; do 629937a2000SPeter Wemm shift 630937a2000SPeter Wemm done 631937a2000SPeter Wemm shift 632937a2000SPeter Wemm fi 633937a2000SPeter Wemm # X makedepend 634937a2000SPeter Wemm shift 6358bc5c7c0SPeter Wemm cleared=no eat=no 6368bc5c7c0SPeter Wemm for arg 6378bc5c7c0SPeter Wemm do 638937a2000SPeter Wemm case $cleared in 639937a2000SPeter Wemm no) 640937a2000SPeter Wemm set ""; shift 641937a2000SPeter Wemm cleared=yes ;; 642937a2000SPeter Wemm esac 6438bc5c7c0SPeter Wemm if test $eat = yes; then 6448bc5c7c0SPeter Wemm eat=no 6458bc5c7c0SPeter Wemm continue 6468bc5c7c0SPeter Wemm fi 647937a2000SPeter Wemm case "$arg" in 648937a2000SPeter Wemm -D*|-I*) 649937a2000SPeter Wemm set fnord "$@" "$arg"; shift ;; 650937a2000SPeter Wemm # Strip any option that makedepend may not understand. Remove 651937a2000SPeter Wemm # the object too, otherwise makedepend will parse it as a source file. 6528bc5c7c0SPeter Wemm -arch) 6538bc5c7c0SPeter Wemm eat=yes ;; 654937a2000SPeter Wemm -*|$object) 655937a2000SPeter Wemm ;; 656937a2000SPeter Wemm *) 657937a2000SPeter Wemm set fnord "$@" "$arg"; shift ;; 658937a2000SPeter Wemm esac 659937a2000SPeter Wemm done 6608bc5c7c0SPeter Wemm obj_suffix=`echo "$object" | sed 's/^.*\././'` 661937a2000SPeter Wemm touch "$tmpdepfile" 662937a2000SPeter Wemm ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 663937a2000SPeter Wemm rm -f "$depfile" 6648bc5c7c0SPeter Wemm # makedepend may prepend the VPATH from the source file name to the object. 6658bc5c7c0SPeter Wemm # No need to regex-escape $object, excess matching of '.' is harmless. 6668bc5c7c0SPeter Wemm sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667d915215eSBaptiste Daroussin # Some versions of the HPUX 10.20 sed can't process the last invocation 668d915215eSBaptiste Daroussin # correctly. Breaking it into two sed invocations is a workaround. 669d915215eSBaptiste Daroussin sed '1,2d' "$tmpdepfile" \ 670d915215eSBaptiste Daroussin | tr ' ' "$nl" \ 671d915215eSBaptiste Daroussin | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672d915215eSBaptiste Daroussin | sed -e 's/$/ :/' >> "$depfile" 673937a2000SPeter Wemm rm -f "$tmpdepfile" "$tmpdepfile".bak 674937a2000SPeter Wemm ;; 675937a2000SPeter Wemm 676937a2000SPeter Wemmcpp) 677937a2000SPeter Wemm # Important note: in order to support this mode, a compiler *must* 678937a2000SPeter Wemm # always write the preprocessed file to stdout. 679937a2000SPeter Wemm "$@" || exit $? 680937a2000SPeter Wemm 681937a2000SPeter Wemm # Remove the call to Libtool. 682937a2000SPeter Wemm if test "$libtool" = yes; then 6838bc5c7c0SPeter Wemm while test "X$1" != 'X--mode=compile'; do 684937a2000SPeter Wemm shift 685937a2000SPeter Wemm done 686937a2000SPeter Wemm shift 687937a2000SPeter Wemm fi 688937a2000SPeter Wemm 6898bc5c7c0SPeter Wemm # Remove '-o $object'. 690937a2000SPeter Wemm IFS=" " 691937a2000SPeter Wemm for arg 692937a2000SPeter Wemm do 693937a2000SPeter Wemm case $arg in 694937a2000SPeter Wemm -o) 695937a2000SPeter Wemm shift 696937a2000SPeter Wemm ;; 697937a2000SPeter Wemm $object) 698937a2000SPeter Wemm shift 699937a2000SPeter Wemm ;; 700937a2000SPeter Wemm *) 701937a2000SPeter Wemm set fnord "$@" "$arg" 702937a2000SPeter Wemm shift # fnord 703937a2000SPeter Wemm shift # $arg 704937a2000SPeter Wemm ;; 705937a2000SPeter Wemm esac 706937a2000SPeter Wemm done 707937a2000SPeter Wemm 708d915215eSBaptiste Daroussin "$@" -E \ 709d915215eSBaptiste Daroussin | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710d915215eSBaptiste Daroussin -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711d915215eSBaptiste Daroussin | sed '$ s: \\$::' > "$tmpdepfile" 712937a2000SPeter Wemm rm -f "$depfile" 713937a2000SPeter Wemm echo "$object : \\" > "$depfile" 714937a2000SPeter Wemm cat < "$tmpdepfile" >> "$depfile" 715937a2000SPeter Wemm sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 716937a2000SPeter Wemm rm -f "$tmpdepfile" 717937a2000SPeter Wemm ;; 718937a2000SPeter Wemm 719937a2000SPeter Wemmmsvisualcpp) 720937a2000SPeter Wemm # Important note: in order to support this mode, a compiler *must* 7218bc5c7c0SPeter Wemm # always write the preprocessed file to stdout. 722937a2000SPeter Wemm "$@" || exit $? 7238bc5c7c0SPeter Wemm 7248bc5c7c0SPeter Wemm # Remove the call to Libtool. 7258bc5c7c0SPeter Wemm if test "$libtool" = yes; then 7268bc5c7c0SPeter Wemm while test "X$1" != 'X--mode=compile'; do 7278bc5c7c0SPeter Wemm shift 7288bc5c7c0SPeter Wemm done 7298bc5c7c0SPeter Wemm shift 7308bc5c7c0SPeter Wemm fi 7318bc5c7c0SPeter Wemm 732937a2000SPeter Wemm IFS=" " 733937a2000SPeter Wemm for arg 734937a2000SPeter Wemm do 735937a2000SPeter Wemm case "$arg" in 7368bc5c7c0SPeter Wemm -o) 7378bc5c7c0SPeter Wemm shift 7388bc5c7c0SPeter Wemm ;; 7398bc5c7c0SPeter Wemm $object) 7408bc5c7c0SPeter Wemm shift 7418bc5c7c0SPeter Wemm ;; 742937a2000SPeter Wemm "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743937a2000SPeter Wemm set fnord "$@" 744937a2000SPeter Wemm shift 745937a2000SPeter Wemm shift 746937a2000SPeter Wemm ;; 747937a2000SPeter Wemm *) 748937a2000SPeter Wemm set fnord "$@" "$arg" 749937a2000SPeter Wemm shift 750937a2000SPeter Wemm shift 751937a2000SPeter Wemm ;; 752937a2000SPeter Wemm esac 753937a2000SPeter Wemm done 7548bc5c7c0SPeter Wemm "$@" -E 2>/dev/null | 7558bc5c7c0SPeter Wemm sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 756937a2000SPeter Wemm rm -f "$depfile" 757937a2000SPeter Wemm echo "$object : \\" > "$depfile" 7588bc5c7c0SPeter Wemm sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 7598bc5c7c0SPeter Wemm echo "$tab" >> "$depfile" 7608bc5c7c0SPeter Wemm sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761937a2000SPeter Wemm rm -f "$tmpdepfile" 762937a2000SPeter Wemm ;; 763937a2000SPeter Wemm 7648bc5c7c0SPeter Wemmmsvcmsys) 7658bc5c7c0SPeter Wemm # This case exists only to let depend.m4 do its work. It works by 7668bc5c7c0SPeter Wemm # looking at the text of this script. This case will never be run, 7678bc5c7c0SPeter Wemm # since it is checked for above. 7688bc5c7c0SPeter Wemm exit 1 7698bc5c7c0SPeter Wemm ;; 7708bc5c7c0SPeter Wemm 771937a2000SPeter Wemmnone) 772937a2000SPeter Wemm exec "$@" 773937a2000SPeter Wemm ;; 774937a2000SPeter Wemm 775937a2000SPeter Wemm*) 776937a2000SPeter Wemm echo "Unknown depmode $depmode" 1>&2 777937a2000SPeter Wemm exit 1 778937a2000SPeter Wemm ;; 779937a2000SPeter Wemmesac 780937a2000SPeter Wemm 781937a2000SPeter Wemmexit 0 782937a2000SPeter Wemm 783937a2000SPeter Wemm# Local Variables: 784937a2000SPeter Wemm# mode: shell-script 785937a2000SPeter Wemm# sh-indentation: 2 786*70b56f4bSCy Schubert# eval: (add-hook 'before-save-hook 'time-stamp) 787937a2000SPeter Wemm# time-stamp-start: "scriptversion=" 788937a2000SPeter Wemm# time-stamp-format: "%:y-%02m-%02d.%02H" 789bca4681bSCy Schubert# time-stamp-time-zone: "UTC0" 7908bc5c7c0SPeter Wemm# time-stamp-end: "; # UTC" 791937a2000SPeter Wemm# End: 792