# Copyright 2019 The Dawn Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../scripts/dawn_overrides_with_defaults.gni")
import("dawn_generator.gni")

# The list of directories in which to check for stale autogenerated files.
# It should include the list of all directories in which we ever generated
# files but we can't just put dawn_gen_root because there are more than
# autogenerated sources there.
_stale_dirs = [
    "dawn",
    "dawn_native",
    "dawn_wire",
    "mock",
    "src"
]

_allowed_output_dirs_file = "${dawn_gen_root}/removed_stale_autogen_files.allowed_output_dirs"
write_file(_allowed_output_dirs_file, dawn_allowed_gen_output_dirs)

_stale_dirs_file = "${dawn_gen_root}/removed_stale_autogen_files.stale_dirs"
write_file(_stale_dirs_file, _stale_dirs)

_stamp_file = "${dawn_gen_root}/removed_stale_autogen_files.stamp"

# An action that removes autogenerated files that aren't in allowed directories
# see dawn_generator.gni for more details.
action("remove_stale_autogen_files") {
  script = "remove_files.py"
  args = [
    "--root-dir",
    rebase_path(dawn_gen_root, root_build_dir),
    "--allowed-output-dirs-file",
    rebase_path(_allowed_output_dirs_file, root_build_dir),
    "--stale-dirs-file",
    rebase_path(_stale_dirs_file, root_build_dir),
    "--stamp",
    rebase_path(_stamp_file, root_build_dir),
  ]

  # Have the "list of file" inputs as a dependency so that the action reruns
  # as soon as they change.
  inputs = [_allowed_output_dirs_file, _stale_dirs_file]

  # Output a stamp file so we don't re-run this action on every build.
  outputs = [_stamp_file]
}
