X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=build%2Fmkdep;h=4384b2853f57e1abf2dd3d052d98305c7e8a7fd7;hb=fe569dbb7517dbb8bf1905c4f87732197114c4cf;hp=b56dffc7159b969eeb646dde7fd9d3e7ad8f3835;hpb=a2708937b3cb93bfec337ad8899893401befa8e1;p=openldap diff --git a/build/mkdep b/build/mkdep index b56dffc715..4384b2853f 100755 --- a/build/mkdep +++ b/build/mkdep @@ -1,7 +1,8 @@ -#!/bin/sh - -# Copyright 1998,1999 The OpenLDAP Foundation -# COPYING RESTRICTIONS APPLY. See COPYRIGHT File in top level directory -# of this package for details. +#! /bin/sh - +# $OpenLDAP$ +## Copyright 1998-2002 The OpenLDAP Foundation +## COPYING RESTRICTIONS APPLY. See COPYRIGHT File in top level directory +## of this package for details. # # Portions # Copyright (c) 1987 Regents of the University of California. @@ -29,11 +30,15 @@ set -e # exit immediately if any errors occur MAKE=Makefile # default makefile name is "Makefile" NOSLASH="no" # by default, / dependencies are included -CC=${CC_MKDEP-${CC-cc}} # default compiler is cc -: ${CC_MKDEP_FLAGS="-M"} # cc -M usually produces dependencies 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 / @@ -51,9 +56,15 @@ while : SRCDIR=$2 shift; shift ;; - # -c allows you to select a compiler to use (default is cc) + # -c allows you to override the compiler used to generate dependencies -c) - [ -z "$CC_MKDEP" ] && CC=$2 + 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 @@ -62,7 +73,6 @@ while : SED='sed -e s;\.o;;' shift ;; - # the -l flag produces libtool compatible dependencies -l) SED='sed -e s;\.o:;.lo:;' @@ -75,12 +85,12 @@ while : esac done -if [ $# = 0 ] ; then - echo 'usage: mkdep [-p] [-s] [-c cc] [-f makefile] [-d srcdir] [flags] file ...' +if test $# = 0 ; then + echo 'usage: mkdep [-p] [-s] [-c cc] [-m flags] [-f makefile] [-d srcdir] [cppflags] file ...' exit 1 fi -if [ ! -w $MAKE ]; then +if test ! -w $MAKE ; then echo "mkdep: no writeable file \"$MAKE\"" exit 1 fi @@ -99,13 +109,11 @@ cat << _EOF_ >> $TMP _EOF_ -# If your compiler doesn't have -M, add it. If you can't, the next two -# lines will try and replace the "cc -M". The real problem is that this -# hack can't deal with anything that requires a search path, and doesn't -# even try for anything using bracket (<>) syntax. -# -# egrep '^#include[ ]*".*"' /dev/null $* | -# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' | +# 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=$* @@ -120,42 +128,80 @@ else files="$files $i" fi done - CC="$CC -I$SRCDIR" + + MKDEP_CFLAGS="$MKDEP_CFLAGS -I$SRCDIR" fi cat << _EOF_ >> $TMP # # files: $* -# command: $CC $CC_MKDEP_FLAGS $files +# command: $MKDEP_CC $MKDEP_CFLAGS $files # _EOF_ -$CC $CC_MKDEP_FLAGS $files | \ - sed -e 's; \./; ;g' | \ +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 | egrep '^#.*"' > $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 -# dont pipe to awk. SGI awk wants a filename as argument. +# 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 ~ /:$/ { + filenm=$1 + dep=substr($0, length(filenm)+1) } -$1 !~ /:/ { - dep=$0; +$1 !~ /:$/ { + dep=$0 } /.*/ { - split(dep, depends, " "); + if ( length(filenm) < 2 ) next + if ( filenm ~ /:.*:$/ ) next + split(dep, depends, " ") for(d in depends) { - dfile = depends[d]; - if (( noslash == "yes") && (dfile ~ /^\// )) next + dfile = depends[d] if ( length(dfile) < 2 ) continue - rec = filenm " " dfile; - print rec; + if ( dfile ~ /:/ ) continue + if (( noslash == "yes") && (dfile ~ /^\// )) continue + rec = filenm " " dfile + print rec } - } +} ' noslash="$NOSLASH" $TMP.sed >> $TMP + ;; +esac cat << _EOF_ >> $TMP