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

import("//build/config.gni")
import("//build/images/bootfs_manifest.gni")

group("appmgr_policy_eng") {
  deps = [
    ":appmgr_build_info_allowlist_eng",
    ":appmgr_component_event_provider_allowlist_eng",
    ":appmgr_deprecated_ambient_replace_as_executable_allowlist_eng",
    ":appmgr_deprecated_misc_storage_allowlist_eng",
    ":appmgr_deprecated_shell_allowlist_eng",
    ":appmgr_event_source_allowlist_eng",
    ":appmgr_hub_allowlist_eng",
    ":appmgr_package_cache_allowlist_eng",
    ":appmgr_package_resolver_allowlist_eng",
    ":appmgr_pkgfs_versions_allowlist_eng",
    ":appmgr_root_job_allowlist_eng",
    ":appmgr_root_resource_allowlist_eng",
    "//build/validate:non_production_tag",
  ]
}

# In the future this will probably need to be merged into a more complete component_manager config
# file, but for now this is the only config.
bootfs_manifest("component_manager_policy.manifest") {
  config = [
    {
      path = "component_manager_policy.json"
      dest = "component_manager"
    },
  ]
}

config_data("appmgr_build_info_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "build_info_allowlist_eng.txt" ]
  outputs = [ "allowlist/build_info.txt" ]
}

config_data("appmgr_component_event_provider_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "component_event_provider_allowlist_eng.txt" ]
  outputs = [ "allowlist/component_event_provider.txt" ]
}

config_data("appmgr_event_source_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "event_source_allowlist_eng.txt" ]
  outputs = [ "allowlist/event_source.txt" ]
}

config_data("appmgr_deprecated_ambient_replace_as_executable_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "deprecated_ambient_replace_as_executable_allowlist_eng.txt" ]
  outputs = [ "allowlist/deprecated_ambient_replace_as_executable.txt" ]
}

config_data("appmgr_deprecated_misc_storage_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "deprecated_misc_storage_allowlist_eng.txt" ]
  outputs = [ "allowlist/deprecated_misc_storage.txt" ]
}

config_data("appmgr_deprecated_shell_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "deprecated_shell_allowlist_eng.txt" ]
  outputs = [ "allowlist/deprecated_shell.txt" ]
}

config_data("appmgr_hub_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "hub_allowlist_eng.txt" ]
  outputs = [ "allowlist/hub.txt" ]
}

config_data("appmgr_package_cache_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "package_cache_allowlist_eng.txt" ]
  outputs = [ "allowlist/package_cache.txt" ]
}

config_data("appmgr_package_resolver_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "package_resolver_allowlist_eng.txt" ]
  outputs = [ "allowlist/package_resolver.txt" ]
}

config_data("appmgr_pkgfs_versions_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "pkgfs_versions_allowlist_eng.txt" ]
  outputs = [ "allowlist/pkgfs_versions.txt" ]
}

config_data("appmgr_root_job_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "root_job_allowlist_eng.txt" ]
  outputs = [ "allowlist/root_job.txt" ]
}

config_data("appmgr_root_resource_allowlist_eng") {
  for_pkg = "appmgr"
  sources = [ "root_resource_allowlist_eng.txt" ]
  outputs = [ "allowlist/root_resource.txt" ]
}
