1#!/bin/bash 2 3# 4# Copyright (C) 2016 The Android Open Source Project 5# 6# Licensed under the Apache License, Version 2.0 (the "License"); 7# you may not use this file except in compliance with the License. 8# You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# Unless required by applicable law or agreed to in writing, software 13# distributed under the License is distributed on an "AS IS" BASIS, 14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15# See the License for the specific language governing permissions and 16# limitations under the License. 17# 18 19DBUS_GENERATOR=$(which dbus-binding-generator) 20MY_DIR=$(dirname "$0") 21 22if [[ -z "${ANDROID_HOST_OUT}" ]]; then 23 echo "You must run envsetup.sh and lunch first." >&2 24 exit 1 25fi 26 27if [[ -z "${DBUS_GENERATOR}" ]]; then 28 echo "DBus bindings generator not found." >&2 29 exit 1 30fi 31 32set -e 33 34# generate <kind> <dir> <xml> [xml ...] 35# Generate a DBus proxy and/or proxy mock in the passed |dir| for the provided 36# |xml| service files. 37# The parameter |kind| determines whether it should generate the mock only 38# (mock), the proxy only (proxy) or both (both). 39generate() { 40 local kind="$1" 41 local dir="$2" 42 local xmls=("${@:3}") 43 44 mkdir -p "${MY_DIR}/${dir}" 45 local outdir=$(realpath "${MY_DIR}/${dir}") 46 local proxyh="${outdir}/dbus-proxies.h" 47 local mockh="${outdir}/dbus-proxy-mocks.h" 48 49 ${DBUS_GENERATOR} "${xmls[@]}" --mock="${mockh}" --proxy="${proxyh}" 50 51 # Fix the include path to the dbus-proxies.h to include ${dir}. 52 sed "s,include \"dbus-proxies.h\",include \"${dir}/dbus-proxies.h\"," \ 53 -i "${mockh}" 54 55 # Fix the header guards to be independent from the checkout location. 56 local guard=$(realpath "${MY_DIR}/../.." | tr '[:lower:]/ ' '[:upper:]__') 57 for header in "${mockh}" "${proxyh}"; do 58 sed "s,___CHROMEOS_DBUS_BINDING__${guard},___CHROMEOS_DBUS_BINDING__," \ 59 -i "${header}" 60 done 61 62 # Remove the files not requested. 63 if [[ "${kind}" == "mock" ]]; then 64 rm -f "${proxyh}" 65 elif [[ "${kind}" == "proxy" ]]; then 66 rm -f "${mockh}" 67 fi 68} 69 70UE_DIR=$(realpath "${MY_DIR}/..") 71SHILL_DIR=$(realpath "${UE_DIR}/../connectivity/shill") 72 73generate mock "libcros" \ 74 "${UE_DIR}/dbus_bindings/org.chromium.LibCrosService.dbus-xml" 75 76generate mock "shill" \ 77 "${SHILL_DIR}"/dbus_bindings/org.chromium.flimflam.{Manager,Service}.dbus-xml 78 79echo "Done." 80