doc: use ASCII in .texi files where UTF-8 isn't needed
[gnulib.git] / m4 / README
index 964c598..2fdb556 100644 (file)
--- a/m4/README
+++ b/m4/README
@@ -73,6 +73,47 @@ that makes it easy.
   be the autoconf macro that provides it. This is only an approximation; in
   general you should look at all preprocessor directives in lib/foo.c.
 
+- In AC_RUN_IFELSE invocations, try to put as much information about failed
+  tests as possible in the exit code. The exit code is 0 for success and any
+  value between 1 and 127 for failure. The exit code is printed in config.log;
+  therefore when an AC_RUN_IFELSE invocation failed, it is possible to analyze
+  the failure immediately if sufficient information is contained in the exit
+  code.
+
+  For a program that performs a single test, the typical idiom is:
+
+      if (do_test1 ())
+        return 1;
+      return 0;
+
+  For a test that performs a test with some preparation, the typical idiom is
+  to return an enumerated value:
+
+      if (prep1 ())
+        return 1;
+      else if (prep2 ())
+        return 2;
+      else if (prep3 ())
+        return 3;
+      else if (do_test1 ())
+        return 4;
+      return 0;
+
+  For multiple independent tests in a single program, you can return a bit
+  mask with up to 7 bits:
+
+      int result = 0;
+      if (do_test1 ())
+        result |= 1;
+      if (do_test2 ())
+        result |= 2;
+      if (do_test3 ())
+        result |= 4;
+      return result;
+
+  For more than 7 independent tests, you have to map some possible test
+  failures to same bit.
+
 - After ANY modifications of an m4 file, you should increment its serial
   number (in the first line). Also, if this first line features a particular
   release, _remove_ this release stamp. Example: Change
@@ -82,4 +123,3 @@ that makes it easy.
   into
 
     # setenv.m4 serial 3
-