#!/bin/sh #---------------------------------------------------------------------------# # vim: ts=4 sw=4 expandtab ft=sh #---------------------------------------------------------------------------# # Copyright (C) 2005-2006 The University of Melbourne. # Copyright (C) 2020 The Mercury team. # This file may only be copied under the terms of the GNU General # Public License - see the file COPYING in the Mercury distribution. #---------------------------------------------------------------------------# # # IMPORTANT: the manpage is produced automatically from this help # message, so if you change the help message, don't forget to check # that the manpage still looks OK. Help="\ Name: mtc - gathering trace counts from Mercury programs Usage: mtc [options] []... Description: \`mtc' invokes the specified command \` ...'. If that command is a Mercury program that was compiled with debugging enabled (e.g. using the \`--debug' option), or if that command invokes such a program, then mtc will cause the program to count the number of times each event is executed, and to write out that data to a file. Otherwise, mtc will execute the command line as if the mtc prefix weren't there. Options: -c, --coverage-test Ordinarily, the generated trace count file contains only nonzero trace counts. This option causes even zero counts to be written out, since coverage testing needs to know which parts of the code are not executed. -o , --output-file Save the generated trace counts to . -s , --summary-file= If this option is given, the trace counts are put into a new file whose name is .N for a small integer N, choosing N to be the smallest integer for which .N doesn't yet exist. If this is not initially possible for a small enough N (due probably to previous runs), then the program will replace all of the .N files with a summary named just ; if existed already, it will be included in the summary as well. This way, at the end of a sequence of runs of the program, the command \"mtc_union *\" will compute a summary of all the trace counts files. --summary-count= Gives the maximum value of N to use with --summary-file. --help Display this message. If neither the -o nor the -s option is given, then the trace counts are put into a file whose name is automatically generated. This name will start with the prefix ".mercury_trace_counts", followed by a mangled version of the name of the executable, and then the process id. The -o and -s options are mutually exclusive. Environment variables: MERCURY_OPTIONS. " #---------------------------------------------------------------------------# # # process the command line options # coverage_test=false output_file="" summary_file="" summary_limit="" while test "$#" -gt 0 do case "$1" in -c|--coverage-test) coverage_test=true ;; --help) echo "${Help}" exit 0 ;; -o|--output-file) output_file="$2"; shift ;; -o*) output_file="`expr $1 : '-o\(.*\)'`" ;; --output-file=*) output_file="`expr $1 : '--output-file=\(.*\)'`" ;; -s|--summary-file) summary_file="$2" shift ;; -s*) summary_file="`expr $1 : '-s\(.*\)'`" ;; --summary-file=*) summary_file="`expr $1 : '--summary-file=\(.*\)'`" ;; --summary-limit) summary_limit="$2" shift ;; --summary-limit=*) summary_limit="`expr $1 : '--summary-limit=\(.*\)'`" ;; --) shift break ;; -*) echo "$0: unknown option \`$1'" 1>&2 exit 1 ;; *) break ;; esac shift done case $# in 0) echo "Usage: mtc [options] [ ...]" 1>&2 exit 1 ;; esac if test "${output_file}" != "" -a "${summary_file}" != "" then echo "The options --output-file and --summary-file are incompatible." exit 1 fi #---------------------------------------------------------------------------# # # Set the environment variables used by the Mercury runtime to the appropriate # values to enable the gathering of trace counts, and then finally use # ${invoke_cmd} to invoke the command. # MERCURY_OPTIONS="${MERCURY_OPTIONS} --trace-count" if "${coverage_test}" then MERCURY_OPTIONS="${MERCURY_OPTIONS} --coverage-test" fi if test "${summary_file}" != "" then MERCURY_OPTIONS="${MERCURY_OPTIONS} --trace-count-summary-file=${summary_file}" fi if test "${summary_limit}" != "" then MERCURY_OPTIONS="${MERCURY_OPTIONS} --trace-count-summary-limit=${summary_limit}" fi if test "${output_file}" != "" then MERCURY_OPTIONS="${MERCURY_OPTIONS} --tc-output-file ${output_file}" fi export MERCURY_OPTIONS exec "$@" #---------------------------------------------------------------------------#