chromium/ui/resources/BUILD.gn

# Copyright 2014 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/config/chromeos/ui_mode.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")
import("//ui/webui/webui_features.gni")

group("resources") {
  public_deps = [
    ":ui_resources_grd",
    ":ui_unscaled_resources_grd",
    ":webui_resources_grd",
  ]
}

grit("ui_resources_grd") {
  source = "ui_resources.grd"
  outputs = [
    "grit/ui_resources.h",
    "grit/ui_resources_map.cc",
    "grit/ui_resources_map.h",
    "ui_resources_100_percent.pak",
    "ui_resources_200_percent.pak",
    "ui_resources_300_percent.pak",
  ]
}

grit("ui_unscaled_resources_grd") {
  source = "ui_unscaled_resources.grd"
  outputs = [
    "grit/ui_unscaled_resources.h",
    "ui_unscaled_resources.rc",
  ]
}

grit("webui_resources_grd") {
  enable_input_discovery_for_gn_analyze = false
  source = "$root_gen_dir/ui/webui/resources/webui_resources.grd"
  deps = [ "//ui/webui/resources:build_grd" ]

  outputs = [
    "grit/webui_resources.h",
    "grit/webui_resources_map.cc",
    "grit/webui_resources_map.h",
    "webui_resources.pak",
  ]
}

if (!is_mac) {
  copy("copy_ui_resources_100_percent") {
    sources = [ "$root_gen_dir/ui/resources/ui_resources_100_percent.pak" ]
    outputs = [ "$root_out_dir/ui_resources_100_percent.pak" ]
    deps = [ "//ui/resources" ]
  }
}

# On iOS and Mac the string resources need to go into a locale subfolder, which
# introduces an extra dependency.
if (is_apple) {
  group("ui_test_pak") {
    public_deps = [
      ":repack_ui_test_mac_locale_pack",
      ":repack_ui_test_pak_100_percent",
    ]
  }

  # This needs to be a separate target from ui_test_pak as ui_base_unittests
  # wants the generate .pak file in the bundle to be named en.lpro/locale.pak
  # while components_unittests wants it to be named ui_test.pak.
  bundle_data("ui_test_pak_bundle_data_locale") {
    testonly = true
    visibility = [ ":ui_test_pak_bundle_data" ]
    public_deps = [ ":ui_test_pak" ]
    sources = [ "$root_out_dir/ui_test.pak" ]
    outputs = [ "{{bundle_resources_dir}}/en.lproj/locale.pak" ]
  }

  bundle_data("ui_test_pak_bundle_data_test_pak") {
    testonly = true
    visibility = [ ":ui_test_pak_bundle_data" ]
    public_deps = [ ":ui_test_pak" ]
    sources = [ "$root_out_dir/ui_test.pak" ]
    outputs = [ "{{bundle_resources_dir}}/ui_test.pak" ]
  }

  bundle_data("ui_test_pak_bundle_data_100_percent") {
    testonly = true
    visibility = [ ":ui_test_pak_bundle_data" ]
    public_deps = [ ":ui_test_pak" ]
    sources = [ "$root_out_dir/ui_test.pak" ]
    outputs = [ "{{bundle_resources_dir}}/chrome_100_percent.pak" ]
  }

  group("ui_test_pak_bundle_data") {
    testonly = true
    public_deps = [
      ":ui_test_pak_bundle_data_100_percent",
      ":ui_test_pak_bundle_data_locale",
      ":ui_test_pak_bundle_data_test_pak",
    ]
  }
} else {
  copy("ui_test_pak") {
    sources = [ "$root_out_dir/ui_test.pak" ]
    outputs = [ "$root_out_dir/ui/en-US.pak" ]
    public_deps = [ ":repack_ui_test_pak_100_percent" ]
  }
}

# This group exists just for targets that need the data file to exist in the
# build directory so it can be loaded for test purposes. If a target requires
# 200 percent resources it should also depend on ui_test_pak_data_200_percent.
group("ui_test_pak_data") {
  data_deps = [ ":repack_ui_test_pak_100_percent" ]
}

group("ui_test_pak_data_200_percent") {
  data_deps = [ ":repack_ui_test_pak_200_percent" ]
}

repack("repack_ui_test_pak_100_percent") {
  # Depend on ui_test_pak or ui_test_pak_data instead of this one.
  visibility = [
    ":ui_test_pak",
    ":ui_test_pak_data",
  ]

  sources = [
    "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
    "$root_gen_dir/ui/resources/ui_resources_100_percent.pak",
    "$root_gen_dir/ui/resources/webui_resources.pak",
    "$root_gen_dir/ui/strings/app_locale_settings_en-US.pak",
    "$root_gen_dir/ui/strings/ax_strings_en-US.pak",
    "$root_gen_dir/ui/strings/ui_strings_en-US.pak",
  ]

  output = "$root_out_dir/ui_test.pak"

  deps = [
    "//mojo/public/js:resources",
    "//ui/resources",
    "//ui/strings",
  ]

  if (!is_ios) {
    deps += [ "//third_party/blink/public:resources_grit" ]
  }

  if (!is_mac) {
    deps += [ ":copy_ui_resources_100_percent" ]
  }

  if (is_chromeos) {
    sources +=
        [ "$root_gen_dir/ui/chromeos/strings/ui_chromeos_strings_en-US.pak" ]
    deps += [ "//ui/chromeos/strings" ]
  }

  if (is_chromeos_ash) {
    sources += [ "$root_gen_dir/ui/chromeos/resources/ui_chromeos_resources_100_percent.pak" ]
    deps += [ "//ui/chromeos/resources" ]
  }

  if (toolkit_views) {
    deps += [ "//ui/views/resources" ]
    sources += [
      "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
      "$root_gen_dir/ui/views/resources/views_resources_100_percent.pak",
    ]
  }
}

repack("repack_ui_test_pak_200_percent") {
  visibility = [ ":ui_test_pak_data_200_percent" ]

  sources = [ "$root_gen_dir/ui/resources/ui_resources_200_percent.pak" ]

  output = "$root_out_dir/ui_test_200_percent.pak"

  deps = [ "//ui/resources" ]

  if (toolkit_views) {
    deps += [ "//ui/views/resources" ]
    sources +=
        [ "$root_gen_dir/ui/views/resources/views_resources_200_percent.pak" ]
  }
}

# Repack just the strings for the framework locales on Mac and iOS. This
# emulates repack_locales(), but just for en-US. Note ui_test.pak is not simply
# copied, because it causes leaks from allocations within system libraries when
# trying to load non-string resources. http://crbug.com/413034.
repack("repack_ui_test_mac_locale_pack") {
  visibility = [ ":ui_test_pak" ]

  sources = [
    "$root_gen_dir/ui/strings/app_locale_settings_en-US.pak",
    "$root_gen_dir/ui/strings/ax_strings_en-US.pak",
    "$root_gen_dir/ui/strings/ui_strings_en-US.pak",
  ]

  output = "$root_out_dir/ui/en.lproj/locale.pak"

  deps = [ "//ui/strings" ]
}