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’.