# Copyright 2021 The Fuchsia 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/compiled_action.gni")
import("//build/config/build_api_module.gni")
import("//build/python/python_binary.gni")
import("//build/sdk/sdk_documentation.gni")

group("docsgen") {
  testonly = true
  deps = [ ":generated_docs" ]
}

_fidldoc_transforms_script_target = "fidldoc_transforms"
python_binary(_fidldoc_transforms_script_target) {
  main_source = "//build/fidl/gen_fidldocs.py"
  output_name = "gen_fidldocs.pyz"
  sources = []
  deps = []
}

# Runs one time python fidldoc generation script.
action("invoke_fidldoc") {
  script_output = get_target_outputs(":${_fidldoc_transforms_script_target}")
  script = script_output[0]
  metadata = {
    # Record metadata for the //tools/docsgen build API.
    generated_docset = [
      {
        name = "fidldoc"
        archive = {
          origin_file =
              rebase_path("$target_out_dir/fidldoc.zip", root_build_dir)
          base_folder = "fidldoc"
        }
        dest_folder = "sdk/fidl"
      },
    ]
  }
  inputs = [
    "$root_build_dir/host-tools/fidldoc",
    "$root_build_dir/host-tools/fidldoc.config.json",
    "$root_build_dir/sdk_fidl_json.json",
  ]

  outputs = [ "$target_out_dir/fidldoc.zip" ]
  depfile = "$target_out_dir/$target_name.d"

  args = [
    "--zipped-result",
    "--build-dir",
    rebase_path(root_build_dir, root_build_dir),
    "--out-dir",
    rebase_path(target_out_dir, root_build_dir),
    "--dep-file",
    rebase_path(depfile, root_build_dir),
  ]

  deps = [
    ":${_fidldoc_transforms_script_target}",
    "//build/fidl:sdk_fidl",
    "//tools/fidl/fidldoc:fidldoc_copy_config($host_toolchain)",
    "//tools/fidl/fidldoc($host_toolchain)",
  ]
}

clidoc_tarfile = "clidoc_out.tar.gz"
compiled_action("invoke_clidoc") {
  tool = "//tools/clidoc:clidoc_bin"
  tool_output_name = "clidoc"
  testonly = true
  depfile = "$target_out_dir/$target_name.d"
  deps = [
    "//sdk:host_tools.all",

    # TODO(https://fxbug.dev/86553) check if triage belongs in sdk docs.
    "//src/diagnostics/triage:triage",
  ]
  metadata = {
    # Record metadata for the //tools/docsgen build API.
    generated_docset = [
      {
        name = "clidoc"
        archive = {
          origin_file =
              rebase_path("$target_out_dir/$clidoc_tarfile", root_build_dir)
          base_folder = "clidoc"
        }
        dest_folder = "tools/sdk"
      },
    ]
  }
  outputs = [ "$target_out_dir/$clidoc_tarfile" ]
  args = [
    "-o",
    rebase_path("$target_gen_dir/sdk-docs", root_build_dir),
    "--quiet",

    # TODO (https://fxbug.dev/86553) to rename tarball-dir.
    "--tarball-dir",
    rebase_path("$target_out_dir/$clidoc_tarfile", root_build_dir),
    "--depfile",
    rebase_path(depfile, root_build_dir),
  ]
}

_helpdoc_script_target = "helpdoc_generation"
helpdoc_tarfile = "helpdoc_out.tar.gz"
python_binary(_helpdoc_script_target) {
  main_source = "//tools/docsgen/gen_helpdocs.py"
  output_name = "gen_helpdocs.pyz"
  sources = []
  deps = []
}

_docsgen_transforms_script_target = "docsgen_transforms"
python_binary(_docsgen_transforms_script_target) {
  main_source = "//tools/docsgen/docsgen_transforms.py"
  output_name = "docsgen_transforms.pyz"
  sources = []
  deps = []
}

# Runs one time python helpdoc generation script.
action("invoke_helpdoc") {
  # TODO(https://fxbug.dev/87512): Remove this exception when this action no
  # longer executes fx tools.
  hermetic_deps = false

  script_output = get_target_outputs(":${_helpdoc_script_target}")
  script = script_output[0]
  testonly = true
  depfile = "$target_out_dir/$target_name.d"
  metadata = {
    # Record metadata for the //tools/docsgen build API.
    generated_docset = [
      {
        name = "helpdoc"
        archive = {
          origin_file =
              rebase_path("$target_out_dir/$helpdoc_tarfile", root_build_dir)
          base_folder = "helpdoc"
        }
        dest_folder = "tools/fx"
      },
    ]
  }
  outputs = [
    "$target_out_dir/$helpdoc_tarfile",
    "$target_gen_dir/helpdoc.log",
  ]

  args = [
    "--out-path",
    rebase_path("$target_out_dir/$helpdoc_tarfile", root_build_dir),
    "--src-dir",
    rebase_path("//", root_build_dir),
    "--log-to-file",
    rebase_path("$target_gen_dir/helpdoc.log", root_build_dir),
    "--depfile",
    rebase_path(depfile, root_build_dir),
  ]

  deps = [ ":${_helpdoc_script_target}" ]
}

compiled_action("invoke_cmldoc") {
  tool = "//tools/cmc:cmc"
  tool_output_name = "cmc"
  testonly = true
  metadata = {
    # Record metadata for the //tools/docsgen build API.
    generated_docset = [
      {
        name = "cmldoc"
        origin_files = [ rebase_path("$target_out_dir/cmldoc_out/index.md",
                                     root_build_dir) ]
        dest_folder = "sdk/cml"
      },
    ]
  }
  outputs = [ "$target_out_dir/cmldoc_out/index.md" ]
  args = [
    "print-cml-reference",
    "-o",
    rebase_path("$target_out_dir/cmldoc_out/index.md", root_build_dir),
  ]
  deps = [ "//tools/cmc($host_toolchain)" ]
}

# Set up targets and files for sdk_documentation and build_api_module.
ref_docs = [
  {
    target = ":invoke_clidoc"
    file = "clidoc_out.tar.gz"
  },
  {
    target = ":invoke_cmldoc"
    file = "cmldoc_out/index.md"
  },
  {
    target = ":invoke_fidldoc"
    file = "fidldoc.zip"
  },
  {
    target = ":invoke_helpdoc"
    file = "helpdoc_out.tar.gz"
  },
  {
    target = "//bundles:create_all_drivers_doc"
    file = "all_drivers_doc.yaml"
  },
  {
    target = "//sdk/lib/fdio:docs"
    file = "fdio.zip"
  },
]

ref_doc_files = []
ref_doc_targets = []
foreach(ref_doc, ref_docs) {
  out_dir = get_label_info(ref_doc.target, "target_out_dir")
  ref_doc_file_prefix = ref_doc.file

  # TODO(https://fxbug.dev/103315) to move drivers doc to output_dir.
  # Unlike other ref docs, drivers docs uses gen_dir instead of output_dir
  if (ref_doc_file_prefix == "all_drivers_doc.yaml") {
    gen_dir = get_label_info(ref_doc.target, "target_gen_dir")
    ref_doc_file_path = "$gen_dir/$ref_doc_file_prefix"
  } else {
    ref_doc_file_path = "$out_dir/$ref_doc_file_prefix"
  }
  ref_doc_files += [
    {
      source = ref_doc_file_path
      dest = "docs/$ref_doc_file_prefix"
    },
  ]
  ref_doc_targets += [ ref_doc.target ]
}

# This exposes relevant reference doc paths for infra to upload.
#
# Type: list(scope)
#
#   name:
#     Required: name of the reference docs to be generated. This name
#     will be used to identify the ref doc git commit process downstream
#     in the docsgen recipe.
#     Type: string
#
#   archive:
#     Optional: If this key is present, this denotes that the ref docs
#     are compressed. This is most likely to adhere to hermetic builds.
#     Additional specific parameters will be included pertaining to archive
#     paths.
#     Type: scope
#
#     origin_file:
#        Required: path to compressed archived file holding ref docs.
#        Type: path relative to $root_build_dir
#
#     base_folder:
#        Optional: base folder containing all ref docs once origin file
#        is decompresssed. Alternatively if base folder is not specified.
#        all reference docs are simply decompressed into the current dir.
#        Type: string
#
#   origin_files:
#     Optional: If this key is present, this denotes that the ref docs
#     can be listed and are decompressed.
#     Type: list of file paths relative to $root_build_dir
#
#   dest_folder:
#     Required: path to destination folder within reference docs repo
#     Type: path relative to reference docs repo root directory
#

build_api_module("generated_docs") {
  testonly = true
  data_keys = [ "generated_docset" ]
  deps = ref_doc_targets
}

sdk_documentation("ref_docs_sdk") {
  name = "ref_docs"
  testonly = true
  category = "partner"

  files = ref_doc_files
  non_sdk_deps = ref_doc_targets
}

group("tests") {
  testonly = true
  deps = [ "tests($host_toolchain)" ]
}
