[Monetdb-developers] configure & *_config.h include files

Stefan Manegold Stefan.Manegold at cwi.nl
Fri Sep 22 14:38:44 CEST 2006

On Fri, Sep 22, 2006 at 02:25:21PM +0200, Stefan Manegold wrote:
> Dear fellow developers,
> while trying to fix portability issues with the pftijah modules of
> pathfinder, I noticed the following problem:
> To ensure portability, each source file should know about and adhere to what
> configure found out; hence, the respective X_config.h (with X one of
> monetdb, sql, pf, etc,) must be the first include in each .c file.
> However, with the front-ends, some files (especially those implementing
> extension modules) also need to MonetDB's monet.h or gdk.h to get the
> respective definition.
> Since monet.h includes gdk.h which includes monet_utils.h which in turn
> includes monetdb_config.h, these files the include both the "local"
> X_config.h (with X one of sql, pf, etc,) and the monetdb_config.h.
> This might trigger two problems:
> 1) If we compile sql, pf, etc, a against a binary install of MonetDB which
> was configured and generated on an binary compatible but potentially
> (slightly) differently configured/installed system, this might lead to
> conflicting definition/declarations in the two X_config.h.
> 2) Even if we compile MonetDB and the front-end on the same system, there
> might be conflicts since the respective configure are not completely
> identical.
> In pathfinder/runtime we avoid (2) be not including pf_config.h but only
> monetdb_config.h (via monet.h or gdk.h) which might actually lead to
> problems similar to (1).
> In pathfinder/module/pftijah, we run into (2) with _FILE_OFFSET_BITS (at
> least) on our Solaris 10 x86 machine, since only MonetDB' configure.ag
> checks AC_SYS_LARGEFILE() while pathfinder's configure.ag does not.
> To solve the problem (2) "properly", we could either make all configures
> identical (e.g., by moving all "local" checks from the various configure.ag
> to MonetDB/conf.monet.m4).
> But that still leaves us with (1).
> To solve (1) (and (2)) "properly", we could avoid the implicit inclusion of
> monetdb_config.h in monet_utils.h (and hence gdk.h & monet.h) by removing
> the respective include from monet_utils.h.
> But then, we'd have to explicitly include monetdb_config.h in each .c file
> that now includes one of monet_utils.h, gdk.h, monet.h (directly or via some
> other include) --- a lot of work, with a high risk to overlook some
> locations...
> A "better"(?) (at least simpler) solution could be to guard the 
> #include "monetdb_config.h" in MonetDB' monet_utils.h by, say,
> #ifndef NO_MONETDB_CONFIG ... #endif,
> and then define NO_MONETDB_CONFIG in X_config.h (with X one of sql, pf,
> etc,).

Of course, "even" this solution does not keep us from making sure that all
results of MonetDB's configure that are use in ("expoerted") MonetDB include
files are also checked by the other configures, i.e., the checks must be in
the shared MonetDB/conf/monet.m4 .


> I'd strongly vote for the last solution. ;-)
> Comments, ideas, complaints, objections?
> Stefan

| Dr. Stefan Manegold | mailto:Stefan.Manegold at cwi.nl |
| CWI,  P.O.Box 94079 | http://www.cwi.nl/~manegold/  |
| 1090 GB Amsterdam   | Tel.: +31 (20) 592-4212       |
| The Netherlands     | Fax : +31 (20) 592-4312       |

More information about the developers-list mailing list