I've run this by a couple of people and I think we've thought it
through to the point where we need more input from people who might be
affected.  I want to completely separate our interfaces from the
implementation of said interfaces.  Practically speaking, I want to
move the public headers & idl files from their respective places in
the tree into a module heirarchy under mozilla/include/ .

This change would immediately give us 3 wins:

1) Building ind. modules will not require the entire tree.

Right now, you cannot even build xpcom standalone without pulling the
entire tree or keeping a separate list of dirs to pull that gets
quickly outdated. This change would allow us to just build include/ to
get all of the interfaces and then just build the specific module that
you are interested in.  This would be a huge win for embedding.


2) Inter-module dependencies will be better defined.

This change would incorporate the work being done in bug 59454 which
is to clearly state inter-module dependencies via the use of
REQUIRES. This will force engineers to actually think about the code
in terms of individual and separate modules not just as part of a
monolithic browser.  This is also key for our various embedding
efforts.


3) Single pass build

Since the public interfaces will be exported from a centralized
location, there is no need to traverse the tree once just to export
the interfaces.  Since not everyone has a 1.5 ghz PC with ultra160
scsi drives (I sure don't :-P), this will help a lot as well.

In fairness, I must note the downsides as well.....there aren't any! ;)

Ok, potential downside, modules will no longer be contained in a
single directory heirarchy.  To pull _just_ xpcom source, you will
always have to pull mozilla/include/xpcom as well as mozilla/xpcom.
But since modules cannot really be built standalone (you always need
to have the requisite header files), I wouldn't consider this a valid
concern.

For the intial proof-of-concept run, we will probably just use the
mac's MANIFEST & MANIFEST_IDL files to generate the list of interfaces
to export.  But that will really only allow us to implement the single
pass build & maybe the inter-module dependencies tracking.  To take
full advantage of the proposed changes would require copying the
interface files to include/<module> in the cvs repo.

Any thoughts?

- cls



Reply via email to