# 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/dart/dart_packages.gni")
import("//build/python/python_binary.gni")
import("//build/python/python_host_test.gni")
import("//build/sdk/sdk_documentation.gni")

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

_dartdoc_transforms_script_target = "dartdoc_transforms"
python_binary(_dartdoc_transforms_script_target) {
  main_source = "//build/dart/gen_reference_docs.py"
  output_name = "gen_reference_docs.pyz"
  sources = [ "//build/dart/generate_dart_toc.py" ]
  deps = [ "//third_party/pyyaml:yaml" ]
}

# See dartdoc_transforms.py for more information
action("dart_sdk_docs") {
  script_output = get_target_outputs(":${_dartdoc_transforms_script_target}")
  script = script_output[0]
  metadata = {
    # Record metadata for the //tools/docsgen build API.
    generated_docset = [
      {
        name = "dartdoc"
        archive = {
          origin_file =
              rebase_path("$host_out_dir/obj/tools/docsgen/dartdoc_out.zip",
                          root_build_dir)
          base_folder = "dartdoc"
        }
        dest_folder = "sdk/dart"
      },
    ]
  }
  inputs = [
    "//sdk/dart",
    "//analysis_options.yaml",
    "//prebuilt/third_party/dart/${host_platform}/bin/dart",
  ]

  outputs = [
    "$target_out_dir/dartdoc_out.zip",
    "$target_gen_dir/.dart_tool/package_config.json",
    "$target_gen_dir/lib/lib.dart",
    "$target_gen_dir/pubspec.lock",
    "$target_gen_dir/pubspec.yaml",
  ]
  depfile = "$target_out_dir/$target_name.d"

  args = [
    "--delete-artifact-files",
    "--run-toc",
    "--zipped-result",
    "--gen-dir",
    rebase_path(target_gen_dir, root_build_dir),
    "--out-dir",
    rebase_path("$target_out_dir/__untraced_dartdoc_output__", target_gen_dir),
    "--prebuilts-dir",
    rebase_path("//prebuilt/third_party/dart/${host_platform}/bin",
                target_gen_dir),
    "--dep-file",
    rebase_path(depfile, root_build_dir),
  ]

  foreach(pkg, dart_packages_list) {
    args += [ rebase_path(pkg, root_build_dir) ]
  }

  deps = [ ":${_dartdoc_transforms_script_target}" ] + dart_packages_list
}

_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("$host_out_dir/obj/tools/docsgen/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("$host_out_dir/obj/tools/docsgen/$clidoc_tarfile",
                          root_build_dir)
          base_folder = "clidoc"
        }
        dest_folder = "tools/sdk"
      },
    ]
  }
  outputs = [ "$target_out_dir/$clidoc_tarfile" ]
  args = [
    "-o",
    rebase_path("docs/reference/tools/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 = []
}

if (is_host) {
  python_host_test("gen_helpdocs_test") {
    main_source = "gen_helpdocs_test.py"
    sources = [ "gen_helpdocs.py" ]
  }

  python_host_test("docsgen_transforms_test") {
    main_source = "docsgen_transforms_test.py"
    sources = [ "docsgen_transforms.py" ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":docsgen_transforms_test($host_toolchain)",
    ":gen_helpdocs_test($host_toolchain)",
  ]
}

# Runs one time python helpdoc generation script.
# TODO (https://fxbug.dev/87512) to add depsfile.
action("invoke_helpdoc") {
  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("$host_out_dir/obj/tools/docsgen/$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 = ":dart_sdk_docs($host_toolchain)"
    file = "dartdoc_out.zip"
  },
  {
    target = ":invoke_clidoc($host_toolchain)"
    file = "clidoc_out.tar.gz"
  },
  {
    target = ":invoke_cmldoc($host_toolchain)"
    file = "cmldoc_out/index.md"
  },
  {
    target = ":invoke_fidldoc($host_toolchain)"
    file = "fidldoc.zip"
  },
  {
    target = ":invoke_helpdoc($host_toolchain)"
    file = "helpdoc_out.tar.gz"
  },
  {
    target = "//bundles:create_all_drivers_doc"
    file = "all_drivers_doc.yaml"
  },
]

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
}
