# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

_gypi_files = [
  "builtin_sources.gypi",
  "builtin_impl_sources.gypi",
  "vmservice/vmservice_sources.gypi",
  "io_sources.gypi",
  "io_impl_sources.gypi",
]

_gypi_contents = exec_script("../../tools/gypi_to_gn.py",
                             rebase_path(_gypi_files) + [ "--prefix" ],
                             "scope",
                             _gypi_files)

resources_sources_gypi = _gypi_contents.vmservice_sources_sources

builtin_sources_gypi = _gypi_contents.builtin_sources_sources
builtin_impl_sources_gypi = _gypi_contents.builtin_impl_sources_sources

io_sources_gypi = _gypi_contents.io_sources_sources
io_impl_sources_gypi = _gypi_contents.io_impl_sources_sources

_test_gypi_files = [
  "../vm/vm_sources.gypi",
  "builtin_impl_sources.gypi",
]

_test_only_gypi_contents = exec_script("../../tools/gypi_to_gn.py",
                                       rebase_path(_test_gypi_files) + [
                                             "--keep_only=_test.cc",
                                             "--keep_only=_test.h",
                                             "--prefix",
                                           ],
                                       "scope",
                                       _test_gypi_files)

# The VM sources are already included in libdart, so we just want to add in
# the tests here.
vm_tests_list = _test_only_gypi_contents.vm_sources_sources
builtin_impl_tests_list = _test_only_gypi_contents.builtin_impl_sources_sources
