1fd0c672fSmrg#! /bin/sh 2fd0c672fSmrg# depcomp - compile a program generating dependencies as side-effects 3fd0c672fSmrg 443ecf206Smrgscriptversion=2018-03-07.03; # UTC 5fd0c672fSmrg 643ecf206Smrg# Copyright (C) 1999-2021 Free Software Foundation, Inc. 7fd0c672fSmrg 8fd0c672fSmrg# This program is free software; you can redistribute it and/or modify 9fd0c672fSmrg# it under the terms of the GNU General Public License as published by 10fd0c672fSmrg# the Free Software Foundation; either version 2, or (at your option) 11fd0c672fSmrg# any later version. 12fd0c672fSmrg 13fd0c672fSmrg# This program is distributed in the hope that it will be useful, 14fd0c672fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 15fd0c672fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16fd0c672fSmrg# GNU General Public License for more details. 17fd0c672fSmrg 18fd0c672fSmrg# You should have received a copy of the GNU General Public License 1943ecf206Smrg# along with this program. If not, see <https://www.gnu.org/licenses/>. 20fd0c672fSmrg 21fd0c672fSmrg# As a special exception to the GNU General Public License, if you 22fd0c672fSmrg# distribute this file as part of a program that contains a 23fd0c672fSmrg# configuration script generated by Autoconf, you may include it under 24fd0c672fSmrg# the same distribution terms that you use for the rest of that program. 25fd0c672fSmrg 26fd0c672fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. 27fd0c672fSmrg 28fd0c672fSmrgcase $1 in 29fd0c672fSmrg '') 30953c684bSmrg echo "$0: No command. Try '$0 --help' for more information." 1>&2 31953c684bSmrg exit 1; 32953c684bSmrg ;; 33fd0c672fSmrg -h | --h*) 34fd0c672fSmrg cat <<\EOF 35fd0c672fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS] 36fd0c672fSmrg 37fd0c672fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies 38fd0c672fSmrgas side-effects. 39fd0c672fSmrg 40fd0c672fSmrgEnvironment variables: 41fd0c672fSmrg depmode Dependency tracking mode. 42953c684bSmrg source Source file read by 'PROGRAMS ARGS'. 43953c684bSmrg object Object file output by 'PROGRAMS ARGS'. 44fd0c672fSmrg DEPDIR directory where to store dependencies. 45fd0c672fSmrg depfile Dependency file to output. 46953c684bSmrg tmpdepfile Temporary file to use when outputting dependencies. 47fd0c672fSmrg libtool Whether libtool is used (yes/no). 48fd0c672fSmrg 49fd0c672fSmrgReport bugs to <bug-automake@gnu.org>. 50fd0c672fSmrgEOF 51fd0c672fSmrg exit $? 52fd0c672fSmrg ;; 53fd0c672fSmrg -v | --v*) 54fd0c672fSmrg echo "depcomp $scriptversion" 55fd0c672fSmrg exit $? 56fd0c672fSmrg ;; 57fd0c672fSmrgesac 58fd0c672fSmrg 59953c684bSmrg# Get the directory component of the given path, and save it in the 60953c684bSmrg# global variables '$dir'. Note that this directory component will 61953c684bSmrg# be either empty or ending with a '/' character. This is deliberate. 62953c684bSmrgset_dir_from () 63953c684bSmrg{ 64953c684bSmrg case $1 in 65953c684bSmrg */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; 66953c684bSmrg *) dir=;; 67953c684bSmrg esac 68953c684bSmrg} 69953c684bSmrg 70953c684bSmrg# Get the suffix-stripped basename of the given path, and save it the 71953c684bSmrg# global variable '$base'. 72953c684bSmrgset_base_from () 73953c684bSmrg{ 74953c684bSmrg base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` 75953c684bSmrg} 76953c684bSmrg 77953c684bSmrg# If no dependency file was actually created by the compiler invocation, 78953c684bSmrg# we still have to create a dummy depfile, to avoid errors with the 79953c684bSmrg# Makefile "include basename.Plo" scheme. 80953c684bSmrgmake_dummy_depfile () 81953c684bSmrg{ 82953c684bSmrg echo "#dummy" > "$depfile" 83953c684bSmrg} 84953c684bSmrg 85953c684bSmrg# Factor out some common post-processing of the generated depfile. 86953c684bSmrg# Requires the auxiliary global variable '$tmpdepfile' to be set. 87953c684bSmrgaix_post_process_depfile () 88953c684bSmrg{ 89953c684bSmrg # If the compiler actually managed to produce a dependency file, 90953c684bSmrg # post-process it. 91953c684bSmrg if test -f "$tmpdepfile"; then 92953c684bSmrg # Each line is of the form 'foo.o: dependency.h'. 93953c684bSmrg # Do two passes, one to just change these to 94953c684bSmrg # $object: dependency.h 95953c684bSmrg # and one to simply output 96953c684bSmrg # dependency.h: 97953c684bSmrg # which is needed to avoid the deleted-header problem. 98953c684bSmrg { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" 99953c684bSmrg sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" 100953c684bSmrg } > "$depfile" 101953c684bSmrg rm -f "$tmpdepfile" 102953c684bSmrg else 103953c684bSmrg make_dummy_depfile 104953c684bSmrg fi 105953c684bSmrg} 106953c684bSmrg 107953c684bSmrg# A tabulation character. 108953c684bSmrgtab=' ' 109953c684bSmrg# A newline character. 110953c684bSmrgnl=' 111953c684bSmrg' 112953c684bSmrg# Character ranges might be problematic outside the C locale. 113953c684bSmrg# These definitions help. 114953c684bSmrgupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ 115953c684bSmrglower=abcdefghijklmnopqrstuvwxyz 116953c684bSmrgdigits=0123456789 117953c684bSmrgalpha=${upper}${lower} 118953c684bSmrg 119fd0c672fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then 120fd0c672fSmrg echo "depcomp: Variables source, object and depmode must be set" 1>&2 121fd0c672fSmrg exit 1 122fd0c672fSmrgfi 123fd0c672fSmrg 124fd0c672fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. 125fd0c672fSmrgdepfile=${depfile-`echo "$object" | 126fd0c672fSmrg sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} 127fd0c672fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} 128fd0c672fSmrg 129fd0c672fSmrgrm -f "$tmpdepfile" 130fd0c672fSmrg 131953c684bSmrg# Avoid interferences from the environment. 132953c684bSmrggccflag= dashmflag= 133953c684bSmrg 134fd0c672fSmrg# Some modes work just like other modes, but use different flags. We 135fd0c672fSmrg# parameterize here, but still list the modes in the big case below, 136fd0c672fSmrg# to make depend.m4 easier to write. Note that we *cannot* use a case 137fd0c672fSmrg# here, because this file can only contain one case statement. 138fd0c672fSmrgif test "$depmode" = hp; then 139fd0c672fSmrg # HP compiler uses -M and no extra arg. 140fd0c672fSmrg gccflag=-M 141fd0c672fSmrg depmode=gcc 142fd0c672fSmrgfi 143fd0c672fSmrg 144fd0c672fSmrgif test "$depmode" = dashXmstdout; then 145953c684bSmrg # This is just like dashmstdout with a different argument. 146953c684bSmrg dashmflag=-xM 147953c684bSmrg depmode=dashmstdout 148fd0c672fSmrgfi 149fd0c672fSmrg 15048e69166Smrgcygpath_u="cygpath -u -f -" 15148e69166Smrgif test "$depmode" = msvcmsys; then 152953c684bSmrg # This is just like msvisualcpp but w/o cygpath translation. 153953c684bSmrg # Just convert the backslash-escaped backslashes to single forward 154953c684bSmrg # slashes to satisfy depend.m4 155953c684bSmrg cygpath_u='sed s,\\\\,/,g' 156953c684bSmrg depmode=msvisualcpp 157953c684bSmrgfi 158953c684bSmrg 159953c684bSmrgif test "$depmode" = msvc7msys; then 160953c684bSmrg # This is just like msvc7 but w/o cygpath translation. 161953c684bSmrg # Just convert the backslash-escaped backslashes to single forward 162953c684bSmrg # slashes to satisfy depend.m4 163953c684bSmrg cygpath_u='sed s,\\\\,/,g' 164953c684bSmrg depmode=msvc7 165953c684bSmrgfi 166953c684bSmrg 167953c684bSmrgif test "$depmode" = xlc; then 168953c684bSmrg # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. 169953c684bSmrg gccflag=-qmakedep=gcc,-MF 170953c684bSmrg depmode=gcc 17148e69166Smrgfi 17248e69166Smrg 173fd0c672fSmrgcase "$depmode" in 174fd0c672fSmrggcc3) 175fd0c672fSmrg## gcc 3 implements dependency tracking that does exactly what 176fd0c672fSmrg## we want. Yay! Note: for some reason libtool 1.4 doesn't like 177fd0c672fSmrg## it if -MD -MP comes after the -MF stuff. Hmm. 17848e69166Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon 17948e69166Smrg## the command line argument order; so add the flags where they 18048e69166Smrg## appear in depend2.am. Note that the slowdown incurred here 18148e69166Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this. 18248e69166Smrg for arg 18348e69166Smrg do 18448e69166Smrg case $arg in 18548e69166Smrg -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; 18648e69166Smrg *) set fnord "$@" "$arg" ;; 18748e69166Smrg esac 18848e69166Smrg shift # fnord 18948e69166Smrg shift # $arg 19048e69166Smrg done 19148e69166Smrg "$@" 192fd0c672fSmrg stat=$? 193953c684bSmrg if test $stat -ne 0; then 194fd0c672fSmrg rm -f "$tmpdepfile" 195fd0c672fSmrg exit $stat 196fd0c672fSmrg fi 197fd0c672fSmrg mv "$tmpdepfile" "$depfile" 198fd0c672fSmrg ;; 199fd0c672fSmrg 200fd0c672fSmrggcc) 201953c684bSmrg## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. 202953c684bSmrg## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. 203953c684bSmrg## (see the conditional assignment to $gccflag above). 204fd0c672fSmrg## There are various ways to get dependency output from gcc. Here's 205fd0c672fSmrg## why we pick this rather obscure method: 206fd0c672fSmrg## - Don't want to use -MD because we'd like the dependencies to end 207fd0c672fSmrg## up in a subdir. Having to rename by hand is ugly. 208fd0c672fSmrg## (We might end up doing this anyway to support other compilers.) 209fd0c672fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like 210953c684bSmrg## -MM, not -M (despite what the docs say). Also, it might not be 211953c684bSmrg## supported by the other compilers which use the 'gcc' depmode. 212fd0c672fSmrg## - Using -M directly means running the compiler twice (even worse 213fd0c672fSmrg## than renaming). 214fd0c672fSmrg if test -z "$gccflag"; then 215fd0c672fSmrg gccflag=-MD, 216fd0c672fSmrg fi 217fd0c672fSmrg "$@" -Wp,"$gccflag$tmpdepfile" 218fd0c672fSmrg stat=$? 219953c684bSmrg if test $stat -ne 0; then 220fd0c672fSmrg rm -f "$tmpdepfile" 221fd0c672fSmrg exit $stat 222fd0c672fSmrg fi 223fd0c672fSmrg rm -f "$depfile" 224fd0c672fSmrg echo "$object : \\" > "$depfile" 225953c684bSmrg # The second -e expression handles DOS-style file names with drive 226953c684bSmrg # letters. 227fd0c672fSmrg sed -e 's/^[^:]*: / /' \ 228fd0c672fSmrg -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" 229953c684bSmrg## This next piece of magic avoids the "deleted header file" problem. 230fd0c672fSmrg## The problem is that when a header file which appears in a .P file 231fd0c672fSmrg## is deleted, the dependency causes make to die (because there is 232fd0c672fSmrg## typically no way to rebuild the header). We avoid this by adding 233fd0c672fSmrg## dummy dependencies for each header file. Too bad gcc doesn't do 234fd0c672fSmrg## this for us directly. 235953c684bSmrg## Some versions of gcc put a space before the ':'. On the theory 236fd0c672fSmrg## that the space means something, we add a space to the output as 237953c684bSmrg## well. hp depmode also adds that space, but also prefixes the VPATH 238953c684bSmrg## to the object. Take care to not repeat it in the output. 239fd0c672fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation 240fd0c672fSmrg## correctly. Breaking it into two sed invocations is a workaround. 241953c684bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 242953c684bSmrg | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ 243953c684bSmrg | sed -e 's/$/ :/' >> "$depfile" 244fd0c672fSmrg rm -f "$tmpdepfile" 245fd0c672fSmrg ;; 246fd0c672fSmrg 247fd0c672fSmrghp) 248fd0c672fSmrg # This case exists only to let depend.m4 do its work. It works by 249fd0c672fSmrg # looking at the text of this script. This case will never be run, 250fd0c672fSmrg # since it is checked for above. 251fd0c672fSmrg exit 1 252fd0c672fSmrg ;; 253fd0c672fSmrg 254fd0c672fSmrgsgi) 255fd0c672fSmrg if test "$libtool" = yes; then 256fd0c672fSmrg "$@" "-Wp,-MDupdate,$tmpdepfile" 257fd0c672fSmrg else 258fd0c672fSmrg "$@" -MDupdate "$tmpdepfile" 259fd0c672fSmrg fi 260fd0c672fSmrg stat=$? 261953c684bSmrg if test $stat -ne 0; then 262fd0c672fSmrg rm -f "$tmpdepfile" 263fd0c672fSmrg exit $stat 264fd0c672fSmrg fi 265fd0c672fSmrg rm -f "$depfile" 266fd0c672fSmrg 267fd0c672fSmrg if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files 268fd0c672fSmrg echo "$object : \\" > "$depfile" 269fd0c672fSmrg # Clip off the initial element (the dependent). Don't try to be 270fd0c672fSmrg # clever and replace this with sed code, as IRIX sed won't handle 271fd0c672fSmrg # lines with more than a fixed number of characters (4096 in 272fd0c672fSmrg # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; 273953c684bSmrg # the IRIX cc adds comments like '#:fec' to the end of the 274fd0c672fSmrg # dependency line. 275953c684bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 276953c684bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ 277953c684bSmrg | tr "$nl" ' ' >> "$depfile" 27848e69166Smrg echo >> "$depfile" 279fd0c672fSmrg # The second pass generates a dummy entry for each header file. 280953c684bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 281953c684bSmrg | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ 282953c684bSmrg >> "$depfile" 283fd0c672fSmrg else 284953c684bSmrg make_dummy_depfile 285fd0c672fSmrg fi 286fd0c672fSmrg rm -f "$tmpdepfile" 287fd0c672fSmrg ;; 288fd0c672fSmrg 289953c684bSmrgxlc) 290953c684bSmrg # This case exists only to let depend.m4 do its work. It works by 291953c684bSmrg # looking at the text of this script. This case will never be run, 292953c684bSmrg # since it is checked for above. 293953c684bSmrg exit 1 294953c684bSmrg ;; 295953c684bSmrg 296fd0c672fSmrgaix) 297fd0c672fSmrg # The C for AIX Compiler uses -M and outputs the dependencies 298fd0c672fSmrg # in a .u file. In older versions, this file always lives in the 299953c684bSmrg # current directory. Also, the AIX compiler puts '$object:' at the 300fd0c672fSmrg # start of each line; $object doesn't have directory information. 301fd0c672fSmrg # Version 6 uses the directory in both cases. 302953c684bSmrg set_dir_from "$object" 303953c684bSmrg set_base_from "$object" 304fd0c672fSmrg if test "$libtool" = yes; then 30548e69166Smrg tmpdepfile1=$dir$base.u 30648e69166Smrg tmpdepfile2=$base.u 30748e69166Smrg tmpdepfile3=$dir.libs/$base.u 308fd0c672fSmrg "$@" -Wc,-M 309fd0c672fSmrg else 31048e69166Smrg tmpdepfile1=$dir$base.u 31148e69166Smrg tmpdepfile2=$dir$base.u 31248e69166Smrg tmpdepfile3=$dir$base.u 313fd0c672fSmrg "$@" -M 314fd0c672fSmrg fi 315fd0c672fSmrg stat=$? 316953c684bSmrg if test $stat -ne 0; then 31748e69166Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 318fd0c672fSmrg exit $stat 319fd0c672fSmrg fi 320fd0c672fSmrg 32148e69166Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 32248e69166Smrg do 32348e69166Smrg test -f "$tmpdepfile" && break 32448e69166Smrg done 325953c684bSmrg aix_post_process_depfile 326953c684bSmrg ;; 327953c684bSmrg 328953c684bSmrgtcc) 329953c684bSmrg # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 330953c684bSmrg # FIXME: That version still under development at the moment of writing. 331953c684bSmrg # Make that this statement remains true also for stable, released 332953c684bSmrg # versions. 333953c684bSmrg # It will wrap lines (doesn't matter whether long or short) with a 334953c684bSmrg # trailing '\', as in: 335953c684bSmrg # 336953c684bSmrg # foo.o : \ 337953c684bSmrg # foo.c \ 338953c684bSmrg # foo.h \ 339953c684bSmrg # 340953c684bSmrg # It will put a trailing '\' even on the last line, and will use leading 341953c684bSmrg # spaces rather than leading tabs (at least since its commit 0394caf7 342953c684bSmrg # "Emit spaces for -MD"). 343953c684bSmrg "$@" -MD -MF "$tmpdepfile" 344953c684bSmrg stat=$? 345953c684bSmrg if test $stat -ne 0; then 346953c684bSmrg rm -f "$tmpdepfile" 347953c684bSmrg exit $stat 348fd0c672fSmrg fi 349953c684bSmrg rm -f "$depfile" 350953c684bSmrg # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. 351953c684bSmrg # We have to change lines of the first kind to '$object: \'. 352953c684bSmrg sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" 353953c684bSmrg # And for each line of the second kind, we have to emit a 'dep.h:' 354953c684bSmrg # dummy dependency, to avoid the deleted-header problem. 355953c684bSmrg sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" 356fd0c672fSmrg rm -f "$tmpdepfile" 357fd0c672fSmrg ;; 358fd0c672fSmrg 359953c684bSmrg## The order of this option in the case statement is important, since the 360953c684bSmrg## shell code in configure will try each of these formats in the order 361953c684bSmrg## listed in this file. A plain '-MD' option would be understood by many 362953c684bSmrg## compilers, so we must ensure this comes after the gcc and icc options. 363953c684bSmrgpgcc) 364953c684bSmrg # Portland's C compiler understands '-MD'. 365953c684bSmrg # Will always output deps to 'file.d' where file is the root name of the 366953c684bSmrg # source file under compilation, even if file resides in a subdirectory. 367953c684bSmrg # The object file name does not affect the name of the '.d' file. 368953c684bSmrg # pgcc 10.2 will output 369fd0c672fSmrg # foo.o: sub/foo.c sub/foo.h 370953c684bSmrg # and will wrap long lines using '\' : 371fd0c672fSmrg # foo.o: sub/foo.c ... \ 372fd0c672fSmrg # sub/foo.h ... \ 373fd0c672fSmrg # ... 374953c684bSmrg set_dir_from "$object" 375953c684bSmrg # Use the source, not the object, to determine the base name, since 376953c684bSmrg # that's sadly what pgcc will do too. 377953c684bSmrg set_base_from "$source" 378953c684bSmrg tmpdepfile=$base.d 379953c684bSmrg 380953c684bSmrg # For projects that build the same source file twice into different object 381953c684bSmrg # files, the pgcc approach of using the *source* file root name can cause 382953c684bSmrg # problems in parallel builds. Use a locking strategy to avoid stomping on 383953c684bSmrg # the same $tmpdepfile. 384953c684bSmrg lockdir=$base.d-lock 385953c684bSmrg trap " 386953c684bSmrg echo '$0: caught signal, cleaning up...' >&2 387953c684bSmrg rmdir '$lockdir' 388953c684bSmrg exit 1 389953c684bSmrg " 1 2 13 15 390953c684bSmrg numtries=100 391953c684bSmrg i=$numtries 392953c684bSmrg while test $i -gt 0; do 393953c684bSmrg # mkdir is a portable test-and-set. 394953c684bSmrg if mkdir "$lockdir" 2>/dev/null; then 395953c684bSmrg # This process acquired the lock. 396953c684bSmrg "$@" -MD 397953c684bSmrg stat=$? 398953c684bSmrg # Release the lock. 399953c684bSmrg rmdir "$lockdir" 400953c684bSmrg break 401953c684bSmrg else 402953c684bSmrg # If the lock is being held by a different process, wait 403953c684bSmrg # until the winning process is done or we timeout. 404953c684bSmrg while test -d "$lockdir" && test $i -gt 0; do 405953c684bSmrg sleep 1 406953c684bSmrg i=`expr $i - 1` 407953c684bSmrg done 408953c684bSmrg fi 409953c684bSmrg i=`expr $i - 1` 410953c684bSmrg done 411953c684bSmrg trap - 1 2 13 15 412953c684bSmrg if test $i -le 0; then 413953c684bSmrg echo "$0: failed to acquire lock after $numtries attempts" >&2 414953c684bSmrg echo "$0: check lockdir '$lockdir'" >&2 415953c684bSmrg exit 1 416953c684bSmrg fi 417fd0c672fSmrg 418953c684bSmrg if test $stat -ne 0; then 419fd0c672fSmrg rm -f "$tmpdepfile" 420fd0c672fSmrg exit $stat 421fd0c672fSmrg fi 422fd0c672fSmrg rm -f "$depfile" 423fd0c672fSmrg # Each line is of the form `foo.o: dependent.h', 424fd0c672fSmrg # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. 425fd0c672fSmrg # Do two passes, one to just change these to 426fd0c672fSmrg # `$object: dependent.h' and one to simply `dependent.h:'. 427fd0c672fSmrg sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" 428fd0c672fSmrg # Some versions of the HPUX 10.20 sed can't process this invocation 429fd0c672fSmrg # correctly. Breaking it into two sed invocations is a workaround. 430953c684bSmrg sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ 431953c684bSmrg | sed -e 's/$/ :/' >> "$depfile" 432fd0c672fSmrg rm -f "$tmpdepfile" 433fd0c672fSmrg ;; 434fd0c672fSmrg 43548e69166Smrghp2) 43648e69166Smrg # The "hp" stanza above does not work with aCC (C++) and HP's ia64 43748e69166Smrg # compilers, which have integrated preprocessors. The correct option 43848e69166Smrg # to use with these is +Maked; it writes dependencies to a file named 43948e69166Smrg # 'foo.d', which lands next to the object file, wherever that 44048e69166Smrg # happens to be. 44148e69166Smrg # Much of this is similar to the tru64 case; see comments there. 442953c684bSmrg set_dir_from "$object" 443953c684bSmrg set_base_from "$object" 44448e69166Smrg if test "$libtool" = yes; then 44548e69166Smrg tmpdepfile1=$dir$base.d 44648e69166Smrg tmpdepfile2=$dir.libs/$base.d 44748e69166Smrg "$@" -Wc,+Maked 44848e69166Smrg else 44948e69166Smrg tmpdepfile1=$dir$base.d 45048e69166Smrg tmpdepfile2=$dir$base.d 45148e69166Smrg "$@" +Maked 45248e69166Smrg fi 45348e69166Smrg stat=$? 454953c684bSmrg if test $stat -ne 0; then 45548e69166Smrg rm -f "$tmpdepfile1" "$tmpdepfile2" 45648e69166Smrg exit $stat 45748e69166Smrg fi 45848e69166Smrg 45948e69166Smrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" 46048e69166Smrg do 46148e69166Smrg test -f "$tmpdepfile" && break 46248e69166Smrg done 46348e69166Smrg if test -f "$tmpdepfile"; then 464953c684bSmrg sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" 465953c684bSmrg # Add 'dependent.h:' lines. 46648e69166Smrg sed -ne '2,${ 467953c684bSmrg s/^ *// 468953c684bSmrg s/ \\*$// 469953c684bSmrg s/$/:/ 470953c684bSmrg p 471953c684bSmrg }' "$tmpdepfile" >> "$depfile" 47248e69166Smrg else 473953c684bSmrg make_dummy_depfile 47448e69166Smrg fi 47548e69166Smrg rm -f "$tmpdepfile" "$tmpdepfile2" 47648e69166Smrg ;; 47748e69166Smrg 478fd0c672fSmrgtru64) 479953c684bSmrg # The Tru64 compiler uses -MD to generate dependencies as a side 480953c684bSmrg # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. 481953c684bSmrg # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put 482953c684bSmrg # dependencies in 'foo.d' instead, so we check for that too. 483953c684bSmrg # Subdirectories are respected. 484953c684bSmrg set_dir_from "$object" 485953c684bSmrg set_base_from "$object" 486953c684bSmrg 487953c684bSmrg if test "$libtool" = yes; then 488953c684bSmrg # Libtool generates 2 separate objects for the 2 libraries. These 489953c684bSmrg # two compilations output dependencies in $dir.libs/$base.o.d and 490953c684bSmrg # in $dir$base.o.d. We have to check for both files, because 491953c684bSmrg # one of the two compilations can be disabled. We should prefer 492953c684bSmrg # $dir$base.o.d over $dir.libs/$base.o.d because the latter is 493953c684bSmrg # automatically cleaned when .libs/ is deleted, while ignoring 494953c684bSmrg # the former would cause a distcleancheck panic. 495953c684bSmrg tmpdepfile1=$dir$base.o.d # libtool 1.5 496953c684bSmrg tmpdepfile2=$dir.libs/$base.o.d # Likewise. 497953c684bSmrg tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 498953c684bSmrg "$@" -Wc,-MD 499953c684bSmrg else 500953c684bSmrg tmpdepfile1=$dir$base.d 501953c684bSmrg tmpdepfile2=$dir$base.d 502953c684bSmrg tmpdepfile3=$dir$base.d 503953c684bSmrg "$@" -MD 504953c684bSmrg fi 505953c684bSmrg 506953c684bSmrg stat=$? 507953c684bSmrg if test $stat -ne 0; then 508953c684bSmrg rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 509953c684bSmrg exit $stat 510953c684bSmrg fi 511953c684bSmrg 512953c684bSmrg for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" 513953c684bSmrg do 514953c684bSmrg test -f "$tmpdepfile" && break 515953c684bSmrg done 516953c684bSmrg # Same post-processing that is required for AIX mode. 517953c684bSmrg aix_post_process_depfile 518953c684bSmrg ;; 519953c684bSmrg 520953c684bSmrgmsvc7) 521953c684bSmrg if test "$libtool" = yes; then 522953c684bSmrg showIncludes=-Wc,-showIncludes 523953c684bSmrg else 524953c684bSmrg showIncludes=-showIncludes 525953c684bSmrg fi 526953c684bSmrg "$@" $showIncludes > "$tmpdepfile" 527953c684bSmrg stat=$? 528953c684bSmrg grep -v '^Note: including file: ' "$tmpdepfile" 529953c684bSmrg if test $stat -ne 0; then 530953c684bSmrg rm -f "$tmpdepfile" 531953c684bSmrg exit $stat 532953c684bSmrg fi 533953c684bSmrg rm -f "$depfile" 534953c684bSmrg echo "$object : \\" > "$depfile" 535953c684bSmrg # The first sed program below extracts the file names and escapes 536953c684bSmrg # backslashes for cygpath. The second sed program outputs the file 537953c684bSmrg # name when reading, but also accumulates all include files in the 538953c684bSmrg # hold buffer in order to output them again at the end. This only 539953c684bSmrg # works with sed implementations that can handle large buffers. 540953c684bSmrg sed < "$tmpdepfile" -n ' 541953c684bSmrg/^Note: including file: *\(.*\)/ { 542953c684bSmrg s//\1/ 543953c684bSmrg s/\\/\\\\/g 544953c684bSmrg p 545953c684bSmrg}' | $cygpath_u | sort -u | sed -n ' 546953c684bSmrgs/ /\\ /g 547953c684bSmrgs/\(.*\)/'"$tab"'\1 \\/p 548953c684bSmrgs/.\(.*\) \\/\1:/ 549953c684bSmrgH 550953c684bSmrg$ { 551953c684bSmrg s/.*/'"$tab"'/ 552953c684bSmrg G 553953c684bSmrg p 554953c684bSmrg}' >> "$depfile" 555953c684bSmrg echo >> "$depfile" # make sure the fragment doesn't end with a backslash 556953c684bSmrg rm -f "$tmpdepfile" 557953c684bSmrg ;; 558953c684bSmrg 559953c684bSmrgmsvc7msys) 560953c684bSmrg # This case exists only to let depend.m4 do its work. It works by 561953c684bSmrg # looking at the text of this script. This case will never be run, 562953c684bSmrg # since it is checked for above. 563953c684bSmrg exit 1 564953c684bSmrg ;; 565fd0c672fSmrg 566fd0c672fSmrg#nosideeffect) 567fd0c672fSmrg # This comment above is used by automake to tell side-effect 568fd0c672fSmrg # dependency tracking mechanisms from slower ones. 569fd0c672fSmrg 570fd0c672fSmrgdashmstdout) 571fd0c672fSmrg # Important note: in order to support this mode, a compiler *must* 572fd0c672fSmrg # always write the preprocessed file to stdout, regardless of -o. 573fd0c672fSmrg "$@" || exit $? 574fd0c672fSmrg 575fd0c672fSmrg # Remove the call to Libtool. 576fd0c672fSmrg if test "$libtool" = yes; then 57748e69166Smrg while test "X$1" != 'X--mode=compile'; do 578fd0c672fSmrg shift 579fd0c672fSmrg done 580fd0c672fSmrg shift 581fd0c672fSmrg fi 582fd0c672fSmrg 583953c684bSmrg # Remove '-o $object'. 584fd0c672fSmrg IFS=" " 585fd0c672fSmrg for arg 586fd0c672fSmrg do 587fd0c672fSmrg case $arg in 588fd0c672fSmrg -o) 589fd0c672fSmrg shift 590fd0c672fSmrg ;; 591fd0c672fSmrg $object) 592fd0c672fSmrg shift 593fd0c672fSmrg ;; 594fd0c672fSmrg *) 595fd0c672fSmrg set fnord "$@" "$arg" 596fd0c672fSmrg shift # fnord 597fd0c672fSmrg shift # $arg 598fd0c672fSmrg ;; 599fd0c672fSmrg esac 600fd0c672fSmrg done 601fd0c672fSmrg 602fd0c672fSmrg test -z "$dashmflag" && dashmflag=-M 603953c684bSmrg # Require at least two characters before searching for ':' 604fd0c672fSmrg # in the target name. This is to cope with DOS-style filenames: 605953c684bSmrg # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. 606fd0c672fSmrg "$@" $dashmflag | 607953c684bSmrg sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" 608fd0c672fSmrg rm -f "$depfile" 609fd0c672fSmrg cat < "$tmpdepfile" > "$depfile" 610953c684bSmrg # Some versions of the HPUX 10.20 sed can't process this sed invocation 611953c684bSmrg # correctly. Breaking it into two sed invocations is a workaround. 612953c684bSmrg tr ' ' "$nl" < "$tmpdepfile" \ 613953c684bSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 614953c684bSmrg | sed -e 's/$/ :/' >> "$depfile" 615fd0c672fSmrg rm -f "$tmpdepfile" 616fd0c672fSmrg ;; 617fd0c672fSmrg 618fd0c672fSmrgdashXmstdout) 619fd0c672fSmrg # This case only exists to satisfy depend.m4. It is never actually 620fd0c672fSmrg # run, as this mode is specially recognized in the preamble. 621fd0c672fSmrg exit 1 622fd0c672fSmrg ;; 623fd0c672fSmrg 624fd0c672fSmrgmakedepend) 625fd0c672fSmrg "$@" || exit $? 626fd0c672fSmrg # Remove any Libtool call 627fd0c672fSmrg if test "$libtool" = yes; then 62848e69166Smrg while test "X$1" != 'X--mode=compile'; do 629fd0c672fSmrg shift 630fd0c672fSmrg done 631fd0c672fSmrg shift 632fd0c672fSmrg fi 633fd0c672fSmrg # X makedepend 634fd0c672fSmrg shift 63548e69166Smrg cleared=no eat=no 63648e69166Smrg for arg 63748e69166Smrg do 638fd0c672fSmrg case $cleared in 639fd0c672fSmrg no) 640fd0c672fSmrg set ""; shift 641fd0c672fSmrg cleared=yes ;; 642fd0c672fSmrg esac 64348e69166Smrg if test $eat = yes; then 64448e69166Smrg eat=no 64548e69166Smrg continue 64648e69166Smrg fi 647fd0c672fSmrg case "$arg" in 648fd0c672fSmrg -D*|-I*) 649fd0c672fSmrg set fnord "$@" "$arg"; shift ;; 650fd0c672fSmrg # Strip any option that makedepend may not understand. Remove 651fd0c672fSmrg # the object too, otherwise makedepend will parse it as a source file. 65248e69166Smrg -arch) 65348e69166Smrg eat=yes ;; 654fd0c672fSmrg -*|$object) 655fd0c672fSmrg ;; 656fd0c672fSmrg *) 657fd0c672fSmrg set fnord "$@" "$arg"; shift ;; 658fd0c672fSmrg esac 659fd0c672fSmrg done 66048e69166Smrg obj_suffix=`echo "$object" | sed 's/^.*\././'` 661fd0c672fSmrg touch "$tmpdepfile" 662fd0c672fSmrg ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" 663fd0c672fSmrg rm -f "$depfile" 664953c684bSmrg # makedepend may prepend the VPATH from the source file name to the object. 665953c684bSmrg # No need to regex-escape $object, excess matching of '.' is harmless. 666953c684bSmrg sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" 667953c684bSmrg # Some versions of the HPUX 10.20 sed can't process the last invocation 668953c684bSmrg # correctly. Breaking it into two sed invocations is a workaround. 669953c684bSmrg sed '1,2d' "$tmpdepfile" \ 670953c684bSmrg | tr ' ' "$nl" \ 671953c684bSmrg | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ 672953c684bSmrg | sed -e 's/$/ :/' >> "$depfile" 673fd0c672fSmrg rm -f "$tmpdepfile" "$tmpdepfile".bak 674fd0c672fSmrg ;; 675fd0c672fSmrg 676fd0c672fSmrgcpp) 677fd0c672fSmrg # Important note: in order to support this mode, a compiler *must* 678fd0c672fSmrg # always write the preprocessed file to stdout. 679fd0c672fSmrg "$@" || exit $? 680fd0c672fSmrg 681fd0c672fSmrg # Remove the call to Libtool. 682fd0c672fSmrg if test "$libtool" = yes; then 68348e69166Smrg while test "X$1" != 'X--mode=compile'; do 684fd0c672fSmrg shift 685fd0c672fSmrg done 686fd0c672fSmrg shift 687fd0c672fSmrg fi 688fd0c672fSmrg 689953c684bSmrg # Remove '-o $object'. 690fd0c672fSmrg IFS=" " 691fd0c672fSmrg for arg 692fd0c672fSmrg do 693fd0c672fSmrg case $arg in 694fd0c672fSmrg -o) 695fd0c672fSmrg shift 696fd0c672fSmrg ;; 697fd0c672fSmrg $object) 698fd0c672fSmrg shift 699fd0c672fSmrg ;; 700fd0c672fSmrg *) 701fd0c672fSmrg set fnord "$@" "$arg" 702fd0c672fSmrg shift # fnord 703fd0c672fSmrg shift # $arg 704fd0c672fSmrg ;; 705fd0c672fSmrg esac 706fd0c672fSmrg done 707fd0c672fSmrg 708953c684bSmrg "$@" -E \ 709953c684bSmrg | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 710953c684bSmrg -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ 711953c684bSmrg | sed '$ s: \\$::' > "$tmpdepfile" 712fd0c672fSmrg rm -f "$depfile" 713fd0c672fSmrg echo "$object : \\" > "$depfile" 714fd0c672fSmrg cat < "$tmpdepfile" >> "$depfile" 715fd0c672fSmrg sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" 716fd0c672fSmrg rm -f "$tmpdepfile" 717fd0c672fSmrg ;; 718fd0c672fSmrg 719fd0c672fSmrgmsvisualcpp) 720fd0c672fSmrg # Important note: in order to support this mode, a compiler *must* 72148e69166Smrg # always write the preprocessed file to stdout. 722fd0c672fSmrg "$@" || exit $? 72348e69166Smrg 72448e69166Smrg # Remove the call to Libtool. 72548e69166Smrg if test "$libtool" = yes; then 72648e69166Smrg while test "X$1" != 'X--mode=compile'; do 72748e69166Smrg shift 72848e69166Smrg done 72948e69166Smrg shift 73048e69166Smrg fi 73148e69166Smrg 732fd0c672fSmrg IFS=" " 733fd0c672fSmrg for arg 734fd0c672fSmrg do 735fd0c672fSmrg case "$arg" in 73648e69166Smrg -o) 73748e69166Smrg shift 73848e69166Smrg ;; 73948e69166Smrg $object) 74048e69166Smrg shift 74148e69166Smrg ;; 742fd0c672fSmrg "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") 743953c684bSmrg set fnord "$@" 744953c684bSmrg shift 745953c684bSmrg shift 746953c684bSmrg ;; 747fd0c672fSmrg *) 748953c684bSmrg set fnord "$@" "$arg" 749953c684bSmrg shift 750953c684bSmrg shift 751953c684bSmrg ;; 752fd0c672fSmrg esac 753fd0c672fSmrg done 75448e69166Smrg "$@" -E 2>/dev/null | 75548e69166Smrg sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" 756fd0c672fSmrg rm -f "$depfile" 757fd0c672fSmrg echo "$object : \\" > "$depfile" 758953c684bSmrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" 759953c684bSmrg echo "$tab" >> "$depfile" 76048e69166Smrg sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" 761fd0c672fSmrg rm -f "$tmpdepfile" 762fd0c672fSmrg ;; 763fd0c672fSmrg 76448e69166Smrgmsvcmsys) 76548e69166Smrg # This case exists only to let depend.m4 do its work. It works by 76648e69166Smrg # looking at the text of this script. This case will never be run, 76748e69166Smrg # since it is checked for above. 76848e69166Smrg exit 1 76948e69166Smrg ;; 77048e69166Smrg 771fd0c672fSmrgnone) 772fd0c672fSmrg exec "$@" 773fd0c672fSmrg ;; 774fd0c672fSmrg 775fd0c672fSmrg*) 776fd0c672fSmrg echo "Unknown depmode $depmode" 1>&2 777fd0c672fSmrg exit 1 778fd0c672fSmrg ;; 779fd0c672fSmrgesac 780fd0c672fSmrg 781fd0c672fSmrgexit 0 782fd0c672fSmrg 783fd0c672fSmrg# Local Variables: 784fd0c672fSmrg# mode: shell-script 785fd0c672fSmrg# sh-indentation: 2 78643ecf206Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 787fd0c672fSmrg# time-stamp-start: "scriptversion=" 788fd0c672fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H" 78943ecf206Smrg# time-stamp-time-zone: "UTC0" 79048e69166Smrg# time-stamp-end: "; # UTC" 791fd0c672fSmrg# End: 792