aboutsummaryrefslogtreecommitdiffstats
path: root/mutator.sh
diff options
context:
space:
mode:
Diffstat (limited to 'mutator.sh')
-rwxr-xr-xmutator.sh394
1 files changed, 197 insertions, 197 deletions
diff --git a/mutator.sh b/mutator.sh
index 1797cc5..ed67f00 100755
--- a/mutator.sh
+++ b/mutator.sh
@@ -15,217 +15,217 @@ PRINT_PRETTY=false
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 "-f, --file tells mutator to run the commands from the file."
- 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 " auto-refac runs the automatic-refactoring on the inputs. auto-refac will run "
- 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 "-pp, --print-pretty, prints the output in a pretty format in a new file. The new file has the same name with a \"-pretty\" added to the name in the same directory."
- echo "-t, --test, runs the tests on the built executables. It should be followed by an executable name and the test to run on it. The accepted options are: tdd,valgrind,xsd,precommit."
- echo " For example: ./mutator.sh --test mutator-lvl0 valgrind"
- 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\""
- echo ""
- echo "For a list of available options for each executable run them with -help to see a list."
- exit 0
- ;;
- -pp|--print-pretty)
- PRINT_PRETTY=true
- ;;
- -t|--test)
- if [[ "$2" == mutator-lvl0 && "$3" == valgrind ]]; then
- echo "Running command:"
- echo "valgrind ./"$2" -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log"
- "valgrind" ./"$2" -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log
- elif [[ "$2" == mutator-lvl0 && "$3" == tdd ]]; then
- echo "Running command:"
- echo "./mutator-lvl0 -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log"
- "./mutator-lvl0" -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log
- elif [[ "$2" == mutator-lvl0 && "$3" == xsd ]]; then
- echo "xmllint --noout --schema ./samples/mutator0-report-schema.xsd ./test/misrareport.xml"
- "xmllint" --noout --schema ./samples/mutator0-report-schema.xsd ./test/misrareport.xml
+ passarg="$1"
+ case $passarg in
+ -c|--command)
+ COMMAND="$2"
+ shift
+ ;;
+ -h|--help|-help)
+ echo "-h, --help prints out the help.Obviously..."
+ echo "-f, --file tells mutator to run the commands from the file."
+ 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 " auto-refac runs the automatic-refactoring on the inputs. auto-refac will run "
+ 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 "-pp, --print-pretty, prints the output in a pretty format in a new file. The new file has the same name with a \"-pretty\" added to the name in the same directory."
+ echo "-t, --test, runs the tests on the built executables. It should be followed by an executable name and the test to run on it. The accepted options are: tdd,valgrind,xsd,precommit."
+ echo " For example: ./mutator.sh --test mutator-lvl0 valgrind"
+ 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\""
+ echo ""
+ echo "For a list of available options for each executable run them with -help to see a list."
+ exit 0
+ ;;
+ -pp|--print-pretty)
+ PRINT_PRETTY=true
+ ;;
+ -t|--test)
+ if [[ "$2" == mutator-lvl0 && "$3" == valgrind ]]; then
+ echo "Running command:"
+ echo "valgrind ./"$2" -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log"
+ "valgrind" ./"$2" -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log
+ elif [[ "$2" == mutator-lvl0 && "$3" == tdd ]]; then
+ echo "Running command:"
+ echo "./mutator-lvl0 -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log"
+ "./mutator-lvl0" -SysHeader=false -MainOnly=true ./test/testFuncs1.c ./test/testFuncs2.c ./test/testFuncs3.c -- -std=c90 -I/lib/gcc/x86_64-redhat-linux/6.3.1/include > ./test/misra-log
+ elif [[ "$2" == mutator-lvl0 && "$3" == xsd ]]; then
+ echo "xmllint --noout --schema ./samples/mutator0-report-schema.xsd ./test/misrareport.xml"
+ "xmllint" --noout --schema ./samples/mutator0-report-schema.xsd ./test/misrareport.xml
elif [[ "$2" == precommit ]]; then
cd ./extra-tools
"./precommitTests.sh"
- else
- echo "unknown combination of options: $2 and $3"
- exit 127
- fi
- exit 0
- ;;
- -f|--file)
- INPUT_FILE="$2"
- while read -r line
- do
- case $line in
- action_name:*)
- F_ACTION_NAME=${line:12:$((${#line}))}
- ;;
- executable_name:*)
- F_EXEC_NAME=${line:16:$((${#line}))}
- ;;
- exec_opts:*)
- F_EXEC_COPTS=${line:10:$((${#line}))}
- ;;
- in_files:*)
- F_IN_FILES=${line:9:$((${#line}))}
- ;;
- libtooling_options:*)
- F_LIBTOOLING_OPTS=${line:19:$((${#line}))}
- ;;
- out_files:*)
- F_OUT_FILE=${line:10:$((${#line}))}
- ;;
- log_files:*)
- F_LOG_FILE=${line:10:$((${#line}))}
- ;;
- \#*)
- #ignore.its a comment.
- ;;
- print_pretty:*)
- F_PRINT_PRETTY=${line:13:$((${#line}))}
- ;;
- end_action:*)
- F_END_ACTION=${line:11:$((${#line}))}
- if [[ "$F_END_ACTION" == run ]]; then
- echo "running $F_ACTION_NAME ..."
- echo "running ./$F_EXEC_NAME $F_EXEC_COPTS $F_IN_FILES -- $F_LIBTOOLING_OPTS > $F_OUT_FILE for $F_ACTION_NAME"
+ else
+ echo "unknown combination of options: $2 and $3"
+ exit 127
+ fi
+ exit 0
+ ;;
+ -f|--file)
+ INPUT_FILE="$2"
+ while read -r line
+ do
+ case $line in
+ action_name:*)
+ F_ACTION_NAME=${line:12:$((${#line}))}
+ ;;
+ executable_name:*)
+ F_EXEC_NAME=${line:16:$((${#line}))}
+ ;;
+ exec_opts:*)
+ F_EXEC_COPTS=${line:10:$((${#line}))}
+ ;;
+ in_files:*)
+ F_IN_FILES=${line:9:$((${#line}))}
+ ;;
+ libtooling_options:*)
+ F_LIBTOOLING_OPTS=${line:19:$((${#line}))}
+ ;;
+ out_files:*)
+ F_OUT_FILE=${line:10:$((${#line}))}
+ ;;
+ log_files:*)
+ F_LOG_FILE=${line:10:$((${#line}))}
+ ;;
+ \#*)
+ #ignore.its a comment.
+ ;;
+ print_pretty:*)
+ F_PRINT_PRETTY=${line:13:$((${#line}))}
+ ;;
+ end_action:*)
+ F_END_ACTION=${line:11:$((${#line}))}
+ if [[ "$F_END_ACTION" == run ]]; then
+ echo "running $F_ACTION_NAME ..."
+ echo "running ./$F_EXEC_NAME $F_EXEC_COPTS $F_IN_FILES -- $F_LIBTOOLING_OPTS > $F_OUT_FILE for $F_ACTION_NAME"
eval "./"$F_EXEC_NAME $F_EXEC_COPTS $F_IN_FILES -- $F_LIBTOOLING_OPTS > $F_OUT_FILE
- if [[ "$F_PRINT_PRETTY" = true ]]; then
- echo "running pretty print..."
- source ./extra-tools/ReportPrintPretty.sh $F_OUT_FILE $F_OUT_FILE-pretty
- fi
- elif [[ "$F_END_ACTION" == stop ]]; then
- #skip running ths action
- echo "skipping $F_ACTION_NAME ..."
- else
- echo "unknown option $F_END_ACTION for end_action. currently the only acceptable options are \"run\" and \"stop\"."
- fi
- ;;
- esac
- done < "$INPUT_FILE"
- exit 0
- shift
- ;;
- -v|--version)
- echo "mutator-lvl0 1.0.0 Pre-release"
- echo "mutator 1.0.0. Demo"
- exit 0
- ;;
- -i|--input|-input)
- while [[ ! "$2" == -* ]] && [[ $# -gt 0 ]]; do
- INPUT="$INPUT"" ""$2"
- shift
- done
- ;;
- -opts|--options)
- OPTIONS="$2"
- shift
- ;;
- -copts|--customoptions)
- COPTIONS="$2"
- shift
- ;;
- -o|--output|-output)
- OUTPUT="$2"
- shift
- ;;
- *)
- #not a valid argument
- echo "$1 is not a valid argument..."
- exit 127
- ;;
- esac
- shift
+ if [[ "$F_PRINT_PRETTY" = true ]]; then
+ echo "running pretty print..."
+ source ./extra-tools/ReportPrintPretty.sh $F_OUT_FILE $F_OUT_FILE-pretty
+ fi
+ elif [[ "$F_END_ACTION" == stop ]]; then
+ #skip running ths action
+ echo "skipping $F_ACTION_NAME ..."
+ else
+ echo "unknown option $F_END_ACTION for end_action. currently the only acceptable options are \"run\" and \"stop\"."
+ fi
+ ;;
+ esac
+ done < "$INPUT_FILE"
+ exit 0
+ shift
+ ;;
+ -v|--version)
+ echo "mutator-lvl0 1.0.0 Pre-release"
+ echo "mutator 1.0.0. Demo"
+ exit 0
+ ;;
+ -i|--input|-input)
+ while [[ ! "$2" == -* ]] && [[ $# -gt 0 ]]; do
+ INPUT="$INPUT"" ""$2"
+ shift
+ done
+ ;;
+ -opts|--options)
+ OPTIONS="$2"
+ shift
+ ;;
+ -copts|--customoptions)
+ COPTIONS="$2"
+ shift
+ ;;
+ -o|--output|-output)
+ OUTPUT="$2"
+ shift
+ ;;
+ *)
+ #not a valid argument
+ echo "$1 is not a valid argument..."
+ exit 127
+ ;;
+ 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
+ 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
+ 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..."
+ echo "you haven't implemented it yet..."
elif [[ "$COMMAND" == "build-all" ]]; then
- echo "Building all executables..."
- "make" all
+ echo "Building all executables..."
+ "make" all
elif [[ "$COMMAND" == "run" ]];then
- echo "Running executables on target file..."
- "./mutator-lvl1" $INPUT -- > mutant-lvl1.c
- "./mutator-lvl2" mutant-lvl1.c -- > $OUTPUT
+ echo "Running executables on target file..."
+ "./mutator-lvl1" $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
- if [[ "$PRINT_PRETTY" = true ]]; then
- echo "running pretty print..."
- source ./extra-tools/ReportPrintPretty.sh ./test/misra-log ./test/misra-log-pretty
- fi
+ 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
+ if [[ "$PRINT_PRETTY" = true ]]; then
+ echo "running pretty print..."
+ source ./extra-tools/ReportPrintPretty.sh ./test/misra-log ./test/misra-log-pretty
+ fi
elif [[ "$COMMAND" == "default" ]]; then
- echo "This option is deprecated..."
- exit 0
- echo "Building all target executables..."
- "make" all CXX=clang++ BUILD_MODE=COV_NO_CLANG_1Z
- echo "Ruunning the input through clang-format..."
- "clang-format" $INPUT -- > ./test/$OUTPUT_FORMAT
- "cp" ./test/$OUTPUT_FORMAT ./test/medium.c
- echo "Running all exetubales on target input..."
- echo "Level 1..."
- "./mutator-lvl1" ./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..."
- "clang-format" ./test/$OUTPUT -- > ./test/$OUTPUT_FORMAT
+ echo "This option is deprecated..."
+ exit 0
+ echo "Building all target executables..."
+ "make" all CXX=clang++ BUILD_MODE=COV_NO_CLANG_1Z
+ echo "Ruunning the input through clang-format..."
+ "clang-format" $INPUT -- > ./test/$OUTPUT_FORMAT
+ "cp" ./test/$OUTPUT_FORMAT ./test/medium.c
+ echo "Running all exetubales on target input..."
+ echo "Level 1..."
+ "./mutator-lvl1" ./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..."
+ "clang-format" ./test/$OUTPUT -- > ./test/$OUTPUT_FORMAT
elif [[ "$COMMAND" == "auto-refac" ]]; then
- echo "Warning! This option is not yet completely implemented."
- echo "Copying input file(s) to temp..."
- CP_INPUT_ARR=$(echo "$INPUT" | awk 'BEGIN{RS=" "}{print $1}')
- echo $CP_INPUT_ARR
- "cp" $CP_INPUT_ARR ./temp
- echo "Running clang-format on the copies of input(s)..."
- RUN_INPUT_ARR=$(ls ./temp | gawk 'BEGIN{RS="\n"}{print $1}')
- for loopinput in ${RUN_INPUT_ARR[@]}; do
- echo mut1-$loopinput
- echo "Running automatic-refactoring on input mut1-$loopinput..."
- "./mutator-lvl1" ./temp/$loopinput -- -w > ./temp/mut1-$loopinput
- "clang-format" -i $loopinput
- "./mutator-lvl2" ./temp/mut1-$loopinput -- -w > ./temp/mut2-$loopinput
- "clang-format" -i ./temp/mut2-$loopinput
- done
+ echo "Warning! This option is not yet completely implemented."
+ echo "Copying input file(s) to temp..."
+ CP_INPUT_ARR=$(echo "$INPUT" | awk 'BEGIN{RS=" "}{print $1}')
+ echo $CP_INPUT_ARR
+ "cp" $CP_INPUT_ARR ./temp
+ echo "Running clang-format on the copies of input(s)..."
+ RUN_INPUT_ARR=$(ls ./temp | gawk 'BEGIN{RS="\n"}{print $1}')
+ for loopinput in ${RUN_INPUT_ARR[@]}; do
+ echo mut1-$loopinput
+ echo "Running automatic-refactoring on input mut1-$loopinput..."
+ "./mutator-lvl1" ./temp/$loopinput -- -w > ./temp/mut1-$loopinput
+ "clang-format" -i $loopinput
+ "./mutator-lvl2" ./temp/mut1-$loopinput -- -w > ./temp/mut2-$loopinput
+ "clang-format" -i ./temp/mut2-$loopinput
+ done
elif [[ "$COMMAND" == "jack" ]]; then
- echo
+ echo
else
- echo "$COMMAND is not a valid command..."
- echo "Use --help for a list of valid commands..."
- exit 1
+ echo "$COMMAND is not a valid command..."
+ echo "Use --help for a list of valid commands..."
+ exit 1
fi