depcomp revision 38ae7e4efe803ea78b6499cd05a394db32623e41
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#! /bin/sh
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater# depcomp - compile a program generating dependencies as side-effects
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinscriptversion=2006-10-15.18
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Foundation, Inc.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# This program is free software; you can redistribute it and/or modify
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# it under the terms of the GNU General Public License as published by
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# the Free Software Foundation; either version 2, or (at your option)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# any later version.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# This program is distributed in the hope that it will be useful,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# but WITHOUT ANY WARRANTY; without even the implied warranty of
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater# GNU General Public License for more details.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# You should have received a copy of the GNU General Public License
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# along with this program; if not, write to the Free Software
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews# 02110-1301, USA.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# As a special exception to the GNU General Public License, if you
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# distribute this file as part of a program that contains a
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# configuration script generated by Autoconf, you may include it under
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# the same distribution terms that you use for the rest of that program.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincase $1 in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein '')
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "$0: No command. Try \`$0 --help' for more information." 1>&2
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -h | --h*)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cat <<\EOF
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinUsage: depcomp [--help] [--version] PROGRAM [ARGS]
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinRun PROGRAMS ARGS to compile a file, generating dependencies
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinas side-effects.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinEnvironment variables:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein depmode Dependency tracking mode.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein source Source file read by `PROGRAMS ARGS'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein object Object file output by `PROGRAMS ARGS'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein DEPDIR directory where to store dependencies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein depfile Dependency file to output.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile Temporary file to use when outputing dependencies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein libtool Whether libtool is used (yes/no).
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic UpdaterReport bugs to <bug-automake@gnu.org>.
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic UpdaterEOF
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit $?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater -v | --v*)
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater echo "depcomp $scriptversion"
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater exit $?
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater ;;
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updateresac
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif test -z "$depmode" || test -z "$source" || test -z "$object"; then
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater echo "depcomp: Variables source, object and depmode must be set" 1>&2
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater exit 1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updaterdepfile=${depfile-`echo "$object" |
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinrm -f "$tmpdepfile"
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater
cbf7f1435f332b31f51a98611ccbfcd07c42c032Automatic Updater# Some modes work just like other modes, but use different flags. We
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# parameterize here, but still list the modes in the big case below,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# to make depend.m4 easier to write. Note that we *cannot* use a case
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# here, because this file can only contain one case statement.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif test "$depmode" = hp; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # HP compiler uses -M and no extra arg.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein gccflag=-M
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein depmode=gcc
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsfi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewsif test "$depmode" = dashXmstdout; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # This is just like dashmstdout with a different argument.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dashmflag=-xM
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein depmode=dashmstdout
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinfi
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeincase "$depmode" in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeingcc3)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## gcc 3 implements dependency tracking that does exactly what
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## we want. Yay! Note: for some reason libtool 1.4 doesn't like
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## it if -MD -MP comes after the -MF stuff. Hmm.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Unfortunately, FreeBSD c89 acceptance of flags depends upon
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews## the command line argument order; so add the flags where they
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews## appear in depend2.am. Note that the slowdown incurred here
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater## affects only configure: in makefiles, %FASTDEP% shortcuts this.
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews for arg
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews do
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater case $arg in
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews *) set fnord "$@" "$arg" ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein esac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift # fnord
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift # $arg
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stat=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test $stat -eq 0; then :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit $stat
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews mv "$tmpdepfile" "$depfile"
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews ;;
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrewsgcc)
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews## There are various ways to get dependency output from gcc. Here's
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews## why we pick this rather obscure method:
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews## - Don't want to use -MD because we'd like the dependencies to end
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews## up in a subdir. Having to rename by hand is ugly.
acb72d5e2c83b597332e3eb0c7d59e1142f1adfdMark Andrews## (We might end up doing this anyway to support other compilers.)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## -MM, not -M (despite what the docs say).
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater## - Using -M directly means running the compiler twice (even worse
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater## than renaming).
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater if test -z "$gccflag"; then
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater gccflag=-MD,
38417cbfb1a328c20b5b723b8584a02c57f88897Automatic Updater fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -Wp,"$gccflag$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stat=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test $stat -eq 0; then :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit $stat
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "$object : \\" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## The second -e expression handles DOS-style file names with drive letters.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -e 's/^[^:]*: / /' \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## This next piece of magic avoids the `deleted header file' problem.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## The problem is that when a header file which appears in a .P file
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## is deleted, the dependency causes make to die (because there is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## typically no way to rebuild the header). We avoid this by adding
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## dummy dependencies for each header file. Too bad gcc doesn't do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## this for us directly.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tr ' ' '
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein' < "$tmpdepfile" |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Some versions of gcc put a space before the `:'. On the theory
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## that the space means something, we add a space to the output as
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## well.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## Some versions of the HPUX 10.20 sed can't process this invocation
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## correctly. Breaking it into two sed invocations is a workaround.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinhp)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # This case exists only to let depend.m4 do its work. It works by
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # looking at the text of this script. This case will never be run,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # since it is checked for above.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit 1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinsgi)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test "$libtool" = yes; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" "-Wp,-MDupdate,$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -MDupdate "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stat=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test $stat -eq 0; then :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews exit $stat
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "$object : \\" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Clip off the initial element (the dependent). Don't try to be
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # clever and replace this with sed code, as IRIX sed won't handle
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # lines with more than a fixed number of characters (4096 in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # the IRIX cc adds comments like `#:fec' to the end of the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # dependency line.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tr ' ' '
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein' < "$tmpdepfile" \
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tr '
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein' ' ' >> $depfile
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo >> $depfile
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # The second pass generates a dummy entry for each header file.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tr ' ' '
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein' < "$tmpdepfile" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein >> $depfile
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews # The sourcefile does not contain any dependencies, so just
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # store a dummy comment line, to avoid errors with the Makefile
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # "include basename.Plo" scheme.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#dummy" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinaix)
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater # The C for AIX Compiler uses -M and outputs the dependencies
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # in a .u file. In older versions, this file always lives in the
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # current directory. Also, the AIX compiler puts `$object:' at the
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews # start of each line; $object doesn't have directory information.
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews # Version 6 uses the directory in both cases.
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile="$stripped.u"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test "$libtool" = yes; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -Wc,-M
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -M
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stat=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test -f "$tmpdepfile"; then :
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews else
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews stripped=`echo "$stripped" | sed 's,^.*/,,'`
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews tmpdepfile="$stripped.u"
a1b05dea35aa30b152a47115e18bbe679d3fcf19Mark Andrews fi
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test $stat -eq 0; then :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit $stat
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test -f "$tmpdepfile"; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein outname="$stripped.o"
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews # Each line is of the form `foo.o: dependent.h'.
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews # Do two passes, one to just change these to
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater # `$object: dependent.h' and one to simply `dependent.h:'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # The sourcefile does not contain any dependencies, so just
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # store a dummy comment line, to avoid errors with the Makefile
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # "include basename.Plo" scheme.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#dummy" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinicc)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Intel's C compiler understands `-MD -MF file'. However on
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # ICC 7.0 will fill foo.d with something like
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # foo.o: sub/foo.c
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # foo.o: sub/foo.h
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # which is wrong. We want:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # sub/foo.o: sub/foo.c
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # sub/foo.o: sub/foo.h
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # sub/foo.c:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # sub/foo.h:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # ICC 7.1 will output
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # foo.o: sub/foo.c sub/foo.h
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # and will wrap long lines using \ :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # foo.o: sub/foo.c ... \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # sub/foo.h ... \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # ...
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
2cc6eb92f9443695bc32fa6eed372d983d261a35Automatic Updater "$@" -MD -MF "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stat=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test $stat -eq 0; then :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit $stat
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Each line is of the form `foo.o: dependent.h',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Do two passes, one to just change these to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # `$object: dependent.h' and one to simply `dependent.h:'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Some versions of the HPUX 10.20 sed can't process this invocation
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # correctly. Breaking it into two sed invocations is a workaround.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -e 's/$/ :/' >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinhp2)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # The "hp" stanza above does not work with aCC (C++) and HP's ia64
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # compilers, which have integrated preprocessors. The correct option
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # to use with these is +Maked; it writes dependencies to a file named
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # 'foo.d', which lands next to the object file, wherever that
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # happens to be.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Much of this is similar to the tru64 case; see comments there.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein test "x$dir" = "x$object" && dir=
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test "$libtool" = yes; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile1=$dir$base.d
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile2=$dir.libs/$base.d
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -Wc,+Maked
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile1=$dir$base.d
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile2=$dir$base.d
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" +Maked
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein stat=$?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test $stat -eq 0; then :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile1" "$tmpdepfile2"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit $stat
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein test -f "$tmpdepfile" && break
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test -f "$tmpdepfile"; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Add `dependent.h:' lines.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "#dummy" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile" "$tmpdepfile2"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintru64)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # The Tru64 compiler uses -MD to generate dependencies as a side
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews # dependencies in `foo.d' instead, so we check for that too.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Subdirectories are respected.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein test "x$dir" = "x$object" && dir=
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test "$libtool" = yes; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # With Tru64 cc, shared objects can also be used to make a
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # static library. This mechanism is used in libtool 1.4 series to
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # handle both shared and static libraries in a single compilation.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # With libtool 1.5 this exception was removed, and libtool now
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # generates 2 separate objects for the 2 libraries. These two
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # compilations output dependencies in $dir.libs/$base.o.d and
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # in $dir$base.o.d. We have to check for both files, because
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # one of the two compilations can be disabled. We should prefer
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # automatically cleaned when .libs/ is deleted, while ignoring
47012ae6dbf18a2503d7b33c1c9583dc38625cb7Mark Andrews # the former would cause a distcleancheck panic.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile2=$dir$base.o.d # libtool 1.5
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -Wc,-MD
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein else
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce tmpdepfile1=$dir$base.o.d
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce tmpdepfile2=$dir$base.d
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein tmpdepfile3=$dir$base.d
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce tmpdepfile4=$dir$base.d
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce "$@" -MD
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce fi
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce stat=$?
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater if test $stat -eq 0; then :
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater else
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce exit $stat
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater fi
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater do
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater test -f "$tmpdepfile" && break
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater done
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce if test -f "$tmpdepfile"; then
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # That's a tab and a space in the [].
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater else
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater echo "#dummy" > "$depfile"
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce fi
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce rm -f "$tmpdepfile"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater ;;
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce#nosideeffect)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # This comment above is used by automake to tell side-effect
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # dependency tracking mechanisms from slower ones.
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updaterdashmstdout)
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater # Important note: in order to support this mode, a compiler *must*
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # always write the preprocessed file to stdout, regardless of -o.
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce "$@" || exit $?
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # Remove the call to Libtool.
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce if test "$libtool" = yes; then
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce while test $1 != '--mode=compile'; do
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce shift
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce done
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce shift
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce fi
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # Remove `-o $object'.
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce IFS=" "
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce for arg
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce do
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce case $arg in
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce -o)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce shift
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce $object)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce shift
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce *)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce set fnord "$@" "$arg"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift # fnord
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift # $arg
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein esac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce test -z "$dashmflag" && dashmflag=-M
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # Require at least two characters before searching for `:'
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce # in the target name. This is to cope with DOS-style filenames:
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce "$@" $dashmflag |
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater rm -f "$depfile"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater cat < "$tmpdepfile" > "$depfile"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater tr ' ' '
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater' < "$tmpdepfile" | \
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater## Some versions of the HPUX 10.20 sed can't process this invocation
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater## correctly. Breaking it into two sed invocations is a workaround.
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater rm -f "$tmpdepfile"
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric LucedashXmstdout)
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce # This case only exists to satisfy depend.m4. It is never actually
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater # run, as this mode is specially recognized in the preamble.
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater exit 1
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Lucemakedepend)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce "$@" || exit $?
c71787bd6356c92e9c7d0a174cd63ab17fcf34c6Eric Luce # Remove any Libtool call
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce if test "$libtool" = yes; then
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce while test $1 != '--mode=compile'; do
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce shift
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce done
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce shift
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # X makedepend
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cleared=no
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for arg in "$@"; do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein case $cleared in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein no)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein set ""; shift
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce cleared=yes ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce esac
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce case "$arg" in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -D*|-I*)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein set fnord "$@" "$arg"; shift ;;
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews # Strip any option that makedepend may not understand. Remove
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # the object too, otherwise makedepend will parse it as a source file.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -*|$object)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein *)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein set fnord "$@" "$arg"; shift ;;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews esac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein obj_suffix="`echo $object | sed 's/^.*\././'`"
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews touch "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$depfile"
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews cat < "$tmpdepfile" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed '1,2d' "$tmpdepfile" | tr ' ' '
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein' | \
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews## Some versions of the HPUX 10.20 sed can't process this invocation
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein## correctly. Breaking it into two sed invocations is a workaround.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile" "$tmpdepfile".bak
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews ;;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrewscpp)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Important note: in order to support this mode, a compiler *must*
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # always write the preprocessed file to stdout.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" || exit $?
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews # Remove the call to Libtool.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if test "$libtool" = yes; then
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while test $1 != '--mode=compile'; do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein fi
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Remove `-o $object'.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein IFS=" "
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for arg
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein do
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater case $arg in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -o)
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews shift
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $object)
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews shift
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein *)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein set fnord "$@" "$arg"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift # fnord
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift # $arg
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein esac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -E |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed '$ s: \\$::' > "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "$object : \\" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein cat < "$tmpdepfile" >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmsvisualcpp)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Important note: in order to support this mode, a compiler *must*
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # always write the preprocessed file to stdout, regardless of -o,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # because we must use -o when running libtool.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" || exit $?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein IFS=" "
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for arg
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein do
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein case "$arg" in
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein set fnord "$@"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater *)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein set fnord "$@" "$arg"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein shift
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein esac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein done
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$@" -E |
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "$object : \\" > "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo " " >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rm -f "$tmpdepfile"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Lucenone)
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce exec "$@"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater*)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein echo "Unknown depmode $depmode" 1>&2
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein exit 1
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ;;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinesac
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinexit 0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Local Variables:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# mode: shell-script
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# sh-indentation: 2
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# eval: (add-hook 'write-file-hooks 'time-stamp)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# time-stamp-start: "scriptversion="
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# time-stamp-format: "%:y-%02m-%02d.%02H"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# time-stamp-end: "$"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# End:
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater