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

Stefan Manegold Stefan.Manegold at cwi.nl
Fri Sep 22 14:25:21 CEST 2006


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,).


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