1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#!/bin/bash
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Copyright (C) 2007 The Android Open Source Project
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Licensed under the Apache License, Version 2.0 (the "License");
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# you may not use this file except in compliance with the License.
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# opcode-gen <file>
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#
198d74cbd884b03e19f39e1753858ac15455cab33aDan Bornstein# This script uses the file bytecodes.txt (in this directory) to
208d74cbd884b03e19f39e1753858ac15455cab33aDan Bornstein# generate code inside the given <file>, based on the directives found
21d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornstein# in that file. Refer to those files to understand what's being
22d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornstein# generated. (Look for comments that say "BEGIN(name)" where "name" is
23973171bb01a052a302e8674b5f617383bac0647aDan Bornstein# one of the "emission" directives defined in opcode-gen.awk in this
24973171bb01a052a302e8674b5f617383bac0647aDan Bornstein# directory.)
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfile="$1"
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttmpfile="/tmp/$$.txt"
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinecho "processing `basename $1`" 1>&2
3082dbe1c22c6a1088f73f1e11e5cacbdd492ca79dDan Bornstein
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "x$1" = "x" ]; then
32973171bb01a052a302e8674b5f617383bac0647aDan Bornstein    echo "must specify a file" 1>&2
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    exit 1
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Set up prog to be the path of this script, including following symlinks,
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# and set up progdir to be the fully-qualified pathname of its directory.
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprog="$0"
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwhile [ -h "${prog}" ]; do
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    newProg=`/bin/ls -ld "${prog}"`
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    if expr "x${newProg}" : 'x/' >/dev/null; then
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prog="${newProg}"
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    else
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        progdir=`dirname "${prog}"`
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        prog="${progdir}/${newProg}"
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    fi
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdone
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectoldwd=`pwd`
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprogdir=`dirname "${prog}"`
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcd "${progdir}"
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprogdir=`pwd`
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprog="${progdir}"/`basename "${prog}"`
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcd "${oldwd}"
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectbytecodeFile="$progdir/bytecode.txt"
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornsteinawk -v "bytecodeFile=$bytecodeFile" -f "$progdir/opcode-gen.awk" \
59d12de172a5e18f3bef8a98e3f43a14565266451bDan Bornstein    "$file" > "$tmpfile"
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinif [ "$?" = "0" ]; then
62973171bb01a052a302e8674b5f617383bac0647aDan Bornstein    cp "$tmpfile" "$file"
63973171bb01a052a302e8674b5f617383bac0647aDan Bornstein    rm "$tmpfile"
64973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinelse
65973171bb01a052a302e8674b5f617383bac0647aDan Bornstein    echo "error running awk" 1>&2
66973171bb01a052a302e8674b5f617383bac0647aDan Bornstein    exit 1
67973171bb01a052a302e8674b5f617383bac0647aDan Bornsteinfi
68