cmake: Drop dependency on sed for translate target
What changed, and why it matters
This commit is a build-system cleanup. It replaces the use of the external 'sed' tool with built-in CMake commands when processing a translation file. There is no security-relevant change to Bitcoin's runtime behavior, networking, wallet handling, or consensus logic.
No security action required. Treat as ordinary build maintenance.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch removes the CMake dependency on the system ‘sed’ executable for the ‘translate’ target. Previously, translate.cmake invoked sed to edit src/qt/locale/bitcoin_en.xlf in place. Now it uses CMake’s file(READ), string(REPLACE), string(REGEX REPLACE), and file(WRITE) to perform the same text transformations. The CMakeLists.txt no longer searches for SED_EXECUTABLE or passes it to the script. This is a pure build-tooling refactor.
Changed components
share/qt/translate.cmakesrc/qt/CMakeLists.txtInspect captured patch +7 / −16
diff --git a/share/qt/translate.cmake b/share/qt/translate.cmake
index cc503526..a4eeef96 100644
--- a/share/qt/translate.cmake
+++ b/share/qt/translate.cmake
@@ -8,7 +8,6 @@ set(input_variables
LCONVERT_EXECUTABLE
LUPDATE_EXECUTABLE
PYTHON_EXECUTABLE
- SED_EXECUTABLE
XGETTEXT_EXECUTABLE
)
@@ -73,13 +72,11 @@ execute_process(
COMMAND_ERROR_IS_FATAL ANY
)
-execute_process(
- COMMAND ${SED_EXECUTABLE}
- -i.old
- -e "s|source-language=\"en\" target-language=\"en\"|source-language=\"en\"|"
- -e "/<target xml:space=\"preserve\"><\\/target>/d"
- ${PROJECT_SOURCE_DIR}/src/qt/locale/bitcoin_en.xlf
- COMMAND_ERROR_IS_FATAL ANY
+file(READ "${PROJECT_SOURCE_DIR}/src/qt/locale/bitcoin_en.xlf" bitcoin_en)
+string(REPLACE "source-language=\"en\" target-language=\"en\""
+ "source-language=\"en\"" bitcoin_en "${bitcoin_en}"
)
-
-file(REMOVE "${PROJECT_SOURCE_DIR}/src/qt/locale/bitcoin_en.xlf.old")
+string(REGEX REPLACE " *<target xml:space=\"preserve\"></target>\n"
+ "" bitcoin_en "${bitcoin_en}"
+)
+file(WRITE "${PROJECT_SOURCE_DIR}/src/qt/locale/bitcoin_en.xlf" "${bitcoin_en}")
diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt
index c3113067..5a3f9873 100644
--- a/src/qt/CMakeLists.txt
+++ b/src/qt/CMakeLists.txt
@@ -290,15 +290,10 @@ if(BUILD_GUI_TESTS)
endif()
find_program(XGETTEXT_EXECUTABLE xgettext)
-find_program(SED_EXECUTABLE sed)
if(NOT XGETTEXT_EXECUTABLE)
add_custom_target(translate
COMMAND ${CMAKE_COMMAND} -E echo "Error: GNU gettext-tools not found"
)
-elseif(NOT SED_EXECUTABLE)
- add_custom_target(translate
- COMMAND ${CMAKE_COMMAND} -E echo "Error: GNU sed not found"
- )
else()
add_custom_target(translate COMMAND ${CMAKE_COMMAND}
-D "PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}"
@@ -306,7 +301,6 @@ else()
-D "LCONVERT_EXECUTABLE=$<TARGET_FILE:Qt6::lconvert>"
-D "LUPDATE_EXECUTABLE=$<TARGET_FILE:Qt6::lupdate>"
-D "PYTHON_EXECUTABLE=$<TARGET_FILE:Python3::Interpreter>"
- -D "SED_EXECUTABLE=${SED_EXECUTABLE}"
-D "XGETTEXT_EXECUTABLE=${XGETTEXT_EXECUTABLE}"
-P ${PROJECT_SOURCE_DIR}/share/qt/translate.cmake
)
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.