manpagez: man pages & more
info autoconf
Home | html | info | man

File: autoconf.info,  Node: Initialization Macros,  Next: File Descriptor Macros,  Prev: Polymorphic Variables,  Up: Programming in M4sh

9.3 Initialization Macros
=========================

 -- Macro: AS_BOURNE_COMPATIBLE
     Set up the shell to be more compatible with the Bourne shell as
     standardized by Posix, if possible.  This may involve setting
     environment variables, or setting options, or similar
     implementation-specific actions.  This macro is deprecated, since
     ‘AS_INIT’ already invokes it.

 -- Macro: AS_INIT
     Initialize the M4sh environment.  This macro calls ‘m4_init’, then
     outputs the ‘#! /bin/sh’ line, a notice about where the output was
     generated from, and code to sanitize the environment for the rest
     of the script.  Among other initializations, this sets ‘SHELL’ to
     the shell chosen to run the script (*note CONFIG_SHELL::), and
     ‘LC_ALL’ to ensure the C locale.  Finally, it changes the current
     diversion to ‘BODY’.  ‘AS_INIT’ is called automatically by
     ‘AC_INIT’ and ‘AT_INIT’, so shell code in ‘configure’,
     ‘config.status’, and ‘testsuite’ all benefit from a sanitized shell
     environment.

 -- Macro: AS_INIT_GENERATED (FILE, [COMMENT])
     Emit shell code to start the creation of a subsidiary shell script
     in FILE, including changing FILE to be executable.  This macro
     populates the child script with information learned from the parent
     (thus, the emitted code is equivalent in effect, but more
     efficient, than the code output by ‘AS_INIT’,
     ‘AS_BOURNE_COMPATIBLE’, and ‘AS_SHELL_SANITIZE’).  If present,
     COMMENT is output near the beginning of the child, prior to the
     shell initialization code, and is subject to parameter expansion,
     command substitution, and backslash quote removal.  The parent
     script should check the exit status after this macro, in case FILE
     could not be properly created (for example, if the disk was full).
     If successfully created, the parent script can then proceed to
     append additional M4sh constructs into the child script.

     Note that the child script starts life without a log file open, so
     if the parent script uses logging (*note AS_MESSAGE_LOG_FD::), you
     must temporarily disable any attempts to use the log file until
     after emitting code to open a log within the child.  On the other
     hand, if the parent script has ‘AS_MESSAGE_FD’ redirected somewhere
     besides ‘1’, then the child script already has code that copies
     stdout to that descriptor.  Currently, the suggested idiom for
     writing a M4sh shell script from within another script is:

          AS_INIT_GENERATED([FILE], [[# My child script.
          ]]) || { AS_ECHO(["Failed to create child script"]); AS_EXIT; }
          m4_pushdef([AS_MESSAGE_LOG_FD])dnl
          cat >> "FILE" <<\__EOF__
          # Code to initialize AS_MESSAGE_LOG_FD
          m4_popdef([AS_MESSAGE_LOG_FD])dnl
          # Additional code
          __EOF__

     This, however, may change in the future as the M4sh interface is
     stabilized further.

     Also, be aware that use of ‘LINENO’ within the child script may
     report line numbers relative to their location in the parent
     script, even when using ‘AS_LINENO_PREPARE’, if the parent script
     was unable to locate a shell with working ‘LINENO’ support.

 -- Macro: AS_LINENO_PREPARE
     Find a shell that supports the special variable ‘LINENO’, which
     contains the number of the currently executing line.  This macro is
     automatically invoked by ‘AC_INIT’ in configure scripts.

 -- Macro: AS_ME_PREPARE
     Set up variable ‘as_me’ to be the basename of the currently
     executing script.  This macro is automatically invoked by ‘AC_INIT’
     in configure scripts.

 -- Macro: AS_TMPDIR (PREFIX, [DIR = ${TMPDIR:=/tmp}])
     Create, as safely as possible, a temporary sub-directory within DIR
     with a name starting with PREFIX.  PREFIX should be 2-4 characters,
     to make it slightly easier to identify the owner of the directory.
     If DIR is omitted, then the value of ‘TMPDIR’ will be used
     (defaulting to ‘/tmp’).  On success, the name of the newly created
     directory is stored in the shell variable ‘tmp’.  On error, the
     script is aborted.

     Typically, this macro is coupled with some exit traps to delete the
     created directory and its contents on exit or interrupt.  However,
     there is a slight window between when the directory is created and
     when the name is actually known to the shell, so an interrupt at
     the right moment might leave the temporary directory behind.  Hence
     it is important to use a PREFIX that makes it easier to determine
     if a leftover temporary directory from an interrupted script is
     safe to delete.

     If you set ‘TMPDIR=$tmp’ after invoking this macro, you should
     reset ‘TMPDIR’ before deleting the created directory, to avoid
     breaking commands that rely on ‘$TMPDIR’.

     The use of the output variable ‘$tmp’ rather than something in the
     ‘as_’ namespace is historical; it has the unfortunate consequence
     that reusing this otherwise common name for any other purpose
     inside your script has the potential to break any cleanup traps
     designed to remove the temporary directory.

 -- Macro: AS_SHELL_SANITIZE
     Initialize the shell suitably for ‘configure’ scripts.  This has
     the effect of ‘AS_BOURNE_COMPATIBLE’, and sets some other
     environment variables for predictable results from configuration
     tests.  For example, it sets ‘LC_ALL’ to change to the default C
     locale.  *Note Special Shell Variables::.  This macro is
     deprecated, since ‘AS_INIT’ already invokes it.

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.