Home | History | Annotate | Download | only in valgrind
      1 #!/bin/bash
      2 # Copyright (c) 2012 The LibYuv Project Authors. All rights reserved.
      3 #
      4 # Use of this source code is governed by a BSD-style license
      5 # that can be found in the LICENSE file in the root of the source
      6 # tree. An additional intellectual property rights grant can be found
      7 # in the file PATENTS.  All contributing project authors may
      8 # be found in the AUTHORS file in the root of the source tree.
      9 
     10 # Set up some paths and re-direct the arguments to libyuv_tests.py
     11 
     12 # This script is a copy of the chrome_tests.sh wrapper script with the following
     13 # changes:
     14 # - The locate_valgrind.sh of Chromium's Valgrind scripts dir is used to locate
     15 #   the Valgrind framework install. If it fails a fallback path is used instead
     16 #   (../../chromium/src/third_party/valgrind/linux_x64) and a warning message
     17 #   is showed by |show_locate_valgrind_failed_warning|.
     18 # - libyuv_tests.py is invoked instead of chrome_tests.py.
     19 # - Chromium's Valgrind scripts directory is added to the PYTHONPATH to make it
     20 #   possible to execute the Python scripts properly.
     21 
     22 export THISDIR=`dirname $0`
     23 ARGV_COPY="$@"
     24 
     25 # We need to set CHROME_VALGRIND iff using Memcheck:
     26 #   tools_libyuv/valgrind/libyuv_tests.sh --tool memcheck
     27 # or
     28 #   tools_libyuv/valgrind/libyuv_tests.sh --tool=memcheck
     29 tool="memcheck"  # Default to memcheck.
     30 while (( "$#" ))
     31 do
     32   if [[ "$1" == "--tool" ]]
     33   then
     34     tool="$2"
     35     shift
     36   elif [[ "$1" =~ --tool=(.*) ]]
     37   then
     38     tool="${BASH_REMATCH[1]}"
     39   fi
     40   shift
     41 done
     42 
     43 NEEDS_VALGRIND=0
     44 
     45 case "$tool" in
     46   "memcheck")
     47     NEEDS_VALGRIND=1
     48     ;;
     49 esac
     50 
     51 # For libyuv, we'll use the locate_valgrind.sh script in Chromium's Valgrind
     52 # scripts dir to locate the Valgrind framework install
     53 CHROME_VALGRIND_SCRIPTS=$THISDIR/../../tools/valgrind
     54 
     55 if [ "$NEEDS_VALGRIND" == "1" ]
     56 then
     57   CHROME_VALGRIND=`sh $CHROME_VALGRIND_SCRIPTS/locate_valgrind.sh`
     58   if [ "$CHROME_VALGRIND" = "" ]
     59   then
     60     CHROME_VALGRIND=../../src/third_party/valgrind/linux_x64
     61     echo
     62     echo "-------------------- WARNING ------------------------"
     63     echo "locate_valgrind.sh failed."
     64     echo "Using $CHROME_VALGRIND as a fallback location."
     65     echo "This might be because:"
     66     echo "1) This is a swarming bot"
     67     echo "2) You haven't set up the valgrind binaries correctly."
     68     echo "In this case, please make sure you have followed the instructions at"
     69     echo "http://www.chromium.org/developers/how-tos/using-valgrind/get-valgrind"
     70     echo "Notice: In the .gclient file, you need to add this for the 'libyuv'"
     71     echo "solution since our directory structure is different from Chromium's:"
     72     echo "\"custom_deps\": {"
     73     echo "  \"libyuv/third_party/valgrind\":"
     74     echo "      \"https://chromium.googlesource.com/chromium/deps/valgrind/binaries\","
     75     echo "},"
     76     echo "-----------------------------------------------------"
     77     echo
     78   fi
     79   echo "Using valgrind binaries from ${CHROME_VALGRIND}"
     80 
     81   PATH="${CHROME_VALGRIND}/bin:$PATH"
     82   # We need to set these variables to override default lib paths hard-coded into
     83   # Valgrind binary.
     84   export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind"
     85   export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind"
     86 
     87   # Clean up some /tmp directories that might be stale due to interrupted
     88   # chrome_tests.py execution.
     89   # FYI:
     90   #   -mtime +1  <- only print files modified more than 24h ago,
     91   #   -print0/-0 are needed to handle possible newlines in the filenames.
     92   echo "Cleanup /tmp from Valgrind stuff"
     93   find /tmp -maxdepth 1 \(\
     94         -name "vgdb-pipe-*" -or -name "vg_logs_*" -or -name "valgrind.*" \
     95       \) -mtime +1 -print0 | xargs -0 rm -rf
     96 fi
     97 
     98 # Add Chrome's Valgrind scripts dir to the PYTHON_PATH since it contains
     99 # the scripts that are needed for this script to run
    100 PYTHONPATH=$THISDIR/../../tools/python/google:$CHROME_VALGRIND_SCRIPTS python \
    101            "$THISDIR/libyuv_tests.py" $ARGV_COPY
    102