1*b02eb5b0SPaul E. McKenney#!/bin/sh
2*b02eb5b0SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+
3*b02eb5b0SPaul E. McKenney#
4*b02eb5b0SPaul E. McKenney# the corresponding .litmus.out file, and does not judge the result.
5*b02eb5b0SPaul E. McKenney#
6*b02eb5b0SPaul E. McKenney# . scripts/parseargs.sh
7*b02eb5b0SPaul E. McKenney#
8*b02eb5b0SPaul E. McKenney# Include into other Linux kernel tools/memory-model scripts.
9*b02eb5b0SPaul E. McKenney#
10*b02eb5b0SPaul E. McKenney# Copyright IBM Corporation, 2018
11*b02eb5b0SPaul E. McKenney#
12*b02eb5b0SPaul E. McKenney# Author: Paul E. McKenney <[email protected]>
13*b02eb5b0SPaul E. McKenney
14*b02eb5b0SPaul E. McKenneyT=/tmp/parseargs.sh.$$
15*b02eb5b0SPaul E. McKenneymkdir $T
16*b02eb5b0SPaul E. McKenney
17*b02eb5b0SPaul E. McKenney# Initialize one parameter: initparam name default
18*b02eb5b0SPaul E. McKenneyinitparam () {
19*b02eb5b0SPaul E. McKenney	echo if test -z '"$'$1'"' > $T/s
20*b02eb5b0SPaul E. McKenney	echo then >> $T/s
21*b02eb5b0SPaul E. McKenney	echo	$1='"'$2'"' >> $T/s
22*b02eb5b0SPaul E. McKenney	echo	export $1 >> $T/s
23*b02eb5b0SPaul E. McKenney	echo fi >> $T/s
24*b02eb5b0SPaul E. McKenney	echo $1_DEF='$'$1  >> $T/s
25*b02eb5b0SPaul E. McKenney	. $T/s
26*b02eb5b0SPaul E. McKenney}
27*b02eb5b0SPaul E. McKenney
28*b02eb5b0SPaul E. McKenneyinitparam LKMM_DESTDIR "."
29*b02eb5b0SPaul E. McKenneyinitparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg"
30*b02eb5b0SPaul E. McKenneyinitparam LKMM_JOBS `getconf _NPROCESSORS_ONLN`
31*b02eb5b0SPaul E. McKenneyinitparam LKMM_PROCS "3"
32*b02eb5b0SPaul E. McKenneyinitparam LKMM_TIMEOUT "1m"
33*b02eb5b0SPaul E. McKenney
34*b02eb5b0SPaul E. McKenneyscriptname=$0
35*b02eb5b0SPaul E. McKenney
36*b02eb5b0SPaul E. McKenneyusagehelp () {
37*b02eb5b0SPaul E. McKenney	echo "Usage $scriptname [ arguments ]"
38*b02eb5b0SPaul E. McKenney	echo "      --destdir path (place for .litmus.out, default by .litmus)"
39*b02eb5b0SPaul E. McKenney	echo "      --herdopts -conf linux-kernel.cfg ..."
40*b02eb5b0SPaul E. McKenney	echo "      --jobs N (number of jobs, default one per CPU)"
41*b02eb5b0SPaul E. McKenney	echo "      --procs N (litmus tests with at most this many processes)"
42*b02eb5b0SPaul E. McKenney	echo "      --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')"
43*b02eb5b0SPaul E. McKenney	echo "Defaults: --destdir '$LKMM_DESTDIR_DEF' --herdopts '$LKMM_HERD_OPTIONS_DEF' --jobs '$LKMM_JOBS_DEF' --procs '$LKMM_PROCS_DEF' --timeout '$LKMM_TIMEOUT_DEF'"
44*b02eb5b0SPaul E. McKenney	exit 1
45*b02eb5b0SPaul E. McKenney}
46*b02eb5b0SPaul E. McKenney
47*b02eb5b0SPaul E. McKenneyusage () {
48*b02eb5b0SPaul E. McKenney	usagehelp 1>&2
49*b02eb5b0SPaul E. McKenney}
50*b02eb5b0SPaul E. McKenney
51*b02eb5b0SPaul E. McKenney# checkarg --argname argtype $# arg mustmatch cannotmatch
52*b02eb5b0SPaul E. McKenneycheckarg () {
53*b02eb5b0SPaul E. McKenney	if test $3 -le 1
54*b02eb5b0SPaul E. McKenney	then
55*b02eb5b0SPaul E. McKenney		echo $1 needs argument $2 matching \"$5\"
56*b02eb5b0SPaul E. McKenney		usage
57*b02eb5b0SPaul E. McKenney	fi
58*b02eb5b0SPaul E. McKenney	if echo "$4" | grep -q -e "$5"
59*b02eb5b0SPaul E. McKenney	then
60*b02eb5b0SPaul E. McKenney		:
61*b02eb5b0SPaul E. McKenney	else
62*b02eb5b0SPaul E. McKenney		echo $1 $2 \"$4\" must match \"$5\"
63*b02eb5b0SPaul E. McKenney		usage
64*b02eb5b0SPaul E. McKenney	fi
65*b02eb5b0SPaul E. McKenney	if echo "$4" | grep -q -e "$6"
66*b02eb5b0SPaul E. McKenney	then
67*b02eb5b0SPaul E. McKenney		echo $1 $2 \"$4\" must not match \"$6\"
68*b02eb5b0SPaul E. McKenney		usage
69*b02eb5b0SPaul E. McKenney	fi
70*b02eb5b0SPaul E. McKenney}
71*b02eb5b0SPaul E. McKenney
72*b02eb5b0SPaul E. McKenneywhile test $# -gt 0
73*b02eb5b0SPaul E. McKenneydo
74*b02eb5b0SPaul E. McKenney	case "$1" in
75*b02eb5b0SPaul E. McKenney	--destdir)
76*b02eb5b0SPaul E. McKenney		checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--'
77*b02eb5b0SPaul E. McKenney		LKMM_DESTDIR="$2"
78*b02eb5b0SPaul E. McKenney		mkdir $LKMM_DESTDIR > /dev/null 2>&1
79*b02eb5b0SPaul E. McKenney		if ! test -e "$LKMM_DESTDIR"
80*b02eb5b0SPaul E. McKenney		then
81*b02eb5b0SPaul E. McKenney			echo "Cannot create directory --destdir '$LKMM_DESTDIR'"
82*b02eb5b0SPaul E. McKenney			usage
83*b02eb5b0SPaul E. McKenney		fi
84*b02eb5b0SPaul E. McKenney		if test -d "$LKMM_DESTDIR" -a -w "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR"
85*b02eb5b0SPaul E. McKenney		then
86*b02eb5b0SPaul E. McKenney			:
87*b02eb5b0SPaul E. McKenney		else
88*b02eb5b0SPaul E. McKenney			echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files"
89*b02eb5b0SPaul E. McKenney			usage
90*b02eb5b0SPaul E. McKenney		fi
91*b02eb5b0SPaul E. McKenney		shift
92*b02eb5b0SPaul E. McKenney		;;
93*b02eb5b0SPaul E. McKenney	--herdopts|--herdopt)
94*b02eb5b0SPaul E. McKenney		checkarg --destdir "(herd options)" "$#" "$2" '.*' '^--'
95*b02eb5b0SPaul E. McKenney		LKMM_HERD_OPTIONS="$2"
96*b02eb5b0SPaul E. McKenney		shift
97*b02eb5b0SPaul E. McKenney		;;
98*b02eb5b0SPaul E. McKenney	--jobs|--job)
99*b02eb5b0SPaul E. McKenney		checkarg --jobs "(number)" "$#" "$2" '^[0-9]\+$' '^--'
100*b02eb5b0SPaul E. McKenney		LKMM_JOBS="$2"
101*b02eb5b0SPaul E. McKenney		shift
102*b02eb5b0SPaul E. McKenney		;;
103*b02eb5b0SPaul E. McKenney	--procs|--proc)
104*b02eb5b0SPaul E. McKenney		checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--'
105*b02eb5b0SPaul E. McKenney		LKMM_PROCS="$2"
106*b02eb5b0SPaul E. McKenney		shift
107*b02eb5b0SPaul E. McKenney		;;
108*b02eb5b0SPaul E. McKenney	--timeout)
109*b02eb5b0SPaul E. McKenney		checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--'
110*b02eb5b0SPaul E. McKenney		LKMM_TIMEOUT="$2"
111*b02eb5b0SPaul E. McKenney		shift
112*b02eb5b0SPaul E. McKenney		;;
113*b02eb5b0SPaul E. McKenney	*)
114*b02eb5b0SPaul E. McKenney		echo Unknown argument $1
115*b02eb5b0SPaul E. McKenney		usage
116*b02eb5b0SPaul E. McKenney		;;
117*b02eb5b0SPaul E. McKenney	esac
118*b02eb5b0SPaul E. McKenney	shift
119*b02eb5b0SPaul E. McKenneydone
120*b02eb5b0SPaul E. McKenneyif test -z "$LKMM_TIMEOUT"
121*b02eb5b0SPaul E. McKenneythen
122*b02eb5b0SPaul E. McKenney	LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD
123*b02eb5b0SPaul E. McKenneyelse
124*b02eb5b0SPaul E. McKenney	LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD
125*b02eb5b0SPaul E. McKenneyfi
126*b02eb5b0SPaul E. McKenneyrm -rf $T
127