function
--------

Start recording a function for later invocation as a command.

::

  function(<name> [arg1 [arg2 [arg3 ...]]])
    COMMAND1(ARGS ...)
    COMMAND2(ARGS ...)
    ...
  endfunction(<name>)

Define a function named <name> that takes arguments named arg1 arg2
arg3 (...).  Commands listed after function, but before the matching
endfunction, are not invoked until the function is invoked.  When it
is invoked, the commands recorded in the function 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 variable ARGC 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.  Additionally ARGV holds the list of all arguments
given to the function and ARGN holds the list of arguments past the
last expected argument.

A function opens a new scope: see set(var PARENT_SCOPE) for details.

See the cmake_policy() command documentation for the behavior of
policies inside functions.
