# Only the lwIP backend needs this fix. Keep the managed component immutable. function(project_mdns_membership_overlay) if(CONFIG_MDNS_NETWORKING_SOCKET) return() endif() idf_component_get_property(mdns_dir espressif__mdns COMPONENT_DIR) idf_component_get_property(mdns_lib espressif__mdns COMPONENT_LIB) idf_component_get_property(mdns_version espressif__mdns COMPONENT_VERSION) if(NOT mdns_version STREQUAL "1.12.0") message(FATAL_ERROR "mDNS membership overlay requires component version 1.12.0; review upstream") endif() idf_build_get_property(python PYTHON) set(helper "${CMAKE_CURRENT_LIST_DIR}/mdns_membership.py") set(original "${mdns_dir}/mdns_networking_lwip.c") set(overlay "${CMAKE_BINARY_DIR}/mdns_membership/mdns_networking_lwip.c") set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${helper}" "${original}" "${mdns_dir}/idf_component.yml" "${overlay}") execute_process(COMMAND "${python}" "${helper}" "${mdns_dir}" "${overlay}" RESULT_VARIABLE result OUTPUT_VARIABLE output ERROR_VARIABLE error) if(NOT result EQUAL 0) message(FATAL_ERROR "mDNS membership overlay failed: ${output}${error}") endif() get_target_property(sources ${mdns_lib} SOURCES) get_target_property(source_dir ${mdns_lib} SOURCE_DIR) set(replaced 0) set(updated_sources) foreach(source IN LISTS sources) get_filename_component(absolute "${source}" ABSOLUTE BASE_DIR "${source_dir}") if(absolute STREQUAL original) list(APPEND updated_sources "${overlay}") math(EXPR replaced "${replaced} + 1") else() list(APPEND updated_sources "${source}") endif() endforeach() if(NOT replaced EQUAL 1) message(FATAL_ERROR "Expected exactly one mDNS lwIP target source, found ${replaced}; review upstream CMake") endif() set_property(TARGET ${mdns_lib} PROPERTY SOURCES "${updated_sources}") message(STATUS "mDNS 1.12.0: using guarded build-local multicast membership fix") endfunction() project_mdns_membership_overlay()