92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| include_guard(GLOBAL)
 | |
| 
 | |
| if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
 | |
|   set(MYX_CMAKE_LIB_UNCRUSTIFY_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}")
 | |
| endif()
 | |
| 
 | |
| find_program(UNCRUSTIFY_EXE NAMES uncrustify)
 | |
| 
 | |
| function(myx_uncrustify TARGET_NAME)
 | |
|   if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
 | |
|     set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${MYX_CMAKE_LIB_UNCRUSTIFY_DIR_BACKPORT})
 | |
|   endif()
 | |
| 
 | |
|   myx_skip_external_target(${TARGET_NAME})
 | |
| 
 | |
|   set(options)
 | |
|   set(oneValueArgs CONFIG)
 | |
|   set(multiValueArgs)
 | |
|   cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 | |
| 
 | |
|   if(NOT ARG_CONFIG)
 | |
|     set(ARG_CONFIG "${PROJECT_SOURCE_DIR}/.uncrustify.cfg")
 | |
|     if(NOT EXISTS ${ARG_CONFIG})
 | |
|       set(ARG_CONFIG "${CMAKE_SOURCE_DIR}/.uncrustify.cfg")
 | |
|     endif()
 | |
|   endif()
 | |
| 
 | |
|   if(NOT EXISTS ${ARG_CONFIG})
 | |
|     myx_message_notice("MyxCMake: uncrustify config is not found")
 | |
|     return()
 | |
|   endif()
 | |
| 
 | |
|   if(NOT UNCRUSTIFY_EXE)
 | |
|     myx_message_notice("MyxCMake: uncrustify executable is not found")
 | |
|     return()
 | |
|   endif()
 | |
| 
 | |
|   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()
 | |
| 
 | |
|   # Динамически сгенерированные файлы исключаются
 | |
|   get_target_property(target_type ${TARGET_NAME} TYPE)
 | |
|   if(${target_type} STREQUAL "INTERFACE_LIBRARY")
 | |
|     get_target_property(s ${TARGET_NAME} INTERFACE_SOURCES)
 | |
|   else()
 | |
|     get_target_property(s ${TARGET_NAME} SOURCES)
 | |
|   endif()
 | |
|   foreach(iter ${s})
 | |
|     string(FIND ${iter} ${CMAKE_BINARY_DIR} pos)
 | |
|     if(pos EQUAL -1)
 | |
|       list(APPEND src ${iter})
 | |
|     endif()
 | |
|   endforeach()
 | |
| 
 | |
|   set(__fixed_config ${PROJECT_BINARY_DIR}/uncrustify-${TARGET_NAME}.cfg)
 | |
| 
 | |
|   add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/uncrustify-${TARGET_NAME}.cfg
 | |
|                      COMMAND ${UNCRUSTIFY_EXE} --update-config-with-doc
 | |
|                                                -c ${ARG_CONFIG} -o ${__fixed_config})
 | |
|   list(APPEND __options -c ${__fixed_config})
 | |
|   # cmake-format: off
 | |
|   add_custom_target(${TARGET_NAME}-uncrustify-check
 | |
|     DEPENDS ${__fixed_config}
 | |
|     COMMAND ${UNCRUSTIFY_EXE} ${__options} --check ${src})
 | |
| 
 | |
|   list(APPEND __options --replace --no-backup)
 | |
|   add_custom_target(${TARGET_NAME}-uncrustify
 | |
|     DEPENDS ${__fixed_config}
 | |
|     COMMAND ${UNCRUSTIFY_EXE} ${__options} --mtime ${src})
 | |
| 
 | |
|   add_custom_target(${TARGET_NAME}-uncrustify-append-comments
 | |
|     DEPENDS ${__fixed_config}
 | |
|     COMMAND ${UNCRUSTIFY_EXE} ${__options}
 | |
|             --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
 | |
|             --set cmt_insert_before_ctor_dtor=true --mtime ${src})
 | |
|   # cmake-format: on
 | |
| 
 | |
|   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)
 | |
| endfunction()
 |