#!/bin/bash

# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

# Set up some paths and re-direct the arguments to webrtc_tests.py

# This script is a copy of the chrome_tests.sh wrapper script with the following
# changes:
# - The locate_valgrind.sh of Chromium's Valgrind scripts dir is used to locate
#   the Valgrind framework install. If it fails a fallback path is used instead
#   (../../chromium/src/third_party/valgrind/linux_x64) and a warning message
#   is showed by |show_locate_valgrind_failed_warning|.
# - webrtc_tests.py is invoked instead of chrome_tests.py.
# - Chromium's Valgrind scripts directory is added to the PYTHONPATH to make it
#   possible to execute the Python scripts properly.

export THISDIR=`dirname $0`
ARGV_COPY="$@"

# We need to set CHROME_VALGRIND iff using Memcheck:
#   tools_webrtc/valgrind/webrtc_tests.sh --tool memcheck
# or
#   tools_webrtc/valgrind/webrtc_tests.sh --tool=memcheck
tool="memcheck"  # Default to memcheck.
while (( "$#" ))
do
  if [[ "$1" == "--tool" ]]
  then
    tool="$2"
    shift
  elif [[ "$1" =~ --tool=(.*) ]]
  then
    tool="${BASH_REMATCH[1]}"
  fi
  shift
done

NEEDS_VALGRIND=0

case "$tool" in
  "memcheck")
    NEEDS_VALGRIND=1
    ;;
esac

# For WebRTC, we'll use the locate_valgrind.sh script in Chromium's Valgrind
# scripts dir to locate the Valgrind framework install
CHROME_VALGRIND_SCRIPTS=$THISDIR/../../tools/valgrind

if [ "$NEEDS_VALGRIND" == "1" ]
then
  CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh`
  if [ "$CHROME_VALGRIND" = "" ]
  then
    CHROME_VALGRIND=../../src/third_party/valgrind/linux_x64
    echo
    echo "-------------------- WARNING ------------------------"
    echo "locate_valgrind.sh failed."
    echo "Using $CHROME_VALGRIND as a fallback location."
    echo "This might be because:"
    echo "1) This is a swarming bot"
    echo "2) You haven't set up the valgrind binaries correctly."
    echo "In this case, please make sure you have followed the instructions at"
    echo "http://www.chromium.org/developers/how-tos/using-valgrind/get-valgrind"
    echo "Notice: In the .gclient file, you need to add this for the 'src'"
    echo "solution since our directory structure is different from Chromium's:"
    echo "\"custom_deps\": {"
    echo "  \"src/third_party/valgrind\":"
    echo "      \"https://chromium.googlesource.com/chromium/deps/valgrind/binaries\","
    echo "},"
    echo "-----------------------------------------------------"
    echo
  fi
  echo "Using valgrind binaries from ${CHROME_VALGRIND}"

  PATH="${CHROME_VALGRIND}/bin:$PATH"
  # We need to set these variables to override default lib paths hard-coded into
  # Valgrind binary.
  export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind"
  export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind"

  # Clean up some /tmp directories that might be stale due to interrupted
  # chrome_tests.py execution.
  # FYI:
  #   -mtime +1  <- only print files modified more than 24h ago,
  #   -print0/-0 are needed to handle possible newlines in the filenames.
  echo "Cleanup /tmp from Valgrind stuff"
  find /tmp -maxdepth 1 \(\
        -name "vgdb-pipe-*" -or -name "vg_logs_*" -or -name "valgrind.*" \
      \) -mtime +1 -print0 | xargs -0 rm -rf
fi

# Add Chrome's Valgrind scripts dir to the PYTHON_PATH since it contains
# the scripts that are needed for this script to run
PYTHONPATH=$THISDIR/../../tools/python/google:$CHROME_VALGRIND_SCRIPTS python \
           "$THISDIR/webrtc_tests.py" $ARGV_COPY
