From 3c807db06ed10aa70b368df3dfd5b93a718988f5 Mon Sep 17 00:00:00 2001 From: Nan Zhang Date: Fri, 3 Nov 2017 14:53:31 -0700 Subject: [PATCH] Add default jar wrapper when wrapper property is not specified Bug: b/68779881 Test: manually copied the jar-wrapper.sh to out/soong/host/linux-x86/framework Change-Id: Idee1e7e64c6e3c89c89a8cd9c107a38533356b6c --- java/java.go | 8 ++++-- scripts/jar-wrapper.sh | 58 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 scripts/jar-wrapper.sh diff --git a/java/java.go b/java/java.go index 1541dec2a..f9a4c04d2 100644 --- a/java/java.go +++ b/java/java.go @@ -869,7 +869,7 @@ type Binary struct { binaryProperties binaryProperties - wrapperFile android.ModuleSrcPath + wrapperFile android.SourcePath binaryFile android.OutputPath } @@ -882,7 +882,11 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) { // Depend on the installed jar (j.installFile) so that the wrapper doesn't get executed by // another build rule before the jar has been installed. - j.wrapperFile = android.PathForModuleSrc(ctx, j.binaryProperties.Wrapper) + if j.binaryProperties.Wrapper != "" { + j.wrapperFile = android.PathForModuleSrc(ctx, j.binaryProperties.Wrapper).SourcePath + } else { + j.wrapperFile = android.PathForSource(ctx, "build/soong/scripts/jar-wrapper.sh") + } j.binaryFile = ctx.InstallExecutable(android.PathForModuleInstall(ctx, "bin"), ctx.ModuleName(), j.wrapperFile, j.installFile) } diff --git a/scripts/jar-wrapper.sh b/scripts/jar-wrapper.sh new file mode 100644 index 000000000..71c1d9067 --- /dev/null +++ b/scripts/jar-wrapper.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# +# Copyright (C) 2007 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Set up prog to be the path of this script, including following symlinks, +# and set up progdir to be the fully-qualified pathname of its directory. + +prog="$0" +while [ -h "${prog}" ]; do + fullprog=`/bin/ls -ld "${prog}"` + fullprog=`expr "${fullprog}" : ".* -> \(.*\)$"` + if expr "x${fullprog}" : 'x/' >/dev/null; then + prog="${fullprog}" + else + progdir=`dirname "${prog}"` + prog="${progdir}/${fullprog}" + fi +done + +oldwd=`pwd` +progdir=`dirname "${prog}"` +cd "${progdir}" +progdir=`pwd` +prog="${progdir}"/`basename "${prog}"` +cd "${oldwd}" + +jarfile=`basename "${prog}"`.jar +jardir="${progdir}" + +if [ ! -r "${jardir}/${jarfile}" ]; then + jardir=`dirname "${progdir}"`/framework +fi + +if [ ! -r "${jardir}/${jarfile}" ]; then + echo `basename "${prog}"`": can't find ${jarfile}" + exit 1 +fi + +javaOpts="" +while expr "x$1" : 'x-J' >/dev/null; do + opt=`expr "$1" : '-J\(.*\)'` + javaOpts="${javaOpts} -${opt}" + shift +done + +exec java ${javaOpts} -jar ${jardir}/${jarfile} "$@"