]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
* doc/autoconf.texi (Present But Cannot Be Compiled): New.
authorAkim Demaille <akim@epita.fr>
Fri, 28 Feb 2003 10:46:19 +0000 (10:46 +0000)
committerAkim Demaille <akim@epita.fr>
Fri, 28 Feb 2003 10:46:19 +0000 (10:46 +0000)
ChangeLog
NEWS
doc/autoconf.texi

index 3d0d0ca5cf64e2fbdd803553a3f168dab17fde49..bab212530eef08c22884d08693414f692c519267 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2003-02-28  Akim Demaille  <akim@epita.fr>
+
+       * doc/autoconf.texi (Present But Cannot Be Compiled): New.
+
 2003-02-28  Alexandre Duret-Lutz  <adl@gnu.org>
 
        * doc/autoconf.texi (Limitations of Make): Remove the section
diff --git a/NEWS b/NEWS
index 1f9ca921c98f3ead8c4f8056ec74de76b1d079e2..130eba7c2b01191cb5140545ba80cdd551ece70d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,15 @@
 * Improve DJGPP portability
   The Autoconf tools and configure behave better under DJGPP.
 
+* Present But Cannot Be Compiled
+  New FAQ section dedicated to the mystic
+
+    configure: WARNING: pi.h: present but cannot be compiled
+    configure: WARNING: pi.h: check for missing prerequisite headers?
+    configure: WARNING: pi.h: proceeding with the preprocessor's result
+
+  messages.
+
 * Major changes in Autoconf 2.57
 
   Released 2002-12-03 by Paul Eggert.
index 5d6d33dbcbbfcf72c036aef14aa2853d6a3dd7d5..ec79d52c373ab4c5e6e0553e941d02502c5a7e57 100644 (file)
@@ -172,7 +172,7 @@ published by the Free Software Foundation raise funds for
 @detailmenu
  --- The Detailed Node Listing ---
 
-The GNU Build System
+The @acronym{GNU} Build System
 
 * Automake::                    Escaping Makefile hell
 * Libtool::                     Building libraries portably
@@ -442,6 +442,7 @@ Frequent Autoconf Questions, with answers
 * Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
 * Defining Directories::        Passing @code{datadir} to program
 * autom4te.cache::              What is it?  Can I remove it?
+* Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
 
 History of Autoconf
 
@@ -453,7 +454,6 @@ History of Autoconf
 
 Copying This Manual
 
-* GNU Free Documentation License::  License for copying this manual
 
 Indices
 
@@ -14367,6 +14367,7 @@ are addressed.
 * Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
 * Defining Directories::        Passing @code{datadir} to program
 * autom4te.cache::              What is it?  Can I remove it?
+* Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
 @end menu
 
 @node Distributing
@@ -14656,6 +14657,95 @@ not fully exploited}, and eight times slower than without
 @option{--force}.
 
 
+@node Present But Cannot Be Compiled
+@section Header Present But Cannot Be Compiled
+
+The most important guideline to bare in mind when checking for
+features is to mock as much as possible the intended use.
+Unfortunately, old versions of @code{AC_CHECK_HEADER} and
+@code{AC_CHECK_HEADERS} failed to follow this idea, and used to call
+the preprocessor, instead of the compiler, to check for headers.  As a
+result, incompatibilities between headers went unnoticed during
+configuration, and maintainers finally had to deal with this issue
+elsewhere.
+
+Since Autoconf 2.56 both checks are performed, and @code{configure}
+complains loudly if the compiler and the preprocessor do not agree.
+For the time being the result is that of the preprocessor, so that
+maintainers can adjust their @file{configure.ac}, but in the near
+future, the compiler only will be considered.
+
+Consider the following example:
+
+@example
+$ @kbd{cat number.h}
+typedef int number;
+$ @kbd{cat pi.h}
+const number pi = 3;
+$ @kbd{cat configure.ac}
+AC_INIT
+AC_CHECK_HEADERS(pi.h)
+$ @kbd{autoconf -Wall}
+$ @kbd{./configure}
+checking for gcc... gcc
+checking for C compiler default output... a.out
+checking whether the C compiler works... yes
+checking whether we are cross compiling... no
+checking for suffix of executables...
+checking for suffix of object files... o
+checking whether we are using the GNU C compiler... yes
+checking whether gcc accepts -g... yes
+checking for gcc option to accept ANSI C... none needed
+checking how to run the C preprocessor... gcc -E
+checking for egrep... grep -E
+checking for ANSI C header files... yes
+checking for sys/types.h... yes
+checking for sys/stat.h... yes
+checking for stdlib.h... yes
+checking for string.h... yes
+checking for memory.h... yes
+checking for strings.h... yes
+checking for inttypes.h... yes
+checking for stdint.h... yes
+checking for unistd.h... yes
+checking pi.h usability... no
+checking pi.h presence... yes
+configure: WARNING: pi.h: present but cannot be compiled
+configure: WARNING: pi.h: check for missing prerequisite headers?
+configure: WARNING: pi.h: proceeding with the preprocessor's result
+configure: WARNING:     ## ------------------------------------ ##
+configure: WARNING:     ## Report this to bug-autoconf@@gnu.org. ##
+configure: WARNING:     ## ------------------------------------ ##
+checking for pi.h... yes
+@end example
+
+@noindent
+The proper way the handle this case is using the fourth argument
+(@pxref{Generic Headers}):
+
+@example
+$ @kbd{cat configure.ac}
+AC_INIT
+AC_CHECK_HEADERS(number.h pi.h,,,
+[[#if HAVE_NUMBER_H
+# include <number.h>
+#endif
+]])
+$ @kbd{autoconf -Wall}
+$ @kbd{./configure}
+checking for gcc... gcc
+checking for C compiler default output... a.out
+checking whether the C compiler works... yes
+checking whether we are cross compiling... no
+checking for suffix of executables...
+checking for suffix of object files... o
+checking whether we are using the GNU C compiler... yes
+checking whether gcc accepts -g... yes
+checking for gcc option to accept ANSI C... none needed
+checking for number.h... yes
+checking for pi.h... yes
+@end example
+
 @c ===================================================== History of Autoconf.
 
 @node History