]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
New public macros AC_LOG_CMD and AC_LOG_FILE. zack/ac-log-cmd
authorZack Weinberg <zack@owlfolio.org>
Mon, 24 Jun 2024 02:15:20 +0000 (22:15 -0400)
committerZack Weinberg <zack@owlfolio.org>
Wed, 26 Jun 2024 20:03:57 +0000 (16:03 -0400)
AC_LOG_CMD is the same as the undocumented AC_RUN_LOG, which has
existed for a very long time, renamed for consistency with
AC_LOG_FILE, which is a generalization of _AC_MSG_LOG_CONFTEST.

(Not actually implemented yet; do not merge)

doc/autoconf.texi

index c806286657207e7456875dd2bddb66239fc9b44f..19a6bd50e80a2f195fa841764237d79647225a5c 100644 (file)
@@ -440,6 +440,7 @@ Results of Tests
 * Special Chars in Variables::  Characters to beware of in variables
 * Caching Results::             Speeding up subsequent @command{configure} runs
 * Printing Messages::           Notifying @command{configure} users
+* Logging::                     Recording test details in @file{config.log}
 
 Caching Results
 
@@ -9164,6 +9165,11 @@ write new ones.  These macros are the building blocks.  They provide
 ways for other macros to check whether various kinds of features are
 available and report the results.
 
+The macros described in this chapter are mainly useful for tests that
+involve compiling code.  To write tests that simply probe the shell
+environment, use M4sh; see @ref{Programming in M4sh}.  Take care to
+log errors output by such tests; see @ref{Logging}.
+
 This chapter contains some suggestions and some of the reasons why the
 existing tests are written the way they are.  You can also learn a lot
 about how to write Autoconf tests by looking at the existing ones.  If
@@ -10037,6 +10043,7 @@ print a message letting the user know the result of the test.
 * Special Chars in Variables::  Characters to beware of in variables
 * Caching Results::             Speeding up subsequent @command{configure} runs
 * Printing Messages::           Notifying @command{configure} users
+* Logging::                     Recording test details in @file{config.log}
 @end menu
 
 @node Defining Symbols
@@ -10687,6 +10694,58 @@ make hard links}.
 @end defmac
 
 
+@node Logging
+@section Logging Details of Tests
+
+It is helpful to record details of @emph{why} each test got the result
+that it did, in @file{config.log}.  The macros that compile test
+programs (@code{AC_COMPILE_IFELSE} etc.; @pxref{Writing Tests}) do this
+automatically, but if you write a test that only involves M4sh and basic
+shell commands, you will need to do it yourself, using the following macros.
+
+@anchor{AC_LOG_CMD}
+@defmac AC_LOG_CMD (@var{shell-command})
+Execute @var{shell-command}.
+Record @var{shell-command} in @file{config.log}, along with any error
+messages it printed (specifically, everything it wrote to its standard
+error) and its exit code.
+
+This macro may be used within a command substitution, or as the test
+argument of @code{AS_IF} or a regular shell @code{if} statement.
+@end defmac
+
+@anchor{AC_LOG_FILE}
+@defmac AC_LOG_FILE (@var{file}, @var{label})
+Record the contents of @var{file} in @file{config.log}, labeled with
+@var{label}.
+@end defmac
+
+Here is an example of how to use these macros to test for a feature of
+the system `awk'.
+
+@smallexample
+AC_PROG_AWK
+AC_MSG_CHECKING([whether $AWK supports 'asort'])
+cat > conftest.awk <<\EOF
+[@{ lines[NR] = $0 @}
+END @{
+  ORS=" "
+  asort(lines)
+  for (i in lines) @{
+    print lines[i]
+  @}
+@}]
+EOF
+
+AS_IF([result=`AC_LOG_CMD([printf 'z\ny\n' | $AWK -f conftest.awk])` &&
+       test x"$result" = x"y z"],
+  [AWK_HAS_ASORT=yes],
+  [AWK_HAS_ASORT=no
+   AC_LOG_FILE([conftest.awk], [test awk script])])
+AC_MSG_RESULT([$AWK_HAS_ASORT])
+AC_SUBST([AWK_HAS_ASORT])
+rm -f conftest.awk
+@end smallexample
 
 @c ====================================================== Programming in M4.