diff options
Diffstat (limited to 'git')
| -rw-r--r-- | git/Makefile | 4 | ||||
| -rwxr-xr-x | git/git-cdiff | 44 | ||||
| -rwxr-xr-x | git/new-c-proj | 81 |
3 files changed, 118 insertions, 11 deletions
diff --git a/git/Makefile b/git/Makefile index 1794675..cca3bd0 100644 --- a/git/Makefile +++ b/git/Makefile @@ -16,9 +16,12 @@ install: test ! -d ~/.config/bash/aliases.d/git ln -sf -- ~/.dotfiles/git/bash-aliases ~/.config/bash/aliases.d/git ../check-installed-shebang ge + ../check-installed-shebang git-cdiff + ../check-in-path diff mkdir -p -- ~/.local/bin ln -sf -- ~/.dotfiles/git/ge ~/.local/bin/ ln -sf -- ~/.dotfiles/git/new-c-proj ~/.local/bin/ + ln -sf -- ~/.dotfiles/git/git-cdiff ~/.local/bin/ uninstall: +! ../check-installed git @@ -28,6 +31,7 @@ uninstall: -rmdir -- ~/.config/bash/aliases.d -unlink -- ~/.local/bin/ge -unlink -- ~/.local/bin/new-c-proj + -unlink -- ~/.local/bin/git-cdiff clean: -rm -f -- .config diff --git a/git/git-cdiff b/git/git-cdiff new file mode 100755 index 0000000..15d91e9 --- /dev/null +++ b/git/git-cdiff @@ -0,0 +1,44 @@ +#!/bin/dash +if test -z "${GIT_CDIFF_CONTEXT}"; then + git difftool -y -x "diff -c --color=always" "$@" +elif printf '%s' "${GIT_CDIFF_CONTEXT}" | grep -q '^-'; then + git difftool -y -x "diff ${GIT_CDIFF_CONTEXT} --color=always" "$@" +else + git difftool -y -x "diff -C${GIT_CDIFF_CONTEXT} --color=always" "$@" +fi | { + # this part of the pipeline is optional, it just makes GNU diff colouring bit nicer + if test "$TERM" = linux; then + sed '/^\(\x1b\[[0-9;]*m\)* /s/\x1b\[[0-9;]*m//g' + else + sed '/^\(\x1b\[[0-9;]*m\)* /s/^/\x1b\[2m/g' + fi +} | { + # this part of the pipeline is optional (and breaks diff format), it adds line number to the margin + if printf '%s' "${GIT_CDIFF_CONTEXT}" | grep -q '^-'; then + exec cat + fi + if test "$TERM" = linux; then + linecolour="35" + else + linecolour="2;35" + fi + lineno=x + while IFS= read -r line; do + if printf '%s\n' "$line" | sed 's/\x1b\[[0-9;]*m//g' | grep -q '^\(\*\*\* \|--- \)[0-9]*,[0-9]* \(\*\*\*\*\|----\)$'; then + lineno="$(printf '%s' "$line" | sed 's/\x1b\[[0-9;]*m//g' | sed 's/^\(\*\*\* \|--- \)\([0-9]*\),.*$/\2/')" + printf '%s\n' "$line" + elif test ! "$lineno" = x && printf '%s\n' "$line" | sed 's/\x1b\[[0-9;]*m//g' | grep -q '^\(!\|+\|-\| \) '; then + printf '\e[%sm%5i \e[m%s\n' "$linecolour" "$lineno" "$line" + lineno=$(( $lineno + 1 )) + else + lineno=x + printf '%s\n' "$line" + fi + done +} | { + if test -t 1; then + less -FRX + else + cat + fi +} diff --git a/git/new-c-proj b/git/new-c-proj index 8bd90f8..7546478 100755 --- a/git/new-c-proj +++ b/git/new-c-proj @@ -39,7 +39,11 @@ cat > .gitignore <<EOF *~ *.o *.a +*.t +*.f *.lo +*.to +*.fo *.su *.so *.so.* @@ -52,7 +56,9 @@ cat > .gitignore <<EOF EOF mkdir -p -- .git/info -printf '%s\n' '_*' '.hidden' '.makeenv' >> .git/info/exclude +printf '%s\n' '_*' '._*' '.hidden' '.makeenv' >> .git/info/exclude + +printf '%s\n' 'MAKEENV_OPTS_OPT_ATTACHED_ARG = j' 'CC = gcc-extreme -std=c99' >> .makeenv if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then UPPERCASE="$(printf '%s\n' "$1" | tr '[a-z-]' '[A-Z_]')" @@ -92,17 +98,37 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then x $1.h LOBJ = \$(OBJ:.o=.lo) + TOBJ = \$(OBJ:.o=.to) + + + ALL_CPPFLAGS = \$(CPPFLAGS) \$(FUZZED_CPPFLAGS) + ALL_CFLAGS = \$(CFLAGS) \$(FUZZED_CFLAGS) + ALL_LDFLAGS = \$(LDFLAGS) \$(FUZZED_LDFLAGS) - all: $1.a $1.\$(LIBEXT) + all: $1.a $1.\$(LIBEXT) \$(TEST) \$(OBJ): \$(HDR) \$(LOBJ): \$(HDR) + \$(TOBJ): \$(HDR) + \$(TEST): $1.a .c.o: - x \$(CC) -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS) + x \$(CC) -c -o \$@ \$< \$(ALL_CFLAGS) \$(COV_CFLAGS) \$(ALL_CPPFLAGS) \$(COV_CPPFLAGS) .c.lo: - x \$(CC) -fPIC -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS) + x \$(CC) -fPIC -c -o \$@ \$< \$(ALL_CFLAGS) \$(COV_CFLAGS) \$(ALL_CPPFLAGS) \$(COV_CPPFLAGS) + + .c.to: + x \$(CC) -DTEST -c -o \$@ \$< $\(G) \$(ALL_CFLAGS) \$(ALL_CPPFLAGS) \$(COV_CPPFLAGS) + + .to.t: + x \$(CC) -o \$@ \$< $1.a \$(G) \$(ALL_LDFLAGS) \$(COV_LDFLAGS) + + .c.fo: + x \$(CC) -DTEST -DFUZZ -c -o \$@ \$< \$(G) \$(ALL_CFLAGS) \$(ALL_CPPFLAGS) \$(FUZZ_CFLAGS) \$(FUZZ_CPPFLAGS) + + .fo.f: + x \$(CC) -o \$@ \$< $1.a \$(G) \$(ALL_LDFLAGS) \$(TEST_LDFLAGS) \$(FUZZ_LDFLAGS) $1.a: \$(OBJ) x @rm -f -- \$@ @@ -110,7 +136,7 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then x \$(AR) ts \$@ > /dev/null $1.\$(LIBEXT): \$(LOBJ) - x \$(CC) \$(LIBFLAGS) -o \$@ \$(LOBJ) \$(LDFLAGS) + x \$(CC) \$(LIBFLAGS) -o \$@ \$(LOBJ) \$(ALL_LDFLAGS) install: $1.a $1.\$(LIBEXT) x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/lib" @@ -132,9 +158,10 @@ if printf '%s\n' "$1" | grep '^lib' >/dev/null 2>/dev/null; then clean: x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.dll *.dylib x -rm -f -- *.gch *.gcov *.gcno *.gcda *.\$(LIBEXT) + x -rm -f -- *.t *.to *.f *.fo .SUFFIXES: - .SUFFIXES: .lo .o .c + .SUFFIXES: .lo .o .c .to .t .fo .f .PHONY: all install uninstall clean EOF @@ -181,14 +208,20 @@ else HDR = + + ALL_CPPFLAGS = \$(CPPFLAGS) \$(FUZZED_CPPFLAGS) + ALL_CFLAGS = \$(CFLAGS) \$(FUZZED_CFLAGS) + ALL_LDFLAGS = \$(LDFLAGS) \$(FUZZED_LDFLAGS) + + all: $1 \$(OBJ): \$(HDR) .c.o: - x \$(CC) -c -o \$@ \$< \$(CFLAGS) \$(CPPFLAGS) + x \$(CC) -c -o \$@ \$< \$(ALL_CFLAGS) \$(GOV_CFLAGS) \$(ALL_CPPFLAGS) \$(GOV_CPPFLAGS) $1: \$(OBJ) - x \$(CC) -o \$@ \$(OBJ) \$(LDFLAGS) + x \$(CC) -o \$@ \$(OBJ) \$(ALL_LDFLAGS) \$(COV_LDFLAGS) install: $1 x mkdir -p -- "\$(DESTDIR)\$(PREFIX)/bin" @@ -201,7 +234,8 @@ else x -rm -f -- "\$(DESTDIR)\$(MANPREFIX)/man1/$1.1" clean: - x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.gch *.gcov *.gcno *.gcda + x -rm -f -- *.o *.a *.lo *.su *.so *.so.* *.gch + x -rm -f -- *.gcov *.gcno *.gcda *.t *.to *.f *.fo x -rm -f -- $1 .SUFFIXES: @@ -217,7 +251,32 @@ cat > config.mk <<-EOF CC = c99 + COMMON_SANITIZE = -fsanitize=alignment,shift,signed-integer-overflow,object-size,null,undefined,bounds,address + CLANG_SANITIZE = -O1 \$(COMMON_SANITIZE),cfi -flto -fvisibility=hidden -fno-sanitize-trap=cfi + GCC_SANITIZE = -O1 \$(COMMON_SANITIZE) + #SANITIZE = \$(CLANG_SANITIZE) + #SANITIZE = \$(GCC_SANITIZE) + CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_GNU_SOURCE - CFLAGS = - LDFLAGS = + CFLAGS = \$(SANITIZE) + LDFLAGS = \$(SANITIZE) + + G = -g +EOF + +cat <<-EOF | sed 's/x\t/\t/g' > config-coverage-gcc.mk + CONFIGFILE_PROPER = config.mk + include \$(CONFIGFILE_PROPER) + + CC = \$(CC_PREFIX)gcc -std=c99 + GCOV = gcov + + COV_CPPFLAGS = -DCOVERAGE_TEST + COV_CFLAGS = --coverage -g -O0 + COV_LDFLAGS = --coverage -g -O0 + + G = + + coverage: check + x \$(GCOV) -pr -- *.gcda 2>&1 EOF |
