# Copyright 2024 The Lynx Authors. All rights reserved.
# Licensed under the Apache License Version 2.0 that can be found in the
# LICENSE file in the root directory of this source tree.

import("//${lynx_dir}/build_overrides/darwin.gni")

import("//${lynx_dir}/build_overrides/core.gni")

# Do not include this file directly, include //core/Lynx.gni instead
#
import("../config.gni")
import("../oliver/oliver.gni")

# This target defines a source_set which contains some common configs and deps needed by
# all targets in the source tree of Lynx

quickjs_public_config =
    rebase_path("../third_party/quickjs:quickjs_public_config")
lynx_oliver_config = rebase_path("../oliver:lynx_oliver_config")
lynx_android_public_config =
    rebase_path("../platform/android/lynx_android:lynx_android_public_config")
lynx_unit_test_config = rebase_path("../testing:lynx_unit_test_config")
find_node_headers = rebase_path(":find_node_headers")
lynx_base_config = rebase_path("../base/src:base_public_config")

template("lynx_core_source_set") {
  source_set(target_name) {
    forward_variables_from(invoker,
                           "*",
                           [
                             "configs",
                             "public_configs",
                           ])

    if (defined(sources) && lynx_core_source_overrides != []) {
      original_sources = sources
      sources = []
      foreach(source, original_sources) {
        mapped_source = source
        foreach(source_override, lynx_core_source_overrides) {
          if (get_path_info(source, "abspath") == source_override.source) {
            mapped_source = source_override.replacement
          }
        }
        sources += [ mapped_source ]
      }
    }

    if (!defined(deps)) {
      deps = []
    }

    if (!defined(configs)) {
      configs = []
    }
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }

    if (!defined(public_configs)) {
      public_configs = []
    }
    if (defined(invoker.public_configs)) {
      public_configs += invoker.public_configs
    }
    public_configs += [
      "//${lynx_dir}/core:lynx_public_config",
      quickjs_public_config,
      lynx_base_config,
    ]

    if (enable_unittests) {
      configs += [ lynx_unit_test_config ]
    }

    if (is_oliver || is_encoder_ut) {
      configs += [ lynx_oliver_config ]
    } else if (is_android) {
      if (!defined(libs)) {
        libs = []
      }
      libs += [ "log" ]
      configs += [ lynx_android_public_config ]
    } else if (is_apple) {
      configs += darwin_config
    }

    if (is_oliver) {
      deps += [ find_node_headers ]
    }

    if (defined(exclude_configs)) {
      configs -= exclude_configs
    }

    if (defined(exclude_deps)) {
      deps -= exclude_deps
    }

    if (defined(exclude_public_configs)) {
      public_configs -= exclude_public_configs
    }
  }
}