Cairo exports and more (was Re: [cairo] Re: Munging header files
for export (and other) attributes)
Hans Breuer
hans at breuer.org
Mon Sep 5 14:23:00 PDT 2005
On 04.09.2005 23:15, Owen Taylor wrote:
> On Sun, 2005-09-04 at 13:58 +0200, Hans Breuer wrote:
>
>>As usual the full patch to let me build cairo on win32 with
>>msvc is much bigger than just munging some headers.
>>Following the full ChangeLog entry and three pieces from the
>>patch (exports = munging headers, poratbility = non-gcc,
>>msc = makefiles for msvc build). The full patch is available
>>via http://hans.breuer.org/gtk/cairo.html
>
>
> * The addition of export markers generally looks good to me.
> Carl will have to make the final call as to whether he
> likes the names.
>
IMO after all it doesn't look that bad. Though my prefered solution
would have beem the symbols file approach as well - and drop the
concept of messing with calling conventions ;)
> * The portability stuff is mostly good. I think rather than
> hacking up the PDF and PS backends to build without font
> support, it would be better to not build them until we
> get font embedding working with win32 fonts. It's not
> that much work.
>
Maybe, but my patches are huge enough for now.
> * In terms of the makefile.msc stuff ... it obviously quite
> specific to a particular build setup; see things like
> !INCLUDE $(TOP)\glib\build\win32\make.msc. I tried for a little
> while to get things going, but got frustrated enough with trying
> to work in the windows command prompt (blech) that I gave up.
> It was easier to create project files from scratch for
> visual studio.
>
Yeah, nmake needs some time to get used to it ;-)
> To make hacking on cairo "attractive" to people using MSVC, there
> seems to be two constraints:
>
> - The solution must integrate with the IDE. It could possibly use
> external makefiles, but even so project files are needed.
>
This makes the solution either highly version specific (workspace format
changes incompatible with every major release). Also I'm not convinced
project files make it more "attractive" than a simple (better two) :
nmake -f makefile.msc
> - It must be possible to let the user configure a couple of options -
> where they have libpng installed, whether they have FreeType installed,
> and, if so where. Possibly also where the Platform SDK is installed.
> (Needed if you are building with the free-beer "Visual Studio Express")
Which wouldn't have the IDE to process the proposed project files, would it ?
> You may have the right idea with CMake.
I'm not sure. There wasn't much interest in bringing it any further as I
announced it. Also maintaining the files for a cross-platform build alone
seems to be a little out of my scope.
> If we aren't generating project
> files than we would probably have to just take the configuration aspect
> of the picture (no FreeType, libpng is in ../libpng, or whatever.)
>
On 04.09.2005 23:18, Owen Taylor wrote:
> I forgot to finish what I was saying, which was that while I don't think
> the .msc makefiles are a full solution, I think it makes sense to get
> them into the tree ... might as well have *something* there.
>
> Perhaps we should include the relevant parts of build\..\make.msc in the
> cairo tree to avoid having GLib be a build dependency of cairo?
>
A better solution may be to detect if the bigger environment is available
and fallback to a *no dependencies* cairo build? That approach was quite
simple to get working even with the ugly nmake syntax.
> A short document describing how to set up a build using this stuff would
> be quite useful.
>
Something along the line of http://cvs.gnome.org/viewcvs/*checkout*/glib/README.win32 ?
> One additional problem with project files is the structure of
> tests/ ... as far as I can see, we would need a project file *per*
> executable. Perhaps we should consider switching from lots of
> separate files to:
>
> cairo-test # runs all
> cairo-test a8-mask # runs one
>
Or use a nmake makefile again ?
> A few comments on details:
>
> #ifndef CAIRO_MUTEX_DECLARE
> +# ifdef __GNUC__
> # warning "No mutex declarations, assuming single-threaded code"
> +# else
> +# pragma message("No mutex declarations, assuming single-threaded code")
> +# endif
>
> The pragma here is as MSVC specific as #warning is GCC specific. So, it
> would be good to conditionalize it.
AFAIK unknown pragmas are supposed to be ignored (with warning).
#warning on the other hand gives a build error with msvc.
> Long term, of course, what really
> needs to be done is implement locking for Win32.
>
That one depends on a backend constructor facility cause the synchronization
objects can not be initialized statically. Otherwise quite a simple task.
> +/* Every exported symbol should be decorated with this macro.
> + * It gets defined by the build system on poor platforms where
> + * exporting *all* functions possible is not the default.
> + * It should *not* be defined in cairo-features.h cause usually
> + * the definition needs to be different between exporting while
> + * *building* the library and importing while using it.
> + */
>
> I think we can omit the editorializing
>
What ever you see fit. [Though I dont quite understand the sense
of editorializing here :-)]
> [...]
> * This can be defined by the build system if we need to mark
> * exported functions for the compiler.
> [...]
>
> Or something :-) The mozilla people find it useful for GCC, even.
>
Thanks,
Hans
-------- Hans "at" Breuer "dot" Org -----------
Tell me what you need, and I'll tell you how to
get along without it. -- Dilbert
More information about the cairo
mailing list