On Sat, Mar 10, 2012 at 11:34 AM, Marvin Humphrey
<[email protected]> wrote:
> At some point in the future, we will probably break a bunch of stuff out
> of the Lucy parcel, creating Lucy::Test, individual LucyX parcels and so
> on. If you had an extension that needed both Lucy and e.g.
> Lucy::Search::ProximityQuery, you would need one pound-include per
> parcel (*not* per class):
>
> #include "Lucy.h" #include "Lucy/Search/ProximityQuery.h"
D'oh! There were two mistakes in that code sample -- accidental line
rewrap, and putting ProximityQuery under "Lucy" instead of "LucyX". It
should have read like this:
#include "Lucy.h"
#include "LucyX/Search/ProximityQuery.h"
> I'm not exactly sure how to deal with the namespace conflict between
> parcels and classes
OK, I think I've got it. Here's a variant of the code sample above:
#include "org/apache/Lucy/0/parcel.h"
#include "org/apache/LucyX/Search/ProximityQuery/0/parcel.h"
This scheme avoids three kinds of conflicts:
* Conflicts between Clownfish parcels and classes.
* Conflicts between similarly named parcels published by different
organizations.
* Conflicts between major versions of the same parcel. (Note that
there is only a single digit for the version number.)
I see two possible techniques for how we could install the per-class
header files[1].
We can install into a per-version directory...
$CLOWNFISH_INC/org/apache/Lucy/0.4.0/Lucy/Analysis/Analyzer.h
$CLOWNFISH_INC/org/apache/Lucy/0.4.0/Lucy/Analysis/Normalizer.h
[...]
... and then symlink the version dir to the single-digit major API dir:
$CLOWNFISH_INC/org/apache/Lucy/0 <-- points at e.g. ../0.4.0
The other possibility is to clobber the contents of the major version
dir when installing minor/bugfix/etc releases:
$CLOWNFISH_INC/org/apache/Lucy/0/Lucy/Analysis/Analyzer.h
$CLOWNFISH_INC/org/apache/Lucy/0/Lucy/Analysis/Normalizer.h
[...]
This has the advantage of compatibility with file systems that do not
support directory symlinks.
Regardless of which installation mechanism we choose...
* The extension author only needs to know about major versions.
* There is still only one include dir for all Clownfish-powered
distros.
Marvin Humphrey
[1] Our "per-class" header files are not technically per-class right now,
though we could choose to start enforcing that.