# Copyright (c) 2022 Project CHIP 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("//build_overrides/build.gni")
import("//build_overrides/chip.gni")

import("//build_overrides/pigweed.gni")
import("$dir_pw_build/python.gni")

pw_python_package("idl") {
  setup = [ "setup.py" ]
  inputs = [
    # Dependency grammar
    "matter_grammar.lark",

    # Templates used for generation
    "generators/bridge/BridgeClustersCpp.jinja",
    "generators/bridge/BridgeClustersCommon.jinja",
    "generators/bridge/BridgeClustersGlobalStructs.jinja",
    "generators/java/ChipClustersCpp.jinja",
    "generators/java/ChipClustersRead.jinja",
    "generators/cpp/application/PluginApplicationCallbacksHeader.jinja",

    # Unit test data
    "tests/available_tests.yaml",
    "tests/inputs/cluster_struct_attribute.matter",
    "tests/inputs/global_struct_attribute.matter",
    "tests/inputs/optional_argument.matter",
    "tests/inputs/several_clusters.matter",
    "tests/inputs/simple_attribute.matter",
    "tests/outputs/cluster_struct_attribute/bridge/BridgeClustersImpl.h",
    "tests/outputs/cluster_struct_attribute/bridge/BridgeGlobalStructs.h",
    "tests/outputs/cluster_struct_attribute/bridge/DemoClusterServer.h",
    "tests/outputs/cluster_struct_attribute/jni/DemoClusterClient-ReadImpl.cpp",
    "tests/outputs/cluster_struct_attribute/jni/DemoClusterClient-InvokeSubscribeImpl.cpp",
    "tests/outputs/global_struct_attribute/bridge/BridgeClustersImpl.h",
    "tests/outputs/global_struct_attribute/bridge/BridgeGlobalStructs.h",
    "tests/outputs/global_struct_attribute/bridge/DemoClusterServer.h",
    "tests/outputs/global_struct_attribute/jni/DemoClusterClient-ReadImpl.cpp",
    "tests/outputs/global_struct_attribute/jni/DemoClusterClient-InvokeSubscribeImpl.cpp",
    "tests/outputs/optional_argument/jni/MyClusterClient-ReadImpl.cpp",
    "tests/outputs/optional_argument/jni/MyClusterClient-InvokeSubscribeImpl.cpp",
    "tests/outputs/several_clusters/bridge/BridgeClustersImpl.h",
    "tests/outputs/several_clusters/bridge/BridgeGlobalStructs.h",
    "tests/outputs/several_clusters/bridge/FirstServer.h",
    "tests/outputs/several_clusters/bridge/SecondServer.h",
    "tests/outputs/several_clusters/bridge/Third.h",
    "tests/outputs/several_clusters/bridge/ThirdServer.h",
    "tests/outputs/several_clusters/jni/FirstClient-ReadImpl.cpp",
    "tests/outputs/several_clusters/jni/SecondClient-ReadImpl.cpp",
    "tests/outputs/several_clusters/jni/ThirdClient-ReadImpl.cpp",
    "tests/outputs/several_clusters/jni/FirstClient-InvokeSubscribeImpl.cpp",
    "tests/outputs/several_clusters/jni/SecondClient-InvokeSubscribeImpl.cpp",
    "tests/outputs/several_clusters/jni/ThirdClient-InvokeSubscribeImpl.cpp",
    "tests/outputs/simple_attribute/bridge/BridgeClustersImpl.h",
    "tests/outputs/simple_attribute/bridge/BridgeGlobalStructs.h",
    "tests/outputs/simple_attribute/bridge/MyClusterServer.h",
    "tests/outputs/simple_attribute/jni/MyClusterClient-ReadImpl.cpp",
    "tests/outputs/simple_attribute/jni/MyClusterClient-InvokeSubscribeImpl.cpp",
  ]

  sources = [
    "__init__.py",
    "generators/__init__.py",
    "generators/bridge/__init__.py",
    "generators/cpp/__init__.py",
    "generators/cpp/application/__init__.py",
    "generators/filters.py",
    "generators/java/__init__.py",
    "generators/types.py",
    "matter_idl_parser.py",
    "matter_idl_types.py",
    "xml_parser.py",
    "zapxml/__init__.py",
    "zapxml/handlers/__init__.py",
    "zapxml/handlers/base.py",
    "zapxml/handlers/context.py",
    "zapxml/handlers/handlers.py",
    "zapxml/handlers/parsing.py",
  ]

  tests = [
    "test_matter_idl_parser.py",
    "test_generators.py",
    "test_xml_parser.py",
  ]

  # TODO: at a future time consider enabling all (* or missing) here to get
  #       pylint checking these files
  static_analysis = []
}
