[Fwd: Re: present but cannot be compiled (Was: Configure bug withlinc-1.1.0)]



Hi,

I send a bug report to the autoconf list because ./configure prompted me
to do so. They send a long reply back and asked me to forward their
reply to the orbit list. 

I do unfortunately not have the time to dig deeper (as requested in the
mail).


Best regards,
  jules


-----Forwarded Message-----

> From: Akim Demaille <akim@epita.fr>
> To: Jules Bjørn Colding <JuBColding@yorkref.com>
> Cc: bug-autoconf@gnu.org
> Subject: Re: present but cannot be compiled (Was: Configure bug with linc-1.1.0)
> Date: 06 May 2003 17:51:47 +0200
> 
> 
> Thanks for the bug report!
> 
> Unfortunately, the problem comes from the package itself, not from
> Autoconf.  The configure.ac script needs to be updated.  Please, send
> all this message (which your output attached) to the bug list (or the
> authors) of the package you were trying to configure.
> 
> Below two parts of the Autoconf documentation are included: 1. the
> documentation of AC_CHECK_HEADER(S), and 2. what's to be done to
> upgrade configure.ac.
> 
> If you have some knowledge in C compilation, then there is something
> more you can do to help: find out what are the prerequisite headers on
> your system.
> 
> For instance, if the error message is:
> 
>        sys/socket.h: present but cannot be compiled
>        sys/socket.h: check for missing prerequisite headers?
>        sys/socket.h: proceeding with the preprocessor's result
> 
> then try to compile the program sample.c:
> 
>        #include <sys/socket.h>
> 
> with `cc -c sample.c'.  It will fail.  Then try to understand what
> other headers are needed.  For instance, on Darwin, one needs:
> 
>        #include <stdio.h>
>        #include <stdlib.h>
>        #include <sys/socket.h>
>        #include <sys/socket.h>
> 
> to get a successful compilation.  Then, send this additional
> information to the package maintainers, together with a description of
> your machine.
> 
> Thanks!
> 
> ----------------------------------------------------------------------
> 
> Generic Header Checks
> ---------------------
> 
>    These macros are used to find system header files not covered by the
> "particular" test macros.  If you need to check the contents of a header
> as well as find out whether it is present, you have to write your own
> test for it (*note Writing Tests::).
> 
>  - Macro: AC_CHECK_HEADER (HEADER-FILE, [ACTION-IF-FOUND],
>           [ACTION-IF-NOT-FOUND], [INCLUDES = `default-includes'])
>      If the system header file HEADER-FILE is compilable, execute shell
>      commands ACTION-IF-FOUND, otherwise execute ACTION-IF-NOT-FOUND.
>      If you just want to define a symbol if the header file is
>      available, consider using `AC_CHECK_HEADERS' instead.
> 
>      For compatibility issues with older versions of Autoconf, please
>      read below.
> 
>  - Macro: AC_CHECK_HEADERS (HEADER-FILE..., [ACTION-IF-FOUND],
>           [ACTION-IF-NOT-FOUND], [INCLUDES = `default-includes'])
>      For each given system header file HEADER-FILE in the
>      whitespace-separated argument list that exists, define
>      `HAVE_HEADER-FILE' (in all capitals).  If ACTION-IF-FOUND is
>      given, it is additional shell code to execute when one of the
>      header files is found.  You can give it a value of `break' to
>      break out of the loop on the first match.  If ACTION-IF-NOT-FOUND
>      is given, it is executed when one of the header files is not found.
> 
>      For compatibility issues with older versions of Autoconf, please
>      read below.
> 
>    Previous versions of Autoconf merely checked whether the header was
> accepted by the preprocessor.  This was changed because the old test was
> inappropriate for typical uses.  Headers are typically used to compile,
> not merely to preprocess, and the old behavior sometimes accepted
> headers that clashed at compile-time.  If you need to check whether a
> header is preprocessable, you can use `AC_PREPROC_IFELSE' (*note
> Running the Preprocessor::).
> 
>    This scheme, which improves the robustness of the test, also requires
> that you make sure that headers that must be included before the
> HEADER-FILE be part of the INCLUDES, (*note Default Includes::).  If
> looking for `bar.h', which requires that `foo.h' be included before if
> it exists, we suggest the following scheme:
> 
> 
> AC_CHECK_HEADERS([foo.h])
> AC_CHECK_HEADERS([bar.h], [], [],
> [#if HAVE_FOO_H
> # include <foo.h>
> # endif
> ])
> 
> ----------------------------------------------------------------------
> 
> Header Present But Cannot Be Compiled
> =====================================
> 
>    The most important guideline to bear in mind when checking for
> features is to mimic as much as possible the intended use.
> Unfortunately, old versions of `AC_CHECK_HEADER' and `AC_CHECK_HEADERS'
> failed to follow this idea, and called 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.
> 
>    As of Autoconf 2.56 both checks are performed, and `configure'
> complains loudly if the compiler and the preprocessor do not agree.
> For the time being the result used is that of the preprocessor, to give
> maintainers time to adjust their `configure.ac', but in the near
> future, only the compiler will be considered.
> 
>    Consider the following example:
> 
>      $ cat number.h
>      typedef int number;
>      $ cat pi.h
>      const number pi = 3;
>      $ cat configure.ac
>      AC_INIT
>      AC_CHECK_HEADERS(pi.h)
>      $ autoconf -Wall
>      $ ./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
> 
> The proper way the handle this case is using the fourth argument (*note
> Generic Headers::):
> 
>      $ cat configure.ac
>      AC_INIT
>      AC_CHECK_HEADERS(number.h pi.h,,,
>      [[#if HAVE_NUMBER_H
>      # include <number.h>
>      #endif
>      ]])
>      $ autoconf -Wall
>      $ ./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
> 
>    See *Note Particular Headers::, for a list of headers with their
> prerequisite.
> 
> ----------------------------------------------------------------------
> 
> Portability of Headers
> ----------------------
> 
>    This section tries to collect knowledge about common headers, and the
> problems they cause.  By definition, this list will always require
> additions.  Please help us keeping it as complete as possible.
> 
> `inttypes.h' vs. `stdint.h'
>      Paul Eggert notes that: ISO C 1999 says that `inttypes.h' includes
>      `stdint.h', so there's no need to include `stdint.h' separately in
>      a standard environment.  Many implementations have `inttypes.h'
>      but not `stdint.h' (e.g., Solaris 7), but I don't know of any
>      implementation that has `stdint.h' but not `inttypes.h'.  Nor do I
>      know of any free software that includes `stdint.h'; `stdint.h'
>      seems to be a creation of the committee.
> 
> `net/if.h'
>      On Darwin, this file requires that `sys/socket.h' be included
>      beforehand.  One should run:
> 
>           AC_CHECK_HEADERS([sys/socket.h])
>           AC_CHECK_HEADERS([net/if.h], [], [],
>           [#include <stdio.h>
>           #if STDC_HEADERS
>           # include <stdlib.h>
>           # include <stddef.h>
>           #else
>           # if HAVE_STDLIB_H
>           #  include <stdlib.h>
>           # endif
>           #endif
>           #if HAVE_SYS_SOCKET_H
>           # include <sys/socket.h>
>           #endif
>           ])
> 
> `stdlib.h'
>      On many systems (e.g., Darwin), `stdio.h' is a prerequisite.
> 
> `sys/socket.h'
>      On Darwin, `stdlib.h' is a prerequisite.
> Hi,
> I got this with "./configure --disable-nls --prefix=/usr":
> 
> 
> configure: WARNING: linux/irda.h: present but cannot be compiled
> configure: WARNING: linux/irda.h: check for missing prerequisite
> headers?
> configure: WARNING: linux/irda.h: proceeding with the preprocessor's
> result
> configure: WARNING:     ## ------------------------------------ ##
> configure: WARNING:     ## Report this to bug-autoconf@gnu.org. ##
> configure: WARNING:     ## ------------------------------------ ##
-- 
Jules Colding <JuBColding@yorkref.com>
York Refrigeration




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]