xref: /aosp_15_r20/external/rappor/client/cpp/dotd.sh (revision 2abb31345f6c95944768b5222a9a5ed3fc68cc00)
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