On Tue, Jul 29, 2008, Arkadiusz Miskiewicz wrote:

> On Tuesday 29 July 2008, Ralf S. Engelschall wrote:
>
> > >     */
> > >
> > >   +#include <stdint.h>
> > >   +
> > >    typedef    const char * ARGstr_t;
> > >    typedef ARGstr_t * ARGV_t;
> > > [...]
> >
> > Even if we are already in 2008, unconditionally including the C99
> > header <stdint.h> is not recommended as it breaks platform portability.
> > We really have to wrap this. If you want to externally include this
> > "argv.h" outside the RPM source tree one really has to supply #defines
> > to enable those includes.
>
> I think that we should wrap crappy old platforms and don't punish modern one
> (not vice versa).
>
> So AC_PROG_CC_C99 in configure.ac
>
> if x = xno; then
>  AC_DEFINE(MY_COMPILER_IS_A_CRAP)
> fi
>
> and
> #ifndef MY_COMPILER_IS_A_CRAP
> #include <stdint.h>
> #endif
>
> type of solution. Does that work for you?

In general I'm ok with an approach which punishes only
old/obsolete/deprecated/whatever platforms. But in this case I'm more
thinking about neither distinguishing between old and new and more about
mostly feature based testing:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#if defined(HAVE_STDINT_H) || (defined(__STDC_VERSION__) && __STDC_VERSION__+0 
>= 199901L)
#include <stdint.h>
#endif
#if defined(HAVE_INTTYPES_H)
#include <inttypes.h>
#endif

This boils down to your simple #include if nothing is explicitly defined
(usually outside the RPM source tree), but if one has Autoconf macros
in place (the case inside the RPM source tree) we can still compile on
older platforms.

                                       Ralf S. Engelschall
                                       [EMAIL PROTECTED]
                                       www.engelschall.com

______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        rpm-devel@rpm5.org

Reply via email to