You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Greg Stein <gs...@lyra.org> on 2000/01/21 04:47:50 UTC
feature test macros (was: cvs commit: apache-2.0/src/lib/apr/lib
apr_snprintf.c)
On Thu, 20 Jan 2000 rbb@apache.org wrote:
> You and I have had this discussion before. Apache uses #ifdef always.
Yes... I wasn't trying to reopen it, thus the [ ] notation I use for
tangental/aside remarks.
> That was the groups decsions. That decision doesn't work for APR. APR
> always uses #if. If there is a problem with macros that aren't defined,
> we use #if defined(foo). This removes the confusion between #if and
> #ifdef inside of APR.
Understood. No problem.
Now, for my edification, and hopefully for others, let's continue...
> As far as removing one of the macros goes, they both need to be defined.
> The first is defined by autoconf automatically. The second is defined
> because APR needed namespace protected macros for some of the information
> required by public header files. The name similarity is unfortunate, and
> is my fault, but they really do mean two different things. The first
> means this platform has netinet/in.h. The second means APR needs the
> information in netinet/in.h in order to compile cleanly. This is a small
> difference, but it is real.
Ah ha! This wasn't clear. Hrm. Would a better name be something like:
APR_USE_NETINET_IN_H
??
In other words, the public header should use netinet/in.h? Or maybe
APR_INCLUDE_NETINET_IN_H? Hrm.
Internally, APR would continue to use HAVE_NETINET_IN_H because it *does*
mean, "is that available?" Although: why would an internal routine need
that, if it can use the definitions created through the public headers?
> Yes, there are three similar macros, but the rules for them are quite
> simple. Apache has one set of autoconf defined macros. APR has a similar
> set of macros which it uses for internal decisions, and a very small set
> of namespace protected macros which are available for APR programs to use.
Right.
I don't know enough about APR's internal use of HAVE_NETINET_IN_H, but it
seems suspicious, as mentioned above. BUT: ignore this, as I don't need to
really learn this right now, and I don't want to impose on you to explain
something that is obviously working well :-) "ignorance is bliss"
> Apache has decided that it doesn't want to use APR's macros, otherwise I
> would advocate getting rid of Apache3's definition of HAVE_NETINET_H and
> just use APR_HAVE_NETINET_H. But the real solution is to stop including
> netinet/in.h at all in Apache, and just include apr_network_i.h. If there
> is really a need for netinet/in.h in Apache, then we haven't done our job
> with APR, because not everybody has netinet/in.h.
I completely agree. Apache shouldn't use HAVE_NETINET_H because it should
not be using stuff like that... APR should be replacing those uses.
Note that Apache shouldn't use APR_HAVE_NETINET_H; as you stated above,
the APR macro has a different semantic. Apache should have its own, or
should elminate its usage altogether.
> To boil this down because I am tired and sick of computers today, APR
> should have two macros, one with APR in front and one without. Apache
> should have zero macros and it should just include apr_network_io.h. APR
> ALWAYS uses #if because it is more flexible.
No problem. Should the APR_* macros be slightly renamed, to better reflect
the semantic that you were describing?
Thanx,
-g
--
Greg Stein, http://www.lyra.org/