# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/buildflag_header.gni")
import("//build/config/cast.gni")
import("//build/config/chrome_build.gni")
import("//build/config/chromeos/args.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/features.gni")
import("//build/util/process_version.gni")
import("//build_overrides/build.gni")

if (is_ios) {
  import("//build/config/ios/ios_sdk.gni")
}

source_set("buildflag_header_h") {
  sources = [ "buildflag.h" ]
}

buildflag_header("branding_buildflags") {
  header = "branding_buildflags.h"

  if (is_chrome_branded) {
    flags = [
      "CHROMIUM_BRANDING=0",
      "GOOGLE_CHROME_BRANDING=1",
    ]
  } else {
    flags = [
      "CHROMIUM_BRANDING=1",
      "GOOGLE_CHROME_BRANDING=0",
    ]
  }

  if (is_chrome_for_testing) {
    assert(!is_chrome_branded,
           "`is_chrome_for_testing` is incompatible with `is_chrome_branded`")

    flags += [ "CHROME_FOR_TESTING=1" ]
  } else {
    flags += [ "CHROME_FOR_TESTING=0" ]
  }

  # Note: `GOOGLE_CHROME_FOR_TESTING_BRANDING` and `CHROMIUM_BRANDING` are not
  # mutually exclusive.
  if (is_chrome_for_testing_branded) {
    assert(is_chrome_for_testing,
           "`is_chrome_for_testing_branded` requires `is_chrome_for_testing`")

    flags += [ "GOOGLE_CHROME_FOR_TESTING_BRANDING=1" ]
  } else {
    flags += [ "GOOGLE_CHROME_FOR_TESTING_BRANDING=0" ]
  }
}

buildflag_header("blink_buildflags") {
  header = "blink_buildflags.h"
  flags = [ "USE_BLINK=$use_blink" ]
}

buildflag_header("chromecast_buildflags") {
  header = "chromecast_buildflags.h"

  flags = [
    "IS_CASTOS=$is_castos",
    "IS_CAST_ANDROID=$is_cast_android",
    "ENABLE_CAST_RECEIVER=$enable_cast_receiver",
  ]
}

buildflag_header("chromeos_buildflags") {
  header = "chromeos_buildflags.h"

  flags = [
    "IS_CHROMEOS_DEVICE=$is_chromeos_device",

    "IS_CHROMEOS_LACROS=$is_chromeos_lacros",
    "IS_CHROMEOS_ASH=$is_chromeos_ash",
    "IS_CHROMEOS_WITH_HW_DETAILS=$is_chromeos_with_hw_details",
    "IS_REVEN=$is_reven",
  ]
}

buildflag_header("robolectric_buildflags") {
  header = "robolectric_buildflags.h"
  flags = [ "IS_ROBOLECTRIC=$is_robolectric" ]
}

buildflag_header("ios_buildflags") {
  header = "ios_buildflags.h"
  _is_ios_app_extension = is_ios && ios_is_app_extension
  flags = [ "IS_IOS_APP_EXTENSION=$_is_ios_app_extension" ]
}

if (build_with_chromium) {
  group("gold_common_pytype") {
    testonly = true

    data = [ "//build/skia_gold_common/" ]

    data_deps = [ "//testing:pytype_dependencies" ]
  }
}

if (is_chromeos) {
  process_version("version_metadata") {
    sources = [ "//chrome/VERSION" ]

    template_file = "metadata.json.in"
    output = "$root_out_dir/metadata.json"
    process_only = true
  }
}
