diff options
author | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-14 16:48:20 +0000 |
---|---|---|
committer | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-14 16:48:20 +0000 |
commit | 4ce164596212363bbfbd35b982f97a7c8fca13f8 (patch) | |
tree | 51af91dbe408ac327c55ba20c6d8562686b1f628 |
Initial revisionXORG-STABLE
-rw-r--r-- | gccmakedep.man | 124 | ||||
-rw-r--r-- | gccmdep.cpp | 134 |
2 files changed, 258 insertions, 0 deletions
diff --git a/gccmakedep.man b/gccmakedep.man new file mode 100644 index 0000000..115568b --- /dev/null +++ b/gccmakedep.man @@ -0,0 +1,124 @@ +.TH gccmakedep 1 __vendorversion__ +.SH NAME +gccmakedep \- create dependencies in makefiles using 'gcc -M' +.SH SYNOPSIS +.B gccmakedep +[ +.BI \-s separator +] [ +.BI \-f makefile +] [ +.BI \-a +] [ +\-\^\- +.I options +\-\^\- +] +.I sourcefile +\&.\|.\|. +.SH DESCRIPTION +The +.B gccmakedep +program calls 'gcc -M' to output +.I makefile +rules describing the dependencies of each +.IR sourcefile , +so that +.BR make (1) +knows which object files must be recompiled when a dependency has changed. +.PP +By default, +.B gccmakedep +places its output in the file named +.I makefile +if it exists, otherwise +.I Makefile. +An alternate makefile may be specified with the +.B \-f +option. +It first searches the makefile for a line beginning with +.sp +\& # DO NOT DELETE +.sp +or one provided with the +.B \-s +option, as a delimiter for the dependency output. +If it finds it, it will delete everything following this up to the end of +the makefile and put the output after this line. +If it doesn't find it, the program will append the string to the makefile +and place the output after that. +.SH EXAMPLE +Normally, +.B gccmakedep +will be used in a makefile target so that typing 'make depend' will bring +the dependencies up to date for the makefile. +For example, +.nf + SRCS\0=\0file1.c\0file2.c\0.\|.\|. + CFLAGS\0=\0\-O\0\-DHACK\0\-I\^.\^.\^/foobar\0\-xyz + depend: + gccmakedep\0\-\^\-\0$(CFLAGS)\0\-\^\-\0$(SRCS) +.fi +.SH OPTIONS +The program will ignore any option that it does not understand, so you may +use the same arguments that you would for +.BR gcc (1), +including +.B \-D +and +.B \-U +options to define and undefine symbols and +.B \-I +to set the include path. +.TP +.B \-a +Append the dependencies to the file instead of replacing existing +dependencies. +.TP +.BI \-f makefile +Filename. +This allows you to specify an alternate makefile in which +.B gccmakedep +can place its output. +Specifying \(lq\-\(rq as the file name (that is, +.BR \-f\- ) +sends the output to standard output instead of modifying an existing file. +.TP +.BI \-s string +Starting string delimiter. +This option permits you to specify a different string for +.B gccmakedep +to look for in the makefile. +The default is \(lq# DO NOT DELETE\(rq. +.TP +.BI \-\^\- " options " \-\^\- +If +.B gccmakedep +encounters a double hyphen (\-\^\-) in the argument list, then any +unrecognized arguments following it will be silently ignored. +A second double hyphen terminates this special treatment. +In this way, +.B gccmakedep +can be made to safely ignore esoteric compiler arguments that might +normally be found in a CFLAGS +.B make +macro (see the +.B EXAMPLE +section above). +.BR \-D , +.BR \-I , +and +.B \-U +options appearing between the pair of double hyphens are still processed +normally. +.SH "SEE ALSO" +.BR gcc (1), +.BR make (1), +.BR makedepend (1). +.SH AUTHOR +.B gccmakedep +was written by the XFree86 Project based on code supplied by Hongjiu Lu. +.PP +Colin Watson wrote this manual page, originally for the Debian Project, +based partly on the manual page for +.BR makedepend (1). diff --git a/gccmdep.cpp b/gccmdep.cpp new file mode 100644 index 0000000..4578b71 --- /dev/null +++ b/gccmdep.cpp @@ -0,0 +1,134 @@ +XCOMM!/bin/sh + +XCOMM +XCOMM makedepend which uses 'gcc -M' +XCOMM +XCOMM $XFree86: xc/config/util/gccmdep.cpp,v 3.10 2002/11/25 14:04:48 eich Exp $ +XCOMM +XCOMM Based on mdepend.cpp and code supplied by Hongjiu Lu <hjl@nynexst.com> +XCOMM + +TMP=${TMPDIR-/tmp}/mdep$$ +CC=CCCMD +RM=RMCMD +LN=LNCMD +MV=MVCMD + +XCOMM Security: if $tmp exists exit immediately +rm -f ${TMP} +if [ -e ${TMP} ] ; then + echo "$0: ${TMP} exists already, exit." 1>&2 + exit 1; +fi +if [ -n "`type -p mktemp`" ] ; then + TMP="`mktemp ${TMP}.XXXXXX`" || exit 1 +fi + +trap "$RM ${TMP}*; exit 1" 1 2 15 +trap "$RM ${TMP}*; exit 0" 1 2 13 + +files= +makefile= +endmarker= +magic_string='# DO NOT DELETE' +append=n +args= + +while [ $# != 0 ]; do + if [ "$endmarker"x != x -a "$endmarker" = "$1" ]; then + endmarker= + else + case "$1" in + -D*|-I*|-U*) + args="$args '$1'" + ;; + -g*|-O*) + ;; + *) + if [ "$endmarker"x = x ]; then + case $1 in +XCOMM ignore these flags + -w|-o|-cc) + shift + ;; + -v) + ;; + -s) + magic_string="$2" + shift + ;; + -f*) + if [ "$1" = "-f-" ]; then + makefile="-" + elif [ "$1" = "-f" ]; then + makefile="$2" + shift + else + echo "$1" | sed 's/^\-f//' >${TMP}arg + makefile="`cat ${TMP}arg`" + rm -f ${TMP}arg + fi + ;; + --*) + endmarker=`echo $1 | sed 's/^\-\-//'` + if [ "$endmarker"x = x ]; then + endmarker="--" + fi + ;; + -a) + append=y + ;; + -*) + echo "Unknown option '$1' ignored" 1>&2 + ;; + *) + files="$files $1" + ;; + esac + fi + ;; + esac + fi + shift +done + +if [ x"$files" = x ]; then +XCOMM Nothing to do + exit 0 +fi + +case "$makefile" in + '') + if [ -r makefile ]; then + makefile=makefile + elif [ -r Makefile ]; then + makefile=Makefile + else + echo 'no makefile or Makefile found' 1>&2 + exit 1 + fi + ;; +esac + +if [ X"$makefile" != X- ]; then + if [ x"$append" = xn ]; then + sed -e "/^$magic_string/,\$d" < $makefile > $TMP + echo "$magic_string" >> $TMP + else + cp $makefile $TMP + fi +fi + +CMD="$CC -M $args $files" +if [ X"$makefile" != X- ]; then + CMD="$CMD >> $TMP" +fi +eval $CMD +if [ X"$makefile" != X- ]; then + $RM ${makefile}.bak + $MV $makefile ${makefile}.bak + $MV $TMP $makefile +fi + +$RM ${TMP}* +exit 0 |