chromium/chromeos/ash/components/emoji/BUILD.gn

# Copyright 2023 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("//mojo/public/tools/bindings/mojom.gni")
import("//tools/grit/grit_rule.gni")

assert(is_chromeos_ash, "Non-Chrome-OS builds must not depend on //ash")

mojom("mojo_bindings") {
  sources = [ "emoji_search.mojom" ]
  public_deps = [ "//mojo/public/mojom/base" ]
  webui_module_path = "/"
}

source_set("unit_tests") {
  testonly = true
  deps = [
    ":emoji",
    ":resources",
    "//base/test:test_support",
    "//build:branding_buildflags",
    "//testing/gtest",
    "//ui/base:test_support",
  ]
  sources = [ "emoji_search_unittest.cc" ]
}

action_foreach("emoji_data") {
  script = "tools/emoji_data.py"

  metadata_json = [
    "//third_party/emoji-metadata/src/emoji_15_0_ordering.json",
    "./emoji_test_ordering.json",
  ]
  keyword_xmls = [
    # later keywords will override earlier keywords for a particular emoji.
    "//third_party/cldr/src/common/annotations/en.xml",
    "//third_party/cldr/src/common/annotations/en_001.xml",
    "//third_party/cldr/src/common/annotationsDerived/en.xml",
    "//third_party/cldr/src/common/annotationsDerived/en_001.xml",
  ]
  merged_json = "$target_gen_dir/{{source_name_part}}_start.json"

  sources = metadata_json
  inputs = keyword_xmls
  outputs = [ merged_json ]
  args = [
           "--firstgroup",
           "True",
           "--metadata",
           "{{source}}",
           "--output",
           rebase_path(merged_json, root_build_dir),
           "--keywords",
         ] + rebase_path(keyword_xmls, root_build_dir)
}

action_foreach("emoji_data_remaining") {
  script = "tools/emoji_data.py"

  metadata_json = [
    "//third_party/emoji-metadata/src/emoji_15_0_ordering.json",
    "./emoji_test_ordering.json",
  ]
  keyword_xmls = [
    # later keywords will override earlier keywords for a particular emoji.
    "//third_party/cldr/src/common/annotations/en.xml",
    "//third_party/cldr/src/common/annotations/en_001.xml",
    "//third_party/cldr/src/common/annotationsDerived/en.xml",
    "//third_party/cldr/src/common/annotationsDerived/en_001.xml",
  ]
  merged_json = "$target_gen_dir/{{source_name_part}}_remaining.json"

  sources = metadata_json
  inputs = keyword_xmls
  outputs = [ merged_json ]
  args = [
           "--firstgroup",
           "False",
           "--metadata",
           "{{source}}",
           "--output",
           rebase_path(merged_json, root_build_dir),
           "--keywords",
         ] + rebase_path(keyword_xmls, root_build_dir)
}

action_foreach("emoticon_data") {
  script = "tools/emoticon_data.py"
  merged_json = "$target_gen_dir/{{source_name_part}}.json"

  sources = [
    "./emoticon_test_ordering.json",
    "//third_party/emoji-metadata/src/emoticon_ordering.json",
  ]

  outputs = [ merged_json ]
  args = [
    "--metadata",
    "{{source}}",
    "--output",
    rebase_path(merged_json, root_build_dir),
  ]
}

action("symbol_data") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbol_ordering.json" ]

  deps = [
    ":emoji_data",
    ":emoji_data_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args +=
      [ "--filter-data-paths" ] +
      rebase_path(get_target_outputs(":emoji_data"), root_build_dir) +
      rebase_path(get_target_outputs(":emoji_data_remaining"), root_build_dir)
}

copy("symbol_test_data") {
  sources = [ "./symbol_test_ordering.json" ]
  outputs = [ "$target_gen_dir/symbol_test_ordering.json" ]
}

# I18n emoji data.
# TODO(b/346457889): Use a script to loop through languages.
# This is used to generate the emoji in a specific order
emoji_metadata = [ "//third_party/emoji-metadata/src/emoji_15_0_ordering.json" ]
emoji_script = "tools/emoji_data.py"

# German emoji keywords
de_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/de.xml",
  "//third_party/cldr/src/common/annotationsDerived/de.xml",
]

action("emoji_data_de") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_de_start.json" ]
  inputs = de_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_de_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_de_remaining.json" ]
  inputs = de_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_de") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_de.json" ]

  deps = [
    ":emoji_data_de",
    ":emoji_data_de_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_de"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_de_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(de_keyword_xmls, root_build_dir)
}

# Japanese keywords.
ja_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/ja.xml",
  "//third_party/cldr/src/common/annotationsDerived/ja.xml",
]

action("emoji_data_ja") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_ja_start.json" ]
  inputs = ja_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_ja_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_ja_remaining.json" ]
  inputs = ja_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_ja") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_ja.json" ]

  deps = [
    ":emoji_data_ja",
    ":emoji_data_ja_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_ja"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_ja_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(ja_keyword_xmls, root_build_dir)
}

# Spanish keywords.
es_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/es.xml",
  "//third_party/cldr/src/common/annotationsDerived/es.xml",
]

action("emoji_data_es") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_es_start.json" ]
  inputs = es_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_es_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_es_remaining.json" ]
  inputs = es_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_es") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_es.json" ]

  deps = [
    ":emoji_data_es",
    ":emoji_data_es_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_es"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_es_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(es_keyword_xmls, root_build_dir)
}

# Swedish keywords.
sv_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/sv.xml",
  "//third_party/cldr/src/common/annotationsDerived/sv.xml",
]

action("emoji_data_sv") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_sv_start.json" ]
  inputs = sv_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_sv_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_sv_remaining.json" ]
  inputs = sv_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_sv") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_sv.json" ]

  deps = [
    ":emoji_data_sv",
    ":emoji_data_sv_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_sv"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_sv_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(sv_keyword_xmls, root_build_dir)
}

# Norwegian keywords.
no_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/no.xml",
  "//third_party/cldr/src/common/annotationsDerived/no.xml",
]

action("emoji_data_no") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_no_start.json" ]
  inputs = no_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_no_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_no_remaining.json" ]
  inputs = no_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_no") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_no.json" ]

  deps = [
    ":emoji_data_no",
    ":emoji_data_no_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_no"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_no_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(no_keyword_xmls, root_build_dir)
}

# Finnish keywords.
fi_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/fi.xml",
  "//third_party/cldr/src/common/annotationsDerived/fi.xml",
]

action("emoji_data_fi") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_fi_start.json" ]
  inputs = fi_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_fi_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_fi_remaining.json" ]
  inputs = fi_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_fi") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_fi.json" ]

  deps = [
    ":emoji_data_fi",
    ":emoji_data_fi_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_fi"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_fi_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(fi_keyword_xmls, root_build_dir)
}

# Danish keywords.
da_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/da.xml",
  "//third_party/cldr/src/common/annotationsDerived/da.xml",
]

action("emoji_data_da") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_da_start.json" ]
  inputs = da_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_da_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_da_remaining.json" ]
  inputs = da_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_da") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_da.json" ]

  deps = [
    ":emoji_data_da",
    ":emoji_data_da_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_da"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_da_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(da_keyword_xmls, root_build_dir)
}

# French keywords.
fr_keyword_xmls = [
  "//third_party/cldr/src/common/annotations/fr.xml",
  "//third_party/cldr/src/common/annotationsDerived/fr.xml",
]

action("emoji_data_fr") {
  firstgroup = "True"
  outputs = [ "$target_gen_dir/emoji_fr_start.json" ]
  inputs = fr_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("emoji_data_fr_remaining") {
  firstgroup = "False"
  outputs = [ "$target_gen_dir/emoji_fr_remaining.json" ]
  inputs = fr_keyword_xmls

  # Shared for all emoji scripts
  script = emoji_script
  sources = emoji_metadata
  args = [
           "--firstgroup",
           firstgroup,
           "--output",
         ] + rebase_path(outputs, root_build_dir)
  args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
  args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}

action("symbol_data_fr") {
  script = "tools/symbol_data.py"

  outputs = [ "$target_gen_dir/symbols_fr.json" ]

  deps = [
    ":emoji_data_fr",
    ":emoji_data_fr_remaining",
  ]

  args = [
    "--output",
    rebase_path(outputs[0], root_build_dir),
  ]
  args += [ "--filter-data-paths" ] +
          rebase_path(get_target_outputs(":emoji_data_fr"), root_build_dir) +
          rebase_path(get_target_outputs(":emoji_data_fr_remaining"),
                      root_build_dir)
  args += [ "--cldr_data_path" ] + rebase_path(fr_keyword_xmls, root_build_dir)
}

# Resources used by chrome://picker.
grit("resources") {
  source = "emoji.grd"

  deps = [
    ":emoji_data",
    ":emoji_data_da",
    ":emoji_data_da_remaining",
    ":emoji_data_de",
    ":emoji_data_de_remaining",
    ":emoji_data_es",
    ":emoji_data_es_remaining",
    ":emoji_data_fi",
    ":emoji_data_fi_remaining",
    ":emoji_data_fr",
    ":emoji_data_fr_remaining",
    ":emoji_data_ja",
    ":emoji_data_ja_remaining",
    ":emoji_data_no",
    ":emoji_data_no_remaining",
    ":emoji_data_remaining",
    ":emoji_data_sv",
    ":emoji_data_sv_remaining",
    ":emoticon_data",
    ":symbol_data",
    ":symbol_data_da",
    ":symbol_data_de",
    ":symbol_data_es",
    ":symbol_data_fi",
    ":symbol_data_fr",
    ":symbol_data_ja",
    ":symbol_data_no",
    ":symbol_data_sv",
    ":symbol_test_data",
  ]

  outputs = [
    "grit/emoji.h",
    "grit/emoji_map.cc",
    "grit/emoji_map.h",
    "emoji.pak",
  ]
}

source_set("emoji") {
  deps = [
    ":resources",
    "//base",
    "//build:branding_buildflags",
    "//ui/base",
  ]
  sources = [
    "emoji_search.cc",
    "emoji_search.h",
  ]
}