[cairo] "export" annotations on public APIs

Bob Jamison rjamison at titan.com
Tue May 10 13:23:17 PDT 2005

Carl Worth wrote:

>On Thu, 21 Apr 2005 15:59:12 +1200, Robert O'Callahan wrote:
>>Integrating Cairo into Mozilla, we've run into a problem building Cairo as a 
>>shared library --- there are no annotations to indicate which functions 
>>should be exported from a shared library, when building on a platform that 
>>doesn't export all symbols by default.
>We have gone through the complementary effort and annotated each
>function that should not be exported with "cairo_private", (though we
>might not have 100% of the functions tagged at the moment). Could
>those annotations be adequate for your use?
>>                                       This affects not only Win32, but now 
>>also gcc4 when we use "#pragma GCC visibility" to hide internal symbols. 
>>Would a patch that adds a CAIRO_EXPORT macro to all public functions (by 
>>default, defined to nothing) be looked upon favourably?
>One thing I really like about annotating the non-exported functions is
>that the public header file does not get cluttered and, as such,
>maintains quite good readability. I'd like to preserve that if we can.
>If annotations in the public header do prove unavoidable I might
>suggest "cairo_public" as an annotation to maintain consistency with
>our current cairo_private annotation. (But again, I'd prefer to only
>have to mark the private functions).
Since on Unix-like boxen, public symbols are by default all exported, do you
mean on Win32?  If so, then I would hope that the evil 
-not- be inserted into any of the Cairo source files.  Please make the 
at a higher level, or export them in the much nicer and cleaner .def 
files.  Very
often that declaration can break a build, or lock someone into using a 
DLL when
it is not wanted.

Bob Jamison
Titan Corp

More information about the cairo mailing list