148 lines · bash
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.0+3#4# Parse arguments common to the various scripts.5#6# . scripts/parseargs.sh7#8# Include into other Linux kernel tools/memory-model scripts.9#10# Copyright IBM Corporation, 201811#12# Author: Paul E. McKenney <paulmck@linux.ibm.com>13 14T=/tmp/parseargs.sh.$$15mkdir $T16 17# Initialize one parameter: initparam name default18initparam () {19 echo if test -z '"$'$1'"' > $T/s20 echo then >> $T/s21 echo $1='"'$2'"' >> $T/s22 echo export $1 >> $T/s23 echo fi >> $T/s24 echo $1_DEF='$'$1 >> $T/s25 . $T/s26}27 28initparam LKMM_DESTDIR "."29initparam LKMM_HERD_OPTIONS "-conf linux-kernel.cfg"30initparam LKMM_HW_MAP_FILE ""31initparam LKMM_JOBS `getconf _NPROCESSORS_ONLN`32initparam LKMM_PROCS "3"33initparam LKMM_TIMEOUT "1m"34 35scriptname=$036 37usagehelp () {38 echo "Usage $scriptname [ arguments ]"39 echo " --destdir path (place for .litmus.out, default by .litmus)"40 echo " --herdopts -conf linux-kernel.cfg ..."41 echo " --hw AArch64"42 echo " --jobs N (number of jobs, default one per CPU)"43 echo " --procs N (litmus tests with at most this many processes)"44 echo " --timeout N (herd7 timeout (e.g., 10s, 1m, 2hr, 1d, '')"45 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'"46 exit 147}48 49usage () {50 usagehelp 1>&251}52 53# checkarg --argname argtype $# arg mustmatch cannotmatch54checkarg () {55 if test $3 -le 156 then57 echo $1 needs argument $2 matching \"$5\"58 usage59 fi60 if echo "$4" | grep -q -e "$5"61 then62 :63 else64 echo $1 $2 \"$4\" must match \"$5\"65 usage66 fi67 if echo "$4" | grep -q -e "$6"68 then69 echo $1 $2 \"$4\" must not match \"$6\"70 usage71 fi72}73 74while test $# -gt 075do76 case "$1" in77 --destdir)78 checkarg --destdir "(path to directory)" "$#" "$2" '.\+' '^--'79 LKMM_DESTDIR="$2"80 mkdir $LKMM_DESTDIR > /dev/null 2>&181 if ! test -e "$LKMM_DESTDIR"82 then83 echo "Cannot create directory --destdir '$LKMM_DESTDIR'"84 usage85 fi86 if test -d "$LKMM_DESTDIR" -a -x "$LKMM_DESTDIR"87 then88 :89 else90 echo "Directory --destdir '$LKMM_DESTDIR' insufficient permissions to create files"91 usage92 fi93 shift94 ;;95 --herdopts|--herdopt)96 checkarg --destdir "(herd7 options)" "$#" "$2" '.*' '^--'97 LKMM_HERD_OPTIONS="$2"98 shift99 ;;100 --hw)101 checkarg --hw "(.map file architecture name)" "$#" "$2" '^[A-Za-z0-9_-]\+' '^--'102 LKMM_HW_MAP_FILE="$2"103 shift104 ;;105 -j[1-9]*)106 njobs="`echo $1 | sed -e 's/^-j//'`"107 trailchars="`echo $njobs | sed -e 's/[0-9]\+\(.*\)$/\1/'`"108 if test -n "$trailchars"109 then110 echo $1 trailing characters "'$trailchars'"111 usagehelp112 fi113 LKMM_JOBS="`echo $njobs | sed -e 's/^\([0-9]\+\).*$/\1/'`"114 ;;115 --jobs|--job|-j)116 checkarg --jobs "(number)" "$#" "$2" '^[1-9][0-9]*$' '^--'117 LKMM_JOBS="$2"118 shift119 ;;120 --procs|--proc)121 checkarg --procs "(number)" "$#" "$2" '^[0-9]\+$' '^--'122 LKMM_PROCS="$2"123 shift124 ;;125 --timeout)126 checkarg --timeout "(timeout spec)" "$#" "$2" '^\([0-9]\+[smhd]\?\|\)$' '^--'127 LKMM_TIMEOUT="$2"128 shift129 ;;130 --)131 shift132 break133 ;;134 *)135 echo Unknown argument $1136 usage137 ;;138 esac139 shift140done141if test -z "$LKMM_TIMEOUT"142then143 LKMM_TIMEOUT_CMD=""; export LKMM_TIMEOUT_CMD144else145 LKMM_TIMEOUT_CMD="timeout $LKMM_TIMEOUT"; export LKMM_TIMEOUT_CMD146fi147rm -rf $T148