[sigc] Making libsigc++ friendlier for MSVC



Hi,

As you know, we've been experimenting with libsigc++ on Windows.  Here are
some other issues we've run into:

1. Inability to run the configure script, which is necessary to generate
sigc++config.h.  As I've mentioned in bug 147311, I think it might be
reasonable to supply a pre-generated copy in the MSVC_Net2003 directory.

2. The MSVC project currently generates a statically-linked library.  This is
much less useful than a DLL due to the LGPL requirements.  It's simple to
change the project settings to output a DLL, but...

3. Functions need to be exported explicitly from the DLL.  This means adding
__declspec(dllexport) to various class declarations.  I've done this by
adding

  #define SIGC_API __declspec(dllexport)

to sigc++config.h. Obviously for non-MSVC users, it'd be an empty definition.
Would anyone object to this? (These SIGC_API warts would appear once per
class/struct declaration, not for each individual function.)

4. The MSVC project currently does not include slot_base.cc and lambda.cc.

5. As a template library, libsigc++ sometimes allocates memory in the
template headers and deallocates it in the library binary (or vice-versa).
This allows mismatched allocators/deallocators.  I'm not sure if this is a
problem on Linux, but it's something we readily can encountered on Windows.
(We built a libsigc++ DLL using Microsoft's release runtime libraries, but we
unwittingly used that DLL with code we compiled with debug runtimes,
resulting in memory access violations.)

This is more of a nuisance than a problem--users of libsigc++ can be careful
to build the library with the specific runtimes they use.  Another way to
avoid this would be to provide an internal allocator and deallocator.  I've
made crude ones using a combination of malloc, free, and placement new.
Would there be any objections to using macros like SIGC_NEW and SIGC_DELETE
everywhere instead of the standard new and delete operators?  The syntax for
the ones I've written is:

  SIGC_NEW<type>(args)
  SIGC_DELETE(ptr, ~dtor)


I'd be happy to incorporate all of the above changes to the current CVS
sources and submit patches, if desired.

Thanks,

- James



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]