Message ID | 20240913085709.122017-1-nrb@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [kvm-unit-tests,v1] configure: process arguments not starting with dash | expand |
On 13/09/2024 10.56, Nico Boehr wrote: > We have arguments in the configure script which take an additional > parameter, like --host-key-document. The syntax is as follows: > > --host-key-document=PARAMETER > > We always expect an equals sign (=) after the argument name and the > parameter. > > If the user omits '=' between the argument name and parameter, both > words will be interpreted as parameter-less arguments. > > This on its own is not a problem, since the parameter would normally not > be a valid argument name and should hence lead to an error message. > However, this doesn't work currently. > > The configure script stops parsing arguments when an argument starting > with something other than a dash is encountered. This means that > specifying arguments such as: > > --host-key-document /tmp/test --gen-se-header=/usr/bin/gen-se-header > > Will actually lead to --gen-se-header being ignored. Note the space > instead of equals sign after --host-hey-document. > > In addition, --host-key-document only verifies its parameter when it is > not empty so we will just continue as if no arguments were specified in > the case above. > > This can be highly confusing, hence consume _all_ specified arguments, > even if they don't start with a dash. This will lead to an error in the > case above. > > Signed-off-by: Nico Boehr <nrb@linux.ibm.com> > --- > configure | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) Thanks, applied! Thomas
diff --git a/configure b/configure index 27ae9cc89657..85a2358ca20b 100755 --- a/configure +++ b/configure @@ -102,8 +102,11 @@ EOF exit 1 } -while [[ "$1" = -* ]]; do +optno=1 +argc=$# +while [[ $optno -le $argc ]]; do opt="$1"; shift + optno=$(( $optno + 1 )) arg= if [[ "$opt" = *=* ]]; then arg="${opt#*=}"
We have arguments in the configure script which take an additional parameter, like --host-key-document. The syntax is as follows: --host-key-document=PARAMETER We always expect an equals sign (=) after the argument name and the parameter. If the user omits '=' between the argument name and parameter, both words will be interpreted as parameter-less arguments. This on its own is not a problem, since the parameter would normally not be a valid argument name and should hence lead to an error message. However, this doesn't work currently. The configure script stops parsing arguments when an argument starting with something other than a dash is encountered. This means that specifying arguments such as: --host-key-document /tmp/test --gen-se-header=/usr/bin/gen-se-header Will actually lead to --gen-se-header being ignored. Note the space instead of equals sign after --host-hey-document. In addition, --host-key-document only verifies its parameter when it is not empty so we will just continue as if no arguments were specified in the case above. This can be highly confusing, hence consume _all_ specified arguments, even if they don't start with a dash. This will lead to an error in the case above. Signed-off-by: Nico Boehr <nrb@linux.ibm.com> --- configure | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)