We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 02ef457 commit a839faeCopy full SHA for a839fae
src/collectors.m4
@@ -163,6 +163,7 @@ m4_define([__ADD_OPTIONAL_ARGUMENT], [m4_do(
163
[_FILL_IN_VALUES_FOR_AN_OPTIONAL_ARGUMENT([$1], [$3], _arg_varname, [$5], [$2], [$4])],
164
[m4_popdef([_arg_varname])],
165
[m4_define([_DISTINCT_OPTIONAL_ARGS_COUNT], m4_incr(_DISTINCT_OPTIONAL_ARGS_COUNT))],
166
+ [m4_set_add([_ALL_OPTIONAL_ARGUMENTS], [$1])],
167
)])
168
169
@@ -525,9 +526,10 @@ m4_define([_ARG_POSITIONAL_DOUBLEDASH], [m4_do(
525
526
527
528
-argbash_api([ARGBASH_INDICATE_SUPPLIED], [m4_do(
529
+argbash_api([ARGBASH_INDICATE_SUPPLIED], _CHECK_PASSED_ARGS_COUNT(1)[m4_do(
530
[[$0($@)]],
531
[m4_set_add_all([HAVE_SUPPLIED], $@)],
532
+ [CHECK_SUPPLIED_ARE_OPTIONAL([HAVE_SUPPLIED], [_ALL_OPTIONAL_ARGUMENTS], [FATAL_NON_OPTIONAL_SUPPLIED])],
533
534
535
src/utilities.m4
@@ -340,3 +340,20 @@ m4_define([UNDERLINE], [m4_do(
340
[m4_if(m4_len([$1]), 0, ,
341
[m4_for(idx, 1, m4_len([$1]), 1, [$2])])],
342
343
+
344
345
+dnl
346
+dnl $1: Set of arguments marked as supplied
347
+dnl $2: Set of all optional arguments
348
+dnl $3: Macro that gets called with the supplied arguments that are not optional, if any.
349
+m4_define([CHECK_SUPPLIED_ARE_OPTIONAL], [m4_do(
350
+ [m4_set_add_all([_temp_supplied_not_optional]m4_set_difference([$1], [$2]))],
351
+ [m4_if(m4_set_size([_temp_supplied_not_optional]), 0,
352
+ [],
353
+ [$3([_temp_supplied_not_optional])])],
354
+ [m4_set_delete([_temp_set_supplied])],
355
+)])
356
357
358
+m4_define([FATAL_NON_OPTIONAL_SUPPLIED],
359
+ [m4_fatal([ARGBASH_INDICATE_SUPPLIED: The following arguments are not optional:] m4_set_dump([$1], [, ]))])
tests/regressiontests/Makefile
@@ -126,6 +126,7 @@ TESTS_GEN += \
126
gen-test-bool-default \
127
gen-test-pos-opt \
128
gen-test-pos-opt2 \
129
+ gen-test-supplied-non-optional \
130
gen-test-more \
131
gen-test-illegal-pos \
132
gen-test-illegal-opt \
@@ -561,6 +562,9 @@ gen-test-pos-opt: $(TESTDIR)/gen-test-pos-opt.m4 $(ARGBASH_BIN)
561
562
gen-test-pos-opt2: $(TESTDIR)/gen-test-pos-opt2.m4 $(ARGBASH_BIN)
563
ERROR="same_arg" $(REVERSE) $(ARGBASH_EXEC) $< > /dev/null
564
565
+gen-test-supplied-non-optional: $(TESTDIR)/gen-test-supplied-non-optional.m4 $(ARGBASH_BIN)
566
+ ERROR="ARGBASH_INDICATE_SUPPLIED: The following arguments are not optional: pos-arg" $(REVERSE) $(ARGBASH_EXEC) $< > /dev/null
567
568
gen-test-more: $(TESTDIR)/gen-test-more.m4 $(ARGBASH_BIN)
569
ERROR="is unknown" $(REVERSE) $(ARGBASH_EXEC) $< > /dev/null
570
tests/regressiontests/make/tests/tests-base.m4
@@ -329,6 +329,7 @@ ADD_GENTEST_BASH([infinity-illegal], [number of expected positional arguments be
329
ADD_GENTEST_BASH([bool-default], ['on' or 'off' are allowed as boolean defaults])
330
ADD_GENTEST_BASH([pos-opt], [same-arg])
331
ADD_GENTEST_BASH([pos-opt2], [same_arg])
332
+ADD_GENTEST_BASH([supplied-non-optional], [ARGBASH_INDICATE_SUPPLIED: The following arguments are not optional: pos-arg])
333
ADD_GENTEST_BASH([more], [is unknown])
334
ADD_GENTEST_BASH([illegal-pos], [contains forbidden characters])
335
ADD_GENTEST_BASH([illegal-opt], [one character])
tests/unittests/check-utils.m4
@@ -144,3 +144,14 @@ assert_equals(_DEFAULT_IF_NARGS_GREATER_THAN(4, 4, [], foo), [foo])
144
assert_equals(_DEFAULT_IF_NARGS_GREATER_THAN(4, 5, [], foo), [foo])
145
assert_equals(_DEFAULT_IF_NARGS_GREATER_THAN(4, 5, [], [BOMB]), [BOMB])
146
assert_equals(_DEFAULT_IF_NARGS_GREATER_THAN(4, 5, [BOMB], foo), [BOMB])
147
148
+m4_define([ON_NOT_OPTIONAL], [called:][m4_set_dump([$1], [,])])
149
+m4_set_add_all([X], [a], [b], [c])
150
+m4_set_add_all([Y], [b], [c], [d])
151
+assert_equals(CHECK_SUPPLIED_ARE_OPTIONAL([X], [X], [ON_NOT_OPTIONAL]), [])
152
+assert_equals(CHECK_SUPPLIED_ARE_OPTIONAL([X], [Y], [ON_NOT_OPTIONAL]), [called:a])
153
+assert_equals(CHECK_SUPPLIED_ARE_OPTIONAL([Y], [X], [ON_NOT_OPTIONAL]), [called:d])
154
+m4_set_add_all([Y], [x], [y], [z])
155
+assert_equals(CHECK_SUPPLIED_ARE_OPTIONAL([Y], [X], [ON_NOT_OPTIONAL]), [called:z,y,x,d])
156
+m4_set_delete([X])
157
+m4_set_delete([Y])
0 commit comments