1*2abb3134SXin Li#!/bin/bash 2*2abb3134SXin Li# 3*2abb3134SXin Li# dotd.sh 4*2abb3134SXin Li# 5*2abb3134SXin Li# Generate .d Makefile fragments, so we can use #include statements in source 6*2abb3134SXin Li# for dependency info. Adapted from the GNU make manual: 7*2abb3134SXin Li# 8*2abb3134SXin Li# http://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html 9*2abb3134SXin Li# 10*2abb3134SXin Li# We are putting this in shell, so we just have 'sed in bash'. Not an unholy 11*2abb3134SXin Li# mix of 'sed in bash in Make'. 12*2abb3134SXin Li 13*2abb3134SXin Liset -o nounset 14*2abb3134SXin Liset -o pipefail 15*2abb3134SXin Liset -o errexit 16*2abb3134SXin Li 17*2abb3134SXin Li# Munge gcc -MM output into .d files. 18*2abb3134SXin Limain() { 19*2abb3134SXin Li if [ ! -d _tmp ]; then mkdir _tmp; fi 20*2abb3134SXin Li local basename=$1 21*2abb3134SXin Li local dotd=$2 # .d output name 22*2abb3134SXin Li shift 2 # rest of args are gcc invocation 23*2abb3134SXin Li 24*2abb3134SXin Li rm --verbose -f $dotd # in case of failure? 25*2abb3134SXin Li 26*2abb3134SXin Li # Execute the gcc -MM invocation. 27*2abb3134SXin Li # 28*2abb3134SXin Li # Change 29*2abb3134SXin Li # rappor_sim.o: rappor.sim.cc 30*2abb3134SXin Li # to 31*2abb3134SXin Li # _tmp/rappor_sim.o _tmp/rappor_sim.d : rappor.sim.cc 32*2abb3134SXin Li "$@" | sed "s|\($basename\).o|_tmp/\1.o _tmp/\1.d |" > $dotd 33*2abb3134SXin Li} 34*2abb3134SXin Li 35*2abb3134SXin Limain "$@" 36