# Copyright (C) 2009 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.

#
# Usage:
#
# Source this file into your environment.  Then:
#
#    $ golden_builds sdk-sdk generic-eng generic-userdebug dream-eng
# 
# will build a set of combos.  This might take a while.  Then you can
# go make changes, and run:
#
#    $ check_builds sdk-sdk generic-eng generic-userdebug dream-eng
#
# Go get dinner, and when you get back, there will be a file
# test-builds/sizes.html that has a pretty chart of which files are
# in which tree, and how big they are.  In that chart, cells for files
# that are missing are red, and rows where the file sizes are not all
# the same will be blue.
#

TEST_BUILD_DIR=test-builds

function do_builds
{
    PREFIX=$1
    shift
    while [ -n "$1" ]
    do
        rm -rf $TEST_BUILD_DIR/$PREFIX-$1
        make PRODUCT-$(echo $1 | sed "s/-.*//" )-installclean
        make -j16 PRODUCT-$1 dist DIST_DIR=$TEST_BUILD_DIR/$PREFIX-$1
        if [ $? -ne 0 ] ; then
            echo FAILED
            return
        fi
        shift
    done
}

function golden_builds
{
    rm -rf $TEST_BUILD_DIR/golden-* $TEST_BUILD_DIR/dist-*
    do_builds golden "$@"
}

function compare_builds
{
    local inputs=
    while [ -n "$1" ]
    do
        inputs="$inputs $TEST_BUILD_DIR/golden-$1/installed-files.txt"
        inputs="$inputs $TEST_BUILD_DIR/dist-$1/installed-files.txt"
        shift
    done
    build/make/tools/compare_fileslist.py $inputs > $TEST_BUILD_DIR/sizes.html
}

function check_builds
{
    rm -rf $TEST_BUILD_DIR/dist-*
    do_builds dist "$@"
    compare_builds "$@"
}

function diff_builds
{
    local inputs=
    while [ -n "$1" ]
    do
        diff $TEST_BUILD_DIR/golden-$1/installed-files.txt $TEST_BUILD_DIR/dist-$1/installed-files.txt &> /dev/null
        if [ $? != 0 ]; then
            echo =========== $1 ===========
            diff $TEST_BUILD_DIR/golden-$1/installed-files.txt $TEST_BUILD_DIR/dist-$1/installed-files.txt
        fi
        shift
    done
    build/make/tools/compare_fileslist.py $inputs > $TEST_BUILD_DIR/sizes.html
}

