From abb5945bd0b10b14cdc43966145b1a34125393cc Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (l)" Date: Mon, 12 Nov 2018 23:07:59 +0100 Subject: Help: Document that function invocation is case-insensitive --- Help/command/function.rst | 67 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/Help/command/function.rst b/Help/command/function.rst index 4a223b4..7b10381 100644 --- a/Help/command/function.rst +++ b/Help/command/function.rst @@ -9,27 +9,9 @@ Start recording a function for later invocation as a command. endfunction() -Defines a function named ```` that takes arguments -named ````, ... -The ```` in the function definition are recorded; -they are not invoked until the function is invoked. When -the function is invoked, the recorded ```` are first -modified by replacing formal parameters (``${arg1}``, ...) -with the arguments passed, and then invoked as normal commands. - -In addition to referencing the formal parameters you can reference the -``ARGC`` variable which will be set to the number of arguments passed -into the function as well as ``ARGV0``, ``ARGV1``, ``ARGV2``, ... which -will have the actual values of the arguments passed in. -This facilitates creating functions with optional arguments. - -Furthermore, ``ARGV`` holds the list of all arguments given to the -function and ``ARGN`` holds the list of arguments past the last expected -argument. -Referencing to ``ARGV#`` arguments beyond ``ARGC`` have undefined -behavior. Checking that ``ARGC`` is greater than ``#`` is the only way -to ensure that ``ARGV#`` was passed to the function as an extra -argument. +Defines a function named ```` that takes arguments named +````, ... The ```` in the function definition +are recorded; they are not executed until the function is invoked. Per legacy, the :command:`endfunction` command admits an optional ```` argument. If used, it must be a verbatim repeat of the @@ -40,3 +22,46 @@ details. See the :command:`cmake_policy()` command documentation for the behavior of policies inside functions. + +Invocation +^^^^^^^^^^ + +The function invocation is case-insensitive. A function defined as + +.. code-block:: cmake + + function(foo) + + endfunction() + +can be invoked through any of + +.. code-block:: cmake + + foo() + Foo() + FOO() + +and so on. However, it is strongly recommended to stay with the +case chosen in the function definition. Typically functions use +all-lowercase names. + +Arguments +^^^^^^^^^ + +When the function is invoked, the recorded ```` are first +modified by replacing formal parameters (``${arg1}``, ...) with the +arguments passed, and then invoked as normal commands. + +In addition to referencing the formal parameters you can reference the +``ARGC`` variable which will be set to the number of arguments passed +into the function as well as ``ARGV0``, ``ARGV1``, ``ARGV2``, ... which +will have the actual values of the arguments passed in. This facilitates +creating functions with optional arguments. + +Furthermore, ``ARGV`` holds the list of all arguments given to the +function and ``ARGN`` holds the list of arguments past the last expected +argument. Referencing to ``ARGV#`` arguments beyond ``ARGC`` have +undefined behavior. Checking that ``ARGC`` is greater than ``#`` is +the only way to ensure that ``ARGV#`` was passed to the function as an +extra argument. -- cgit v0.12