1*0a7e5f1fSJoseph Mingrone#!/bin/sh -e 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 TrainaMAKE=Makefile # default makefile name is "Makefile" 174edb46e9SPaul TrainaCC=cc # default C compiler is "cc" 183c602fabSXin LIDEPENDENCY_CFLAG=-M # default dependency-generation flag is -M 19ee67461eSJoseph MingroneSOURCE_DIRECTORY=. # default source directory is the current directory 204edb46e9SPaul Traina 21ee67461eSJoseph Mingrone# No command-line flags seen yet. 22ee67461eSJoseph Mingroneflags="" 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 353c602fabSXin LI # -m allows you to specify the dependency-generation flag 363c602fabSXin LI -m) 373c602fabSXin LI DEPENDENCY_CFLAG=$2 383c602fabSXin LI shift; shift ;; 393c602fabSXin 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 ;; 45ee67461eSJoseph Mingrone 46ee67461eSJoseph Mingrone # -s allows you to specify the source directory 47ee67461eSJoseph Mingrone -s) 48ee67461eSJoseph Mingrone SOURCE_DIRECTORY=$2 49ee67461eSJoseph Mingrone shift; shift ;; 50ee67461eSJoseph Mingrone 51ee67461eSJoseph Mingrone # other command-line flag 52ee67461eSJoseph Mingrone -*) 53ee67461eSJoseph Mingrone flags="$flags $1" 54ee67461eSJoseph Mingrone shift ;; 55ee67461eSJoseph Mingrone 564edb46e9SPaul Traina *) 574edb46e9SPaul Traina break ;; 584edb46e9SPaul Traina esac 594edb46e9SPaul Trainadone 604edb46e9SPaul Traina 614edb46e9SPaul Trainaif [ $# = 0 ] ; then 62ee67461eSJoseph Mingrone echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [-s source-directory] [flags] file ...' 634edb46e9SPaul Traina exit 1 644edb46e9SPaul Trainafi 654edb46e9SPaul Traina 66*0a7e5f1fSJoseph Mingroneif [ ! -w "$MAKE" ]; then 674edb46e9SPaul Traina echo "mkdep: no writeable file \"$MAKE\"" 684edb46e9SPaul Traina exit 1 694edb46e9SPaul Trainafi 704edb46e9SPaul Traina 71*0a7e5f1fSJoseph MingroneTMP=${TMPDIR:-/tmp}/mkdep$$ 724edb46e9SPaul Traina 73*0a7e5f1fSJoseph Mingronetrap 'rm -f "$TMP" ; exit 1' HUP INT QUIT PIPE TERM 744edb46e9SPaul Traina 75*0a7e5f1fSJoseph Mingronecp "$MAKE" "${MAKE}.bak" 764edb46e9SPaul Traina 77*0a7e5f1fSJoseph Mingronesed -e '/DO NOT DELETE THIS LINE/,$d' < "$MAKE" > "$TMP" 784edb46e9SPaul Traina 79*0a7e5f1fSJoseph Mingronecat << _EOF_ >> "$TMP" 804edb46e9SPaul Traina# DO NOT DELETE THIS LINE -- mkdep uses it. 814edb46e9SPaul Traina# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. 824edb46e9SPaul Traina 834edb46e9SPaul Traina_EOF_ 844edb46e9SPaul Traina 854edb46e9SPaul Traina# If your compiler doesn't have -M, add it. If you can't, the next two 864edb46e9SPaul Traina# lines will try and replace the "cc -M". The real problem is that this 874edb46e9SPaul Traina# hack can't deal with anything that requires a search path, and doesn't 884edb46e9SPaul Traina# even try for anything using bracket (<>) syntax. 894edb46e9SPaul Traina# 90ee67461eSJoseph Mingrone# grep -E '^#include[[:blank:]]*".*"' /dev/null $* | 914edb46e9SPaul Traina# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' | 924edb46e9SPaul Traina 93ee67461eSJoseph Mingrone# 94ee67461eSJoseph Mingrone# Construct a list of source files with paths relative to the source directory. 95ee67461eSJoseph Mingrone# 96ee67461eSJoseph Mingronesources="" 97*0a7e5f1fSJoseph Mingronefor srcfile in "$@" 98ee67461eSJoseph Mingronedo 99ee67461eSJoseph Mingrone sources="$sources $SOURCE_DIRECTORY/$srcfile" 100ee67461eSJoseph Mingronedone 101ee67461eSJoseph Mingrone 1024edb46e9SPaul Traina# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait" 103*0a7e5f1fSJoseph Mingrone# $flags and $sources are meant to expand 104*0a7e5f1fSJoseph Mingrone# shellcheck disable=SC2086 105*0a7e5f1fSJoseph Mingrone"$CC" "$DEPENDENCY_CFLAG" $flags $sources | 1064edb46e9SPaul Trainased " 1074edb46e9SPaul Traina s; \./; ;g 108*0a7e5f1fSJoseph Mingrone $SED" >> "$TMP" 1094edb46e9SPaul Traina 110*0a7e5f1fSJoseph Mingronecat << _EOF_ >> "$TMP" 1114edb46e9SPaul Traina 1124edb46e9SPaul Traina# IF YOU PUT ANYTHING HERE IT WILL GO AWAY 1134edb46e9SPaul Traina_EOF_ 1144edb46e9SPaul Traina 1154edb46e9SPaul Traina# copy to preserve permissions 116*0a7e5f1fSJoseph Mingronecp "$TMP" "$MAKE" 117*0a7e5f1fSJoseph Mingronerm -f "${MAKE}.bak" "$TMP" 1184edb46e9SPaul Trainaexit 0 119