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