This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit c172074f213560c22f7e916d58c3cc34fb27e50b Author: Arjav Patel <[email protected]> AuthorDate: Mon Feb 16 05:22:11 2026 +0530 cmake/nuttx_mkconfig: Improve .config comparison logic Refactor the process of comparing .config and .config.orig files by stripping CONFIG_BASE_DEFCONFIG lines to prevent false -dirty flags. Update .config to ensure it matches the expected Make behavior by writing the correct BASE_DEFCONFIG value. Signed-off-by: Arjav Patel <[email protected]> --- cmake/nuttx_mkconfig.cmake | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/cmake/nuttx_mkconfig.cmake b/cmake/nuttx_mkconfig.cmake index 4ba00cccd02..8853db6b676 100644 --- a/cmake/nuttx_mkconfig.cmake +++ b/cmake/nuttx_mkconfig.cmake @@ -43,13 +43,43 @@ if(COMPARE_RESULT EQUAL 0 AND EXISTS ${CONFIG_H}) endif() set(BASE_DEFCONFIG "${NUTTX_BOARD}/${NUTTX_CONFIG}") -execute_process( - COMMAND ${CMAKE_COMMAND} -E compare_files ${CMAKE_BINARY_DIR}/.config - ${CMAKE_BINARY_DIR}/.config.orig RESULT_VARIABLE COMPARE_RESULT) +# Mirror tools/Unix.mk:258-263: compare .config to .config.orig after stripping +# CONFIG_BASE_DEFCONFIG lines so our own write of that value does not spuriously +# trigger -dirty on subsequent runs. +file(READ ${CMAKE_BINARY_DIR}/.config CONFIG_FOR_DIRTY) +file(READ ${CMAKE_BINARY_DIR}/.config.orig CONFIG_ORIG_FOR_DIRTY) +# Strip CONFIG_BASE_DEFCONFIG line (with optional trailing newline for last line) +string(REGEX REPLACE "\nCONFIG_BASE_DEFCONFIG=\"[^\"]*\"\n?" "\n" + CONFIG_FOR_DIRTY "${CONFIG_FOR_DIRTY}") +string(REGEX REPLACE "^CONFIG_BASE_DEFCONFIG=\"[^\"]*\"\n?" "" + CONFIG_FOR_DIRTY "${CONFIG_FOR_DIRTY}") +string(REGEX REPLACE "\nCONFIG_BASE_DEFCONFIG=\"[^\"]*\"\n?" "\n" + CONFIG_ORIG_FOR_DIRTY "${CONFIG_ORIG_FOR_DIRTY}") +string(REGEX REPLACE "^CONFIG_BASE_DEFCONFIG=\"[^\"]*\"\n?" "" + CONFIG_ORIG_FOR_DIRTY "${CONFIG_ORIG_FOR_DIRTY}") +if(CONFIG_FOR_DIRTY STREQUAL CONFIG_ORIG_FOR_DIRTY) + set(COMPARE_RESULT 0) +else() + set(COMPARE_RESULT 1) +endif() if(COMPARE_RESULT) string(APPEND BASE_DEFCONFIG "-dirty") endif() +# Write CONFIG_BASE_DEFCONFIG to .config so it matches Make behavior +file(READ ${CMAKE_BINARY_DIR}/.config CONFIG_CONTENT) +string(REGEX REPLACE "CONFIG_BASE_DEFCONFIG=\".*\"" + "CONFIG_BASE_DEFCONFIG=\"${BASE_DEFCONFIG}\"" CONFIG_CONTENT + "${CONFIG_CONTENT}") +if(NOT CONFIG_CONTENT MATCHES "CONFIG_BASE_DEFCONFIG=") + string(APPEND CONFIG_CONTENT "\nCONFIG_BASE_DEFCONFIG=\"${BASE_DEFCONFIG}\"\n") +endif() +file(WRITE ${CMAKE_BINARY_DIR}/.config "${CONFIG_CONTENT}") +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/.config + ${CMAKE_BINARY_DIR}/.config.prev + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + set(DEQUOTELIST # NuttX "CONFIG_DEBUG_OPTLEVEL" # Custom debug level
