1*8b26181fSAndroid Build Coastguard Worker#!/bin/sh - 2*8b26181fSAndroid Build Coastguard Worker# 3*8b26181fSAndroid Build Coastguard Worker# Copyright (c) 1994, 1996 4*8b26181fSAndroid Build Coastguard Worker# The Regents of the University of California. All rights reserved. 5*8b26181fSAndroid Build Coastguard Worker# 6*8b26181fSAndroid Build Coastguard Worker# Redistribution and use in source and binary forms are permitted 7*8b26181fSAndroid Build Coastguard Worker# provided that this notice is preserved and that due credit is given 8*8b26181fSAndroid Build Coastguard Worker# to the University of California at Berkeley. The name of the University 9*8b26181fSAndroid Build Coastguard Worker# may not be used to endorse or promote products derived from this 10*8b26181fSAndroid Build Coastguard Worker# software without specific prior written permission. This software 11*8b26181fSAndroid Build Coastguard Worker# is provided ``as is'' without express or implied warranty. 12*8b26181fSAndroid Build Coastguard Worker# 13*8b26181fSAndroid Build Coastguard Worker# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88 14*8b26181fSAndroid Build Coastguard Worker# 15*8b26181fSAndroid Build Coastguard Worker 16*8b26181fSAndroid Build Coastguard WorkerMAKE=Makefile # default makefile name is "Makefile" 17*8b26181fSAndroid Build Coastguard WorkerCC=cc # default C compiler is "cc" 18*8b26181fSAndroid Build Coastguard WorkerDEPENDENCY_CFLAG=-M # default dependency-generation flag is -M 19*8b26181fSAndroid Build Coastguard WorkerSOURCE_DIRECTORY=. # default source directory is the current directory 20*8b26181fSAndroid Build Coastguard Worker 21*8b26181fSAndroid Build Coastguard Worker# No command-line flags seen yet. 22*8b26181fSAndroid Build Coastguard Workerflags="" 23*8b26181fSAndroid Build Coastguard Workerwhile : 24*8b26181fSAndroid Build Coastguard Worker do case "$1" in 25*8b26181fSAndroid Build Coastguard Worker # -c allows you to specify the C compiler 26*8b26181fSAndroid Build Coastguard Worker -c) 27*8b26181fSAndroid Build Coastguard Worker CC=$2 28*8b26181fSAndroid Build Coastguard Worker shift; shift ;; 29*8b26181fSAndroid Build Coastguard Worker 30*8b26181fSAndroid Build Coastguard Worker # -f allows you to select a makefile name 31*8b26181fSAndroid Build Coastguard Worker -f) 32*8b26181fSAndroid Build Coastguard Worker MAKE=$2 33*8b26181fSAndroid Build Coastguard Worker shift; shift ;; 34*8b26181fSAndroid Build Coastguard Worker 35*8b26181fSAndroid Build Coastguard Worker # -m allows you to specify the dependency-generation flag 36*8b26181fSAndroid Build Coastguard Worker -m) 37*8b26181fSAndroid Build Coastguard Worker DEPENDENCY_CFLAG=$2 38*8b26181fSAndroid Build Coastguard Worker shift; shift ;; 39*8b26181fSAndroid Build Coastguard Worker 40*8b26181fSAndroid Build Coastguard Worker # the -p flag produces "program: program.c" style dependencies 41*8b26181fSAndroid Build Coastguard Worker # so .o's don't get produced 42*8b26181fSAndroid Build Coastguard Worker -p) 43*8b26181fSAndroid Build Coastguard Worker SED='s;\.o;;' 44*8b26181fSAndroid Build Coastguard Worker shift ;; 45*8b26181fSAndroid Build Coastguard Worker 46*8b26181fSAndroid Build Coastguard Worker # -s allows you to specify the source directory 47*8b26181fSAndroid Build Coastguard Worker -s) 48*8b26181fSAndroid Build Coastguard Worker SOURCE_DIRECTORY=$2 49*8b26181fSAndroid Build Coastguard Worker shift; shift ;; 50*8b26181fSAndroid Build Coastguard Worker 51*8b26181fSAndroid Build Coastguard Worker # -include takes an argument 52*8b26181fSAndroid Build Coastguard Worker -include) 53*8b26181fSAndroid Build Coastguard Worker flags="$flags $1 $2" 54*8b26181fSAndroid Build Coastguard Worker shift; shift ;; 55*8b26181fSAndroid Build Coastguard Worker 56*8b26181fSAndroid Build Coastguard Worker # other command-line flag 57*8b26181fSAndroid Build Coastguard Worker -*) 58*8b26181fSAndroid Build Coastguard Worker flags="$flags $1" 59*8b26181fSAndroid Build Coastguard Worker shift ;; 60*8b26181fSAndroid Build Coastguard Worker 61*8b26181fSAndroid Build Coastguard Worker *) 62*8b26181fSAndroid Build Coastguard Worker break ;; 63*8b26181fSAndroid Build Coastguard Worker esac 64*8b26181fSAndroid Build Coastguard Workerdone 65*8b26181fSAndroid Build Coastguard Worker 66*8b26181fSAndroid Build Coastguard Workerif [ $# = 0 ] ; then 67*8b26181fSAndroid Build Coastguard Worker echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [-s source-directory] [flags] file ...' 68*8b26181fSAndroid Build Coastguard Worker exit 1 69*8b26181fSAndroid Build Coastguard Workerfi 70*8b26181fSAndroid Build Coastguard Worker 71*8b26181fSAndroid Build Coastguard Workerif [ ! -w $MAKE ]; then 72*8b26181fSAndroid Build Coastguard Worker echo "mkdep: no writeable file \"$MAKE\"" 73*8b26181fSAndroid Build Coastguard Worker exit 1 74*8b26181fSAndroid Build Coastguard Workerfi 75*8b26181fSAndroid Build Coastguard Worker 76*8b26181fSAndroid Build Coastguard WorkerTMP=/tmp/mkdep$$ 77*8b26181fSAndroid Build Coastguard Worker 78*8b26181fSAndroid Build Coastguard Workertrap 'rm -f $TMP ; exit 1' 1 2 3 13 15 79*8b26181fSAndroid Build Coastguard Worker 80*8b26181fSAndroid Build Coastguard Workercp $MAKE ${MAKE}.bak 81*8b26181fSAndroid Build Coastguard Worker 82*8b26181fSAndroid Build Coastguard Workersed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP 83*8b26181fSAndroid Build Coastguard Worker 84*8b26181fSAndroid Build Coastguard Workercat << _EOF_ >> $TMP 85*8b26181fSAndroid Build Coastguard Worker# DO NOT DELETE THIS LINE -- mkdep uses it. 86*8b26181fSAndroid Build Coastguard Worker# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. 87*8b26181fSAndroid Build Coastguard Worker 88*8b26181fSAndroid Build Coastguard Worker_EOF_ 89*8b26181fSAndroid Build Coastguard Worker 90*8b26181fSAndroid Build Coastguard Worker# If your compiler doesn't have -M, add it. If you can't, the next two 91*8b26181fSAndroid Build Coastguard Worker# lines will try and replace the "cc -M". The real problem is that this 92*8b26181fSAndroid Build Coastguard Worker# hack can't deal with anything that requires a search path, and doesn't 93*8b26181fSAndroid Build Coastguard Worker# even try for anything using bracket (<>) syntax. 94*8b26181fSAndroid Build Coastguard Worker# 95*8b26181fSAndroid Build Coastguard Worker# grep -E '^#include[[:blank:]]*".*"' /dev/null $* | 96*8b26181fSAndroid Build Coastguard Worker# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' | 97*8b26181fSAndroid Build Coastguard Worker 98*8b26181fSAndroid Build Coastguard Worker# 99*8b26181fSAndroid Build Coastguard Worker# Construct a list of source files with paths relative to the source directory. 100*8b26181fSAndroid Build Coastguard Worker# 101*8b26181fSAndroid Build Coastguard Workersources="" 102*8b26181fSAndroid Build Coastguard Workerfor srcfile in $* 103*8b26181fSAndroid Build Coastguard Workerdo 104*8b26181fSAndroid Build Coastguard Worker sources="$sources $SOURCE_DIRECTORY/$srcfile" 105*8b26181fSAndroid Build Coastguard Workerdone 106*8b26181fSAndroid Build Coastguard Worker 107*8b26181fSAndroid Build Coastguard Worker# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait" 108*8b26181fSAndroid Build Coastguard Worker$CC $DEPENDENCY_CFLAG $flags $sources | 109*8b26181fSAndroid Build Coastguard Workersed " 110*8b26181fSAndroid Build Coastguard Worker s; \./; ;g 111*8b26181fSAndroid Build Coastguard Worker $SED" >> $TMP 112*8b26181fSAndroid Build Coastguard Worker 113*8b26181fSAndroid Build Coastguard Workercat << _EOF_ >> $TMP 114*8b26181fSAndroid Build Coastguard Worker 115*8b26181fSAndroid Build Coastguard Worker# IF YOU PUT ANYTHING HERE IT WILL GO AWAY 116*8b26181fSAndroid Build Coastguard Worker_EOF_ 117*8b26181fSAndroid Build Coastguard Worker 118*8b26181fSAndroid Build Coastguard Worker# copy to preserve permissions 119*8b26181fSAndroid Build Coastguard Workercp $TMP $MAKE 120*8b26181fSAndroid Build Coastguard Workerrm -f ${MAKE}.bak $TMP 121*8b26181fSAndroid Build Coastguard Workerexit 0 122