2024-03-18 21:16:53 +00:00
|
|
|
if(${CMAKE_VERSION} VERSION_LESS 3.17.0)
|
2022-10-06 12:14:38 +00:00
|
|
|
set(MYX_CMAKE_LIB_UNCRUSTIFY_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}")
|
2022-10-02 20:34:32 +00:00
|
|
|
endif()
|
|
|
|
|
2022-10-06 12:14:38 +00:00
|
|
|
find_program(UNCRUSTIFY_EXE NAMES uncrustify)
|
2022-10-02 20:34:32 +00:00
|
|
|
|
2022-10-15 07:14:08 +00:00
|
|
|
function(myx_uncrustify TARGET_NAME)
|
2024-03-18 21:16:53 +00:00
|
|
|
if(${CMAKE_VERSION} VERSION_LESS 3.17.0)
|
2022-10-06 12:14:38 +00:00
|
|
|
set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${MYX_CMAKE_LIB_UNCRUSTIFY_DIR_BACKPORT})
|
|
|
|
endif()
|
|
|
|
|
2022-10-02 20:34:32 +00:00
|
|
|
set(options)
|
|
|
|
set(oneValueArgs CONFIG)
|
|
|
|
set(multiValueArgs)
|
|
|
|
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
|
|
|
|
|
|
if(NOT ARG_CONFIG)
|
2022-11-27 04:09:09 +00:00
|
|
|
set(ARG_CONFIG "${PROJECT_SOURCE_DIR}/uncrustify.cfg")
|
2022-10-02 20:34:32 +00:00
|
|
|
endif()
|
|
|
|
|
2022-10-04 07:08:19 +00:00
|
|
|
if(NOT EXISTS ${ARG_CONFIG})
|
2022-10-05 07:01:02 +00:00
|
|
|
myx_message_notice("MyxCMake: uncrustify config is not found")
|
2022-10-02 20:34:32 +00:00
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
2022-10-04 07:08:19 +00:00
|
|
|
if(NOT UNCRUSTIFY_EXE)
|
2022-10-05 07:01:02 +00:00
|
|
|
myx_message_notice("MyxCMake: uncrustify executable is not found")
|
2022-10-02 20:34:32 +00:00
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
2023-07-31 12:24:55 +00:00
|
|
|
get_filename_component(CONFIG_DIR ${ARG_CONFIG} DIRECTORY)
|
|
|
|
if(NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CONFIG_DIR}")
|
|
|
|
myx_message("MyxCMake: skip uncrustify for project ${PROJECT_NAME}")
|
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
2022-10-02 20:34:32 +00:00
|
|
|
if(NOT TARGET myx-uncrustify)
|
|
|
|
add_custom_target(myx-uncrustify)
|
|
|
|
endif()
|
|
|
|
if(NOT TARGET myx-uncrustify-check)
|
|
|
|
add_custom_target(myx-uncrustify-check)
|
|
|
|
endif()
|
|
|
|
if(NOT TARGET myx-uncrustify-append-comments)
|
|
|
|
add_custom_target(myx-uncrustify-append-comments)
|
|
|
|
endif()
|
|
|
|
|
2022-10-06 08:10:43 +00:00
|
|
|
# Динамически сгенерированные файлы исключаются
|
2024-03-18 21:16:53 +00:00
|
|
|
get_target_property(target_type ${TARGET_NAME} TYPE)
|
|
|
|
if((${target_type} STREQUAL "INTERFACE_LIBRARY") AND (${CMAKE_VERSION} VERSION_LESS 3.17.0))
|
|
|
|
get_target_property(target_sources ${TARGET_NAME} INTERFACE_SOURCES)
|
|
|
|
if(target_sources)
|
|
|
|
list(APPEND all_sources ${target_sources})
|
2022-10-20 09:45:27 +00:00
|
|
|
endif()
|
|
|
|
else()
|
2024-03-18 21:16:53 +00:00
|
|
|
get_target_property(target_sources ${TARGET_NAME} SOURCES)
|
|
|
|
if(target_sources)
|
|
|
|
list(APPEND all_sources ${target_sources})
|
2022-10-20 09:45:27 +00:00
|
|
|
endif()
|
2022-10-19 11:39:26 +00:00
|
|
|
endif()
|
|
|
|
|
2024-03-18 21:16:53 +00:00
|
|
|
foreach(iter ${all_sources})
|
2022-10-06 08:10:43 +00:00
|
|
|
string(FIND ${iter} ${CMAKE_BINARY_DIR} pos)
|
|
|
|
if(pos EQUAL -1)
|
2024-03-18 21:16:53 +00:00
|
|
|
list(APPEND sources ${iter})
|
2022-10-06 08:10:43 +00:00
|
|
|
endif()
|
|
|
|
endforeach()
|
2022-10-15 07:14:08 +00:00
|
|
|
|
2024-03-18 21:16:53 +00:00
|
|
|
set(fixed_config ${PROJECT_BINARY_DIR}/uncrustify-${TARGET_NAME}.cfg)
|
|
|
|
add_custom_command(OUTPUT ${fixed_config}
|
2022-10-21 07:52:33 +00:00
|
|
|
DEPENDS ${ARG_CONFIG}
|
2022-10-02 20:34:32 +00:00
|
|
|
COMMAND ${UNCRUSTIFY_EXE} --update-config-with-doc
|
2024-03-18 21:16:53 +00:00
|
|
|
-c ${ARG_CONFIG} -o ${fixed_config})
|
|
|
|
list(APPEND options -c ${fixed_config})
|
2022-10-02 20:34:32 +00:00
|
|
|
# cmake-format: off
|
2022-10-15 07:14:08 +00:00
|
|
|
add_custom_target(${TARGET_NAME}-uncrustify-check
|
2024-03-18 21:16:53 +00:00
|
|
|
DEPENDS ${fixed_config}
|
|
|
|
COMMAND ${UNCRUSTIFY_EXE} ${options} --check ${sources})
|
2022-10-02 20:34:32 +00:00
|
|
|
|
2024-03-18 21:16:53 +00:00
|
|
|
list(APPEND options --replace --no-backup)
|
2022-10-15 07:14:08 +00:00
|
|
|
add_custom_target(${TARGET_NAME}-uncrustify
|
2024-03-18 21:16:53 +00:00
|
|
|
DEPENDS ${fixed_config}
|
|
|
|
COMMAND ${UNCRUSTIFY_EXE} ${options} --mtime ${sources})
|
2022-10-02 20:34:32 +00:00
|
|
|
|
2022-10-15 07:14:08 +00:00
|
|
|
add_custom_target(${TARGET_NAME}-uncrustify-append-comments
|
2024-03-18 21:16:53 +00:00
|
|
|
DEPENDS ${fixed_config}
|
|
|
|
COMMAND ${UNCRUSTIFY_EXE} ${options}
|
2022-10-06 12:14:38 +00:00
|
|
|
--set cmt_insert_class_header=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/classheader.txt
|
|
|
|
--set cmt_insert_file_footer=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/filefooter.txt
|
|
|
|
--set cmt_insert_file_header=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/fileheader.txt
|
|
|
|
--set cmt_insert_func_header=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/funcheader.txt
|
2024-03-18 21:16:53 +00:00
|
|
|
--set cmt_insert_before_ctor_dtor=true --mtime ${sources})
|
2022-10-02 20:34:32 +00:00
|
|
|
# cmake-format: on
|
|
|
|
|
2022-10-15 07:14:08 +00:00
|
|
|
add_dependencies(myx-uncrustify ${TARGET_NAME}-uncrustify)
|
|
|
|
add_dependencies(myx-uncrustify-check ${TARGET_NAME}-uncrustify-check)
|
|
|
|
add_dependencies(myx-uncrustify-append-comments ${TARGET_NAME}-uncrustify-append-comments)
|
2022-10-02 20:34:32 +00:00
|
|
|
endfunction()
|