18cf6c252SPaul Traina#!/bin/sh - 28cf6c252SPaul Traina# 38cf6c252SPaul Traina# Copyright (c) 1994, 1996 48cf6c252SPaul Traina# The Regents of the University of California. All rights reserved. 58cf6c252SPaul Traina# 68cf6c252SPaul Traina# Redistribution and use in source and binary forms are permitted 78cf6c252SPaul Traina# provided that this notice is preserved and that due credit is given 88cf6c252SPaul Traina# to the University of California at Berkeley. The name of the University 98cf6c252SPaul Traina# may not be used to endorse or promote products derived from this 108cf6c252SPaul Traina# software without specific prior written permission. This software 118cf6c252SPaul Traina# is provided ``as is'' without express or implied warranty. 128cf6c252SPaul Traina# 138cf6c252SPaul Traina# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88 148cf6c252SPaul Traina# 158cf6c252SPaul Traina 168cf6c252SPaul TrainaMAKE=Makefile # default makefile name is "Makefile" 178cf6c252SPaul TrainaCC=cc # default C compiler is "cc" 18681ed54cSXin LIDEPENDENCY_CFLAG=-M # default dependency-generation flag is -M 19*6f9cba8fSJoseph MingroneSOURCE_DIRECTORY=. # default source directory is the current directory 208cf6c252SPaul Traina 21*6f9cba8fSJoseph Mingrone# No command-line flags seen yet. 22*6f9cba8fSJoseph Mingroneflags="" 238cf6c252SPaul Trainawhile : 248cf6c252SPaul Traina do case "$1" in 258cf6c252SPaul Traina # -c allows you to specify the C compiler 268cf6c252SPaul Traina -c) 278cf6c252SPaul Traina CC=$2 288cf6c252SPaul Traina shift; shift ;; 298cf6c252SPaul Traina 308cf6c252SPaul Traina # -f allows you to select a makefile name 318cf6c252SPaul Traina -f) 328cf6c252SPaul Traina MAKE=$2 338cf6c252SPaul Traina shift; shift ;; 348cf6c252SPaul Traina 35681ed54cSXin LI # -m allows you to specify the dependency-generation flag 36681ed54cSXin LI -m) 37681ed54cSXin LI DEPENDENCY_CFLAG=$2 38681ed54cSXin LI shift; shift ;; 39681ed54cSXin LI 408cf6c252SPaul Traina # the -p flag produces "program: program.c" style dependencies 418cf6c252SPaul Traina # so .o's don't get produced 428cf6c252SPaul Traina -p) 438cf6c252SPaul Traina SED='s;\.o;;' 448cf6c252SPaul Traina shift ;; 45*6f9cba8fSJoseph Mingrone 46*6f9cba8fSJoseph Mingrone # -s allows you to specify the source directory 47*6f9cba8fSJoseph Mingrone -s) 48*6f9cba8fSJoseph Mingrone SOURCE_DIRECTORY=$2 49*6f9cba8fSJoseph Mingrone shift; shift ;; 50*6f9cba8fSJoseph Mingrone 51*6f9cba8fSJoseph Mingrone # -include takes an argument 52*6f9cba8fSJoseph Mingrone -include) 53*6f9cba8fSJoseph Mingrone flags="$flags $1 $2" 54*6f9cba8fSJoseph Mingrone shift; shift ;; 55*6f9cba8fSJoseph Mingrone 56*6f9cba8fSJoseph Mingrone # other command-line flag 57*6f9cba8fSJoseph Mingrone -*) 58*6f9cba8fSJoseph Mingrone flags="$flags $1" 59*6f9cba8fSJoseph Mingrone shift ;; 60*6f9cba8fSJoseph Mingrone 618cf6c252SPaul Traina *) 628cf6c252SPaul Traina break ;; 638cf6c252SPaul Traina esac 648cf6c252SPaul Trainadone 658cf6c252SPaul Traina 668cf6c252SPaul Trainaif [ $# = 0 ] ; then 67*6f9cba8fSJoseph Mingrone echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [-s source-directory] [flags] file ...' 688cf6c252SPaul Traina exit 1 698cf6c252SPaul Trainafi 708cf6c252SPaul Traina 718cf6c252SPaul Trainaif [ ! -w $MAKE ]; then 728cf6c252SPaul Traina echo "mkdep: no writeable file \"$MAKE\"" 738cf6c252SPaul Traina exit 1 748cf6c252SPaul Trainafi 758cf6c252SPaul Traina 768cf6c252SPaul TrainaTMP=/tmp/mkdep$$ 778cf6c252SPaul Traina 788cf6c252SPaul Trainatrap 'rm -f $TMP ; exit 1' 1 2 3 13 15 798cf6c252SPaul Traina 808cf6c252SPaul Trainacp $MAKE ${MAKE}.bak 818cf6c252SPaul Traina 828cf6c252SPaul Trainased -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP 838cf6c252SPaul Traina 848cf6c252SPaul Trainacat << _EOF_ >> $TMP 858cf6c252SPaul Traina# DO NOT DELETE THIS LINE -- mkdep uses it. 868cf6c252SPaul Traina# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. 878cf6c252SPaul Traina 888cf6c252SPaul Traina_EOF_ 898cf6c252SPaul Traina 908cf6c252SPaul Traina# If your compiler doesn't have -M, add it. If you can't, the next two 918cf6c252SPaul Traina# lines will try and replace the "cc -M". The real problem is that this 928cf6c252SPaul Traina# hack can't deal with anything that requires a search path, and doesn't 938cf6c252SPaul Traina# even try for anything using bracket (<>) syntax. 948cf6c252SPaul Traina# 958cf6c252SPaul Traina# egrep '^#include[ ]*".*"' /dev/null $* | 968cf6c252SPaul Traina# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' | 978cf6c252SPaul Traina 98*6f9cba8fSJoseph Mingrone# 99*6f9cba8fSJoseph Mingrone# Construct a list of source files with paths relative to the source directory. 100*6f9cba8fSJoseph Mingrone# 101*6f9cba8fSJoseph Mingronesources="" 102*6f9cba8fSJoseph Mingronefor srcfile in $* 103*6f9cba8fSJoseph Mingronedo 104*6f9cba8fSJoseph Mingrone sources="$sources $SOURCE_DIRECTORY/$srcfile" 105*6f9cba8fSJoseph Mingronedone 106*6f9cba8fSJoseph Mingrone 1078cf6c252SPaul Traina# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait" 108*6f9cba8fSJoseph Mingrone$CC $DEPENDENCY_CFLAG $flags $sources | 1098cf6c252SPaul Trainased " 1108cf6c252SPaul Traina s; \./; ;g 111*6f9cba8fSJoseph Mingrone $SED" >> $TMP 1128cf6c252SPaul Traina 1138cf6c252SPaul Trainacat << _EOF_ >> $TMP 1148cf6c252SPaul Traina 1158cf6c252SPaul Traina# IF YOU PUT ANYTHING HERE IT WILL GO AWAY 1168cf6c252SPaul Traina_EOF_ 1178cf6c252SPaul Traina 1188cf6c252SPaul Traina# copy to preserve permissions 1198cf6c252SPaul Trainacp $TMP $MAKE 1208cf6c252SPaul Trainarm -f ${MAKE}.bak $TMP 1218cf6c252SPaul Trainaexit 0 122