cmake_minimum_required(VERSION 3.8)
project(interface_protocol)

# 强制开启消息生成，避免条件判断失效
if(NOT DEFINED GEN_MESSAGE)
  set(GEN_MESSAGE ON CACHE BOOL "Generate message interfaces" FORCE)
endif()

if(GEN_MESSAGE)
  find_package(std_msgs REQUIRED)
  find_package(std_srvs REQUIRED)
  find_package(geometry_msgs REQUIRED)
  find_package(rosidl_default_generators REQUIRED)  # 必须显式声明

  # 自动收集所有 msg/srv 文件
  file(GLOB MSG_FILES "${CMAKE_CURRENT_SOURCE_DIR}/msg/*.msg")
  file(GLOB SRV_FILES "${CMAKE_CURRENT_SOURCE_DIR}/srv/*.srv")

  # 转换为相对路径
  set(REL_MSG_FILES "")
  foreach(MSG_FILE ${MSG_FILES})
    file(RELATIVE_PATH REL_MSG_FILE "${CMAKE_CURRENT_SOURCE_DIR}" "${MSG_FILE}")
    list(APPEND REL_MSG_FILES "${REL_MSG_FILE}")
  endforeach()

  set(REL_SRV_FILES "")
  foreach(SRV_FILE ${SRV_FILES})
    file(RELATIVE_PATH REL_SRV_FILE "${CMAKE_CURRENT_SOURCE_DIR}" "${SRV_FILE}")
    list(APPEND REL_SRV_FILES "${REL_SRV_FILE}")
  endforeach()

  # 打印调试信息（可选，编译时可看到文件列表）
  message(STATUS "Found message files: ${REL_MSG_FILES}")
  message(STATUS "Found service files: ${REL_SRV_FILES}")

  # 生成消息接口（删除手动硬编码的行，用自动收集的变量）
  rosidl_generate_interfaces(${PROJECT_NAME}
    ${REL_MSG_FILES}
    ${REL_SRV_FILES}
    DEPENDENCIES
      std_msgs
      std_srvs
      geometry_msgs
  )

  # 必须添加：导出依赖，确保下游包能正确找到
  ament_export_dependencies(rosidl_default_runtime std_msgs std_srvs geometry_msgs)
endif()

ament_package()