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

File: autoconf.info,  Node: Particular Programs,  Next: Generic Programs,  Up: Alternative Programs

5.2.1 Particular Program Checks
-------------------------------

These macros check for particular programs--whether they exist, and in
some cases whether they support certain features.

 -- Macro: AC_PROG_AR
     Set output variable ‘AR’ to ‘ar’ if ‘ar’ is found, and otherwise to
     ‘:’ (do nothing).

 -- Macro: AC_PROG_AWK
     Check for ‘gawk’, ‘mawk’, ‘nawk’, and ‘awk’, in that order, and set
     output variable ‘AWK’ to the first one that is found.  It tries
     ‘gawk’ first because that is reported to be the best
     implementation.  The result can be overridden by setting the
     variable ‘AWK’ or the cache variable ‘ac_cv_prog_AWK’.

     Using this macro is sufficient to avoid the pitfalls of traditional
     ‘awk’ (*note Limitations of Usual Tools: awk.).

 -- Macro: AC_PROG_GREP
     Look for the best available ‘grep’ or ‘ggrep’ that accepts the
     longest input lines possible, and that supports multiple ‘-e’
     options.  Set the output variable ‘GREP’ to whatever is chosen.
     *Note Limitations of Usual Tools: grep, for more information about
     portability problems with the ‘grep’ command family.  The result
     can be overridden by setting the ‘GREP’ variable and is cached in
     the ‘ac_cv_path_GREP’ variable.

 -- Macro: AC_PROG_EGREP
     Check whether ‘$GREP -E’ works, or else look for the best available
     ‘egrep’ or ‘gegrep’ that accepts the longest input lines possible.
     Set the output variable ‘EGREP’ to whatever is chosen.  The result
     can be overridden by setting the ‘EGREP’ variable and is cached in
     the ‘ac_cv_path_EGREP’ variable.

 -- Macro: AC_PROG_FGREP
     Check whether ‘$GREP -F’ works, or else look for the best available
     ‘fgrep’ or ‘gfgrep’ that accepts the longest input lines possible.
     Set the output variable ‘FGREP’ to whatever is chosen.  The result
     can be overridden by setting the ‘FGREP’ variable and is cached in
     the ‘ac_cv_path_FGREP’ variable.

 -- Macro: AC_PROG_INSTALL
     Set output variable ‘INSTALL’ to the name of a BSD-compatible
     ‘install’ program, if one is found in the current ‘PATH’.
     Otherwise, set ‘INSTALL’ to ‘DIR/install-sh -c’, checking the
     directories specified to ‘AC_CONFIG_AUX_DIR’ (or its default
     directories) to determine DIR (*note Output::).  Also set the
     variables ‘INSTALL_PROGRAM’ and ‘INSTALL_SCRIPT’ to ‘${INSTALL}’
     and ‘INSTALL_DATA’ to ‘${INSTALL} -m 644’.

     ‘@INSTALL@’ is special, as its value may vary for different
     configuration files.

     This macro screens out various instances of ‘install’ known not to
     work.  It prefers to find a C program rather than a shell script,
     for speed.  Instead of ‘install-sh’, it can also use ‘install.sh’,
     but that name is obsolete because some ‘make’ programs have a rule
     that creates ‘install’ from it if there is no makefile.  Further,
     this macro requires ‘install’ to be able to install multiple files
     into a target directory in a single invocation.

     Autoconf comes with a copy of ‘install-sh’ that you can use.  If
     you use ‘AC_PROG_INSTALL’, you must include ‘install-sh’ in your
     distribution; otherwise ‘autoreconf’ and ‘configure’ will produce
     an error message saying they can't find it--even if the system
     you're on has a good ‘install’ program.  This check is a safety
     measure to prevent you from accidentally leaving that file out,
     which would prevent your package from installing on systems that
     don't have a BSD-compatible ‘install’ program.

     If you need to use your own installation program because it has
     features not found in standard ‘install’ programs, there is no
     reason to use ‘AC_PROG_INSTALL’; just put the file name of your
     program into your ‘Makefile.in’ files.

     The result of the test can be overridden by setting the variable
     ‘INSTALL’ or the cache variable ‘ac_cv_path_install’.

 -- Macro: AC_PROG_MKDIR_P
     Set output variable ‘MKDIR_P’ to a program that ensures that for
     each argument, a directory named by this argument exists, creating
     it and its parent directories if needed, and without race
     conditions when two instances of the program attempt to make the
     same directory at nearly the same time.

     This macro uses the equivalent of the ‘mkdir -p’ command.  Ancient
     versions of ‘mkdir’ are vulnerable to race conditions, so if you
     want to support parallel installs from different packages into the
     same directory you should use a non-ancient ‘mkdir’.

     This macro is related to the ‘AS_MKDIR_P’ macro (*note Programming
     in M4sh::), but it sets an output variable intended for use in
     other files, whereas ‘AS_MKDIR_P’ is intended for use in scripts
     like ‘configure’.  Also, ‘AS_MKDIR_P’ does not accept options, but
     ‘MKDIR_P’ supports the ‘-m’ option, e.g., a makefile might invoke
     ‘$(MKDIR_P) -m 0 dir’ to create an inaccessible directory, and
     conversely a makefile should use ‘$(MKDIR_P) -- $(FOO)’ if FOO
     might yield a value that begins with ‘-’.

     The result of the test can be overridden by setting the variable
     ‘MKDIR_P’ or the cache variable ‘ac_cv_path_mkdir’.

 -- Macro: AC_PROG_LEX (OPTIONS)
     Search for a lexical analyzer generator, preferring ‘flex’ to plain
     ‘lex’.  Output variable ‘LEX’ is set to whichever program is
     available.  If neither program is available, ‘LEX’ is set to ‘:’;
     for packages that ship the generated ‘file.yy.c’ alongside the
     source ‘file.l’, this default allows users without a lexer
     generator to still build the package even if the timestamp for
     ‘file.l’ is inadvertently changed.

     The name of the program to use can be overridden by setting the
     output variable ‘LEX’ or the cache variable ‘ac_cv_prog_LEX’ when
     running ‘configure’.

     If a lexical analyzer generator is found, this macro performs
     additional checks for common portability pitfalls.  If these
     additional checks fail, ‘LEX’ is reset to ‘:’; otherwise the
     following additional macros and variables are provided.

     Preprocessor macro ‘YYTEXT_POINTER’ is defined if the lexer
     skeleton, by default, declares ‘yytext’ as a ‘char *’ rather than a
     ‘char []’.

     Output variable ‘LEX_OUTPUT_ROOT’ is set to the base of the file
     name that the lexer generates; this is usually either ‘lex.yy’ or
     ‘lexyy’.

     If generated lexers need a library to work, output variable
     ‘LEXLIB’ is set to a link option for that library (e.g., ‘-ll’),
     otherwise it is set to empty.

     The OPTIONS argument modifies the behavior of ‘AC_PROG_LEX’.  It
     should be a whitespace-separated list of options.  Currently there
     are only two options, and they are mutually exclusive:

     ‘yywrap’
          Indicate that the library in ‘LEXLIB’ needs to define the
          function ‘yywrap’.  If a library that defines this function
          cannot be found, ‘LEX’ will be reset to ‘:’.

     ‘noyywrap’
          Indicate that the library in ‘LEXLIB’ does not need to define
          the function ‘yywrap’.  ‘configure’ will not search for it at
          all.

     Prior to Autoconf 2.70, ‘AC_PROG_LEX’ did not take any arguments,
     and its behavior was different from either of the above
     possibilities: it would search for a library that defines ‘yywrap’,
     and would set ‘LEXLIB’ to that library if it finds one.  However,
     if a library that defines this function could not be found,
     ‘LEXLIB’ would be left empty and ‘LEX’ would _not_ be reset.  This
     behavior was due to a bug, but several packages came to depend on
     it, so ‘AC_PROG_LEX’ still does this if neither the ‘yywrap’ nor
     the ‘noyywrap’ option is given.

     Usage of ‘AC_PROG_LEX’ without choosing one of the ‘yywrap’ or
     ‘noyywrap’ options is deprecated.  It is usually better to use
     ‘noyywrap’ and define the ‘yywrap’ function yourself, as this
     almost always renders the ‘LEXLIB’ unnecessary.

     *Caution:* As a side-effect of the test, this macro may delete any
     file in the configure script's current working directory named
     ‘lex.yy.c’ or ‘lexyy.c’.

     *Caution:* Packages that ship a generated ‘lex.yy.c’ cannot assume
     that the definition of ‘YYTEXT_POINTER’ matches the code in that
     file.  They also cannot assume that ‘LEXLIB’ provides the library
     routines required by the code in that file.

     If you use Flex to generate ‘lex.yy.c’, you can work around these
     limitations by defining ‘yywrap’ and ‘main’ yourself (rendering
     ‘-lfl’ unnecessary), and by using either the ‘--array’ or
     ‘--pointer’ options to control how ‘yytext’ is declared.  The code
     generated by Flex is also more portable than the code generated by
     historical versions of Lex.

     If you have used Flex to generate ‘lex.yy.c’, and especially if
     your scanner depends on Flex features, we recommend you use this
     Autoconf snippet to prevent the scanner being regenerated with
     historical Lex:

          AC_PROG_LEX
          AS_IF([test "x$LEX" != xflex],
            [LEX="$SHELL $missing_dir/missing flex"
             AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
             AC_SUBST([LEXLIB], [''])])

     The shell script ‘missing’ can be found in the Automake
     distribution.

     Remember that the user may have supplied an alternate location in
     ‘LEX’, so if Flex is required, it is better to check that the user
     provided something sufficient by parsing the output of ‘$LEX
     --version’ than by simply relying on ‘test "x$LEX" = xflex’.

 -- Macro: AC_PROG_LN_S
     If ‘ln -s’ works on the current file system (the operating system
     and file system support symbolic links), set the output variable
     ‘LN_S’ to ‘ln -s’; otherwise, if ‘ln’ works, set ‘LN_S’ to ‘ln’,
     and otherwise set it to ‘cp -pR’.

     If you make a link in a directory other than the current directory,
     its meaning depends on whether ‘ln’ or ‘ln -s’ is used.  To safely
     create links using ‘$(LN_S)’, either find out which form is used
     and adjust the arguments, or always invoke ‘ln’ in the directory
     where the link is to be created.

     In other words, it does not work to do:
          $(LN_S) foo /x/bar

     Instead, do:

          (cd /x && $(LN_S) foo bar)

 -- Macro: AC_PROG_RANLIB
     Set output variable ‘RANLIB’ to ‘ranlib’ if ‘ranlib’ is found, and
     otherwise to ‘:’ (do nothing).

 -- Macro: AC_PROG_SED
     Set output variable ‘SED’ to a Sed implementation that conforms to
     Posix and does not have arbitrary length limits.  Report an error
     if no acceptable Sed is found.  *Note Limitations of Usual Tools:
     sed, for more information about portability problems with Sed.

     The result of this test can be overridden by setting the ‘SED’
     variable and is cached in the ‘ac_cv_path_SED’ variable.

 -- Macro: AC_PROG_YACC
     If ‘bison’ is found, set output variable ‘YACC’ to ‘bison -y’.
     Otherwise, if ‘byacc’ is found, set ‘YACC’ to ‘byacc’.  Otherwise
     set ‘YACC’ to ‘yacc’.  The result of this test can be influenced by
     setting the variable ‘YACC’ or the cache variable
     ‘ac_cv_prog_YACC’.

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