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

Reply via email to