18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#! /bin/sh 28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# depcomp - compile a program generating dependencies as side-effects 38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsscriptversion=2005-07-09.11 58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# This program is free software; you can redistribute it and/or modify 98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# it under the terms of the GNU General Public License as published by 108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# the Free Software Foundation; either version 2, or (at your option) 118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# any later version. 128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# This program is distributed in the hope that it will be useful, 148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# but WITHOUT ANY WARRANTY; without even the implied warranty of 158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# GNU General Public License for more details. 178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# You should have received a copy of the GNU General Public License 198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# along with this program; if not, write to the Free Software 208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# 02110-1301, USA. 228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# As a special exception to the GNU General Public License, if you 248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# distribute this file as part of a program that contains a 258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# configuration script generated by Autoconf, you may include it under 268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# the same distribution terms that you use for the rest of that program. 278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscase $1 in 318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels '') 328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "$0: No command. Try \`$0 --help' for more information." 1>&2 338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit 1; 348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -h | --h*) 368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cat <<\EOF 378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsUsage: depcomp [--help] [--version] PROGRAM [ARGS] 388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsRun PROGRAMS ARGS to compile a file, generating dependencies 408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsas side-effects. 418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsEnvironment variables: 438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels depmode Dependency tracking mode. 448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels source Source file read by `PROGRAMS ARGS'. 458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels object Object file output by `PROGRAMS ARGS'. 468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels DEPDIR directory where to store dependencies. 478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels depfile Dependency file to output. 488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile Temporary file to use when outputing dependencies. 498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels libtool Whether libtool is used (yes/no). 508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsReport bugs to <bug-automake@gnu.org>. 528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsEOF 538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $? 548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -v | --v*) 568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "depcomp $scriptversion" 578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $? 588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsesac 608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test -z "$depmode" || test -z "$source" || test -z "$object"; then 628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "depcomp: Variables source, object and depmode must be set" 1>&2 638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit 1 648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi 658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdepfile=${depfile-`echo "$object" | 688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsrm -f "$tmpdepfile" 728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Some modes work just like other modes, but use different flags. We 748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# parameterize here, but still list the modes in the big case below, 758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# to make depend.m4 easier to write. Note that we *cannot* use a case 768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# here, because this file can only contain one case statement. 778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test "$depmode" = hp; then 788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # HP compiler uses -M and no extra arg. 798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels gccflag=-M 808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels depmode=gcc 818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi 828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test "$depmode" = dashXmstdout; then 848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # This is just like dashmstdout with a different argument. 858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels dashmflag=-xM 868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels depmode=dashmstdout 878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi 888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscase "$depmode" in 908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsgcc3) 918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## gcc 3 implements dependency tracking that does exactly what 928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## we want. Yay! Note: for some reason libtool 1.4 doesn't like 938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## it if -MD -MP comes after the -MF stuff. Hmm. 948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" 958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stat=$? 968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test $stat -eq 0; then : 978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $stat 1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels mv "$tmpdepfile" "$depfile" 1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsgcc) 1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## There are various ways to get dependency output from gcc. Here's 1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## why we pick this rather obscure method: 1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## - Don't want to use -MD because we'd like the dependencies to end 1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## up in a subdir. Having to rename by hand is ugly. 1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## (We might end up doing this anyway to support other compilers.) 1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## -MM, not -M (despite what the docs say). 1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## - Using -M directly means running the compiler twice (even worse 1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## than renaming). 1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test -z "$gccflag"; then 1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels gccflag=-MD, 1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -Wp,"$gccflag$tmpdepfile" 1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stat=$? 1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test $stat -eq 0; then : 1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $stat 1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$depfile" 1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "$object : \\" > "$depfile" 1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## The second -e expression handles DOS-style file names with drive letters. 1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e 's/^[^:]*: / /' \ 1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## This next piece of magic avoids the `deleted header file' problem. 1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## The problem is that when a header file which appears in a .P file 1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## is deleted, the dependency causes make to die (because there is 1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## typically no way to rebuild the header). We avoid this by adding 1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## dummy dependencies for each header file. Too bad gcc doesn't do 1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## this for us directly. 1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tr ' ' ' 1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" | 1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of gcc put a space before the `:'. On the theory 1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## that the space means something, we add a space to the output as 1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## well. 1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of the HPUX 10.20 sed can't process this invocation 1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## correctly. Breaking it into two sed invocations is a workaround. 1438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 1458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 1468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelshp) 1488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # This case exists only to let depend.m4 do its work. It works by 1498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # looking at the text of this script. This case will never be run, 1508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # since it is checked for above. 1518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit 1 1528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 1538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelssgi) 1558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test "$libtool" = yes; then 1568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" "-Wp,-MDupdate,$tmpdepfile" 1578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 1588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -MDupdate "$tmpdepfile" 1598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 1608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stat=$? 1618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test $stat -eq 0; then : 1628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 1638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 1648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $stat 1658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 1668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$depfile" 1678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "$object : \\" > "$depfile" 1708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Clip off the initial element (the dependent). Don't try to be 1728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # clever and replace this with sed code, as IRIX sed won't handle 1738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # lines with more than a fixed number of characters (4096 in 1748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # the IRIX cc adds comments like `#:fec' to the end of the 1768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # dependency line. 1778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tr ' ' ' 1788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" \ 1798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 1808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tr ' 1818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' ' ' >> $depfile 1828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo >> $depfile 1838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # The second pass generates a dummy entry for each header file. 1858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tr ' ' ' 1868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" \ 1878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 1888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels >> $depfile 1898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 1908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # The sourcefile does not contain any dependencies, so just 1918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # store a dummy comment line, to avoid errors with the Makefile 1928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # "include basename.Plo" scheme. 1938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "#dummy" > "$depfile" 1948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 1958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 1968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 1978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsaix) 1998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # The C for AIX Compiler uses -M and outputs the dependencies 2008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # in a .u file. In older versions, this file always lives in the 2018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # current directory. Also, the AIX compiler puts `$object:' at the 2028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # start of each line; $object doesn't have directory information. 2038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Version 6 uses the directory in both cases. 2048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` 2058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile="$stripped.u" 2068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test "$libtool" = yes; then 2078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -Wc,-M 2088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 2098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -M 2108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 2118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stat=$? 2128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test -f "$tmpdepfile"; then : 2148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 2158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stripped=`echo "$stripped" | sed 's,^.*/,,'` 2168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile="$stripped.u" 2178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 2188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test $stat -eq 0; then : 2208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 2218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 2228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $stat 2238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 2248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test -f "$tmpdepfile"; then 2268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels outname="$stripped.o" 2278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Each line is of the form `foo.o: dependent.h'. 2288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Do two passes, one to just change these to 2298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # `$object: dependent.h' and one to simply `dependent.h:'. 2308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" 2318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" 2328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 2338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # The sourcefile does not contain any dependencies, so just 2348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # store a dummy comment line, to avoid errors with the Makefile 2358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # "include basename.Plo" scheme. 2368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "#dummy" > "$depfile" 2378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 2388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 2398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 2408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsicc) 2428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Intel's C compiler understands `-MD -MF file'. However on 2438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # ICC 7.0 will fill foo.d with something like 2458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # foo.o: sub/foo.c 2468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # foo.o: sub/foo.h 2478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # which is wrong. We want: 2488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # sub/foo.o: sub/foo.c 2498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # sub/foo.o: sub/foo.h 2508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # sub/foo.c: 2518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # sub/foo.h: 2528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # ICC 7.1 will output 2538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # foo.o: sub/foo.c sub/foo.h 2548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # and will wrap long lines using \ : 2558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # foo.o: sub/foo.c ... \ 2568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # sub/foo.h ... \ 2578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # ... 2588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -MD -MF "$tmpdepfile" 2608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stat=$? 2618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test $stat -eq 0; then : 2628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 2638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 2648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $stat 2658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 2668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$depfile" 2678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Each line is of the form `foo.o: dependent.h', 2688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Do two passes, one to just change these to 2708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # `$object: dependent.h' and one to simply `dependent.h:'. 2718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Some versions of the HPUX 10.20 sed can't process this invocation 2738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # correctly. Breaking it into two sed invocations is a workaround. 2748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 2758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e 's/$/ :/' >> "$depfile" 2768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 2778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 2788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstru64) 2808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # The Tru64 compiler uses -MD to generate dependencies as a side 2818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 2828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 2838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # dependencies in `foo.d' instead, so we check for that too. 2848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Subdirectories are respected. 2858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels test "x$dir" = "x$object" && dir= 2878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 2898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test "$libtool" = yes; then 2908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # With Tru64 cc, shared objects can also be used to make a 2918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # static library. This mecanism is used in libtool 1.4 series to 2928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # handle both shared and static libraries in a single compilation. 2938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 2948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # 2958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # With libtool 1.5 this exception was removed, and libtool now 2968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # generates 2 separate objects for the 2 libraries. These two 2978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # compilations output dependencies in in $dir.libs/$base.o.d and 2988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # in $dir$base.o.d. We have to check for both files, because 2998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # one of the two compilations can be disabled. We should prefer 3008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # automatically cleaned when .libs/ is deleted, while ignoring 3028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # the former would cause a distcleancheck panic. 3038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile2=$dir$base.o.d # libtool 1.5 3058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -Wc,-MD 3088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 3098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile1=$dir$base.o.d 3108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile2=$dir$base.d 3118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile3=$dir$base.d 3128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tmpdepfile4=$dir$base.d 3138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -MD 3148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 3158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels stat=$? 3178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test $stat -eq 0; then : 3188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 3198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $stat 3218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 3228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels do 3258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels test -f "$tmpdepfile" && break 3268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 3278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test -f "$tmpdepfile"; then 3288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 3298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # That's a tab and a space in the []. 3308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 3318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 3328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "#dummy" > "$depfile" 3338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 3348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 3358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 3368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#nosideeffect) 3388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # This comment above is used by automake to tell side-effect 3398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # dependency tracking mechanisms from slower ones. 3408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdashmstdout) 3428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Important note: in order to support this mode, a compiler *must* 3438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # always write the preprocessed file to stdout, regardless of -o. 3448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" || exit $? 3458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Remove the call to Libtool. 3478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test "$libtool" = yes; then 3488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels while test $1 != '--mode=compile'; do 3498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 3508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 3518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 3528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 3538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Remove `-o $object'. 3558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels IFS=" " 3568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for arg 3578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels do 3588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels case $arg in 3598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -o) 3608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 3618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 3628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels $object) 3638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 3648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 3658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *) 3668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set fnord "$@" "$arg" 3678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift # fnord 3688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift # $arg 3698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 3708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels esac 3718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 3728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels test -z "$dashmflag" && dashmflag=-M 3748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Require at least two characters before searching for `:' 3758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # in the target name. This is to cope with DOS-style filenames: 3768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 3778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" $dashmflag | 3788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 3798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$depfile" 3808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cat < "$tmpdepfile" > "$depfile" 3818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels tr ' ' ' 3828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" | \ 3838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of the HPUX 10.20 sed can't process this invocation 3848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## correctly. Breaking it into two sed invocations is a workaround. 3858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 3868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 3878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 3888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsdashXmstdout) 3908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # This case only exists to satisfy depend.m4. It is never actually 3918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # run, as this mode is specially recognized in the preamble. 3928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit 1 3938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 3948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 3958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsmakedepend) 3968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" || exit $? 3978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Remove any Libtool call 3988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test "$libtool" = yes; then 3998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels while test $1 != '--mode=compile'; do 4008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 4028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 4048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # X makedepend 4058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cleared=no 4078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for arg in "$@"; do 4088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels case $cleared in 4098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels no) 4108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set ""; shift 4118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cleared=yes ;; 4128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels esac 4138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels case "$arg" in 4148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -D*|-I*) 4158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set fnord "$@" "$arg"; shift ;; 4168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Strip any option that makedepend may not understand. Remove 4178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # the object too, otherwise makedepend will parse it as a source file. 4188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -*|$object) 4198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *) 4218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set fnord "$@" "$arg"; shift ;; 4228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels esac 4238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 4248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels obj_suffix="`echo $object | sed 's/^.*\././'`" 4258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels touch "$tmpdepfile" 4268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 4278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$depfile" 4288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cat < "$tmpdepfile" > "$depfile" 4298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed '1,2d' "$tmpdepfile" | tr ' ' ' 4308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' | \ 4318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of the HPUX 10.20 sed can't process this invocation 4328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## correctly. Breaking it into two sed invocations is a workaround. 4338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" "$tmpdepfile".bak 4358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 4378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscpp) 4388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Important note: in order to support this mode, a compiler *must* 4398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # always write the preprocessed file to stdout. 4408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" || exit $? 4418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 4428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Remove the call to Libtool. 4438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test "$libtool" = yes; then 4448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels while test $1 != '--mode=compile'; do 4458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 4478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 4498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 4508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Remove `-o $object'. 4518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels IFS=" " 4528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for arg 4538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels do 4548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels case $arg in 4558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -o) 4568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels $object) 4598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *) 4628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set fnord "$@" "$arg" 4638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift # fnord 4648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift # $arg 4658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels esac 4678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 4688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 4698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -E | 4708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 4718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 4728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed '$ s: \\$::' > "$tmpdepfile" 4738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$depfile" 4748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "$object : \\" > "$depfile" 4758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cat < "$tmpdepfile" >> "$depfile" 4768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 4778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 4788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 4808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsmsvisualcpp) 4818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # Important note: in order to support this mode, a compiler *must* 4828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # always write the preprocessed file to stdout, regardless of -o, 4838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # because we must use -o when running libtool. 4848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" || exit $? 4858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels IFS=" " 4868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels for arg 4878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels do 4888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels case "$arg" in 4898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 4908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set fnord "$@" 4918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *) 4958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set fnord "$@" "$arg" 4968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 4988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 4998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels esac 5008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels done 5018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels "$@" -E | 5028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" 5038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$depfile" 5048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "$object : \\" > "$depfile" 5058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo " " >> "$depfile" 5078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" 5088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels rm -f "$tmpdepfile" 5098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 5108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 5118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsnone) 5128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exec "$@" 5138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 5148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 5158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*) 5168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "Unknown depmode $depmode" 1>&2 5178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit 1 5188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 5198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsesac 5208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 5218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsexit 0 5228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 5238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Local Variables: 5248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# mode: shell-script 5258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# sh-indentation: 2 5268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# eval: (add-hook 'write-file-hooks 'time-stamp) 5278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-start: "scriptversion=" 5288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-format: "%:y-%02m-%02d.%02H" 5298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-end: "$" 5308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# End: 531