1b02eb5b0SPaul E. McKenney#!/bin/sh
2b02eb5b0SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+
3b02eb5b0SPaul E. McKenney#
4*a4deb29aSPaul E. McKenney# Parse arguments common to the various scripts.
5b02eb5b0SPaul E. McKenney#
6b02eb5b0SPaul E. McKenney# . scripts/parseargs.sh
7b02eb5b0SPaul E. McKenney#
8b02eb5b0SPaul E. McKenney# Include into other Linux kernel tools/memory-model scripts.
9b02eb5b0SPaul E. McKenney#
10b02eb5b0SPaul E. McKenney# Copyright IBM Corporation, 2018
11b02eb5b0SPaul E. McKenney#
1261f615ccSPaul E. McKenney# Author: Paul E. McKenney <[email protected]>
13b02eb5b0SPaul E. McKenney
14b02eb5b0SPaul E. McKenneyT=/tmp/parseargs.sh.$$
15b02eb5b0SPaul E. McKenneymkdir $T
16b02eb5b0SPaul E. McKenney
17b02eb5b0SPaul E. McKenney# Initialize one parameter: initparam name default
18b02eb5b0SPaul E. McKenneyinitparam () {
19b02eb5b0SPaul E. McKenney	echo if test -z '"$'$1'"' > $T/s
20b02eb5b0SPaul E. McKenney	echo then >> $T/s
21b02eb5b0SPaul E. McKenney	echo	$1='"'$2'"' >> $T/s
22b02eb5b0SPaul E. McKenney	echo	export $1 >> $T/s
23b02eb5b0SPaul E. McKenney	echo fi >> $T/s
24b02eb5b0SPaul E. McKenney	echo $1_DEF='$'$1  >> $T/s
25b02eb5b0SPaul E. McKenney	. $T/s
26b02eb5b0SPaul E. McKenney}
27b02eb5b0SPaul E. McKenney
28b02eb5b0SPaul E. McKenneyinitparam LKMM_DESTDIR "."
29b02eb5b0SPaul E. McKenneyinitparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg"
30b1710979SPaul E. McKenneyinitparam LKMM_HW_MAP_FILE ""
31b02eb5b0SPaul E. McKenneyinitparam LKMM_JOBS `getconf _NPROCESSORS_ONLN`
32b02eb5b0SPaul E. McKenneyinitparam LKMM_PROCS "3"
33b02eb5b0SPaul E. McKenneyinitparam LKMM_TIMEOUT "1m"
34b02eb5b0SPaul E. McKenney
35b02eb5b0SPaul E. McKenneyscriptname=$0
36b02eb5b0SPaul E. McKenney
37b02eb5b0SPaul E. McKenneyusagehelp () {
38b02eb5b0SPaul E. McKenney	echo "Usage $scriptname [ arguments ]"
39b02eb5b0SPaul E. McKenney	echo "      --destdir path (place for .litmus.out, default by .litmus)"
40b02eb5b0SPaul E. McKenney	echo "      --herdopts -conf linux-kernel.cfg ..."
41b1710979SPaul E. McKenney	echo "      --hw AArch64"
42b02eb5b0SPaul E. McKenney	echo "      --jobs N (number of jobs, default one per CPU)"
43b02eb5b0SPaul E. McKenney	echo "      --procs N (litmus tests with at most this many processes)"
44b02eb5b0SPaul E. McKenney	echo "      --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')"
45b1710979SPaul E. McKenney	echo "Defaults: --destdir '$LKMM_DESTDIR_DEF' --herdopts '$LKMM_HERD_OPTIONS_DEF' --hw '$LKMM_HW_MAP_FILE' --jobs '$LKMM_JOBS_DEF' --procs '$LKMM_PROCS_DEF' --timeout '$LKMM_TIMEOUT_DEF'"
46b02eb5b0SPaul E. McKenney	exit 1
47b02eb5b0SPaul E. McKenney}
48b02eb5b0SPaul E. McKenney
49b02eb5b0SPaul E. McKenneyusage () {
50b02eb5b0SPaul E. McKenney	usagehelp 1>&2
51b02eb5b0SPaul E. McKenney}
52b02eb5b0SPaul E. McKenney
53b02eb5b0SPaul E. McKenney# checkarg --argname argtype $# arg mustmatch cannotmatch
54b02eb5b0SPaul E. McKenneycheckarg () {
55b02eb5b0SPaul E. McKenney	if test $3 -le 1
56b02eb5b0SPaul E. McKenney	then
57b02eb5b0SPaul E. McKenney		echo $1 needs argument $2 matching \"$5\"
58b02eb5b0SPaul E. McKenney		usage
59b02eb5b0SPaul E. McKenney	fi
60b02eb5b0SPaul E. McKenney	if echo "$4" | grep -q -e "$5"
61b02eb5b0SPaul E. McKenney	then
62b02eb5b0SPaul E. McKenney		:
63b02eb5b0SPaul E. McKenney	else
64b02eb5b0SPaul E. McKenney		echo $1 $2 \"$4\" must match \"$5\"
65b02eb5b0SPaul E. McKenney		usage
66b02eb5b0SPaul E. McKenney	fi
67b02eb5b0SPaul E. McKenney	if echo "$4" | grep -q -e "$6"
68b02eb5b0SPaul E. McKenney	then
69b02eb5b0SPaul E. McKenney		echo $1 $2 \"$4\" must not match \"$6\"
70b02eb5b0SPaul E. McKenney		usage
71b02eb5b0SPaul E. McKenney	fi
72b02eb5b0SPaul E. McKenney}
73b02eb5b0SPaul E. McKenney
74b02eb5b0SPaul E. McKenneywhile test $# -gt 0
75b02eb5b0SPaul E. McKenneydo
76b02eb5b0SPaul E. McKenney	case "$1" in
77b02eb5b0SPaul E. McKenney	--destdir)
78b02eb5b0SPaul E. McKenney		checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--'
79b02eb5b0SPaul E. McKenney		LKMM_DESTDIR="$2"
80b02eb5b0SPaul E. McKenney		mkdir $LKMM_DESTDIR > /dev/null 2>&1
81b02eb5b0SPaul E. McKenney		if ! test -e "$LKMM_DESTDIR"
82b02eb5b0SPaul E. McKenney		then
83b02eb5b0SPaul E. McKenney			echo "Cannot create directory --destdir '$LKMM_DESTDIR'"
84b02eb5b0SPaul E. McKenney			usage
85b02eb5b0SPaul E. McKenney		fi
868b99521fSPaul E. McKenney		if test -d "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR"
87b02eb5b0SPaul E. McKenney		then
88b02eb5b0SPaul E. McKenney			:
89b02eb5b0SPaul E. McKenney		else
90b02eb5b0SPaul E. McKenney			echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files"
91b02eb5b0SPaul E. McKenney			usage
92b02eb5b0SPaul E. McKenney		fi
93b02eb5b0SPaul E. McKenney		shift
94b02eb5b0SPaul E. McKenney		;;
95b02eb5b0SPaul E. McKenney	--herdopts|--herdopt)
9637c600a3SAndrea Parri		checkarg --destdir "(herd7 options)" "$#" "$2" '.*' '^--'
97b02eb5b0SPaul E. McKenney		LKMM_HERD_OPTIONS="$2"
98b02eb5b0SPaul E. McKenney		shift
99b02eb5b0SPaul E. McKenney		;;
100b1710979SPaul E. McKenney	--hw)
101b1710979SPaul E. McKenney		checkarg --hw "(.map file architecture name)" "$#" "$2" '^[A-Za-z0-9_-]\+' '^--'
102b1710979SPaul E. McKenney		LKMM_HW_MAP_FILE="$2"
103b1710979SPaul E. McKenney		shift
104b1710979SPaul E. McKenney		;;
105910cc959SPaul E. McKenney	-j[1-9]*)
106910cc959SPaul E. McKenney		njobs="`echo $1 | sed -e 's/^-j//'`"
107910cc959SPaul E. McKenney		trailchars="`echo $njobs | sed -e 's/[0-9]\+\(.*\)$/\1/'`"
108910cc959SPaul E. McKenney		if test -n "$trailchars"
109910cc959SPaul E. McKenney		then
110910cc959SPaul E. McKenney			echo $1 trailing characters "'$trailchars'"
111910cc959SPaul E. McKenney			usagehelp
112910cc959SPaul E. McKenney		fi
113910cc959SPaul E. McKenney		LKMM_JOBS="`echo $njobs | sed -e 's/^\([0-9]\+\).*$/\1/'`"
114910cc959SPaul E. McKenney		;;
115910cc959SPaul E. McKenney	--jobs|--job|-j)
1166e6586b0SPaul E. McKenney		checkarg --jobs "(number)" "$#" "$2" '^[1-9][0-9]*$' '^--'
117b02eb5b0SPaul E. McKenney		LKMM_JOBS="$2"
118b02eb5b0SPaul E. McKenney		shift
119b02eb5b0SPaul E. McKenney		;;
120b02eb5b0SPaul E. McKenney	--procs|--proc)
121b02eb5b0SPaul E. McKenney		checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--'
122b02eb5b0SPaul E. McKenney		LKMM_PROCS="$2"
123b02eb5b0SPaul E. McKenney		shift
124b02eb5b0SPaul E. McKenney		;;
125b02eb5b0SPaul E. McKenney	--timeout)
126b02eb5b0SPaul E. McKenney		checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--'
127b02eb5b0SPaul E. McKenney		LKMM_TIMEOUT="$2"
128b02eb5b0SPaul E. McKenney		shift
129b02eb5b0SPaul E. McKenney		;;
1308b99521fSPaul E. McKenney	--)
1318b99521fSPaul E. McKenney		shift
1328b99521fSPaul E. McKenney		break
1338b99521fSPaul E. McKenney		;;
134b02eb5b0SPaul E. McKenney	*)
135b02eb5b0SPaul E. McKenney		echo Unknown argument $1
136b02eb5b0SPaul E. McKenney		usage
137b02eb5b0SPaul E. McKenney		;;
138b02eb5b0SPaul E. McKenney	esac
139b02eb5b0SPaul E. McKenney	shift
140b02eb5b0SPaul E. McKenneydone
141b02eb5b0SPaul E. McKenneyif test -z "$LKMM_TIMEOUT"
142b02eb5b0SPaul E. McKenneythen
143b02eb5b0SPaul E. McKenney	LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD
144b02eb5b0SPaul E. McKenneyelse
145b02eb5b0SPaul E. McKenney	LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD
146b02eb5b0SPaul E. McKenneyfi
147b02eb5b0SPaul E. McKenneyrm -rf $T
148