aboutsummaryrefslogtreecommitdiff
path: root/benchmarks/shellbench/files/patch-shellbench
blob: 7a110cc447e15df400267dc33348457fe3358ea3 (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
--- shellbench.orig	2020-08-06 15:07:20 UTC
+++ shellbench
@@ -12,6 +12,8 @@ COUNT_WIDTH=${SHELLBENCH_COUNT_WIDTH:-10}
 SHOW_ERROR=''
 CORRECTION_MODE=''
 NULLLOOP_COUNT=''
+ALL_SAMPLES=''
+SAMPLE_DIR=%%DATADIR%%
 
 usage() {
 cat<<HERE
@@ -20,10 +22,19 @@ Usage: shellbench [options] files...
   -s, --shell SHELL[,SHELL...]  The shell(s) to run the benchmark. [default: sh]
   -t, --time SECONDS            Benchmark execution time. (SECONDS > 0) [default: 3]
   -w, --warmup SECONDS          Benchmark preparation time. (SECONDS > 0) [default: 1]
+  -a, --allsamples              Execute all sample scripts
   -c, --correct                 Enable correction mode to eliminate loop overhead.
   -e, --error                   Display error details.
   -h, --help                    You're looking at it.
+  -l, --listsamples             List names of the sample scripts
+
+The sample scripts can be found in %%DATADIR%% .
 HERE
+if [ -r "%%DOCSDIR%%/README.md" ]; then
+cat<<HERE
+Their format is documented in %%DOCSDIR%%/README.md .
+HERE
+fi
 }
 
 preprocess() {
@@ -313,6 +324,14 @@ display_footer() {
 
 PARAMS=''
 
+all_samples() {
+  PARAMS="$PARAMS "$(echo %%DATADIR%%/*.sh)
+}
+
+list_samples() {
+  cd %%DATADIR%%; echo *.sh
+}
+
 abort() { echo "$@" >&2; exit 1; }
 unknown() { abort "Unrecognized option '$1'"; }
 required() { [ $# -gt 1 ] || abort "Option '$1' requires an argument"; }
@@ -327,9 +346,11 @@ parse_options() {
       -s | --shell  ) required "$@" && shift; SHELLS=$1 ;;
       -t | --time   ) required "$@" && shift; BENCHMARK_TIME=$1 ;;
       -w | --warmup ) required "$@" && shift; WARMUP_TIME=$1 ;;
+      -a | --allsamples ) ALL_SAMPLES=1 ;;
       -c | --correct) CORRECTION_MODE=1 ;;
       -e | --error  ) SHOW_ERROR=1 ;;
       -h | --help   ) usage; exit ;;
+      -l | --listsamples ) list_samples; exit ;;
       --) shift; params PARAMS $(($OPTIND - $#)) $OPTIND; break ;;
       -?*) unknown "$@" ;;
       *) param PARAMS $(($OPTIND - $#))
@@ -342,6 +363,11 @@ ${__SOURCED__:+return}
 
 trap '' HUP
 parse_options "$@"
+
+[ "$ALL_SAMPLES" ] && all_samples
+
+[ -z "$PARAMS" ] && { usage; exit; }
+
 eval "set -- $PARAMS"
 
 [ "$CORRECTION_MODE" ] && NULLLOOP_COUNT=${SHELLBENCH_NULLLOOP_COUNT:-}
@@ -352,6 +378,9 @@ display_header "$SHELLS"
   $(printf '%s\n' '#bench "loop only"' '@begin' '@end' | preprocess)
 HERE
 for file in "$@"; do
+  [ -r "$file" ] || if [ -r "%%DATADIR%%/$file" ]; then
+     file="%%DATADIR%%/$file"
+  fi
   preprocess < "$file" | process "${file##*/}"
 done
 display_footer