[Fwd: Re: present but cannot be compiled (Was: Configure bug withlinc-1.1.0)]
- From: Jules Colding <JuBColding yorkref com>
- To: ORBit <orbit-list gnome org>
- Subject: [Fwd: Re: present but cannot be compiled (Was: Configure bug withlinc-1.1.0)]
- Date: 07 May 2003 10:41:26 +0200
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]