diff options
Diffstat (limited to 'build/mkdep')
-rwxr-xr-x | build/mkdep | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/build/mkdep b/build/mkdep new file mode 100755 index 0000000..0e08744 --- /dev/null +++ b/build/mkdep @@ -0,0 +1,223 @@ +#! /bin/sh - +# $OpenLDAP$ +## This work is part of OpenLDAP Software <http://www.openldap.org/>. +## +## Copyright 1998-2018 The OpenLDAP Foundation. +## All rights reserved. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted only as authorized by the OpenLDAP +## Public License. +## +## A copy of this license is available in the file LICENSE in the +## top-level directory of the distribution or, alternatively, at +## <http://www.OpenLDAP.org/license.html>. +# +## Portions Copyright (c) 1987 Regents of the University of California. +## All rights reserved. +## +## Redistribution and use in source and binary forms are permitted +## provided that the above copyright notice and this paragraph are +## duplicated in all such forms and that any documentation, +## advertising materials, and other materials related to such +## distribution and use acknowledge that the software was developed +## by the University of California, Berkeley. The name of the +## University may not be used to endorse or promote products derived +## from this software without specific prior written permission. +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +## IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +## WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# @(#)mkdep.sh 5.12 (Berkeley) 6/30/88 +# +# We now use whatever path is already set by the invoker +#PATH=/bin:/usr/bin:/usr/ucb +#export PATH + +set -e # exit immediately if any errors occur + +MAKE=Makefile # default makefile name is "Makefile" +NOSLASH="no" # by default, / dependencies are included +SRCDIR="" +SED=cat + +: ${CC=cc} # use cc by default + +# We generally set these via the command line options +: ${MKDEP_CC=$CC} # select default compiler to generate dependencies +: ${MKDEP_CFLAGS="-M"} # cc -M usually produces dependencies + +while : + do case "$1" in + # the -s flag removes dependencies to files that begin with / + -s) + NOSLASH=yes; + shift ;; + + # -f allows you to select a makefile name + -f) + MAKE=$2 + shift; shift ;; + + # -d allows you to select a VPATH directory + -d) + SRCDIR=$2 + shift; shift ;; + + # -c allows you to override the compiler used to generate dependencies + -c) + MKDEP_CC=$2 + shift; shift ;; + + # -m allows you to override the compiler flags used to generate + # dependencies. + -m) + MKDEP_CFLAGS=$2 + shift; shift ;; + + # the -p flag produces "program: program.c" style dependencies + # so .o's don't get produced + -p) + SED='sed -e s;\.o;;' + shift ;; + + # the -l flag produces libtool compatible dependencies + -l) + SED='sed -e s;\.o:;.lo:;' + shift ;; + +# -*) shift ;; + + *) + break ;; + esac +done + +if test $# = 0 ; then + echo 'usage: mkdep [-p] [-s] [-c cc] [-m flags] [-f makefile] [-d srcdir] [cppflags] file ...' + exit 1 +fi + +if test ! -w $MAKE ; then + echo "mkdep: no writeable file \"$MAKE\"" + exit 1 +fi + +TMP=/tmp/mkdep$$ + +trap 'rm -f $TMP.sed $TMP ; exit 1' 1 2 3 13 15 + +cp $MAKE ${MAKE}.bak + +sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP + +cat << _EOF_ >> $TMP +# DO NOT DELETE THIS LINE -- mkdep uses it. +# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. + +_EOF_ + +# If your compiler doesn't have -M, you may be able to use -E instead. +# The preprocessor must generate lines of the form +# #.* [0-9]* "dependent file" .* +# This script will parse out the "dependent file"s to generate the +# dependency list. + +if test "x$SRCDIR" = "x" ; then + files=$* +else + files= + for i in $* ; do + if test -f $i ; then + files="$files $i" + elif test -f $SRCDIR/$i ; then + files="$files $SRCDIR/$i" + else + files="$files $i" + fi + done + + MKDEP_CFLAGS="$MKDEP_CFLAGS -I$SRCDIR" +fi + +cat << _EOF_ >> $TMP + +# +# files: $* +# command: $MKDEP_CC $MKDEP_CFLAGS $files +# + +_EOF_ + +case $MKDEP_CFLAGS in +# Using regular preprocessor output + -E*) +FLAGS="" +FILES="" +for i in $files; do + case $i in + -*) FLAGS="$FLAGS $i" ;; + *) FILES="$FILES $i" ;; + esac +done +for i in $FILES; do + $MKDEP_CC $MKDEP_CFLAGS $FLAGS $i | grep '^#.*"' > $TMP.sed +awk ' +BEGIN { + file = "'$i'" + n = split(file, parts, "/") + filenm = substr(parts[n], 0, length(parts[n])-1) "o" +} +{ + dep = split($3, parts, "\"") + dep = parts[2] + if (dep ~ "^\./.*") dep = substr(dep, 3, length(dep)-2) + if (( noslash == "yes") && (dep ~ /^\// )) continue + if (deps[dep] == 0) printf "%s: %s\n", filenm, dep + deps[dep] = 1 +}' noslash="$NOSLASH" $TMP.sed >> $TMP +done + ;; + + *) +# Using -M or some other specific dependency-generating option +$MKDEP_CC $MKDEP_CFLAGS $files | \ + sed -e 's; \./; ;g' -e 's/ :/:/' | \ + $SED > $TMP.sed +# do not pipe to awk. SGI awk wants a filename as argument. +# (or '-', but I do not know if all other awks support that.) +awk ' +$1 ~ /:$/ { + filenm=$1 + dep=substr($0, length(filenm)+1) +} +$1 !~ /:$/ { + dep=$0 +} +/.*/ { + if ( length(filenm) < 2 ) next + if ( filenm ~ /:.*:$/ ) next + split(dep, depends, " ") + for(d in depends) { + dfile = depends[d] + if ( length(dfile) < 2 ) continue + if ( dfile ~ /:/ ) continue + if (( noslash == "yes") && (dfile ~ /^\// )) continue + rec = filenm " " dfile + print rec + } +} +' noslash="$NOSLASH" $TMP.sed >> $TMP + ;; +esac + + +cat << _EOF_ >> $TMP + +# IF YOU PUT ANYTHING HERE IT WILL GO AWAY +_EOF_ + +# copy to preserve permissions +cp $TMP $MAKE +rm -f ${MAKE}.bak $TMP.sed $TMP +exit 0 |