CMake: Add a custom clang format target
Checks to see if clang-format can be found, and if it is, sets up a custom target that will run against the src dir and auto formats all files. In MSVC, this is a project, and in Makefiles, its a make target
This commit is contained in:
		@@ -319,6 +319,53 @@ if (UNIX OR MINGW)
 | 
			
		||||
    endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Setup a custom clang-format target (if clang-format can be found) that will run
 | 
			
		||||
# against all the src files. This should be used before making a pull request.
 | 
			
		||||
# =======================================================================
 | 
			
		||||
 | 
			
		||||
set(CLANG_FORMAT_POSTFIX "-6.0")
 | 
			
		||||
find_program(CLANG_FORMAT
 | 
			
		||||
    NAMES clang-format${CLANG_FORMAT_POSTFIX}
 | 
			
		||||
          clang-format
 | 
			
		||||
    PATHS ${CMAKE_BINARY_DIR}/externals)
 | 
			
		||||
# if find_program doesn't find it, try to download from externals
 | 
			
		||||
if (NOT CLANG_FORMAT)
 | 
			
		||||
    if (WIN32)
 | 
			
		||||
        message(STATUS "Clang format not found! Downloading...")
 | 
			
		||||
        set(CLANG_FORMAT "${CMAKE_BINARY_DIR}/externals/clang-format${CLANG_FORMAT_POSTFIX}.exe")
 | 
			
		||||
        file(DOWNLOAD
 | 
			
		||||
            https://github.com/yuzu-emu/ext-windows-bin/raw/master/clang-format${CLANG_FORMAT_POSTFIX}.exe
 | 
			
		||||
            "${CLANG_FORMAT}" SHOW_PROGRESS
 | 
			
		||||
            STATUS DOWNLOAD_SUCCESS)
 | 
			
		||||
        if (NOT DOWNLOAD_SUCCESS EQUAL 0)
 | 
			
		||||
            message(WARNING "Could not download clang format! Disabling the clang format target")
 | 
			
		||||
            file(REMOVE ${CLANG_FORMAT})
 | 
			
		||||
            unset(CLANG_FORMAT)
 | 
			
		||||
        endif()
 | 
			
		||||
    else()
 | 
			
		||||
        message(WARNING "Clang format not found! Disabling the clang format target")
 | 
			
		||||
    endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if (CLANG_FORMAT)
 | 
			
		||||
    set(SRCS ${CMAKE_SOURCE_DIR}/src)
 | 
			
		||||
    set(CCOMMENT "Running clang format against all the .h and .cpp files in src/")
 | 
			
		||||
    if (WIN32)
 | 
			
		||||
        add_custom_target(clang-format
 | 
			
		||||
            COMMAND powershell.exe -Command "${CLANG_FORMAT} -i @(Get-ChildItem -Recurse ${SRCS}/* -Include \'*.h\', \'*.cpp\')"
 | 
			
		||||
            COMMENT ${CCOMMENT})
 | 
			
		||||
    elseif(MINGW)
 | 
			
		||||
        add_custom_target(clang-format
 | 
			
		||||
            COMMAND find `cygpath -u ${SRCS}` -iname *.h -o -iname *.cpp | xargs `cygpath -u ${CLANG_FORMAT}` -i
 | 
			
		||||
            COMMENT ${CCOMMENT})
 | 
			
		||||
    else()
 | 
			
		||||
        add_custom_target(clang-format
 | 
			
		||||
            COMMAND find ${SRCS} -iname *.h -o -iname *.cpp | xargs ${CLANG_FORMAT} -i
 | 
			
		||||
            COMMENT ${CCOMMENT})
 | 
			
		||||
    endif()
 | 
			
		||||
    unset(SRCS)
 | 
			
		||||
    unset(CCOMMENT)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Include source code
 | 
			
		||||
# ===================
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user