# Copyright (c) 2022 Google Inc. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sub license, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice (including the
# next paragraph) shall be included in all copies or substantial portions
# of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

copy("copy_magma") {
  sources = [ "../va/magma/va_magma.h" ]
  outputs = [ "$target_gen_dir/headers/va/va_magma.h" ]
}

action("gen_version") {
  script = "gen_version.sh"
  sources = [
    "../build/gen_version.sh",
    "../configure.ac",
    "../va/va_version.h.in",
    "gen_version.sh",
  ]
  outputs = [ "$target_gen_dir/headers/va/va_version.h" ]
  args = [
    rebase_path("..", root_build_dir),
    rebase_path("../va/va_version.h.in", root_build_dir),
    rebase_path(outputs[0], root_build_dir),
  ]
}

config("headers_config") {
  include_dirs = [
    "$target_gen_dir/headers",
    "..",
  ]
}

group("headers") {
  public_deps = [
    ":copy_magma",
    ":gen_version",
  ]
  public_configs = [ ":headers_config" ]
}
