aboutsummaryrefslogtreecommitdiffstats
path: root/service/do.sh
blob: fd3b8b0febed1d7adbc06cafd6d8d2bdb815a5bb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/sh

SCRIPTPATH="$(dirname $(readlink -f "$0"))"
cd "$SCRIPTPATH"

makefile="
all: .cleansrc

.cleansrc: src/*
	bash do.sh cleansrc src container/src
	touch .cleansrc
"

shopt -s expand_aliases
alias pushd="pushd &>/dev/null"
alias popd="popd &>/dev/null"

if [ "$1" == "compose" ]; then
	# ensure container files are up to date
	make --file <(echo "$makefile")

	# forward commands to compose
	pushd container
	docker-compose ${@:2}
	popd
elif [ "$1" == "cleansrc" ]; then
	if [ $# -lt 3 ]; then
		echo "USAGE: do.sh cleansrc <SRC> <DST>"
		exit 0
	fi

	# copy files
	src="$2"
	dst="$3"
	[ -e "$dst" ] && rm -rf "$dst"
	mkdir -p "$dst"
	cp -r "$src"/{*.c,*.h,Makefile,msgs} "$dst"

	# strip comments
	find "$dst" | while read path; do
		if [ -f "$path" ]; then
			if [ ! -z $(echo "$path" | grep '.[hc]$') ]; then
				sed -i -e 's/^\s*\/\*.*\*\/\s*$//g' "$path"     # remove /* */ style comments
				sed -i -e 's/\s*\/\*.*\*\/\s*/ /g' "$path"      # remove /* */ style comments
				sed -i -e 's/\/\/.*//g' "$path"                 # remove // style comments
				sed -i -e ':a;N;$!ba;s/\n\{3,\}/\n\n/g' "$path" # collapse multiple newlines
				sed -i -e 's/fprintf(\s*stderr\s*,\s*/printf(/g' "$path" # replace fprintf stderr
			elif [ "$(basename "$path")" == "Makefile" ]; then
				sed -i -e 's/\s*#.*//g' "$path"                 # remove # style comments
				sed -i -e ':a;N;$!ba;s/\n\{3,\}/\n\n/g' "$path" # collapse multiple newlines
			fi
		fi
	done
elif [ "$1" == "test" ]; then
	SRCDIR="$PWD/src" DATADIR="$PWD/container/data" bash "tests/test.sh" ${@:2}
elif [ "$1" == "make" ]; then
	# build a normal version
	cd src
	if [ -e ".safebuild" ]; then
		make clean
		rm ".safebuild"
	fi
	make
elif [ "$1" == "make-safe" ]; then
	# build a 'safe' version with flagstore patches

	cd src
	make clean
	touch ".safebuild"

	for f in $(ls | grep '\.[ch]$'); do
		cp "$f" "safe_$f"
	done

	git apply patches/flagstore1.diff
	git apply patches/flagstore2.diff

	PREFIX="safe_" make

	rm safe_*
else
	echo "USAGE: do.sh (compose) [args..]"
	echo "EXAMPLES:"
	echo "    do.sh compose up --build   # starts the docker container"
	echo "    do.sh cleansrc <src> <dst> # post-process source files for release"
	echo "    do.sh make-safe            # create patched version of binary"
	echo "    do.sh test <cmd>           # run a test on the binary"
fi