Home | History | Annotate | Line # | Download | only in build
mkdep revision 1.1.1.4
      1      1.1  lukem #! /bin/sh -
      2  1.1.1.4   tron # $OpenLDAP$
      3      1.1  lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4      1.1  lukem ##
      5  1.1.1.4   tron ## Copyright 1998-2014 The OpenLDAP Foundation.
      6      1.1  lukem ## All rights reserved.
      7      1.1  lukem ##
      8      1.1  lukem ## Redistribution and use in source and binary forms, with or without
      9      1.1  lukem ## modification, are permitted only as authorized by the OpenLDAP
     10      1.1  lukem ## Public License.
     11      1.1  lukem ##
     12      1.1  lukem ## A copy of this license is available in the file LICENSE in the
     13      1.1  lukem ## top-level directory of the distribution or, alternatively, at
     14      1.1  lukem ## <http://www.OpenLDAP.org/license.html>.
     15      1.1  lukem #
     16      1.1  lukem ## Portions Copyright (c) 1987 Regents of the University of California.
     17      1.1  lukem ## All rights reserved.
     18      1.1  lukem ##
     19      1.1  lukem ## Redistribution and use in source and binary forms are permitted
     20      1.1  lukem ## provided that the above copyright notice and this paragraph are
     21      1.1  lukem ## duplicated in all such forms and that any documentation,
     22      1.1  lukem ## advertising materials, and other materials related to such
     23      1.1  lukem ## distribution and use acknowledge that the software was developed
     24      1.1  lukem ## by the University of California, Berkeley.  The name of the
     25      1.1  lukem ## University may not be used to endorse or promote products derived
     26      1.1  lukem ## from this software without specific prior written permission.
     27      1.1  lukem ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
     28      1.1  lukem ## IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
     29      1.1  lukem ## WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
     30      1.1  lukem #
     31      1.1  lukem #	@(#)mkdep.sh	5.12 (Berkeley) 6/30/88
     32      1.1  lukem #
     33      1.1  lukem # We now use whatever path is already set by the invoker
     34      1.1  lukem #PATH=/bin:/usr/bin:/usr/ucb
     35      1.1  lukem #export PATH
     36      1.1  lukem 
     37      1.1  lukem set -e				# exit immediately if any errors occur
     38      1.1  lukem 
     39      1.1  lukem MAKE=Makefile			# default makefile name is "Makefile"
     40      1.1  lukem NOSLASH="no"			# by default, / dependencies are included
     41      1.1  lukem SRCDIR=""
     42      1.1  lukem SED=cat
     43      1.1  lukem 
     44      1.1  lukem : ${CC=cc}					# use cc by default
     45      1.1  lukem 
     46      1.1  lukem # We generally set these via the command line options
     47      1.1  lukem : ${MKDEP_CC=$CC}			# select default compiler to generate dependencies
     48      1.1  lukem : ${MKDEP_CFLAGS="-M"}	# cc -M usually produces dependencies
     49      1.1  lukem 
     50      1.1  lukem while :
     51      1.1  lukem 	do case "$1" in
     52      1.1  lukem 		# the -s flag removes dependencies to files that begin with /
     53      1.1  lukem 		-s)
     54      1.1  lukem 			NOSLASH=yes;
     55      1.1  lukem 			shift ;;
     56      1.1  lukem 
     57      1.1  lukem 		# -f allows you to select a makefile name
     58      1.1  lukem 		-f)
     59      1.1  lukem 			MAKE=$2
     60      1.1  lukem 			shift; shift ;;
     61      1.1  lukem 
     62      1.1  lukem 		# -d allows you to select a VPATH directory
     63      1.1  lukem 		-d)
     64      1.1  lukem 			SRCDIR=$2
     65      1.1  lukem 			shift; shift ;;
     66      1.1  lukem 
     67      1.1  lukem 		# -c allows you to override the compiler used to generate dependencies
     68      1.1  lukem 		-c)
     69      1.1  lukem 			MKDEP_CC=$2
     70      1.1  lukem 			shift; shift ;;
     71      1.1  lukem 
     72      1.1  lukem 		# -m allows you to override the compiler flags used to generate
     73      1.1  lukem 		# dependencies.
     74      1.1  lukem 		-m)
     75      1.1  lukem 			MKDEP_CFLAGS=$2
     76      1.1  lukem 			shift; shift ;;
     77      1.1  lukem 
     78      1.1  lukem 		# the -p flag produces "program: program.c" style dependencies
     79      1.1  lukem 		# so .o's don't get produced
     80      1.1  lukem 		-p)
     81      1.1  lukem 			SED='sed -e s;\.o;;'
     82      1.1  lukem 			shift ;;
     83      1.1  lukem 
     84      1.1  lukem 		# the -l flag produces libtool compatible dependencies
     85      1.1  lukem 		-l)
     86      1.1  lukem 			SED='sed -e s;\.o:;.lo:;'
     87      1.1  lukem 			shift ;;
     88      1.1  lukem 
     89      1.1  lukem #		-*)	shift ;;
     90      1.1  lukem 
     91      1.1  lukem 		*)
     92      1.1  lukem 			break ;;
     93      1.1  lukem 	esac
     94      1.1  lukem done
     95      1.1  lukem 
     96      1.1  lukem if test $# = 0 ; then
     97      1.1  lukem 	echo 'usage: mkdep [-p] [-s] [-c cc] [-m flags] [-f makefile] [-d srcdir] [cppflags] file ...'
     98      1.1  lukem 	exit 1
     99      1.1  lukem fi
    100      1.1  lukem 
    101      1.1  lukem if test ! -w $MAKE ; then
    102      1.1  lukem 	echo "mkdep: no writeable file \"$MAKE\""
    103      1.1  lukem 	exit 1
    104      1.1  lukem fi
    105      1.1  lukem 
    106      1.1  lukem TMP=/tmp/mkdep$$
    107      1.1  lukem 
    108      1.1  lukem trap 'rm -f $TMP.sed $TMP ; exit 1' 1 2 3 13 15
    109      1.1  lukem 
    110      1.1  lukem cp $MAKE ${MAKE}.bak
    111      1.1  lukem 
    112      1.1  lukem sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
    113      1.1  lukem 
    114      1.1  lukem cat << _EOF_ >> $TMP
    115      1.1  lukem # DO NOT DELETE THIS LINE -- mkdep uses it.
    116      1.1  lukem # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
    117      1.1  lukem 
    118      1.1  lukem _EOF_
    119      1.1  lukem 
    120      1.1  lukem # If your compiler doesn't have -M, you may be able to use -E instead.
    121      1.1  lukem # The preprocessor must generate lines of the form
    122      1.1  lukem #   #.* [0-9]* "dependent file" .*
    123      1.1  lukem # This script will parse out the "dependent file"s to generate the
    124      1.1  lukem # dependency list.
    125      1.1  lukem 
    126      1.1  lukem if test "x$SRCDIR" = "x" ; then
    127      1.1  lukem 	files=$*
    128      1.1  lukem else
    129      1.1  lukem 	files=
    130      1.1  lukem 	for i in $* ; do
    131      1.1  lukem 		if test -f $i ; then
    132      1.1  lukem 			files="$files $i"
    133      1.1  lukem 		elif test -f $SRCDIR/$i ; then
    134      1.1  lukem 			files="$files $SRCDIR/$i"
    135      1.1  lukem 		else
    136      1.1  lukem 			files="$files $i"
    137      1.1  lukem 		fi
    138      1.1  lukem 	done
    139      1.1  lukem 
    140      1.1  lukem 	MKDEP_CFLAGS="$MKDEP_CFLAGS -I$SRCDIR"
    141      1.1  lukem fi
    142      1.1  lukem 
    143      1.1  lukem cat << _EOF_ >> $TMP
    144      1.1  lukem 
    145      1.1  lukem #
    146      1.1  lukem # files: $*
    147      1.1  lukem # command: $MKDEP_CC $MKDEP_CFLAGS $files
    148      1.1  lukem #
    149      1.1  lukem 
    150      1.1  lukem _EOF_
    151      1.1  lukem 
    152      1.1  lukem case $MKDEP_CFLAGS in
    153      1.1  lukem # Using regular preprocessor output
    154      1.1  lukem 	-E*)
    155      1.1  lukem FLAGS=""
    156      1.1  lukem FILES=""
    157      1.1  lukem for i in $files; do
    158      1.1  lukem 	case $i in
    159      1.1  lukem 	-*)	FLAGS="$FLAGS $i" ;;
    160      1.1  lukem 	*)	FILES="$FILES $i" ;;
    161      1.1  lukem 	esac
    162      1.1  lukem done
    163      1.1  lukem for i in $FILES; do
    164      1.1  lukem 	$MKDEP_CC $MKDEP_CFLAGS $FLAGS $i | grep '^#.*"' > $TMP.sed
    165      1.1  lukem awk '
    166      1.1  lukem BEGIN {
    167      1.1  lukem 	file = "'$i'"
    168      1.1  lukem 	n = split(file, parts, "/")
    169      1.1  lukem 	filenm = substr(parts[n], 0, length(parts[n])-1) "o"
    170      1.1  lukem }
    171      1.1  lukem {
    172      1.1  lukem 	dep = split($3, parts, "\"")
    173      1.1  lukem 	dep = parts[2]
    174      1.1  lukem 	if (dep ~ "^\./.*") dep = substr(dep, 3, length(dep)-2)
    175      1.1  lukem 	if (( noslash == "yes") && (dep ~ /^\// )) continue
    176      1.1  lukem 	if (deps[dep] == 0) printf "%s: %s\n", filenm, dep
    177      1.1  lukem 	deps[dep] = 1
    178      1.1  lukem }' noslash="$NOSLASH" $TMP.sed >> $TMP
    179      1.1  lukem done
    180      1.1  lukem 	;;
    181      1.1  lukem 
    182      1.1  lukem 	*)
    183      1.1  lukem # Using -M or some other specific dependency-generating option
    184      1.1  lukem $MKDEP_CC $MKDEP_CFLAGS $files | \
    185      1.1  lukem 	sed -e 's; \./; ;g' -e 's/ :/:/' | \
    186      1.1  lukem 	$SED > $TMP.sed
    187      1.1  lukem # do not pipe to awk.  SGI awk wants a filename as argument.
    188      1.1  lukem # (or '-', but I do not know if all other awks support that.)
    189      1.1  lukem awk '
    190      1.1  lukem $1 ~ /:$/ {
    191      1.1  lukem 	filenm=$1
    192      1.1  lukem 	dep=substr($0, length(filenm)+1)
    193      1.1  lukem }
    194      1.1  lukem $1 !~ /:$/ {
    195      1.1  lukem 	dep=$0
    196      1.1  lukem }
    197      1.1  lukem /.*/ {
    198      1.1  lukem 	if ( length(filenm) < 2 ) next
    199      1.1  lukem 	if ( filenm ~ /:.*:$/ ) next
    200      1.1  lukem 	split(dep, depends, " ")
    201      1.1  lukem 	for(d in depends) {
    202      1.1  lukem 		dfile = depends[d]
    203      1.1  lukem 		if ( length(dfile) < 2 ) continue
    204      1.1  lukem 		if ( dfile ~ /:/ ) continue
    205      1.1  lukem 		if (( noslash == "yes") && (dfile ~ /^\// )) continue
    206      1.1  lukem 		rec = filenm " " dfile
    207      1.1  lukem 		print rec
    208      1.1  lukem 	}
    209      1.1  lukem }
    210      1.1  lukem ' noslash="$NOSLASH" $TMP.sed >> $TMP
    211      1.1  lukem 	;;
    212      1.1  lukem esac
    213      1.1  lukem 
    214      1.1  lukem 
    215      1.1  lukem cat << _EOF_ >> $TMP
    216      1.1  lukem 
    217      1.1  lukem # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
    218      1.1  lukem _EOF_
    219      1.1  lukem 
    220      1.1  lukem # copy to preserve permissions
    221      1.1  lukem cp $TMP $MAKE
    222      1.1  lukem rm -f ${MAKE}.bak $TMP.sed $TMP
    223      1.1  lukem exit 0
    224