depcomp revision 3aa430dc5437a98734b36f996f9b17081a589143
13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#! /bin/sh 23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# depcomp - compile a program generating dependencies as side-effects 33aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 43aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevscriptversion=2009-04-28.21; # UTC 53aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 63aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free 73aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Software Foundation, Inc. 83aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 93aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This program is free software; you can redistribute it and/or modify 103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# it under the terms of the GNU General Public License as published by 113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the Free Software Foundation; either version 2, or (at your option) 123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# any later version. 133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This program is distributed in the hope that it will be useful, 153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# but WITHOUT ANY WARRANTY; without even the implied warranty of 163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# GNU General Public License for more details. 183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# You should have received a copy of the GNU General Public License 203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# along with this program. If not, see <http://www.gnu.org/licenses/>. 213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# As a special exception to the GNU General Public License, if you 233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# distribute this file as part of a program that contains a 243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# configuration script generated by Autoconf, you may include it under 253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the same distribution terms that you use for the rest of that program. 263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcase $1 in 303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev '') 313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "$0: No command. Try \`$0 --help' for more information." 1>&2 323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1; 333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -h | --h*) 353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat <<\EOF 363aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevUsage: depcomp [--help] [--version] PROGRAM [ARGS] 373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 383aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevRun PROGRAMS ARGS to compile a file, generating dependencies 393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevas side-effects. 403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 413aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEnvironment variables: 423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depmode Dependency tracking mode. 433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev source Source file read by `PROGRAMS ARGS'. 443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev object Object file output by `PROGRAMS ARGS'. 453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev DEPDIR directory where to store dependencies. 463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depfile Dependency file to output. 473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile Temporary file to use when outputing dependencies. 483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev libtool Whether libtool is used (yes/no). 493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 503aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevReport bugs to <bug-automake@gnu.org>. 513aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF 523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -v | --v*) 553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "depcomp $scriptversion" 563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $? 573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevesac 593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -z "$depmode" || test -z "$source" || test -z "$object"; then 613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "depcomp: Variables source, object and depmode must be set" 1>&2 623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdepfile=${depfile-`echo "$object" | 673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrm -f "$tmpdepfile" 713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Some modes work just like other modes, but use different flags. We 733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# parameterize here, but still list the modes in the big case below, 743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# to make depend.m4 easier to write. Note that we *cannot* use a case 753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# here, because this file can only contain one case statement. 763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "$depmode" = hp; then 773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # HP compiler uses -M and no extra arg. 783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gccflag=-M 793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depmode=gcc 803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "$depmode" = dashXmstdout; then 833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This is just like dashmstdout with a different argument. 843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dashmflag=-xM 853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depmode=dashmstdout 863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcygpath_u="cygpath -u -f -" 893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "$depmode" = msvcmsys; then 903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This is just like msvisualcpp but w/o cygpath translation. 913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Just convert the backslash-escaped backslashes to single forward 923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # slashes to satisfy depend.m4 933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cygpath_u="sed s,\\\\\\\\,/,g" 943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev depmode=msvisualcpp 953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi 963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcase "$depmode" in 983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevgcc3) 993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## gcc 3 implements dependency tracking that does exactly what 1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## we want. Yay! Note: for some reason libtool 1.4 doesn't like 1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## it if -MD -MP comes after the -MF stuff. Hmm. 1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Unfortunately, FreeBSD c89 acceptance of flags depends upon 1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## the command line argument order; so add the flags where they 1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## appear in depend2.am. Note that the slowdown incurred here 1053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## affects only configure: in makefiles, %FASTDEP% shortcuts this. 1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 1103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) set fnord "$@" "$arg" ;; 1113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 1123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift # fnord 1133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift # $arg 1143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 1153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" 1163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stat=$? 1173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $stat -eq 0; then : 1183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 1193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 1203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $stat 1213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev mv "$tmpdepfile" "$depfile" 1233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 1243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevgcc) 1263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## There are various ways to get dependency output from gcc. Here's 1273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## why we pick this rather obscure method: 1283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## - Don't want to use -MD because we'd like the dependencies to end 1293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## up in a subdir. Having to rename by hand is ugly. 1303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## (We might end up doing this anyway to support other compilers.) 1313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 1323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## -MM, not -M (despite what the docs say). 1333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## - Using -M directly means running the compiler twice (even worse 1343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## than renaming). 1353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -z "$gccflag"; then 1363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev gccflag=-MD, 1373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -Wp,"$gccflag$tmpdepfile" 1393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stat=$? 1403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $stat -eq 0; then : 1413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 1423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 1433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $stat 1443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$depfile" 1463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "$object : \\" > "$depfile" 1473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## The second -e expression handles DOS-style file names with drive letters. 1493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e 's/^[^:]*: / /' \ 1503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 1513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## This next piece of magic avoids the `deleted header file' problem. 1523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## The problem is that when a header file which appears in a .P file 1533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## is deleted, the dependency causes make to die (because there is 1543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## typically no way to rebuild the header). We avoid this by adding 1553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## dummy dependencies for each header file. Too bad gcc doesn't do 1563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## this for us directly. 1573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tr ' ' ' 1583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" | 1593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of gcc put a space before the `:'. On the theory 1603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## that the space means something, we add a space to the output as 1613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## well. 1623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of the HPUX 10.20 sed can't process this invocation 1633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## correctly. Breaking it into two sed invocations is a workaround. 1643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 1653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 1663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 1673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevhp) 1693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This case exists only to let depend.m4 do its work. It works by 1703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # looking at the text of this script. This case will never be run, 1713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # since it is checked for above. 1723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 1733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 1743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevsgi) 1763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 1773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" "-Wp,-MDupdate,$tmpdepfile" 1783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 1793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -MDupdate "$tmpdepfile" 1803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stat=$? 1823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $stat -eq 0; then : 1833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 1843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 1853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $stat 1863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 1873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$depfile" 1883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 1903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "$object : \\" > "$depfile" 1913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Clip off the initial element (the dependent). Don't try to be 1933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # clever and replace this with sed code, as IRIX sed won't handle 1943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # lines with more than a fixed number of characters (4096 in 1953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 1963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the IRIX cc adds comments like `#:fec' to the end of the 1973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # dependency line. 1983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tr ' ' ' 1993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" \ 2003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ 2013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tr ' 2023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' ' ' >> "$depfile" 2033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo >> "$depfile" 2043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The second pass generates a dummy entry for each header file. 2063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tr ' ' ' 2073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" \ 2083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 2093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev >> "$depfile" 2103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 2113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The sourcefile does not contain any dependencies, so just 2123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # store a dummy comment line, to avoid errors with the Makefile 2133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # "include basename.Plo" scheme. 2143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "#dummy" > "$depfile" 2153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 2163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 2173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 2183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevaix) 2203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The C for AIX Compiler uses -M and outputs the dependencies 2213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # in a .u file. In older versions, this file always lives in the 2223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # current directory. Also, the AIX compiler puts `$object:' at the 2233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # start of each line; $object doesn't have directory information. 2243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Version 6 uses the directory in both cases. 2253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 2263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "x$dir" = "x$object" && dir= 2273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 2283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 2293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile1=$dir$base.u 2303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile2=$base.u 2313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile3=$dir.libs/$base.u 2323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -Wc,-M 2333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 2343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile1=$dir$base.u 2353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile2=$dir$base.u 2363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile3=$dir$base.u 2373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -M 2383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 2393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stat=$? 2403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $stat -eq 0; then : 2423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 2433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $stat 2453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 2463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 2483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 2493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$tmpdepfile" && break 2503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 2513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$tmpdepfile"; then 2523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Each line is of the form `foo.o: dependent.h'. 2533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do two passes, one to just change these to 2543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # `$object: dependent.h' and one to simply `dependent.h:'. 2553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 2563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # That's a tab and a space in the []. 2573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 2583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 2593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The sourcefile does not contain any dependencies, so just 2603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # store a dummy comment line, to avoid errors with the Makefile 2613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # "include basename.Plo" scheme. 2623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "#dummy" > "$depfile" 2633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 2643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 2653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 2663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevicc) 2683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Intel's C compiler understands `-MD -MF file'. However on 2693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c 2703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # ICC 7.0 will fill foo.d with something like 2713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # foo.o: sub/foo.c 2723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # foo.o: sub/foo.h 2733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # which is wrong. We want: 2743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # sub/foo.o: sub/foo.c 2753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # sub/foo.o: sub/foo.h 2763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # sub/foo.c: 2773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # sub/foo.h: 2783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # ICC 7.1 will output 2793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # foo.o: sub/foo.c sub/foo.h 2803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # and will wrap long lines using \ : 2813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # foo.o: sub/foo.c ... \ 2823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # sub/foo.h ... \ 2833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # ... 2843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -MD -MF "$tmpdepfile" 2863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stat=$? 2873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $stat -eq 0; then : 2883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 2893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 2903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $stat 2913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 2923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$depfile" 2933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Each line is of the form `foo.o: dependent.h', 2943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 2953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Do two passes, one to just change these to 2963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # `$object: dependent.h' and one to simply `dependent.h:'. 2973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 2983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Some versions of the HPUX 10.20 sed can't process this invocation 2993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # correctly. Breaking it into two sed invocations is a workaround. 3003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | 3013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e 's/$/ :/' >> "$depfile" 3023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 3033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 3043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevhp2) 3063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The "hp" stanza above does not work with aCC (C++) and HP's ia64 3073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # compilers, which have integrated preprocessors. The correct option 3083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # to use with these is +Maked; it writes dependencies to a file named 3093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # 'foo.d', which lands next to the object file, wherever that 3103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # happens to be. 3113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Much of this is similar to the tru64 case; see comments there. 3123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "x$dir" = "x$object" && dir= 3143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 3163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile1=$dir$base.d 3173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile2=$dir.libs/$base.d 3183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -Wc,+Maked 3193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 3203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile1=$dir$base.d 3213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile2=$dir$base.d 3223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" +Maked 3233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stat=$? 3253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $stat -eq 0; then : 3263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 3273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile1" "$tmpdepfile2" 3283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $stat 3293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 3323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 3333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$tmpdepfile" && break 3343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 3353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$tmpdepfile"; then 3363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" 3373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Add `dependent.h:' lines. 3383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -ne '2,${ 3393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/^ *// 3403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/ \\*$// 3413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev s/$/:/ 3423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p 3433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev }' "$tmpdepfile" >> "$depfile" 3443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 3453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "#dummy" > "$depfile" 3463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" "$tmpdepfile2" 3483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 3493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtru64) 3513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # The Tru64 compiler uses -MD to generate dependencies as a side 3523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. 3533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 3543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # dependencies in `foo.d' instead, so we check for that too. 3553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Subdirectories are respected. 3563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` 3573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test "x$dir" = "x$object" && dir= 3583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 3593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 3613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # With Tru64 cc, shared objects can also be used to make a 3623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # static library. This mechanism is used in libtool 1.4 series to 3633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # handle both shared and static libraries in a single compilation. 3643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. 3653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # 3663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # With libtool 1.5 this exception was removed, and libtool now 3673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # generates 2 separate objects for the 2 libraries. These two 3683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # compilations output dependencies in $dir.libs/$base.o.d and 3693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # in $dir$base.o.d. We have to check for both files, because 3703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # one of the two compilations can be disabled. We should prefer 3713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 3723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # automatically cleaned when .libs/ is deleted, while ignoring 3733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the former would cause a distcleancheck panic. 3743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 3753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile2=$dir$base.o.d # libtool 1.5 3763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 3773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 3783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -Wc,-MD 3793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 3803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile1=$dir$base.o.d 3813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile2=$dir$base.d 3823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile3=$dir$base.d 3833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tmpdepfile4=$dir$base.d 3843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -MD 3853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev stat=$? 3883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $stat -eq 0; then : 3893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 3903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit $stat 3923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 3933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 3943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" 3953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 3963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -f "$tmpdepfile" && break 3973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 3983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test -f "$tmpdepfile"; then 3993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" 4003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # That's a tab and a space in the []. 4013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" 4023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev else 4033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "#dummy" > "$depfile" 4043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 4063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#nosideeffect) 4093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This comment above is used by automake to tell side-effect 4103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # dependency tracking mechanisms from slower ones. 4113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdashmstdout) 4133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Important note: in order to support this mode, a compiler *must* 4143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # always write the preprocessed file to stdout, regardless of -o. 4153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" || exit $? 4163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove the call to Libtool. 4183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 4193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "X$1" != 'X--mode=compile'; do 4203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 4213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 4223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 4233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove `-o $object'. 4263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=" " 4273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 4283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 4293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 4303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -o) 4313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 4323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $object) 4343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 4353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 4373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set fnord "$@" "$arg" 4383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift # fnord 4393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift # $arg 4403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 4423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 4433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev test -z "$dashmflag" && dashmflag=-M 4453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Require at least two characters before searching for `:' 4463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # in the target name. This is to cope with DOS-style filenames: 4473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. 4483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" $dashmflag | 4493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" 4503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$depfile" 4513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat < "$tmpdepfile" > "$depfile" 4523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev tr ' ' ' 4533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" | \ 4543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of the HPUX 10.20 sed can't process this invocation 4553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## correctly. Breaking it into two sed invocations is a workaround. 4563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 4573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 4583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4603aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevdashXmstdout) 4613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This case only exists to satisfy depend.m4. It is never actually 4623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # run, as this mode is specially recognized in the preamble. 4633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 4643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 4663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmakedepend) 4673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" || exit $? 4683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove any Libtool call 4693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 4703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "X$1" != 'X--mode=compile'; do 4713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 4723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 4733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 4743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # X makedepend 4763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 4773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cleared=no eat=no 4783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 4793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 4803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $cleared in 4813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev no) 4823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set ""; shift 4833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cleared=yes ;; 4843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 4853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test $eat = yes; then 4863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eat=no 4873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev continue 4883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 4893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$arg" in 4903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -D*|-I*) 4913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set fnord "$@" "$arg"; shift ;; 4923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Strip any option that makedepend may not understand. Remove 4933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # the object too, otherwise makedepend will parse it as a source file. 4943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -arch) 4953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev eat=yes ;; 4963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -*|$object) 4973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 4983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 4993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set fnord "$@" "$arg"; shift ;; 5003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 5013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 5023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev obj_suffix=`echo "$object" | sed 's/^.*\././'` 5033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev touch "$tmpdepfile" 5043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 5053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$depfile" 5063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat < "$tmpdepfile" > "$depfile" 5073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed '1,2d' "$tmpdepfile" | tr ' ' ' 5083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' | \ 5093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of the HPUX 10.20 sed can't process this invocation 5103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## correctly. Breaking it into two sed invocations is a workaround. 5113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" 5123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" "$tmpdepfile".bak 5133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcpp) 5163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Important note: in order to support this mode, a compiler *must* 5173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # always write the preprocessed file to stdout. 5183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" || exit $? 5193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove the call to Libtool. 5213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 5223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "X$1" != 'X--mode=compile'; do 5233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 5253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 5273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove `-o $object'. 5293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=" " 5303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 5313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 5323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case $arg in 5333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -o) 5343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $object) 5373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 5403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set fnord "$@" "$arg" 5413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift # fnord 5423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift # $arg 5433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 5453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 5463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -E | 5483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 5493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | 5503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed '$ s: \\$::' > "$tmpdepfile" 5513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$depfile" 5523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "$object : \\" > "$depfile" 5533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev cat < "$tmpdepfile" >> "$depfile" 5543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 5553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 5563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmsvisualcpp) 5593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Important note: in order to support this mode, a compiler *must* 5603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # always write the preprocessed file to stdout. 5613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" || exit $? 5623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # Remove the call to Libtool. 5643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if test "$libtool" = yes; then 5653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while test "X$1" != 'X--mode=compile'; do 5663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 5683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fi 5703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 5713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev IFS=" " 5723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev for arg 5733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev do 5743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev case "$arg" in 5753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev -o) 5763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev $object) 5793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 5823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set fnord "$@" 5833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *) 5873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev set fnord "$@" "$arg" 5883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev shift 5903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 5913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev esac 5923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev done 5933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev "$@" -E 2>/dev/null | 5943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 5953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$depfile" 5963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "$object : \\" > "$depfile" 5973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" 5983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo " " >> "$depfile" 5993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 6003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev rm -f "$tmpdepfile" 6013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 6023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmsvcmsys) 6043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # This case exists only to let depend.m4 do its work. It works by 6053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # looking at the text of this script. This case will never be run, 6063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev # since it is checked for above. 6073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 6083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 6093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevnone) 6113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exec "$@" 6123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 6133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev*) 6153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev echo "Unknown depmode $depmode" 1>&2 6163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev exit 1 6173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ;; 6183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevesac 6193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexit 0 6213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 6223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Local Variables: 6233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# mode: shell-script 6243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# sh-indentation: 2 6253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# eval: (add-hook 'write-file-hooks 'time-stamp) 6263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-start: "scriptversion=" 6273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-format: "%:y-%02m-%02d.%02H" 6283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-time-zone: "UTC" 6293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-end: "; # UTC" 6303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# End: 631