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 dfb2c24d62a886de1e82469d4df8e0f0bd9384d0 Author: Arjav Patel <[email protected]> AuthorDate: Wed Feb 18 23:50:00 2026 +0530 cmake: Enhance .config handling and comparison logic Refactor the logic for managing the .config file to ensure it aligns with Make behavior. Introduce a mechanism to set CONFIG_BASE_DEFCONFIG correctly and streamline the comparison process between .config and .config.orig, improving accuracy in detecting changes. Signed-off-by: Arjav Patel <[email protected]> --- CMakeLists.txt | 13 +++++++++++++ cmake/nuttx_mkconfig.cmake | 36 +++--------------------------------- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dc50fc63a9..e2bc7fea33c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -349,6 +349,19 @@ if(NOT EXISTS ${CMAKE_BINARY_DIR}/.config OR NOT "${NUTTX_DEFCONFIG}" STREQUAL ${CMAKE_BINARY_DIR}/.config) set(ENV{KCONFIG_CONFIG} ${CMAKE_BINARY_DIR}/.config) + # Set CONFIG_BASE_DEFCONFIG so .config matches Make behavior (configure.sh) + file(READ ${CMAKE_BINARY_DIR}/.config _config_init_content) + string( + REGEX + REPLACE "CONFIG_BASE_DEFCONFIG=\"[^\"]*\"" + "CONFIG_BASE_DEFCONFIG=\"${NUTTX_BOARD}/${NUTTX_CONFIG}\"" + _config_init_content "${_config_init_content}") + if(NOT _config_init_content MATCHES "CONFIG_BASE_DEFCONFIG=") + string(APPEND _config_init_content + "\nCONFIG_BASE_DEFCONFIG=\"${NUTTX_BOARD}/${NUTTX_CONFIG}\"\n") + endif() + file(WRITE ${CMAKE_BINARY_DIR}/.config "${_config_init_content}") + # store original expanded .config configure_file(${CMAKE_BINARY_DIR}/.config ${CMAKE_BINARY_DIR}/.config.orig COPYONLY) diff --git a/cmake/nuttx_mkconfig.cmake b/cmake/nuttx_mkconfig.cmake index 8853db6b676..4ba00cccd02 100644 --- a/cmake/nuttx_mkconfig.cmake +++ b/cmake/nuttx_mkconfig.cmake @@ -43,43 +43,13 @@ if(COMPARE_RESULT EQUAL 0 AND EXISTS ${CONFIG_H}) endif() set(BASE_DEFCONFIG "${NUTTX_BOARD}/${NUTTX_CONFIG}") -# 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() +execute_process( + COMMAND ${CMAKE_COMMAND} -E compare_files ${CMAKE_BINARY_DIR}/.config + ${CMAKE_BINARY_DIR}/.config.orig RESULT_VARIABLE COMPARE_RESULT) 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
