#!/usr/bin/env bash
# Copyright 2013 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.

# Record the current working directory. This allows us to correctly interpret
# relative paths
CALLED_FROM=$( pwd -P )

# Record the location of this script. The assumption is that the script is located in the
# top-level build directory, so finding the script means finding the build directory.
SCRIPTNAME=$(basename "$0")
SCRIPTPATH=$( cd "$(dirname "$0")" ; pwd -P )
GRADLE=$SCRIPTPATH/gradlew

# Parameter 1 is the path from the cwd to the sample.
SAMPLE_PATH=""
if  [ -n "$1" ]; then
    SAMPLE_PATH=$CALLED_FROM/$1
fi

# Calculate the relative path from the sample location to the main build directory. This
# allows us to define build dependencies as relative paths, rather than requiring the developer
# to add them to the environment.
BUILDPATH=$(perl -e "use File::Spec; print File::Spec->abs2rel(@ARGV)" $SCRIPTPATH $SAMPLE_PATH)

# Same thing for the samples common code: calculate the relative path.
SAMPLES_COMMON=$( cd $SCRIPTPATH/../samples/android/common ; pwd -P)
COMMONPATH=$(perl -e "use File::Spec; print File::Spec->abs2rel(@ARGV)" $SAMPLES_COMMON $SAMPLE_PATH)

# Launch a Gradle build with the SampleGen creation parameters on the command line
# Note: Daemon disabled since the script reads for System.console. This overrides user settings.
$GRADLE -b $SCRIPTPATH/build.gradle --info --no-daemon create -Pout=$SAMPLE_PATH \
    -PcalledFrom=$CALLED_FROM -PpathToSamplesCommon=$COMMONPATH -PpathToBuild=$BUILDPATH
