# Copyright (c) 2016 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.

# TODO(ehmaldonado): Replace by the new paths once the upstream changes land.
# See https://codereview.chromium.org/2526883002/ for valgrind-binaries.gni and
# https://codereview.chromium.org/2517953007/ for python-google.gni and
# valgrind.gni
import("python-google.gni")
import("valgrind-binaries.gni")
import("valgrind.gni")

valgrind_webrtc_dependencies = [
                                 "../../tools_webrtc/valgrind/gtest_exclude/modules_tests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/modules_unittests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/ortc_unittests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/peerconnection_unittests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/rtc_media_unittests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/rtc_media_unittests.gtest-memcheck_mac.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/rtc_pc_unittests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/rtc_unittests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/video_engine_tests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/gtest_exclude/webrtc_nonparallel_tests.gtest-memcheck.txt",
                                 "../../tools_webrtc/valgrind/memcheck/suppressions.txt",
                                 "../../tools_webrtc/valgrind/memcheck/suppressions_mac.txt",
                                 "../../tools_webrtc/valgrind/memcheck/suppressions_win32.txt",
                                 "../../tools_webrtc/valgrind/webrtc_tests.py",
                                 "../../tools_webrtc/valgrind/webrtc_tests.sh",
                               ] + valgrind_dependencies + valgrind_binaries +
                               python_google
