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