162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+ 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Parse arguments common to the various scripts. 562306a36Sopenharmony_ci# 662306a36Sopenharmony_ci# . scripts/parseargs.sh 762306a36Sopenharmony_ci# 862306a36Sopenharmony_ci# Include into other Linux kernel tools/memory-model scripts. 962306a36Sopenharmony_ci# 1062306a36Sopenharmony_ci# Copyright IBM Corporation, 2018 1162306a36Sopenharmony_ci# 1262306a36Sopenharmony_ci# Author: Paul E. McKenney <paulmck@linux.ibm.com> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciT=/tmp/parseargs.sh.$$ 1562306a36Sopenharmony_cimkdir $T 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci# Initialize one parameter: initparam name default 1862306a36Sopenharmony_ciinitparam () { 1962306a36Sopenharmony_ci echo if test -z '"$'$1'"' > $T/s 2062306a36Sopenharmony_ci echo then >> $T/s 2162306a36Sopenharmony_ci echo $1='"'$2'"' >> $T/s 2262306a36Sopenharmony_ci echo export $1 >> $T/s 2362306a36Sopenharmony_ci echo fi >> $T/s 2462306a36Sopenharmony_ci echo $1_DEF='$'$1 >> $T/s 2562306a36Sopenharmony_ci . $T/s 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ciinitparam LKMM_DESTDIR "." 2962306a36Sopenharmony_ciinitparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg" 3062306a36Sopenharmony_ciinitparam LKMM_HW_MAP_FILE "" 3162306a36Sopenharmony_ciinitparam LKMM_JOBS `getconf _NPROCESSORS_ONLN` 3262306a36Sopenharmony_ciinitparam LKMM_PROCS "3" 3362306a36Sopenharmony_ciinitparam LKMM_TIMEOUT "1m" 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciscriptname=$0 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ciusagehelp () { 3862306a36Sopenharmony_ci echo "Usage $scriptname [ arguments ]" 3962306a36Sopenharmony_ci echo " --destdir path (place for .litmus.out, default by .litmus)" 4062306a36Sopenharmony_ci echo " --herdopts -conf linux-kernel.cfg ..." 4162306a36Sopenharmony_ci echo " --hw AArch64" 4262306a36Sopenharmony_ci echo " --jobs N (number of jobs, default one per CPU)" 4362306a36Sopenharmony_ci echo " --procs N (litmus tests with at most this many processes)" 4462306a36Sopenharmony_ci echo " --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')" 4562306a36Sopenharmony_ci 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'" 4662306a36Sopenharmony_ci exit 1 4762306a36Sopenharmony_ci} 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciusage () { 5062306a36Sopenharmony_ci usagehelp 1>&2 5162306a36Sopenharmony_ci} 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci# checkarg --argname argtype $# arg mustmatch cannotmatch 5462306a36Sopenharmony_cicheckarg () { 5562306a36Sopenharmony_ci if test $3 -le 1 5662306a36Sopenharmony_ci then 5762306a36Sopenharmony_ci echo $1 needs argument $2 matching \"$5\" 5862306a36Sopenharmony_ci usage 5962306a36Sopenharmony_ci fi 6062306a36Sopenharmony_ci if echo "$4" | grep -q -e "$5" 6162306a36Sopenharmony_ci then 6262306a36Sopenharmony_ci : 6362306a36Sopenharmony_ci else 6462306a36Sopenharmony_ci echo $1 $2 \"$4\" must match \"$5\" 6562306a36Sopenharmony_ci usage 6662306a36Sopenharmony_ci fi 6762306a36Sopenharmony_ci if echo "$4" | grep -q -e "$6" 6862306a36Sopenharmony_ci then 6962306a36Sopenharmony_ci echo $1 $2 \"$4\" must not match \"$6\" 7062306a36Sopenharmony_ci usage 7162306a36Sopenharmony_ci fi 7262306a36Sopenharmony_ci} 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ciwhile test $# -gt 0 7562306a36Sopenharmony_cido 7662306a36Sopenharmony_ci case "$1" in 7762306a36Sopenharmony_ci --destdir) 7862306a36Sopenharmony_ci checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--' 7962306a36Sopenharmony_ci LKMM_DESTDIR="$2" 8062306a36Sopenharmony_ci mkdir $LKMM_DESTDIR > /dev/null 2>&1 8162306a36Sopenharmony_ci if ! test -e "$LKMM_DESTDIR" 8262306a36Sopenharmony_ci then 8362306a36Sopenharmony_ci echo "Cannot create directory --destdir '$LKMM_DESTDIR'" 8462306a36Sopenharmony_ci usage 8562306a36Sopenharmony_ci fi 8662306a36Sopenharmony_ci if test -d "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR" 8762306a36Sopenharmony_ci then 8862306a36Sopenharmony_ci : 8962306a36Sopenharmony_ci else 9062306a36Sopenharmony_ci echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files" 9162306a36Sopenharmony_ci usage 9262306a36Sopenharmony_ci fi 9362306a36Sopenharmony_ci shift 9462306a36Sopenharmony_ci ;; 9562306a36Sopenharmony_ci --herdopts|--herdopt) 9662306a36Sopenharmony_ci checkarg --destdir "(herd7 options)" "$#" "$2" '.*' '^--' 9762306a36Sopenharmony_ci LKMM_HERD_OPTIONS="$2" 9862306a36Sopenharmony_ci shift 9962306a36Sopenharmony_ci ;; 10062306a36Sopenharmony_ci --hw) 10162306a36Sopenharmony_ci checkarg --hw "(.map file architecture name)" "$#" "$2" '^[A-Za-z0-9_-]\+' '^--' 10262306a36Sopenharmony_ci LKMM_HW_MAP_FILE="$2" 10362306a36Sopenharmony_ci shift 10462306a36Sopenharmony_ci ;; 10562306a36Sopenharmony_ci -j[1-9]*) 10662306a36Sopenharmony_ci njobs="`echo $1 | sed -e 's/^-j//'`" 10762306a36Sopenharmony_ci trailchars="`echo $njobs | sed -e 's/[0-9]\+\(.*\)$/\1/'`" 10862306a36Sopenharmony_ci if test -n "$trailchars" 10962306a36Sopenharmony_ci then 11062306a36Sopenharmony_ci echo $1 trailing characters "'$trailchars'" 11162306a36Sopenharmony_ci usagehelp 11262306a36Sopenharmony_ci fi 11362306a36Sopenharmony_ci LKMM_JOBS="`echo $njobs | sed -e 's/^\([0-9]\+\).*$/\1/'`" 11462306a36Sopenharmony_ci ;; 11562306a36Sopenharmony_ci --jobs|--job|-j) 11662306a36Sopenharmony_ci checkarg --jobs "(number)" "$#" "$2" '^[1-9][0-9]*$' '^--' 11762306a36Sopenharmony_ci LKMM_JOBS="$2" 11862306a36Sopenharmony_ci shift 11962306a36Sopenharmony_ci ;; 12062306a36Sopenharmony_ci --procs|--proc) 12162306a36Sopenharmony_ci checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--' 12262306a36Sopenharmony_ci LKMM_PROCS="$2" 12362306a36Sopenharmony_ci shift 12462306a36Sopenharmony_ci ;; 12562306a36Sopenharmony_ci --timeout) 12662306a36Sopenharmony_ci checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--' 12762306a36Sopenharmony_ci LKMM_TIMEOUT="$2" 12862306a36Sopenharmony_ci shift 12962306a36Sopenharmony_ci ;; 13062306a36Sopenharmony_ci --) 13162306a36Sopenharmony_ci shift 13262306a36Sopenharmony_ci break 13362306a36Sopenharmony_ci ;; 13462306a36Sopenharmony_ci *) 13562306a36Sopenharmony_ci echo Unknown argument $1 13662306a36Sopenharmony_ci usage 13762306a36Sopenharmony_ci ;; 13862306a36Sopenharmony_ci esac 13962306a36Sopenharmony_ci shift 14062306a36Sopenharmony_cidone 14162306a36Sopenharmony_ciif test -z "$LKMM_TIMEOUT" 14262306a36Sopenharmony_cithen 14362306a36Sopenharmony_ci LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD 14462306a36Sopenharmony_cielse 14562306a36Sopenharmony_ci LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD 14662306a36Sopenharmony_cifi 14762306a36Sopenharmony_cirm -rf $T 148