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