# Copyright 2020 The Pigweed 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
#
#     https://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/pigweed.gni")

import("$dir_pw_build/python.gni")
import("$dir_pw_build/python_dist.gni")
import("$dir_pw_docgen/docs.gni")

pw_doc_group("docs") {
  inputs = [ "doc_resources/pw_env_setup_output.png" ]
  sources = [ "docs.rst" ]
}

_pigweed_python_deps = [
  # Python packages
  "$dir_pw_allocator/py",
  "$dir_pw_arduino_build/py",
  "$dir_pw_bloat/py",
  "$dir_pw_build/py",
  "$dir_pw_build_info/py",
  "$dir_pw_cli/py",
  "$dir_pw_console/py",
  "$dir_pw_cpu_exception_cortex_m/py",
  "$dir_pw_docgen/py",
  "$dir_pw_doctor/py",
  "$dir_pw_env_setup/py",
  "$dir_pw_hdlc/py",
  "$dir_pw_log:protos.python",
  "$dir_pw_log_tokenized/py",
  "$dir_pw_module/py",
  "$dir_pw_package/py",
  "$dir_pw_presubmit/py",
  "$dir_pw_protobuf/py",
  "$dir_pw_protobuf_compiler/py",
  "$dir_pw_rpc/py",
  "$dir_pw_snapshot/py:pw_snapshot",
  "$dir_pw_snapshot/py:pw_snapshot_metadata",
  "$dir_pw_software_update/py",
  "$dir_pw_status/py",
  "$dir_pw_stm32cube_build/py",
  "$dir_pw_symbolizer/py",
  "$dir_pw_thread/py",
  "$dir_pw_tls_client/py",
  "$dir_pw_tokenizer/py",
  "$dir_pw_toolchain/py",
  "$dir_pw_trace/py",
  "$dir_pw_trace_tokenized/py",
  "$dir_pw_transfer/py",
  "$dir_pw_unit_test/py",
  "$dir_pw_watch/py",
]

pw_python_group("python") {
  python_deps = _pigweed_python_deps
  python_deps += [
    # Standalone scripts
    "$dir_pw_hdlc/rpc_example:example_script",
    "$dir_pw_rpc/py:python_client_cpp_server_test",
    "$dir_pw_third_party/nanopb:generate_nanopb_proto",
    "$dir_pw_transfer/py:python_cpp_transfer_test",

    # Python requirements for CIPD packages that don't have dedicated modules.
    ":renode_requirements",
  ]
}

# Python packages for supporting specific targets.
pw_python_group("target_support_packages") {
  python_deps = [
    "$dir_pigweed/targets/lm3s6965evb_qemu/py",
    "$dir_pigweed/targets/stm32f429i_disc1/py",
  ]
}

pw_python_requirements("renode_requirements") {
  requirements = [
    "psutil",
    "pyyaml",
    "robotframework==3.1",
  ]
}

pw_create_python_source_tree("build_pigweed_python_source_tree") {
  packages = _pigweed_python_deps
  include_tests = true
  extra_files = [
    "$dir_pigweed/pw_build/py/BUILD.bazel > pw_build/BUILD.bazel",
    "$dir_pigweed/pw_cli/py/BUILD.bazel > pw_cli/BUILD.bazel",
    "$dir_pigweed/pw_hdlc/py/BUILD.bazel > pw_hdlc/BUILD.bazel",
    "$dir_pigweed/pw_protobuf/py/BUILD.bazel > pw_protobuf/BUILD.bazel",
    "$dir_pigweed/pw_protobuf_compiler/py/BUILD.bazel > pw_protobuf_compiler/BUILD.bazel",
    "$dir_pigweed/pw_rpc/py/BUILD.bazel > pw_rpc/BUILD.bazel",
    "$dir_pigweed/pw_status/py/BUILD.bazel > pw_status/BUILD.bazel",
  ]
}

pw_create_python_source_tree("pypi_pigweed_python_source_tree") {
  packages = _pigweed_python_deps
  generate_setup_cfg = {
    common_config_file = "pypi_common_setup.cfg"
  }
  extra_files = [
    "$dir_pigweed/LICENSE > LICENSE",
    "$dir_pigweed/README.md > README.md",
    "pypi_pyproject.toml > pyproject.toml",
  ]
}
