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

import("//build/config/chrome_build.gni")
import("//build/config/features.gni")
import("//build/config/locales.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build/config/win/manifest.gni")
import("//chrome/chrome_repack_locales.gni")
import("//chrome/version.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
}

if (is_win) {
  action("reorder_imports") {
    script = "//build/win/reorder-imports.py"

    # See comment in chrome_dll.gypi in the hardlink_to_output
    # target for why this cannot be 'initial' like the DLL.
    inputs = [
      "$root_out_dir/initialexe/chrome.exe",
    ]
    outputs = [
      "$root_out_dir/chrome.exe",
      "$root_out_dir/chrome.exe.pdb",
    ]
    args = [
      "-i",
      rebase_path("$root_out_dir/initialexe", root_build_dir),
      "-o",
      rebase_path("$root_out_dir", root_build_dir),
      "-a",
      target_cpu,
    ]
    deps = [
      ":chrome_initial",
    ]
  }
}

if (!is_android) {
  group("chrome") {
    public_deps = [
      ":chrome_initial",
    ]
    if (is_win) {
      public_deps += [ ":reorder_imports" ]
    }
  }

  executable("chrome_initial") {
    if (is_win) {
      output_name = "initialexe/chrome"
    } else {
      output_name = "chrome"
    }

    # Because the sources list varies so significantly per-platform, generally
    # each platform lists its own files rather than relying on filtering or
    # removing unused files.
    sources = [
      "app/chrome_exe_resource.h",
    ]
    defines = []
    public_deps = []
    deps = [
      "//build/config/sanitizers:deps",
    ]

    data = [
      "$root_out_dir/resources.pak",
    ]
    if (is_linux || is_win) {
      data += [
        "$root_out_dir/chrome_100_percent.pak",
        "$root_out_dir/locales/en-US.pak",
        "$root_out_dir/locales/fr.pak",
      ]
    }
    if (enable_nacl) {
      if (is_win || (is_linux && target_cpu == "x64")) {
        data += [
          # TODO(GYP): Enable this when the IRT is in the right location.
          # "$root_out_dir/nacl_irt_x86_64.nexe"
        ]
      } else if (is_linux && target_cpu == "arm") {
        data += [
          # TODO(GYP): same comment
          # "$root_out_dir/nacl_irt_arm.nexe"
        ]
      }
    }

    data_deps = []

    # TODO(GYP) mac_bundle_resources, xcode_settings

    if (is_win) {
      sources += [
        "//content/public/common/content_switches.cc",
        "//content/public/common/content_switches.h",
        "app/chrome_crash_reporter_client.cc",
        "app/chrome_crash_reporter_client.h",
        "app/chrome_exe.rc",
        "app/chrome_exe_load_config_win.cc",
        "app/chrome_exe_main_win.cc",
        "app/chrome_watcher_client_win.cc",
        "app/chrome_watcher_client_win.h",
        "app/chrome_watcher_command_line_win.cc",
        "app/chrome_watcher_command_line_win.h",
        "app/client_util.cc",
        "app/client_util.h",
        "app/kasko_client.cc",
        "app/kasko_client.h",
        "app/signature_validator_win.cc",
        "app/signature_validator_win.h",
        "common/crash_keys.cc",
        "common/crash_keys.h",
      ]

      if (is_component_build) {
        # This is necessary to make content_switches compile without DLL
        # linkage errors in a component build.
        defines += [ "COMPILE_CONTENT_STATICALLY" ]
      }

      deps += [
        ":chrome_exe_version",
        ":image_pre_reader",
        ":main_dll",

        # 'chrome_nacl_win64" TODO(GYP) bug 512869
        # '../win8/delegate_execute/delegate_execute.gyp:*', TODO(GYP) bug 512867
        # '../win8/metro_driver/metro_driver.gyp:metro_driver', TODO(GYP) bug 512864
        "//base",
        "//breakpad:breakpad_handler",
        "//breakpad:breakpad_sender",
        "//chrome/app/version_assembly:chrome_exe_manifest",
        "//chrome/browser:chrome_process_finder",
        "//chrome/chrome_watcher",
        "//chrome/chrome_watcher:client",
        "//chrome/installer/util",
        "//chrome_elf",
        "//components/browser_watcher:browser_watcher_client",
        "//components/crash/content/app",
        "//components/crash/core/common",
        "//content:startup_helper_win",
        "//crypto",
        "//sandbox",
        "//ui/gfx",
      ]
      data_deps = [
        "//chrome/app/version_assembly:version_assembly_manifest",
      ]

      libs = [
        "wintrust.lib",
        "crypt32.lib",
      ]
      if (!is_asan) {
        # Set /SUBSYSTEM:WINDOWS for chrome.exe itself, except for the
        # AddressSanitizer build where console output is important.
        configs -= [ "//build/config/win:console" ]
        configs += [ "//build/config/win:windowed" ]
      }
    } else if (use_aura) {
      # Non-Windows aura entrypoint.
      sources += [ "app/chrome_exe_main_aura.cc" ]
    }

    if (is_linux) {
      sources += [
        "app/chrome_dll_resource.h",
        "app/chrome_main.cc",
        "app/chrome_main_delegate.cc",
        "app/chrome_main_delegate.h",
      ]

      deps += [
        # On Linux, link the dependencies (libraries) that make up actual
        # Chromium functionality directly into the executable.
        ":browser_dependencies",
        ":child_dependencies",
        ":manpage",
        "//base/allocator",

        # Needed to use the master_preferences functions
        "//chrome/installer/util",
        "//content/public/app:both",
      ]
      if (enable_plugins) {
        deps += [ "//pdf" ]
      }

      public_deps = [
        ":xdg_mime",  # Needs to be public for installer to consume files.
      ]

      # Needed for chrome_main.cc initialization of libraries.
      configs += [ "//build/config/linux:pangocairo" ]

      # GYP has this in a 'profiling==0 and linux_disable_pie==0' condition.
      # but GN doesn't have either of these flags.
      ldflags = [ "-pie" ]

      if (use_x11) {
        configs += [
          "//build/config/linux:x11",
          "//build/config/linux:xext",
        ]
      }
    }

    if (is_mac) {
      sources += [ "app/chrome_exe_main_mac.cc" ]
      # TODO(GYP) lots more stuff in the is_mac block.
    } else {  # Non-Mac.
      # These files are used by the installer so we need a public dep.
      public_deps += [
        ":packed_extra_resources",
        ":packed_resources",
      ]
      deps += [
        "//components/startup_metric_utils",

        # Precompiled plugins that need to get copied to the output directory.
        # On Mac, internal plugins go inside the framework, so these
        # dependencies are on chrome.dll.
        "//third_party/adobe/flash:flapper_binaries",
        "//third_party/widevine/cdm:widevinecdmadapter",
      ]
    }

    if (is_multi_dll_chrome) {
      defines += [ "CHROME_MULTIPLE_DLL" ]
      data_deps += [ ":chrome_child" ]
    }
  }
}  # !is_android

shared_library("main_dll") {
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = []

  deps = [
    ":browser_dependencies",
    "//base/allocator",
    "//build/config/sanitizers:deps",
  ]
  if (is_win) {
    output_name = "chrome"

    sources = [
      "//base/win/dllmain.cc",
      "app/chrome_command_ids.h",
      "app/chrome_dll.rc",
      "app/chrome_dll_resource.h",
      "app/chrome_main.cc",
      "app/chrome_main_delegate.cc",
      "app/chrome_main_delegate.h",
      "app/close_handle_hook_win.cc",
      "app/close_handle_hook_win.h",
      "app/delay_load_hook_win.cc",
      "app/delay_load_hook_win.h",
    ]

    deps += [
      ":chrome_dll_manifest",
      ":chrome_dll_version",
      "//base/trace_event/etw_manifest:chrome_events_win",
      "//chrome/app/theme:chrome_unscaled_resources",
      "//chrome_elf",
      "//content/app/resources",
      "//crypto",
      "//net:net_resources",
      "//third_party/wtl",
      "//ui/views",
    ]
    if (enable_configuration_policy) {
      deps += [ "//components/policy" ]
    }
    if (current_cpu == "x86") {
      # TODO(GYP) bug 512861: Lots of VCLinkerTool stuff on Windows.
      #deps += [ 'chrome_user32_delay_imports' ]  TODO(GYP)
    }

    # This is a large module that can't do incremental linking in some cases.
    configs -= [ "//build/config/win:default_incremental_linking" ]
    configs += [ "//build/config/win:default_large_module_incremental_linking" ]

    # TODO(GYP) bug 512851: PGO.
  }

  if (use_aura) {
    deps += [ "//ui/compositor" ]
  }

  if (is_multi_dll_chrome) {
    defines += [ "CHROME_MULTIPLE_DLL_BROWSER" ]
    deps += [ "//content/public/app:browser" ]
  } else {
    deps += [
      ":child_dependencies",
      "//content/public/app:both",
    ]
  }

  if (cld_version == 2) {
    deps += [ "//third_party/cld_2" ]
  }

  if (is_mac) {
    #['OS=="mac" and component!="shared_library"', {  TODO(GYP)
    #  'includes': [ 'chrome_dll_bundle.gypi' ],
    #}],
    # TODO(GYP) Lots of other stuff in the OS=="mac" block.
  }

  if (enable_plugins && !is_multi_dll_chrome) {
    deps += [ "//pdf" ]
  }
}

if (is_multi_dll_chrome) {
  # This manifest matches what GYP produces. It may not even be necessary.
  windows_manifest("chrome_child_manifest") {
    sources = [
      as_invoker_manifest,
    ]
    type = "dll"
  }

  shared_library("chrome_child") {
    sources = [
      "app/chrome_main.cc",
      "app/chrome_main_delegate.cc",
      "app/chrome_main_delegate.h",
      "app/close_handle_hook_win.cc",
      "app/close_handle_hook_win.h",
    ]

    configs += [ "//build/config/compiler:wexit_time_destructors" ]
    defines = [ "CHROME_MULTIPLE_DLL_CHILD" ]

    deps = [
      ":child_dependencies",
      ":chrome_child_manifest",
      ":chrome_dll_version",
      "//base/allocator",
      "//build/config/sanitizers:deps",
      "//chrome/browser/policy:path_parser",
      "//content/public/app:child",
    ]

    if (is_win) {
      # TODO(GYP) bug 512851: PGO on Windows.
      # ['chrome_pgo_phase==1', {
      #   'msvs_settings': {
      #     'VCLinkerTool': {
      #       'LinkTimeCodeGeneration': '2',
      #     },
      #   },
      # }],
      # ['chrome_pgo_phase==2', {
      #   'msvs_settings': {
      #     'VCLinkerTool': {
      #       'LinkTimeCodeGeneration': '3',
      #     },
      #   },
      # }],
    }
    if (enable_plugins) {
      deps += [ "//pdf" ]
    }
  }
}

# GYP version: chromium_browser_dependencies variable in chrome.gyp
group("browser_dependencies") {
  public_deps = [
    "//chrome/browser",
    "//chrome/common",
    "//sync",
  ]
  if (!is_ios) {
    public_deps += [ "//ppapi/host" ]
  }

  if (enable_basic_printing || enable_print_preview) {
    public_deps += [ "//printing" ]
    if (enable_print_preview) {
      public_deps += [ "//chrome/service" ]
    }
  }
}

# GYP version: chromium_child_dependencies variable in chrome.gyp
group("child_dependencies") {
  public_deps = [
    "//chrome/common",
    "//sync",
  ]
  if (!is_ios) {
    public_deps += [
      "//chrome/browser/devtools",
      "//chrome/child",
      "//chrome/plugin",
      "//chrome/renderer",
      "//chrome/utility",
      "//content/public/child",
      "//third_party/WebKit/public:blink_devtools_frontend_resources",
    ]
  }
  if (cld_version == 2) {
    public_deps += [ "//third_party/cld_2:cld2_platform_impl" ]
  }

  if (enable_nacl) {
    public_deps += [ "//components/nacl/renderer/plugin:nacl_trusted_plugin" ]
  }
}

if (is_win) {
  # TODO(brettw) this duplicates "//chrome/common:version" which applies to
  # Linux.
  process_version("version_header") {
    # TODO(brettW) this should have more reduced visibility, but chrome/browser
    # currently depends on this.
    #visibility = [ ":*" ]

    # This one just uses the custom template and no separate sources.
    sources = []
    template_file = "version.h.in"

    # TODO(brettw) this should move to $target_gen_dir/version.h and
    # source files including it should reference it via "chrome/version.h"
    output = "$root_gen_dir/version.h"
  }

  process_version("chrome_exe_version") {
    template_file = chrome_version_rc_template
    sources = [
      "app/chrome_exe.ver",
    ]
    output = "$target_gen_dir/chrome_exe_version.rc"
  }

  process_version("chrome_dll_version") {
    template_file = chrome_version_rc_template
    sources = [
      "app/chrome_dll.ver",
    ]
    output = "$target_gen_dir/chrome_dll_version.rc"
  }

  # This manifest matches what GYP produces. It may not even be necessary.
  windows_manifest("chrome_dll_manifest") {
    sources = [
      as_invoker_manifest,
      common_controls_manifest,
    ]
    type = "dll"
  }

  process_version("nacl64_exe_version") {
    template_file = chrome_version_rc_template
    sources = [
      "app/nacl64_exe.ver",
    ]
    output = "$target_gen_dir/nacl64_exe_version.rc"
  }

  process_version("other_version") {
    template_file = chrome_version_rc_template
    sources = [
      "app/other.ver",
    ]
    output = "$target_gen_dir/other_version.rc"
  }

  source_set("image_pre_reader") {
    sources = [
      "app/image_pre_reader_win.cc",
      "app/image_pre_reader_win.h",
    ]
    deps = [
      "//base",
    ]
  }
}

# GYP version: chrome/chrome_resources.gyp:chrome_resources
group("resources") {
  public_deps = [
    # Note: GYP lists some dependencies in addition to these actions. However,
    # these are just dependencies for the actions themselves, which our actions
    # list individually when needed.
    "//chrome/browser:resources",
    "//chrome/common:resources",
    "//chrome/renderer:resources",
  ]

  if (enable_extensions) {
    public_deps += [ "//chrome/common:extensions_api_resources" ]
  }
}

# GYP version: chrome/chrome_resources.gyp:chrome_extra_resources
group("extra_resources") {
  public_deps = [
    "//chrome/browser/resources:invalidations_resources",
    "//chrome/browser/resources:memory_internals_resources",
    "//chrome/browser/resources:net_internals_resources",
    "//chrome/browser/resources:password_manager_internals_resources",
    "//chrome/browser/resources:signin_internals_resources",
    "//chrome/browser/resources:translate_internals_resources",
  ]
  if (!is_ios) {
    public_deps += [
      "//chrome/browser/resources:component_extension_resources",
      "//chrome/browser/resources:options_resources",
      "//chrome/browser/resources:settings_resources",
    ]
  }

  if (is_chromeos) {
    public_deps += [ "//chrome/browser/resources/chromeos/chromevox" ]
  }

  if (enable_extensions) {
    public_deps += [
      "//chrome/browser/resources:quota_internals_resources",
      "//chrome/browser/resources:sync_file_system_internals_resources",
    ]
  }
}

if (is_chrome_branded) {
  copy("default_apps") {
    visibility = [ ":packed_resources" ]
    sources = [
      "browser/resources/default_apps/docs.crx",
      "browser/resources/default_apps/drive.crx",
      "browser/resources/default_apps/external_extensions.json",
      "browser/resources/default_apps/gmail.crx",
      "browser/resources/default_apps/search.crx",
      "browser/resources/default_apps/youtube.crx",
    ]
    outputs = [
      "$root_out_dir/default_apps/{{source_file_part}}",
    ]

    # Force anybody that depends on this to get the default apps as data files.
    data = process_file_template(sources, outputs)
  }
}

group("packed_resources") {
  public_deps = [
    ":repack_locales_pack",
    ":repack_pseudo_locales_pack",
    ":repack_chrome_100_percent",
  ]

  if (is_chrome_branded) {
    public_deps += [ ":default_apps" ]
  }

  if (enable_hidpi) {
    public_deps += [ ":repack_chrome_200_percent" ]
  }

  if (enable_topchrome_md) {
    public_deps += [ ":repack_chrome_material_100_percent" ]

    if (enable_hidpi) {
      public_deps += [ ":repack_chrome_material_200_percent" ]
    }
  }
}

repack("packed_extra_resources") {
  visibility = [ "./*" ]
  sources = [
    "$root_gen_dir/chrome/browser_resources.pak",
    "$root_gen_dir/chrome/chrome_unscaled_resources.pak",
    "$root_gen_dir/chrome/common_resources.pak",
    "$root_gen_dir/chrome/invalidations_resources.pak",
    "$root_gen_dir/chrome/memory_internals_resources.pak",
    "$root_gen_dir/chrome/net_internals_resources.pak",
    "$root_gen_dir/chrome/password_manager_internals_resources.pak",
    "$root_gen_dir/chrome/signin_internals_resources.pak",
    "$root_gen_dir/chrome/translate_internals_resources.pak",
    "$root_gen_dir/components/components_resources.pak",
    "$root_gen_dir/net/net_resources.pak",
    "$root_gen_dir/ui/resources/webui_resources.pak",
  ]
  deps = [
    "//chrome/browser:resources",
    "//chrome/app/theme:chrome_unscaled_resources",
    "//chrome/common:resources",
    "//chrome/browser/resources:invalidations_resources",
    "//chrome/browser/resources:memory_internals_resources",
    "//chrome/browser/resources:net_internals_resources",
    "//chrome/browser/resources:password_manager_internals_resources",
    "//chrome/browser/resources:signin_internals_resources",
    "//chrome/browser/resources:translate_internals_resources",
    "//components/resources",
    "//net:net_resources",
    "//ui/resources",
  ]

  if (!is_ios && !is_android) {
    # New paks should be added here by default.
    sources += [
      "$root_gen_dir/blink/devtools_resources.pak",
      "$root_gen_dir/chrome/component_extension_resources.pak",
      "$root_gen_dir/chrome/options_resources.pak",
      "$root_gen_dir/chrome/quota_internals_resources.pak",
      "$root_gen_dir/chrome/settings_resources.pak",
      "$root_gen_dir/chrome/sync_file_system_internals_resources.pak",
      "$root_gen_dir/chrome/webrtc_device_provider_resources.pak",
    ]
    deps += [
      "//chrome/browser/devtools:webrtc_device_provider_resources",
      "//chrome/browser/resources:component_extension_resources",
      "//chrome/browser/resources:options_resources",
      "//chrome/browser/resources:settings_resources",
      "//chrome/browser/resources:quota_internals_resources",
      "//chrome/browser/resources:sync_file_system_internals_resources",
      "//content/browser/devtools:devtools_resources",
    ]
  }
  if (!is_ios) {
    sources += [
      "$root_gen_dir/blink/public/resources/blink_resources.pak",
      "$root_gen_dir/content/browser/tracing/tracing_resources.pak",
      "$root_gen_dir/content/content_resources.pak",
    ]
    deps += [
      "//content:resources",
      "//content/browser/tracing:resources",
      "//third_party/WebKit/public:resources",
    ]
  }
  if (is_chromeos) {
    sources += [ "$root_gen_dir/ui/file_manager/file_manager_resources.pak" ]
    deps += [ "//ui/file_manager:resources" ]
  }
  if (enable_extensions) {
    sources += [
      "$root_gen_dir/chrome/extensions_api_resources.pak",
      "$root_gen_dir/extensions/extensions_renderer_resources.pak",
      "$root_gen_dir/extensions/extensions_resources.pak",
    ]
    deps += [
      "//chrome/common:extensions_api_resources",
      "//extensions:extensions_resources",
    ]
  }

  # GYP outputs the file in the gen/repack directory. On non-Mac/iOS platforms
  # it them copies it. This skipes the copy step and writes it to the final
  # location.
  if (is_mac || is_ios) {
    output = "$root_gen_dir/repack/resources.pak"
  } else {
    output = "$root_out_dir/resources.pak"
  }
}

# GYP version: chrome/chrome_resources.gyp:browser_tests_pak
repack("browser_tests_pak") {
  sources = [
    "$root_gen_dir/chrome/options_test_resources.pak",
    "$root_gen_dir/chrome/webui_test_resources.pak",
  ]
  output = "$root_out_dir/browser_tests.pak"
  deps = [
    "//chrome/browser/resources:options_test_resources",
    "//chrome/test/data:webui_test_resources",
  ]
}

# Collects per-locale grit files from many sources into global per-locale files.
chrome_repack_locales("repack_locales_pack") {
  visibility = [ ":*" ]

  input_locales = locales

  if (is_mac) {
    output_locales = locales_as_mac_outputs
  } else {
    output_locales = locales
  }
}

chrome_repack_locales("repack_pseudo_locales_pack") {
  visibility = [ ":*" ]

  input_locales = [ "fake-bidi" ]

  if (is_mac) {
    output_locales = [ "fake_bidi" ]  # Mac uses underscores.
  } else {
    output_locales = [ "fake-bidi" ]
  }
}

# Generates a rule to repack a set of resources, substituting a given string
# in for the percentage (e.g. "100", "200"). It generates the repacked files in
# the "gen" directory, and then introduces a copy rule to copy it to the root
# build directory.
#
# It's not clear why this two-step dance is necessary as opposed to just
# generating the file in the destination. However, this is what the GYP build
# does, and for maintenance purposes, this keeps the same files in the same
# place between the two builds when possible.
#
# Argument:
#   percent [required]
#      String to substitute for the percentage.
template("chrome_repack_percent") {
  percent = invoker.percent

  repack_name = "${target_name}_repack"
  repack_output_file = "$root_gen_dir/repack/chrome_${percent}_percent.pak"

  copy_name = target_name

  repack(repack_name) {
    visibility = [ ":$copy_name" ]

    # All sources should also have deps for completeness.
    sources = [
      "$root_gen_dir/chrome/renderer_resources_${percent}_percent.pak",
      "$root_gen_dir/chrome/theme_resources_${percent}_percent.pak",
      "$root_gen_dir/components/components_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/resources/ui_resources_${percent}_percent.pak",
    ]

    deps = [
      "//chrome/app/theme:theme_resources",
      "//chrome/renderer:resources",
      "//components/resources",
      "//components/strings",
      "//net:net_resources",
      "//ui/resources",
    ]

    if (!is_ios) {
      sources += [
        "$root_gen_dir/blink/public/resources/blink_image_resources_${percent}_percent.pak",
        "$root_gen_dir/content/app/resources/content_resources_${percent}_percent.pak",
      ]
      deps += [
        "//content/app/resources",
        "//third_party/WebKit/public:image_resources",
      ]
    }
    if (use_ash) {
      sources +=
          [ "$root_gen_dir/ash/resources/ash_resources_${percent}_percent.pak" ]
      deps += [ "//ash/resources" ]
    }
    if (toolkit_views) {
      sources += [ "$root_gen_dir/ui/views/resources/views_resources_${percent}_percent.pak" ]
      deps += [ "//ui/views/resources" ]
    }
    if (is_chromeos) {
      sources += [ "$root_gen_dir/ui/chromeos/resources/ui_chromeos_resources_${percent}_percent.pak" ]
      deps += [ "//ui/chromeos/resources" ]
    }
    if (enable_extensions) {
      sources += [ "$root_gen_dir/extensions/extensions_browser_resources_${percent}_percent.pak" ]
      deps += [ "//extensions:extensions_browser_resources" ]
    }
    if (enable_app_list) {
      sources += [ "$root_gen_dir/ui/app_list/resources/app_list_resources_${percent}_percent.pak" ]
      deps += [ "//ui/app_list/resources" ]
    }

    output = repack_output_file
  }

  copy(copy_name) {
    visibility = [ ":*" ]
    deps = [
      ":$repack_name",
    ]
    sources = [
      repack_output_file,
    ]
    outputs = [
      "$root_build_dir/chrome_${percent}_percent.pak",
    ]
  }
}

chrome_repack_percent("repack_chrome_100_percent") {
  percent = "100"
}

if (enable_hidpi) {
  chrome_repack_percent("repack_chrome_200_percent") {
    percent = "200"
  }
}

# Generates a rule to repack a set of material design resources for the browser
# top chrome, substituting a given string in for the percentage (e.g. "100",
# "200").
template("chrome_repack_material_percent") {
  percent = invoker.percent

  repack_name = "${target_name}_repack"
  repack_output_file =
      "$root_gen_dir/repack/chrome_material_${percent}_percent.pak"

  copy_name = target_name

  repack(repack_name) {
    visibility = [ ":$copy_name" ]

    # All sources should also have deps for completeness.
    sources = [
      "$root_gen_dir/chrome/theme_resources_material_${percent}_percent.pak",
      "$root_gen_dir/components/components_resources_material_${percent}_percent.pak",
    ]

    deps = [
      "//chrome/app/theme:theme_resources",
      "//components/resources",
    ]

    output = repack_output_file
  }

  copy(copy_name) {
    visibility = [ ":*" ]
    deps = [
      ":$repack_name",
    ]
    sources = [
      repack_output_file,
    ]
    outputs = [
      "$root_build_dir/chrome_material_${percent}_percent.pak",
    ]
  }
}

if (enable_topchrome_md) {
  chrome_repack_material_percent("repack_chrome_material_100_percent") {
    percent = "100"
  }

  if (enable_hidpi) {
    chrome_repack_material_percent("repack_chrome_material_200_percent") {
      percent = "200"
    }
  }
}

# GYP version: chrome/chrome_resources.gyp:chrome_strings
group("strings") {
  deps = [
    "//chrome/app:chromium_strings",
    "//chrome/app:generated_resources",
    "//chrome/app:google_chrome_strings",
    "//chrome/app:settings_strings",
    "//chrome/app/resources:locale_settings",
  ]
}

if (is_android) {
  # GYP: //chrome/chrome.gyp:content_setting_java
  java_cpp_enum("content_setting_javagen") {
    sources = [
      "../components/content_settings/core/common/content_settings.h",
    ]
    outputs = [
      "org/chromium/chrome/browser/ContentSetting.java",
    ]
  }

  # GYP: //chrome/chrome.gyp:content_settings_type_java
  java_cpp_enum("content_settings_type_javagen") {
    sources = [
      "../components/content_settings/core/common/content_settings_types.h",
    ]
    outputs = [
      "org/chromium/chrome/browser/ContentSettingsType.java",
    ]
  }

  # GYP: //chrome/chrome.gyp:page_info_connection_type_java
  java_cpp_enum("page_info_connection_type_javagen") {
    sources = [
      "browser/ui/android/website_settings_popup_android.h",
    ]
    outputs = [
      "org/chromium/chrome/browser/PageInfoConnectionType.java",
    ]
  }

  # GYP: //chrome/chrome_android.gypi:chrome_android_core
  static_library("chrome_android_core") {
    sources = [
      "app/android/chrome_android_initializer.cc",
      "app/android/chrome_android_initializer.h",
      "app/android/chrome_jni_onload.cc",
      "app/android/chrome_jni_onload.h",
      "app/android/chrome_main_delegate_android.cc",
      "app/android/chrome_main_delegate_android.h",
      "app/chrome_main_delegate.cc",
      "app/chrome_main_delegate.h",
    ]

    include_dirs = [ android_ndk_include_dir ]

    libs = [
      "android",
      "jnigraphics",
    ]

    deps = [
      "//chrome/browser",
      "//chrome/browser/ui",
      "//chrome/child",
      "//chrome/plugin",
      "//chrome/renderer",
      "//chrome/utility",
      "//components/enhanced_bookmarks",
      "//content/public/app:both",
    ]
  }
}

if (is_linux) {
  action("manpage") {
    if (is_chrome_branded) {
      name = "Google Chrome"
      filename = "google-chrome"
      confdir = "google-chrome"
    } else {
      name = "Chromium"
      filename = "chromium-browser"
      confdir = "chromium"
    }

    script = "//chrome/tools/build/linux/sed.py"
    infile = "app/resources/manpage.1.in"
    inputs = [
      infile,
    ]

    outfile = "$root_out_dir/chrome.1"
    outputs = [
      outfile,
    ]

    args = [
      rebase_path(infile, root_build_dir),
      rebase_path(outfile, root_build_dir),
      "-e s/@@NAME@@/$name/",
      "-e s/@@FILENAME@@/$filename/",
      "-e s/@@CONFDIR@@/$confdir/",
    ]
  }

  action("linux_symbols") {
    script = "//build/linux/dump_app_syms.py"

    dump_syms_label = "//breakpad:dump_syms($host_toolchain)"
    dump_syms_binary =
        get_label_info(dump_syms_label, "root_out_dir") + "/" + "dump_syms"

    chrome_binary = "$root_out_dir/chrome"
    if (current_cpu == "x86") {
      # Use "ia32" instead of "x86" for GYP compat.
      symbol_file = "$root_out_dir/chrome.breakpad.ia32"
    } else {
      symbol_file = "$root_out_dir/chrome.breakpad.$current_cpu"
    }

    inputs = [
      chrome_binary,
      dump_syms_binary,
    ]
    outputs = [
      symbol_file,
    ]

    args = [
      "./" + rebase_path(dump_syms_binary, root_build_dir),
      "0",  # TODO(GYP) This is linux_strip_binary if it is needed.
      rebase_path(chrome_binary, root_build_dir),
      rebase_path(symbol_file, root_build_dir),
    ]

    deps = [
      ":chrome",
      dump_syms_label,
    ]
  }

  # Copies some scripts and resources that are used for desktop integration.
  copy("xdg_mime") {
    sources = [
      "//chrome/app/theme/$branding_path_component/product_logo_48.png",
      "//chrome/tools/build/linux/chrome-wrapper",
      "//third_party/xdg-utils/scripts/xdg-mime",
      "//third_party/xdg-utils/scripts/xdg-settings",
    ]
    outputs = [
      "$root_out_dir/{{source_file_part}}",
    ]
  }
}
