aboutsummaryrefslogtreecommitdiffstats
path: root/git
diff options
context:
space:
mode:
Diffstat (limited to 'git')
-rw-r--r--git/Makefile4
-rwxr-xr-xgit/git-cdiff44
-rwxr-xr-xgit/new-c-proj81
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