14edb46e9SPaul Traina#!/bin/sh - 24edb46e9SPaul Traina# 34edb46e9SPaul Traina# Copyright (c) 1994, 1996 44edb46e9SPaul Traina# The Regents of the University of California. All rights reserved. 54edb46e9SPaul Traina# 64edb46e9SPaul Traina# Redistribution and use in source and binary forms are permitted 74edb46e9SPaul Traina# provided that this notice is preserved and that due credit is given 84edb46e9SPaul Traina# to the University of California at Berkeley. The name of the University 94edb46e9SPaul Traina# may not be used to endorse or promote products derived from this 104edb46e9SPaul Traina# software without specific prior written permission. This software 114edb46e9SPaul Traina# is provided ``as is'' without express or implied warranty. 124edb46e9SPaul Traina# 134edb46e9SPaul Traina# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88 144edb46e9SPaul Traina# 154edb46e9SPaul Traina 164edb46e9SPaul TrainaPATH=/bin:/usr/bin:/usr/ucb:/usr/local:/usr/local/bin 174edb46e9SPaul Trainaexport PATH 184edb46e9SPaul Traina 194edb46e9SPaul TrainaMAKE=Makefile # default makefile name is "Makefile" 204edb46e9SPaul TrainaCC=cc # default C compiler is "cc" 21*3c602fabSXin LIDEPENDENCY_CFLAG=-M # default dependency-generation flag is -M 224edb46e9SPaul Traina 234edb46e9SPaul Trainawhile : 244edb46e9SPaul Traina do case "$1" in 254edb46e9SPaul Traina # -c allows you to specify the C compiler 264edb46e9SPaul Traina -c) 274edb46e9SPaul Traina CC=$2 284edb46e9SPaul Traina shift; shift ;; 294edb46e9SPaul Traina 304edb46e9SPaul Traina # -f allows you to select a makefile name 314edb46e9SPaul Traina -f) 324edb46e9SPaul Traina MAKE=$2 334edb46e9SPaul Traina shift; shift ;; 344edb46e9SPaul Traina 35*3c602fabSXin LI # -m allows you to specify the dependency-generation flag 36*3c602fabSXin LI -m) 37*3c602fabSXin LI DEPENDENCY_CFLAG=$2 38*3c602fabSXin LI shift; shift ;; 39*3c602fabSXin LI 404edb46e9SPaul Traina # the -p flag produces "program: program.c" style dependencies 414edb46e9SPaul Traina # so .o's don't get produced 424edb46e9SPaul Traina -p) 434edb46e9SPaul Traina SED='s;\.o;;' 444edb46e9SPaul Traina shift ;; 454edb46e9SPaul Traina *) 464edb46e9SPaul Traina break ;; 474edb46e9SPaul Traina esac 484edb46e9SPaul Trainadone 494edb46e9SPaul Traina 504edb46e9SPaul Trainaif [ $# = 0 ] ; then 51*3c602fabSXin LI echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [flags] file ...' 524edb46e9SPaul Traina exit 1 534edb46e9SPaul Trainafi 544edb46e9SPaul Traina 554edb46e9SPaul Trainaif [ ! -w $MAKE ]; then 564edb46e9SPaul Traina echo "mkdep: no writeable file \"$MAKE\"" 574edb46e9SPaul Traina exit 1 584edb46e9SPaul Trainafi 594edb46e9SPaul Traina 604edb46e9SPaul TrainaTMP=/tmp/mkdep$$ 614edb46e9SPaul Traina 624edb46e9SPaul Trainatrap 'rm -f $TMP ; exit 1' 1 2 3 13 15 634edb46e9SPaul Traina 644edb46e9SPaul Trainacp $MAKE ${MAKE}.bak 654edb46e9SPaul Traina 664edb46e9SPaul Trainased -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP 674edb46e9SPaul Traina 684edb46e9SPaul Trainacat << _EOF_ >> $TMP 694edb46e9SPaul Traina# DO NOT DELETE THIS LINE -- mkdep uses it. 704edb46e9SPaul Traina# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. 714edb46e9SPaul Traina 724edb46e9SPaul Traina_EOF_ 734edb46e9SPaul Traina 744edb46e9SPaul Traina# If your compiler doesn't have -M, add it. If you can't, the next two 754edb46e9SPaul Traina# lines will try and replace the "cc -M". The real problem is that this 764edb46e9SPaul Traina# hack can't deal with anything that requires a search path, and doesn't 774edb46e9SPaul Traina# even try for anything using bracket (<>) syntax. 784edb46e9SPaul Traina# 794edb46e9SPaul Traina# egrep '^#include[ ]*".*"' /dev/null $* | 804edb46e9SPaul Traina# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' | 814edb46e9SPaul Traina 824edb46e9SPaul Traina# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait" 83*3c602fabSXin LI$CC $DEPENDENCY_CFLAG $* | 844edb46e9SPaul Trainased " 854edb46e9SPaul Traina s; \./; ;g 864edb46e9SPaul Traina $SED" | 874edb46e9SPaul Trainaawk '{ 884edb46e9SPaul Traina if ($1 != prev) { 894edb46e9SPaul Traina if (rec != "") 904edb46e9SPaul Traina print rec; 914edb46e9SPaul Traina rec = $0; 924edb46e9SPaul Traina prev = $1; 934edb46e9SPaul Traina } 944edb46e9SPaul Traina else { 954edb46e9SPaul Traina if (length(rec $2) > 78) { 964edb46e9SPaul Traina print rec; 974edb46e9SPaul Traina rec = $0; 984edb46e9SPaul Traina } 994edb46e9SPaul Traina else 1004edb46e9SPaul Traina rec = rec " " $2 1014edb46e9SPaul Traina } 1024edb46e9SPaul Traina} 1034edb46e9SPaul TrainaEND { 1044edb46e9SPaul Traina print rec 1054edb46e9SPaul Traina}' >> $TMP 1064edb46e9SPaul Traina 1074edb46e9SPaul Trainacat << _EOF_ >> $TMP 1084edb46e9SPaul Traina 1094edb46e9SPaul Traina# IF YOU PUT ANYTHING HERE IT WILL GO AWAY 1104edb46e9SPaul Traina_EOF_ 1114edb46e9SPaul Traina 1124edb46e9SPaul Traina# copy to preserve permissions 1134edb46e9SPaul Trainacp $TMP $MAKE 1144edb46e9SPaul Trainarm -f ${MAKE}.bak $TMP 1154edb46e9SPaul Trainaexit 0 116