blob: 5c40661821ec8fc180eec1bc1312dca897ac01d5 (
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#!/bin/bash
#the UI for mutator. it's supposed to mimic the normal 'nix argument passing.
#the arguments' positions are not important. you also get long and short options.
#default args
#INPUT="./test/testFuncs1.c ./test/testFuncs2.c"
OUTPUT="./mutant.c"
OUTPUT_FORMAT="./mutant_format.c"
COMMAND="jack"
OPTIONS=""
COPTIONS=""
while [[ $# -gt 0 ]]
do
passarg="$1"
case $passarg in
-c|--command)
COMMAND="$2"
shift
;;
-h|--help|-help)
echo "-h, --help prints out the help.obviously..."
echo "-c, --command you can specify the command you want to pass to mutator."
echo " clean runs make clean."
echo " build-all runs make all."
echo " run runs the mutator executable on the target."
echo " default runs build-all and then run."
echo " format calls clang-format to format the mutant. later to be used for the test command."
echo " test runs the tests on the executables and checks the results."
echo " misrac checks for misrac rules"
echo "-v, --version prints out the version."
echo "-i, --input, -input lets you choose the input file(or white-space-separated list of files) that is going to be passed to the mutator executable(s)."
echo "-o, --output, -output lets you choose where to put the mutant."
echo "-opts --options, pass options to the executable(s). The executables support all the clang options. please enclose all the options in double quatation."
echo " for example: -opts \"-Wall std=c89\""
echo "-copts --customoptions, same as opts, but only used for custom options defined for the executable. for example: -copts \"-SysHeader=false -MainOnly=true\""
exit 0
;;
-NDEBUG)
echo "you are still deciding between passing the arg to make as a make arg or just writing into the makefile with the script."
echo "btw youre running in NDEBUG dumbdumb! asserts are not gonna work like this."
exit 0
;;
-v|--version)
echo "Version 1.0.0-Pre-release"
break
;;
-i|--input|-input)
while [[ ! "$2" == -* ]] && [[ $# -gt 0 ]]; do
INPUT="$INPUT"" ""$2"
#echo "INPUT = "$INPUT
shift
done
;;
-opts|--options)
OPTIONS="$2"
shift
;;
-copts|--customoptions)
COPTIONS="$2"
shift
;;
-o|--output|-output)
OUTPUT="$2"
shift
;;
*)
#not a valid argument
echo "$1 $2 is not a valid argument..."
break
;;
esac
shift
done
if [[ "$COMMAND" == "clean" ]]; then
echo "Running make clean..."
echo "Killing all mutants..."
"make" clean
rm ./test/"$OUTPUT"
rm ./test/misra-log
rm ./test/medium.c
rm ./test/mutant_format.c
rm ./test/mutant-lvl1.c
rm ./extra-tools/dump
elif [[ "$COMMAND" == "format" ]]; then
echo 'using clang-format to format the mutant...'
"/home/bloodstalker/llvm-clang/build/bin/clang-format" $OUTPUT > $OUTPUT_FORMAT
elif [[ "$COMMAND" == "test" ]]; then
echo "you haven't implemented it yet..."
elif [[ "$COMMAND" == "build-all" ]]; then
echo "Building all executables..."
"make" all
elif [[ "$COMMAND" == "run" ]];then
echo "Running executables on target file..."
"./mutator" $INPUT -- > mutant-lvl1.c
"./mutator-lvl2" mutant-lvl1.c -- > $OUTPUT
elif [[ "$COMMAND" == "misrac" ]]; then
echo "Removing previous XML report..."
"rm" ./test/misrareport.xml
echo "Removing previous JSON report..."
"rm" ./test/misrareport.json
echo "checking input file(s) against Misra-C 2004..."
echo "Command to run:"
echo "./mutator-lvl0 ${COPTIONS:0:$((${#COPTIONS}))} $INPUT -- ${OPTIONS:0:$((${#OPTIONS}))} > ./test/misra-log"
"./mutator-lvl0" ${COPTIONS:0:$((${#COPTIONS}))} $INPUT -- ${OPTIONS:0:$((${#OPTIONS}))} > ./test/misra-log
elif [[ "$COMMAND" == "default" ]]; then
echo "Building all target executables..."
"make" all
echo "Ruunning the input through clang-format..."
"/home/bloodstalker/llvm-clang/build/bin/clang-format" $INPUT -- > ./test/$OUTPUT_FORMAT
"cp" ./test/$OUTPUT_FORMAT ./test/medium.c
echo "Running all exetubales on target input..."
echo "Level 1..."
"./mutator" ./test/medium.c -- > ./test/mutant-lvl1.c
echo "Level 2..."
"./mutator-lvl2" ./test/mutant-lvl1.c -- > ./test/$OUTPUT
echo 'Using clang-format to format the mutant...'
"/home/bloodstalker/llvm-clang/build/bin/clang-format" ./test/$OUTPUT -- > ./test/$OUTPUT_FORMAT
elif [[ "$COMMAND" == "jack" ]]; then
echo
else
echo "$COMMAND is not a valid command..."
echo "Use --help for a list of valid commands..."
fi
|