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