# Copyright 2019 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/board.gni")
import("//build/components/fuchsia_package.gni")
import("//build/dist/resource.gni")
import("//build/info/info.gni")

if (current_toolchain == default_toolchain) {
  write_file(build_info_files.product, build_info_product)
  write_file(build_info_files.board, board_name)

  if (build_info_files.version != build_info_files.latest_commit_date) {
    write_file(build_info_files.version, build_info_version)
  }

  action("latest-commit-date") {
    # Ensure this action is invoked if integration HEAD moves
    inputs = [ "//integration/.git/HEAD" ]
    outputs = [
      build_info_files.latest_commit_date,
      build_info_files.minimum_utc_stamp,
    ]
    script = "gen-latest-commit-date.sh"
    args = rebase_path([ "//integration/" ] + outputs, root_build_dir)
  }
} else {
  group("latest-commit-date") {
    public_deps = [ ":latest-commit-date($default_toolchain)" ]
  }
}

if (is_fuchsia) {
  resource_group("build-info-resources") {
    files = [
      {
        source = build_info_files.product
        dest = "data/product"
      },
      {
        source = build_info_files.board
        dest = "data/board"
      },
      {
        source = build_info_files.version
        dest = "data/version"
      },
      {
        source = build_info_files.jiri_snapshot
        dest = "data/snapshot"
      },
      {
        source = build_info_files.latest_commit_date
        dest = "data/latest-commit-date"
      },
      {
        source = build_info_files.minimum_utc_stamp
        dest = "data/minimum-utc-stamp"
      },
    ]
    deps = [ ":latest-commit-date" ]
  }

  fuchsia_package("build-info") {
    deps = [ ":build-info-resources" ]
  }

  resource("bootfs") {
    sources = [ build_info_files.minimum_utc_stamp ]
    outputs = [ "config/build_info/minimum_utc_stamp" ]
    deps = [ ":latest-commit-date" ]
  }
}
