mirror of https://github.com/zeldaret/oot.git
				
				
				
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| FORMAT_VER="11"
 | |
| FORMAT_OPTS="-i -style=file"
 | |
| TIDY_OPTS="-p . --fix --fix-errors"
 | |
| COMPILER_OPTS="-fno-builtin -std=gnu90 -Iinclude -Isrc -D_LANGUAGE_C -DNON_MATCHING"
 | |
| 
 | |
| # https://backreference.org/2010/05/23/sanitizing-files-with-no-trailing-newline/index.html
 | |
| # "gets the last character of the file pipes it into read, which will exit with
 | |
| # a nonzero exit code if it encounters EOF before newline (so, if the last
 | |
| # character of the file isn't a newline). If read exits nonzero, then append a
 | |
| # newline onto the file using echo (if read exits 0, that satisfies the ||, so
 | |
| # the echo command isn't run)." (https://stackoverflow.com/a/34865616)
 | |
| function add_final_newline () {
 | |
|     for file in "$@"
 | |
|     do
 | |
|         tail -c1 $file | read -r _ || echo >> $file
 | |
|     done
 | |
| }
 | |
| export -f add_final_newline
 | |
| 
 | |
| shopt -s globstar
 | |
| 
 | |
| if [ $(command -v clang-format) ]
 | |
| then
 | |
|     CLANG_FORMAT="clang-format"
 | |
| else
 | |
|     if [ $(command -v clang-format-${FORMAT_VER}) ]
 | |
|     then
 | |
|         CLANG_FORMAT="clang-format-${FORMAT_VER}"
 | |
|     else
 | |
|         echo "Neither clang-format nor clang-format-${FORMAT_VER} found. Exiting."
 | |
|         exit 1
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if (( $# > 0 )); then
 | |
|     echo "Formatting file(s) $*"
 | |
|     echo "Running clang-format..."
 | |
|     ${CLANG_FORMAT} ${FORMAT_OPTS} "$@"
 | |
|     echo "Running clang-tidy..."
 | |
|     clang-tidy ${TIDY_OPTS} "$@" -- ${COMPILER_OPTS} &> /dev/null
 | |
|     echo "Adding missing final new lines..."
 | |
|     add_final_newline "$@"
 | |
|     echo "Done formatting file(s) $*"
 | |
|     exit
 | |
| fi
 | |
| 
 | |
| echo "Formatting C files. This will take a bit"
 | |
| echo "Running clang-format..."
 | |
| ${CLANG_FORMAT} ${FORMAT_OPTS} src/**/*.c
 | |
| echo "Running clang-tidy..."
 | |
| clang-tidy ${TIDY_OPTS} src/**/*.c -- ${COMPILER_OPTS} &> /dev/null
 | |
| echo "Adding missing final new lines..."
 | |
| find src/ -type f -name "*.c" -exec bash -c 'add_final_newline "$@"' bash {} +
 | |
| find assets/xml/ -type f -name "*.xml" -exec bash -c 'add_final_newline "$@"' bash {} +
 | |
| echo "Done formatting all files."
 |