processing include files

Alan DeKok aland at deployingradius.com
Sun Jul 8 12:45:53 CEST 2007


Enrik Berkhan wrote:
> Have you tried to declare
> 
> AM_CONFIG_HEADER(include/freeradius-client.h)

  That adds defines.  It doesn't *process* the header files in the same
way as the *.in files are processed.  i.e. You can't do substitutions of
@@FOO@@ -> value of foo.

  Those substitutions can be done for any *other* kind of file, but not
(apparently) header files.

> in configure.in like for config.h, rename freeradius-client.h to
> freeradius-client.h.in and add the specific defines at the top like
> autoheader would to for config.h? Like this:
> 
> freeradius-client.h.in:
> 
> ...
> #undef HAVE_INTTYPES_H
> #undef HAVE_STDINT_H

  No.  Absolutely not.  That's exactly the same thing as net-snmp's
"solution" of installing the autoconf.h file.  Anyone *using*
freeradius-client will have their header files polluted with the
definitions of HAVE_INTTYPES_H.

  I tried to build FreeRADIUS without pthread support.  I discovered at
one point I couldn't do that *and* use SNMP, because the SNMP header
files defined HAVE_PTHREAD_H.

> Running configure will replace the #undef templates with the appropriate
> values.

  No.  The freeradius-client.h file that's installed *must* have no
#define's other than the ones it uses for it's own purposes.  If it
needs to include <stdint.h>, the file needs to be massaged to do so,
WITHOUT HAVE_STDINT_H, etc. nonsense.

> Or distribute a second (config) header freeradius-clientconfig.h
> included by freeradius-client.h, but never ever name it autoconf.h.

  That is the same solution as net-snmp uses.  The filename is
irrelevant.  The bad practice of polluting the HAVE_* namespace is wrong.

  Alan DeKok.



More information about the Freeradius-Devel mailing list