# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This file is used to shared GN source lists between the standalone Skia
# and Chrome skia build. All paths produced by this header must be
# source-absolute since it will be included in different contexts in each
# checkout.
_path_to_include = get_path_info("../include", "abspath")
_path_to_src = get_path_info("../src", "abspath")

# Core.
_core_gypi = exec_script("gypi_to_gn.py",
                         [
                           rebase_path("../gyp/core.gypi"),
                           "--replace=<(skia_include_path)=$_path_to_include",
                           "--replace=<(skia_src_path)=$_path_to_src",
                         ],
                         "scope",
                         [ "../gyp/core.gypi" ])
skia_core_sources = _core_gypi.sources

# Effects.
_effects_gypi =
    exec_script("gypi_to_gn.py",
                [
                  rebase_path("../gyp/effects.gypi"),
                  "--replace=<(skia_include_path)=$_path_to_include",
                  "--replace=<(skia_src_path)=$_path_to_src",
                ],
                "scope",
                [ "../gyp/effects.gypi" ])
skia_effects_sources = _effects_gypi.sources

# GPU.
_gpu_gypi = exec_script("gypi_to_gn.py",
                        [
                          rebase_path("../gyp/gpu.gypi"),
                          "--replace=<(skia_include_path)=$_path_to_include",
                          "--replace=<(skia_src_path)=$_path_to_src",
                        ],
                        "scope",
                        [ "../gyp/gpu.gypi" ])
skia_gpu_sources = _gpu_gypi.skgpu_sources
skia_null_gpu_sources = _gpu_gypi.skgpu_null_gl_sources
skia_vk_sources = _gpu_gypi.skgpu_vk_sources

# Opts.
#
# Unlike the other variables here, this is a "scope" consisting of many
# sub-lists.
skia_opts = exec_script("gypi_to_gn.py",
                        [
                          rebase_path("../gyp/opts.gypi"),
                          "--replace=<(skia_include_path)=$_path_to_include",
                          "--replace=<(skia_src_path)=$_path_to_src",
                        ],
                        "scope",
                        [ "../gyp/opts.gypi" ])

# PDF.
_pdf_gypi = exec_script("gypi_to_gn.py",
                        [
                          rebase_path("../gyp/pdf.gypi"),
                          "--replace=<(skia_include_path)=$_path_to_include",
                          "--replace=<(skia_src_path)=$_path_to_src",
                        ],
                        "scope",
                        [ "../gyp/pdf.gypi" ])
skia_pdf_sources = _pdf_gypi.sources

_sources_gypi = exec_script("gypi_to_gn.py",
                            [ rebase_path("../gyp/skia_sources.gypi") ],
                            "scope",
                            [ "../gyp/skia_sources.gypi" ])
skia_sksl_sources = get_path_info(_sources_gypi.sksl_sources, "abspath")
skia_utils_sources = get_path_info(_sources_gypi.utils_sources, "abspath")

# Skia Chromium defines. These flags will be defined in chromium If these
# become 'permanent', they should be moved into Chrome's skia build file.
skia_for_chromium_defines = [ "SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS" ]

_android_framework_defines =
    exec_script(
        "gypi_to_gn.py",
        [ rebase_path("../gyp/skia_for_android_framework_defines.gypi") ],
        "scope",
        [ "../gyp/core.gypi" ])
skia_android_framework_defines =
    _android_framework_defines.skia_for_android_framework_defines
