Re: [pcre-dev] A problem with config.h.generic

Top Page
Delete this message
Author: Daniel Richard G
Date:  
To: pcre-dev
Subject: Re: [pcre-dev] A problem with config.h.generic
On Fri, 7 Dec 2012, Philip Hazel wrote:

> I think this patch happened because "#if HAVE_STDINT_H" gives an error
> if HAVE_STDINT_H is not defined, and the autotools do indeed #undef it
> when <stdint.h> does not exist.


Yes, this was due to me. I normally build with GCC's -Wundef, and while
that only generates warnings rather than errors, these are easy to fix.

> In fact, all the conditional code in PCRE uses tests for definition
> (#ifdef, #ifndef, or #if defined) rather than tests for a macro value.


That's standard Autoconf/GNU convention, and I would keep it that way.

> The problem:
>
> Somebody editing config.h.generic by hand, who doesn't have <stdint.h>
> on there system, is quite likely to set
>
> #define HAVE_STDINT_H 0
>
> but of course that will not now work. This particular case can be bodged
> by using #if defined HAVE_STDINT_H && HAVE_STDINT_H


*winces*

> but I would like a more general solution. We could:
>
> (a) Stop massaging config.h.generic, but that would still suggest
> setting the value to 0.


People who aren't familiar with the Autoconf/GNU world would be a
particular concern here.

> (b) Massage the comment in config.h.generic to say use #undef rather
> than setting to 0.


I think documenting this, and placing the burden on the user, is the right
way to go. You could put a comment like "/* 1 or undefined */" on the same
line as the #define/#undef.

> (c) Modify all the tests in the code to test existence and value instead
> of just existence. This might be a bit messy.


Akin to paving all the world's roadways with rubber so that automobiles
don't need tires anymore :]

> (d) Something else?


You could have a sanity check somewhere along the lines of

     #if defined(HAVE_STDINT_H) && (HAVE_STDINT_H - 0) != 1
     #  error "HAVE_STDINT_H must either be 1 or undefined"
     #endif


but I don't think going above and beyond option (b) is necessary.


--Daniel


--
Daniel Richard G. || danielg@??? || Software Developer
Teragram Linguistic Technologies (a division of SAS)
http://www.teragram.com/