< prev index next >

common/autoconf/basics.m4

Print this page

        

*** 21,30 **** --- 21,98 ---- # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # + # Create a function/macro that takes a series of named arguments. The call is + # similar to AC_DEFUN, but the setup of the function looks like like this: + # BASIC_DEFUN_NAMED([MYFUNC], [FOO *BAR], [$@], [ + # ... do something + # AC_MSG_NOTICE([Value of BAR is ARG_BAR]) + # ]) + # A star (*) in front of a named argument means that it is required and it's + # presence will be verified. To pass e.g. the first value as a normal indexed + # argument, use [m4_shift($@)] as the third argument instead of [$@]. These + # arguments are referenced in the function by their name prefixed by ARG_, e.g. + # "ARG_FOO". + # + # The generated function can be called like this: + # MYFUNC(FOO: [foo-val], BAR: + # [ + # $ECHO hello world + # ]) + # + # + # Argument 1: Name of the function to define + # Argument 2: List of legal named arguments, with a * prefix for required arguments + # Argument 3: Argument array to treat as named, typically $@ + # Argument 4: The main function body + AC_DEFUN([BASIC_DEFUN_NAMED], + [ + AC_DEFUN($1, [ + m4_foreach(arg, m4_split($2), [ + m4_if(m4_bregexp(arg, [^\*]), -1, + [ + m4_set_add(legal_named_args, arg) + ], + [ + m4_set_add(legal_named_args, m4_substr(arg, 1)) + m4_set_add(required_named_args, m4_substr(arg, 1)) + ] + ) + ]) + + m4_foreach([arg], [$3], [ + m4_define(arg_name, m4_substr(arg, 0, m4_bregexp(arg, [: ]))) + m4_set_contains(legal_named_args, arg_name, [],[AC_MSG_ERROR([Internal error: arg_name is not a valid named argument to [$1]. Valid arguments are 'm4_set_contents(legal_named_args, [ ])'.])]) + m4_set_remove(required_named_args, arg_name) + m4_set_remove(legal_named_args, arg_name) + m4_pushdef([ARG_][]arg_name, m4_substr(arg, m4_incr(m4_incr(m4_bregexp(arg, [: ]))))) + m4_set_add(defined_args, arg_name) + m4_undefine([arg_name]) + ]) + m4_set_empty(required_named_args, [], [ + AC_MSG_ERROR([Internal error: Required named arguments are missing for [$1]. Missing arguments: 'm4_set_contents(required_named_args, [ ])']) + ]) + m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([legal_named_args])), [ + m4_pushdef([ARG_][]arg, []) + m4_set_add(defined_args, arg) + ]) + m4_set_delete(legal_named_args) + m4_set_delete(required_named_args) + + # Execute function body + $4 + + m4_foreach([arg], m4_indir([m4_dquote]m4_set_listc([defined_args])), [ + m4_popdef([ARG_][]arg) + ]) + + m4_set_delete(defined_args) + ]) + ]) + # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) # If so, then append $1 to $2 \ # Also set JVM_ARG_OK to true/false depending on outcome. AC_DEFUN([ADD_JVM_ARG_IF_OK], [
< prev index next >