[glibmm/use-dllexport-2-62: 2/3] glib/src: Decorate classes and methods with GLIBMM_API



commit 8d04e3c8d48361f8ca66480d316519ea4cf9e159
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Thu Mar 5 15:45:00 2020 +0800

    glib/src: Decorate classes and methods with GLIBMM_API
    
    This prepares for us to export symbols using compiler directives, so that we
    can eventually retire gendef.exe.  This also makes the scripts place GLIBMM_API
    as appropriate for the generated Glib:Error classes and the wrap() method.

 glib/src/binding.hg              |  4 +--
 glib/src/bytearray.hg            |  4 +--
 glib/src/bytes.hg                |  4 +--
 glib/src/checksum.hg             |  4 +--
 glib/src/convert.hg              | 19 +++++++++++--
 glib/src/date.hg                 |  2 +-
 glib/src/datetime.hg             |  4 +--
 glib/src/fileutils.hg            | 14 +++++++---
 glib/src/iochannel.hg            |  7 ++---
 glib/src/keyfile.hg              |  4 +--
 glib/src/markup.hg               |  9 ++++---
 glib/src/miscutils.hg            | 37 +++++++++++++++++++++++++
 glib/src/module.hg               |  2 +-
 glib/src/optioncontext.hg        |  4 +--
 glib/src/optionentry.hg          |  2 +-
 glib/src/optiongroup.hg          |  2 +-
 glib/src/regex.hg                |  8 +++---
 glib/src/shell.hg                |  5 +++-
 glib/src/spawn.hg                | 11 +++++++-
 glib/src/thread.hg               | 32 +++++++++++-----------
 glib/src/threads.hg              | 28 +++++++++----------
 glib/src/timezone.hg             |  4 +--
 glib/src/uriutils.hg             |  3 +++
 glib/src/value_basictypes.h.m4   |  2 +-
 glib/src/valuearray.hg           |  4 +--
 glib/src/variant.hg              | 34 +++++++++++------------
 glib/src/variant_basictypes.h.m4 |  2 +-
 glib/src/variantdict.hg          |  4 +--
 glib/src/variantiter.hg          |  8 +++---
 glib/src/varianttype.hg          | 58 ++++++++++++++++++++--------------------
 30 files changed, 201 insertions(+), 124 deletions(-)
---
diff --git a/glib/src/binding.hg b/glib/src/binding.hg
index 9f192727..c8c7f35e 100644
--- a/glib/src/binding.hg
+++ b/glib/src/binding.hg
@@ -96,9 +96,9 @@ _WRAP_ENUM(BindingFlags, GBindingFlags, newin "2,44")
  *
  * @newin{2,44}
  */
-class Binding : public Glib::Object
+class GLIBMM_API Binding : public Glib::Object
 {
-  _CLASS_GOBJECT(Binding, GBinding, G_BINDING, Glib::Object, GObject)
+  _CLASS_GOBJECT(Binding, GBinding, G_BINDING, Glib::Object, GObject, , , GLIBMM_API)
 
 public:
   /** A slot to be called to transform values in a binding created by
diff --git a/glib/src/bytearray.hg b/glib/src/bytearray.hg
index 9dac5e20..b82c4d30 100644
--- a/glib/src/bytearray.hg
+++ b/glib/src/bytearray.hg
@@ -41,9 +41,9 @@ namespace Glib
  *
  * @newin{2,36}
  */
-class ByteArray final
+class GLIBMM_API ByteArray final
 {
-  _CLASS_OPAQUE_REFCOUNTED(ByteArray, GByteArray, NONE, g_byte_array_ref, g_byte_array_unref)
+  _CLASS_OPAQUE_REFCOUNTED(ByteArray, GByteArray, NONE, g_byte_array_ref, g_byte_array_unref, GLIBMM_API)
   _IGNORE(g_byte_array_ref, g_byte_array_unref)
 
 public:
diff --git a/glib/src/bytes.hg b/glib/src/bytes.hg
index 867b99c1..dd5cc3d3 100644
--- a/glib/src/bytes.hg
+++ b/glib/src/bytes.hg
@@ -50,9 +50,9 @@ namespace Glib
  *
  * @newin{2,34}
  */
-class Bytes final
+class GLIBMM_API Bytes final
 {
-  _CLASS_OPAQUE_REFCOUNTED(Bytes, GBytes, NONE, g_bytes_ref, g_bytes_unref)
+  _CLASS_OPAQUE_REFCOUNTED(Bytes, GBytes, NONE, g_bytes_ref, g_bytes_unref, GLIBMM_API)
   _IGNORE(g_bytes_ref, g_bytes_unref)
 public:
 
diff --git a/glib/src/checksum.hg b/glib/src/checksum.hg
index 56a6b8cc..f4fb5373 100644
--- a/glib/src/checksum.hg
+++ b/glib/src/checksum.hg
@@ -39,9 +39,9 @@ namespace Glib
  *
  * @newin{2,16}
  */
-class Checksum
+class GLIBMM_API Checksum
 {
-  _CLASS_OPAQUE_COPYABLE(Checksum, GChecksum, NONE, g_checksum_copy, g_checksum_free)
+  _CLASS_OPAQUE_COPYABLE(Checksum, GChecksum, NONE, g_checksum_copy, g_checksum_free, GLIBMM_API)
   _IGNORE(g_checksum_copy, g_checksum_free)
 
 public:
diff --git a/glib/src/convert.hg b/glib/src/convert.hg
index 9c211bc9..d07e8e35 100644
--- a/glib/src/convert.hg
+++ b/glib/src/convert.hg
@@ -40,7 +40,7 @@ namespace Glib
  * you should always catch those errors, and then try to recover, or tell the
  * user the input was invalid.
  */
-_WRAP_GERROR(ConvertError, GConvertError, G_CONVERT_ERROR, NO_GTYPE)
+_WRAP_GERROR(ConvertError, GConvertError, G_CONVERT_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 
 /** Thin %iconv() wrapper.
@@ -49,7 +49,7 @@ _WRAP_GERROR(ConvertError, GConvertError, G_CONVERT_ERROR, NO_GTYPE)
  * creating an IConv object once and using the convert() method could
  * be useful when converting multiple times between the same charsets.
  */
-class IConv
+class GLIBMM_API IConv
 {
 public:
   /** Open new conversion descriptor.
@@ -107,12 +107,14 @@ private:
 /** Get the charset used by the current locale.
  * @return Whether the current locale uses the UTF-8 charset.
  */
+GLIBMM_API
 bool get_charset();
 
 /** Get the charset used by the current locale.
  * @param charset Will be filled with the charset's name.
  * @return Whether the current locale uses the UTF-8 charset.
  */
+GLIBMM_API
 bool get_charset(std::string& charset);
 
 /** Convert from one encoding to another.
@@ -122,6 +124,7 @@ bool get_charset(std::string& charset);
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string convert(const std::string& str,
                     const std::string& to_codeset,
                     const std::string& from_codeset);
@@ -136,6 +139,7 @@ std::string convert(const std::string& str,
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string convert_with_fallback(const std::string& str,
                                   const std::string& to_codeset,
                                   const std::string& from_codeset);
@@ -156,6 +160,7 @@ std::string convert_with_fallback(const std::string& str,
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string convert_with_fallback(const std::string& str,
                                   const std::string& to_codeset,
                                   const std::string& from_codeset,
@@ -168,6 +173,7 @@ std::string convert_with_fallback(const std::string& str,
  * @return The input string converted to UTF-8 encoding.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring locale_to_utf8(const std::string& opsys_string);
 
 /** Convert from UTF-8 to the current locale's encoding.
@@ -177,6 +183,7 @@ Glib::ustring locale_to_utf8(const std::string& opsys_string);
  *  system's current locale.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string locale_from_utf8(const Glib::ustring& utf8_string);
 
 /** Converts a string which is in the encoding used for filenames into
@@ -185,6 +192,7 @@ std::string locale_from_utf8(const Glib::ustring& utf8_string);
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring filename_to_utf8(const std::string& opsys_string);
 
 /** Converts a string from UTF-8 to the encoding used for filenames.
@@ -192,6 +200,7 @@ Glib::ustring filename_to_utf8(const std::string& opsys_string);
  * @return The converted string.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string filename_from_utf8(const Glib::ustring& utf8_string);
 
 /** Converts an escaped UTF-8 encoded URI to a local filename
@@ -202,6 +211,7 @@ std::string filename_from_utf8(const Glib::ustring& utf8_string);
  * @return The resulting filename.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname);
 
 /** Converts an escaped UTF-8 encoded URI to a local filename in the encoding
@@ -210,6 +220,7 @@ std::string filename_from_uri(const Glib::ustring& uri, Glib::ustring& hostname)
  * @return The resulting filename.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 std::string filename_from_uri(const Glib::ustring& uri);
 
 /** Converts an absolute filename to an escaped UTF-8 encoded URI.
@@ -219,6 +230,7 @@ std::string filename_from_uri(const Glib::ustring& uri);
  * @return The resulting URI.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring& hostname);
 
 /** Converts an absolute filename to an escaped UTF-8 encoded URI.
@@ -227,6 +239,7 @@ Glib::ustring filename_to_uri(const std::string& filename, const Glib::ustring&
  * @return The resulting URI.
  * @throw Glib::ConvertError
  */
+GLIBMM_API
 Glib::ustring filename_to_uri(const std::string& filename);
 
 /** Returns the display basename for the particular filename, guaranteed
@@ -243,6 +256,7 @@ Glib::ustring filename_to_uri(const std::string& filename);
  * @param filename An absolute pathname in the GLib file name encoding.
  * @result A string containing a rendition of the basename of the filename in valid UTF-8
  */
+GLIBMM_API
 Glib::ustring filename_display_basename(const std::string& filename);
 
 /** Converts a filename into a valid UTF-8 string. The
@@ -260,6 +274,7 @@ Glib::ustring filename_display_basename(const std::string& filename);
  * @param filename: a pathname hopefully in the GLib file name encoding
  * @result A string containing a rendition of the filename in valid UTF-8.
  */
+GLIBMM_API
 Glib::ustring filename_display_name(const std::string& filename);
 
 /** @} group CharsetConv */
diff --git a/glib/src/date.hg b/glib/src/date.hg
index 12728311..c1ec4a05 100644
--- a/glib/src/date.hg
+++ b/glib/src/date.hg
@@ -30,7 +30,7 @@ namespace Glib
 
 /** Julian calendar date.
  */
-class Date
+class GLIBMM_API Date
 {
 public:
   using Day = guint8 ;
diff --git a/glib/src/datetime.hg b/glib/src/datetime.hg
index 280df71a..33f99855 100644
--- a/glib/src/datetime.hg
+++ b/glib/src/datetime.hg
@@ -60,9 +60,9 @@ using TimeSpan = GTimeSpan;
  * in length).
  * @newin{2,30}
  */
-class DateTime
+class GLIBMM_API DateTime
 {
-  _CLASS_OPAQUE_COPYABLE(DateTime, GDateTime, NONE, g_date_time_ref, g_date_time_unref)
+  _CLASS_OPAQUE_COPYABLE(DateTime, GDateTime, NONE, g_date_time_ref, g_date_time_unref, GLIBMM_API)
   _IGNORE(g_date_time_ref, g_date_time_unref)
 
 public:
diff --git a/glib/src/fileutils.hg b/glib/src/fileutils.hg
index c6e73ede..d7db8c28 100644
--- a/glib/src/fileutils.hg
+++ b/glib/src/fileutils.hg
@@ -59,7 +59,8 @@ _WRAP_GERROR(FileError, GFileError, G_FILE_ERROR, NO_GTYPE,
     s#^AGAIN$#TRYAGAIN#,
     s#^INTR$#INTERRUPTED#,
     s#^IO$#IO_ERROR#,
-    s#^PERM$#NOT_OWNER#
+    s#^PERM$#NOT_OWNER#,
+    decl_prefix GLIBMM_API
 )
 
 /** @enum FileError::Code
@@ -209,7 +210,7 @@ class Dir;
 /** The iterator type of Glib::Dir.
  * @ingroup FileUtils
  */
-class DirIterator
+class GLIBMM_API DirIterator
 {
 public:
   typedef std::input_iterator_tag   iterator_category;
@@ -253,7 +254,7 @@ private:
  * @note The encoding of the directory entries isn't necessarily UTF-8.
  * Use Glib::filename_to_utf8() if you need to display them.
  */
-class Dir
+class GLIBMM_API Dir
 {
 public:
   using iterator = DirIterator;
@@ -330,6 +331,7 @@ private:
  * @param test Bitfield of Glib::FileTest flags.
  * @return Whether a test was true.
  */
+GLIBMM_API
 bool file_test(const std::string& filename, FileTest test);
 
 /** Opens a temporary file.
@@ -345,6 +347,7 @@ bool file_test(const std::string& filename, FileTest test);
  *   is a difference. The file handle should be closed with close(). In
  *   case of errors, <tt>-1</tt> is returned.
  */
+GLIBMM_API
 int mkstemp(std::string& filename_template);
 
 /** Opens a file for writing in the preferred directory for temporary files
@@ -362,6 +365,7 @@ int mkstemp(std::string& filename_template);
  * difference. The file handle should be closed with <tt>close()</tt>.
  * @throw Glib::FileError
  */
+GLIBMM_API
 int file_open_tmp(std::string& name_used, const std::string& prefix);
 
 /** Opens a file for writing in the preferred directory for temporary files
@@ -376,6 +380,7 @@ int file_open_tmp(std::string& name_used, const std::string& prefix);
  * difference. The file handle should be closed with <tt>close()</tt>.
  * @throw Glib::FileError
  */
+GLIBMM_API
 int file_open_tmp(std::string& name_used);
 
 /** Reads an entire file into a string, with good error checking.
@@ -384,6 +389,7 @@ int file_open_tmp(std::string& name_used);
  * @return The file contents.
  * @throw Glib::FileError
  */
+GLIBMM_API
 std::string file_get_contents(const std::string& filename);
 
 /** Writes all of @a contents to a file named @a filename, with good error checking.
@@ -421,11 +427,13 @@ std::string file_get_contents(const std::string& filename);
  *
  * @newin{2,22}
  **/
+GLIBMM_API
 void file_set_contents (const std::string& filename, const gchar *contents, gssize length);
 /** A variant of file_set_contents which accepts a standard C++ string
  *
  * @newin{2,22}
  * */
+GLIBMM_API
 void file_set_contents (const std::string& filename, const std::string& contents);
 
 } // namespace Glib
diff --git a/glib/src/iochannel.hg b/glib/src/iochannel.hg
index 00e49e36..bf39e048 100644
--- a/glib/src/iochannel.hg
+++ b/glib/src/iochannel.hg
@@ -62,7 +62,8 @@ _WRAP_GERROR(IOChannelError, GIOChannelError, G_IO_CHANNEL_ERROR, NO_GTYPE,
     s#^ACCES$#ACCESS_DENIED#,
     s#^FBIG$#FILE_TOO_BIG#,
     s#^IO$#IO_ERROR#,
-    s#^OVERFLOW$#OVERFLOWN#)
+    s#^OVERFLOW$#OVERFLOWN#,
+    decl_prefix GLIBMM_API)
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 class GlibmmIOChannel;
@@ -79,7 +80,7 @@ class GlibmmIOChannel;
  *
  * You can create an IOChannel with one of the static create methods.
  */
-class IOChannel : public sigc::trackable
+class GLIBMM_API IOChannel : public sigc::trackable
 {
   _CLASS_GENERIC(IOChannel, GIOChannel)
 
@@ -477,7 +478,7 @@ private:
   void release_gobject();
 };
 
-Glib::RefPtr<IOChannel> wrap(GIOChannel* gobject, bool take_copy = false);
+GLIBMM_API Glib::RefPtr<IOChannel> wrap(GIOChannel* gobject, bool take_copy = false);
 
 } // namespace Glib
 
diff --git a/glib/src/keyfile.hg b/glib/src/keyfile.hg
index 899ebf24..60afd904 100644
--- a/glib/src/keyfile.hg
+++ b/glib/src/keyfile.hg
@@ -34,7 +34,7 @@ namespace Glib
 
 /** Exception class for KeyFile errors.
  */
-_WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE)
+_WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 /** This class lets you parse, edit or create files containing groups of key-value pairs, which we call key 
files
  * for lack of a better name. Several freedesktop.org specifications use key files now, e.g the Desktop Entry
@@ -91,7 +91,7 @@ _WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE)
  *
  * @newin{2,14}
  */
-class KeyFile
+class GLIBMM_API KeyFile
 {
   _CLASS_GENERIC(KeyFile, GKeyFile)
 public:
diff --git a/glib/src/markup.hg b/glib/src/markup.hg
index bd1d24b6..1a4f1a3d 100644
--- a/glib/src/markup.hg
+++ b/glib/src/markup.hg
@@ -63,7 +63,7 @@ namespace Glib
 
 /** %Exception class for markup parsing errors.
  */
-_WRAP_GERROR(MarkupError, GMarkupError, G_MARKUP_ERROR, NO_GTYPE)
+_WRAP_GERROR(MarkupError, GMarkupError, G_MARKUP_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 /*! @var MarkupError::Code MarkupError::BAD_UTF8
  * Text being parsed was not valid UTF-8.
@@ -107,6 +107,7 @@ using Error = Glib::MarkupError;
  * @param text Some valid UTF-8 text.
  * @return Escaped text.
  */
+GLIBMM_API
 Glib::ustring escape_text(const Glib::ustring& text);
 
 
@@ -128,7 +129,7 @@ _WRAP_ENUM(ParseFlags, GMarkupParseFlags, NO_GTYPE, s#^MARKUP_##)
  * the AttributeKeyLess predicate is locale-independent.  This is both
  * more correct and much more efficient.
  */
-class AttributeKeyLess
+class GLIBMM_API AttributeKeyLess
 {
 public:
   using first_argument_type = Glib::ustring;
@@ -157,7 +158,7 @@ class ParserCallbacks;
  * error from a method, Glib::Markup::ParseContext::parse() will report that
  * error back to its caller.
  */
-class Parser : public sigc::trackable
+class GLIBMM_API Parser : public sigc::trackable
 {
 public:
   typedef std::map<Glib::ustring, Glib::ustring, Glib::Markup::AttributeKeyLess> AttributeMap;
@@ -253,7 +254,7 @@ private:
  * occur; once an error occurs, the parse context can't continue to parse text
  * (you have to destroy it and create a new parse context).
  */
-class ParseContext : public sigc::trackable
+class GLIBMM_API ParseContext : public sigc::trackable
 {
 public:
   /** Creates a new parse context.
diff --git a/glib/src/miscutils.hg b/glib/src/miscutils.hg
index 5b0ba58c..75c3288f 100644
--- a/glib/src/miscutils.hg
+++ b/glib/src/miscutils.hg
@@ -40,6 +40,7 @@ _WRAP_ENUM(FormatSizeFlags, GFormatSizeFlags, NO_GTYPE)
  *
  * @return Human-readable application name. May return <tt>""</tt>.
  */
+GLIBMM_API
 Glib::ustring get_application_name();
 
 /** Sets a human-readable name for the application.
@@ -55,6 +56,7 @@ Glib::ustring get_application_name();
  *
  * @param application_name Localized name of the application.
  */
+GLIBMM_API
 void set_application_name(const Glib::ustring& application_name);
 
 /** Gets the name of the program.
@@ -68,11 +70,13 @@ void set_application_name(const Glib::ustring& application_name);
  *
  * @return The name of the program.
  */
+GLIBMM_API
 std::string get_prgname();
 
 /** Sets the name of the program.
  * @param prgname The name of the program.
  */
+GLIBMM_API
 void set_prgname(const std::string& prgname);
 
 /** Returns the value of an environment variable. The name and value
@@ -86,6 +90,7 @@ void set_prgname(const std::string& prgname);
  * @param[out] found Whether the environment variable has been found.
  * @return The value of the environment variable, or <tt>""</tt> if not found.
  */
+GLIBMM_API
 std::string getenv(const std::string& variable, bool& found);
 
 /** Returns the value of an environment variable. The name and value
@@ -98,6 +103,7 @@ std::string getenv(const std::string& variable, bool& found);
  * @param variable The environment variable to get.
  * @return The value of the environment variable, or <tt>""</tt> if not found.
  */
+GLIBMM_API
 std::string getenv(const std::string& variable);
 
 
@@ -114,6 +120,7 @@ std::string getenv(const std::string& variable);
  * @param overwrite Whether to change the variable if it already exists.
  * @result false if the environment variable couldn't be set.
  */
+GLIBMM_API
 bool setenv(const std::string& variable, const std::string& value, bool overwrite = true);
 
 /** Removes an environment variable from the environment.
@@ -125,6 +132,7 @@ bool setenv(const std::string& variable, const std::string& value, bool overwrit
  *
  * @param variable: the environment variable to remove. It  must not contain '='.
  **/
+GLIBMM_API
 void unsetenv(const std::string& variable);
 
 /** Gets the names of all variables set in the environment.
@@ -139,6 +147,7 @@ void unsetenv(const std::string& variable);
  * @return Array of environment names (The generic ArrayHandle will be
  * implicitly converted to any STL compatible container type).
  */
+GLIBMM_API
 Glib::ArrayHandle<std::string> listenv();
 
 /** Gets the user name of the current user.
@@ -150,6 +159,7 @@ Glib::ArrayHandle<std::string> listenv();
  *
  * @return The name of the current user.
  */
+GLIBMM_API
 std::string get_user_name();
 
 /** Gets the real name of the current user.
@@ -161,11 +171,13 @@ std::string get_user_name();
  *
  * @return The current user's real name.
  */
+GLIBMM_API
 std::string get_real_name();
 
 /** Gets the current user's home directory.
  * @return The current user's home directory or an empty string if not defined.
  */
+GLIBMM_API
 std::string get_home_dir();
 
 /** Gets the directory to use for temporary files.
@@ -174,11 +186,13 @@ std::string get_home_dir();
  * <tt>"/tmp"</tt> is returned on UNIX and <tt>"C:\\"</tt> on Windows.
  * @return The directory to use for temporary files.
  */
+GLIBMM_API
 std::string get_tmp_dir();
 
 /** Gets the current directory.
  * @return The current directory.
  */
+GLIBMM_API
 std::string get_current_dir();
 
 #ifndef GLIBMM_DISABLE_DEPRECATED
@@ -200,6 +214,7 @@ std::string get_current_dir();
  * @newin{2,14}
  * @deprecated Use get_user_special_dir(Glib::UserDirectory directory) instead.
  */
+GLIBMM_API
 std::string get_user_special_dir(GUserDirectory directory);
 #endif // GLIBMM_DISABLE_DEPRECATED
 
@@ -220,6 +235,7 @@ std::string get_user_special_dir(GUserDirectory directory);
  *
  * @newin{2,46}
  */
+GLIBMM_API
 std::string get_user_special_dir(UserDirectory directory);
 
 /** Returns a base directory in which to access application data such as icons
@@ -230,6 +246,7 @@ std::string get_user_special_dir(UserDirectory directory);
  *
  * @newin{2,14}
  */
+GLIBMM_API
 std::string get_user_data_dir();
 
 /** Returns a base directory in which to store user-specific application
@@ -240,6 +257,7 @@ std::string get_user_data_dir();
  *
  * @newin{2,14}
  */
+GLIBMM_API
 std::string get_user_config_dir();
 
 /** Returns an ordered list of base directories in which to access system-wide application data.
@@ -247,6 +265,7 @@ std::string get_user_config_dir();
  *
  * @newin{2,18}
  */
+GLIBMM_API
 std::vector<std::string> get_system_data_dirs();
 
 /** Returns an ordered list of base directories in which to access system-wide configuration information.
@@ -254,6 +273,7 @@ std::vector<std::string> get_system_data_dirs();
  *
  * @newin{2,18}
  */
+GLIBMM_API
 std::vector<std::string> get_system_config_dirs();
 
 /** Returns a base directory in which to store non-essential, cached data
@@ -264,6 +284,7 @@ std::vector<std::string> get_system_config_dirs();
  *
  * @newin{2,14}
  */
+GLIBMM_API
 std::string get_user_cache_dir();
 
 /** Returns @c true if the given @a filename is an absolute file name, i.e.\ it
@@ -272,6 +293,7 @@ std::string get_user_cache_dir();
  * @param filename A file name.
  * @return Whether @a filename is an absolute path.
  */
+GLIBMM_API
 bool path_is_absolute(const std::string& filename);
 
 /** Returns the remaining part of @a filename after the root component,
@@ -280,12 +302,14 @@ bool path_is_absolute(const std::string& filename);
  * @param filename A file name.
  * @return The file name without the root component, or <tt>""</tt>.
  */
+GLIBMM_API
 std::string path_skip_root(const std::string& filename);
 
 /** Gets the name of the file without any leading directory components.
  * @param filename The name of the file.
  * @return The name of the file without any leading directory components.
  */
+GLIBMM_API
 std::string path_get_basename(const std::string& filename);
 
 /** Gets the directory components of a file name.
@@ -293,6 +317,7 @@ std::string path_get_basename(const std::string& filename);
  * @param filename The name of the file.
  * @return The directory components of the file.
  */
+GLIBMM_API
 std::string path_get_dirname(const std::string& filename);
 
 /** Creates a filename from a series of elements using the correct
@@ -305,6 +330,7 @@ std::string path_get_dirname(const std::string& filename);
  *   Any STL compatible container type is accepted.
  * @return The resulting path.
  */
+GLIBMM_API
 std::string build_filename(const Glib::ArrayHandle<std::string>& elements);
 
 /** Creates a filename from two elements using the correct separator for filenames.
@@ -314,6 +340,7 @@ std::string build_filename(const Glib::ArrayHandle<std::string>& elements);
  * @param elem2 Second path element.
  * @return The resulting path.
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2);
 
 /** Creates a filename from three elements using the correct separator for filenames.
@@ -326,6 +353,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2);
  *
  * @newin{2,28}
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2,
                            const std::string& elem3);
 
@@ -341,6 +369,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  *
  * @newin{2,28}
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2,
                            const std::string& elem3, const std::string& elem4);
 
@@ -354,6 +383,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  * @param elem5 Fifth path element.
  * @return The resulting path.
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2,
                            const std::string& elem3, const std::string& elem4,
                            const std::string& elem5);
@@ -371,6 +401,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  *
  * @newin{2,28}
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2,
                            const std::string& elem3, const std::string& elem4,
                            const std::string& elem5, const std::string& elem6);
@@ -389,6 +420,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  *
  * @newin{2,28}
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2,
                            const std::string& elem3, const std::string& elem4,
                            const std::string& elem5, const std::string& elem6,
@@ -409,6 +441,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  *
  * @newin{2,28}
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2,
                            const std::string& elem3, const std::string& elem4,
                            const std::string& elem5, const std::string& elem6,
@@ -430,6 +463,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  *
  * @newin{2,28}
  */
+GLIBMM_API
 std::string build_filename(const std::string& elem1, const std::string& elem2,
                            const std::string& elem3, const std::string& elem4,
                            const std::string& elem5, const std::string& elem6,
@@ -470,6 +504,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  *   Any STL compatible container type is accepted.
  * @return The resulting path.
  */
+GLIBMM_API
 std::string build_path(const std::string& separator,
                        const Glib::ArrayHandle<std::string>& elements);
 
@@ -493,6 +528,7 @@ std::string build_path(const std::string& separator,
  * @param program A program name.
  * @return An absolute path, or <tt>""</tt>.
  */
+GLIBMM_API
 std::string find_program_in_path(const std::string& program);
 
 /** Formats a size (for example the size of a file) into a human readable string.
@@ -510,6 +546,7 @@ std::string find_program_in_path(const std::string& program);
  *
  * @newin{2,46}
  */
+GLIBMM_API
 Glib::ustring format_size(guint64 size, FormatSizeFlags flags = FORMAT_SIZE_DEFAULT);
 
 /** @} group MiscUtils */
diff --git a/glib/src/module.hg b/glib/src/module.hg
index ecfb2020..e0e23aa8 100644
--- a/glib/src/module.hg
+++ b/glib/src/module.hg
@@ -37,7 +37,7 @@ _WRAP_ENUM(ModuleFlags, GModuleFlags, NO_GTYPE)
  * (e.g. Linux/Sun), as well as HP-UX via its shl_load() mechanism,
  * and Windows platforms via DLLs.
  */
-class Module
+class GLIBMM_API Module
 {
   _CLASS_GENERIC(Module, GModule)
   _IGNORE(g_module_open, g_module_close)
diff --git a/glib/src/optioncontext.hg b/glib/src/optioncontext.hg
index 7c665913..7fdfcccd 100644
--- a/glib/src/optioncontext.hg
+++ b/glib/src/optioncontext.hg
@@ -31,7 +31,7 @@ namespace Glib
 
 /** Exception class for options.
  */
-_WRAP_GERROR(OptionError, GOptionError, G_OPTION_ERROR, NO_GTYPE)
+_WRAP_GERROR(OptionError, GOptionError, G_OPTION_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 /** An OptionContext defines and parses commandline options, using OptionGroup%s and \link OptionEntry 
option entries \endlink.
  *
@@ -83,7 +83,7 @@ _WRAP_GERROR(OptionError, GOptionError, G_OPTION_ERROR, NO_GTYPE)
  *
  *
  */
-class OptionContext
+class GLIBMM_API OptionContext
 {
   _CLASS_GENERIC(OptionContext, GOptionContext)
   _IGNORE(g_option_context_free)
diff --git a/glib/src/optionentry.hg b/glib/src/optionentry.hg
index d1f1ecce..ff177253 100644
--- a/glib/src/optionentry.hg
+++ b/glib/src/optionentry.hg
@@ -39,7 +39,7 @@ namespace Glib
  *
  * The arg_descripton is the placeholder to use for the extra argument parsed by the option in --help  
output.
  */
-class OptionEntry
+class GLIBMM_API OptionEntry
 {
   _CLASS_GENERIC(OptionEntry, GOptionEntry)
 public:
diff --git a/glib/src/optiongroup.hg b/glib/src/optiongroup.hg
index c1c8b404..a9e92bca 100644
--- a/glib/src/optiongroup.hg
+++ b/glib/src/optiongroup.hg
@@ -42,7 +42,7 @@ class OptionContext;
  * Libraries which need to parse commandline options are expected to provide a function that allows their 
OptionGroups to
  * be added to the application's OptionContext.
  */
-class OptionGroup
+class GLIBMM_API OptionGroup
 {
   _CLASS_GENERIC(OptionGroup, GOptionGroup)
 public:
diff --git a/glib/src/regex.hg b/glib/src/regex.hg
index 1b9eb443..6d1d7759 100644
--- a/glib/src/regex.hg
+++ b/glib/src/regex.hg
@@ -35,7 +35,7 @@ _WRAP_ENUM(RegexMatchFlags, GRegexMatchFlags, NO_GTYPE)
 
 /** Exception class for Regex
  */
-_WRAP_GERROR(RegexError, GRegexError, G_REGEX_ERROR, NO_GTYPE)
+_WRAP_GERROR(RegexError, GRegexError, G_REGEX_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 
 class MatchInfo;
@@ -104,9 +104,9 @@ class MatchInfo;
  *
  * @newin{2,14}
  */
-class Regex final
+class GLIBMM_API Regex final
 {
-  _CLASS_OPAQUE_REFCOUNTED(Regex, GRegex, NONE, g_regex_ref, g_regex_unref)
+  _CLASS_OPAQUE_REFCOUNTED(Regex, GRegex, NONE, g_regex_ref, g_regex_unref, GLIBMM_API)
   _IGNORE(g_regex_ref, g_regex_unref)
 public:
 
@@ -232,7 +232,7 @@ public:
  * expression match which created it.
  * @newin{2,28}
  */
-class MatchInfo
+class GLIBMM_API MatchInfo
 {
   _CLASS_GENERIC(MatchInfo, GMatchInfo)
   _IGNORE(g_match_info_ref, g_match_info_unref, g_match_info_free)
diff --git a/glib/src/shell.hg b/glib/src/shell.hg
index 6f0e2fce..737b6ade 100644
--- a/glib/src/shell.hg
+++ b/glib/src/shell.hg
@@ -31,7 +31,7 @@ namespace Glib
 
 /** Exception class for shell utility errors.
  */
-_WRAP_GERROR(ShellError, GShellError, G_SHELL_ERROR, NO_GTYPE)
+_WRAP_GERROR(ShellError, GShellError, G_SHELL_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 
 /** Parses a command line into an argument vector, in much the same way the
@@ -46,6 +46,7 @@ _WRAP_GERROR(ShellError, GShellError, G_SHELL_ERROR, NO_GTYPE)
  * converted to any STL compatible container type).
  * @throw Glib::ShellError
  */
+GLIBMM_API
 Glib::ArrayHandle<std::string> shell_parse_argv(const std::string& command_line);
 
 /** Quotes a string so that the shell (/bin/sh) will interpret the quoted
@@ -55,6 +56,7 @@ Glib::ArrayHandle<std::string> shell_parse_argv(const std::string& command_line)
  * @param unquoted_string A literal string.
  * @return A quoted string.
  */
+GLIBMM_API
 std::string shell_quote(const std::string& unquoted_string);
 
 /** Unquotes a string as the shell (/bin/sh) would.  Only handles quotes; if
@@ -80,6 +82,7 @@ std::string shell_quote(const std::string& unquoted_string);
  * @return An unquoted string.
  * @throw Glib::ShellError
  */
+GLIBMM_API
 std::string shell_unquote(const std::string& quoted_string);
 
 /** @} group ShellUtils */
diff --git a/glib/src/spawn.hg b/glib/src/spawn.hg
index 785665aa..c40dc71a 100644
--- a/glib/src/spawn.hg
+++ b/glib/src/spawn.hg
@@ -36,7 +36,7 @@ _WRAP_ENUM(SpawnFlags, GSpawnFlags, NO_GTYPE)
 
 /** %Exception class for errors occuring when spawning processes.
  */
-_WRAP_GERROR(SpawnError, GSpawnError, G_SPAWN_ERROR, NO_GTYPE, s#^2BIG$#TOOBIG#)
+_WRAP_GERROR(SpawnError, GSpawnError, G_SPAWN_ERROR, NO_GTYPE, s#^2BIG$#TOOBIG#, decl_prefix GLIBMM_API)
 
 /** For instance,<br>
  *   void on_child_setup();
@@ -191,6 +191,7 @@ using SlotSpawnChildSetup = sigc::slot<void>;
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_async_with_pipes(const std::string& working_directory,
                             const Glib::ArrayHandle<std::string>& argv,
                             const Glib::ArrayHandle<std::string>& envp,
@@ -218,6 +219,7 @@ void spawn_async_with_pipes(const std::string& working_directory,
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_async_with_pipes(const std::string& working_directory,
                             const Glib::ArrayHandle<std::string>& argv,
                             SpawnFlags flags = SPAWN_DEFAULT,
@@ -248,6 +250,7 @@ void spawn_async_with_pipes(const std::string& working_directory,
  * the message field of returned errors should be displayed
  * to users.
  */
+GLIBMM_API
 void spawn_async(const std::string& working_directory,
                  const Glib::ArrayHandle<std::string>& argv,
                  const Glib::ArrayHandle<std::string>& envp,
@@ -268,6 +271,7 @@ void spawn_async(const std::string& working_directory,
  * the message field of returned errors should be displayed
  * to users.
  */
+GLIBMM_API
 void spawn_async(const std::string& working_directory,
                  const Glib::ArrayHandle<std::string>& argv,
                  SpawnFlags flags = SPAWN_DEFAULT,
@@ -306,6 +310,7 @@ void spawn_async(const std::string& working_directory,
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_sync(const std::string& working_directory,
                 const Glib::ArrayHandle<std::string>& argv,
                 const Glib::ArrayHandle<std::string>& envp,
@@ -331,6 +336,7 @@ void spawn_sync(const std::string& working_directory,
  * to users. If an error occurs, @a child_pid, @a standard_input, @a standard_output,
  * and @a standard_error will not be filled with valid values.
  */
+GLIBMM_API
 void spawn_sync(const std::string& working_directory,
                 const Glib::ArrayHandle<std::string>& argv,
                 SpawnFlags flags = SPAWN_DEFAULT,
@@ -356,6 +362,7 @@ void spawn_sync(const std::string& working_directory,
  * to users.
  * @throws ShellError If the command line could not be parsed.
  */
+GLIBMM_API
 void spawn_command_line_async(const std::string& command_line);
 
 /** A simple version of spawn_sync() with little-used parameters
@@ -391,6 +398,7 @@ void spawn_command_line_async(const std::string& command_line);
  * to users.
  * @throws ShellError If the command line could not be parsed.
  */
+GLIBMM_API
 void spawn_command_line_sync(const std::string& command_line,
                              std::string* standard_output = nullptr,
                              std::string* standard_error = nullptr,
@@ -403,6 +411,7 @@ void spawn_command_line_sync(const std::string& command_line,
  *
  * @param pid The process identifier to close.
  */
+GLIBMM_API
 void spawn_close_pid(Pid pid);
 
 /** @} group Spawn */
diff --git a/glib/src/thread.hg b/glib/src/thread.hg
index c98a06ea..7c628b9c 100644
--- a/glib/src/thread.hg
+++ b/glib/src/thread.hg
@@ -127,18 +127,18 @@ enum NotLock { NOT_LOCK };
  */
 enum TryLock { TRY_LOCK };
 
-class Mutex;
-class RecMutex;
-class RWLock;
+class GLIBMM_API Mutex;
+class GLIBMM_API RecMutex;
+class GLIBMM_API RWLock;
 
-struct StaticRecMutex;
-struct StaticRWLock;
+struct GLIBMM_API StaticRecMutex;
+struct GLIBMM_API StaticRWLock;
 
 
 /** Exception class for thread-related errors.
  * @deprecated Use Glib::Threads::ThreadError instead.
  */
-_WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE)
+_WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 
 /** Represents a running thread.
@@ -160,7 +160,7 @@ _WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE)
  *
  * @deprecated Use Glib::Threads::Thread instead.
  */
-class Thread
+class GLIBMM_API Thread
 {
 public:
 
@@ -306,7 +306,7 @@ private:
  *
  * @deprecated Use Glib::Threads::Thread::Exit instead.
  */
-class Thread::Exit
+class GLIBMM_API Thread::Exit
 {};
 
 
@@ -368,7 +368,7 @@ struct StaticMutex
  *
  * @deprecated Use Glib::Threads::Mutex instead.
  */
-class Mutex
+class GLIBMM_API Mutex
 {
 public:
   class Lock;
@@ -423,7 +423,7 @@ private:
  *
  * @deprecated Use Glib::Threads::Mutex::Lock instead.
  */
-class Mutex::Lock
+class GLIBMM_API Mutex::Lock
 {
 public:
   explicit inline Lock(Mutex& mutex);
@@ -479,7 +479,7 @@ struct StaticRecMutex
  *
  * @deprecated Use Glib::Threads::RecMutex instead.
  */
-class RecMutex : public StaticRecMutex
+class GLIBMM_API RecMutex : public StaticRecMutex
 {
 public:
   class Lock;
@@ -497,7 +497,7 @@ private:
  *
  * @deprecated Use Glib::Threads::RecMutex instead.
  */
-class RecMutex::Lock
+class GLIBMM_API RecMutex::Lock
 {
 public:
   explicit inline Lock(RecMutex& mutex);
@@ -556,7 +556,7 @@ struct StaticRWLock
  *
  * @deprecated Use Glib::Threads::RWLock instead.
  */
-class RWLock : public StaticRWLock
+class GLIBMM_API RWLock : public StaticRWLock
 {
 public:
   class ReaderLock;
@@ -574,7 +574,7 @@ public:
  *
  * @deprecated Use Glib::Threads::RWLock::ReaderLock instead.
  */
-class RWLock::ReaderLock
+class GLIBMM_API RWLock::ReaderLock
 {
 public:
   explicit inline ReaderLock(RWLock& rwlock);
@@ -600,7 +600,7 @@ private:
  *
  * @deprecated Use Glib::Threads::RWLock::WriterLock instead.
  */
-class RWLock::WriterLock
+class GLIBMM_API RWLock::WriterLock
 {
 public:
   explicit inline WriterLock(RWLock& rwlock);
@@ -656,7 +656,7 @@ private:
  *
  * @deprecated Use Glib::Threads::Cond instead.
  */
-class Cond
+class GLIBMM_API Cond
 {
 public:
   Cond();
diff --git a/glib/src/threads.hg b/glib/src/threads.hg
index c82a6130..99ecbb32 100644
--- a/glib/src/threads.hg
+++ b/glib/src/threads.hg
@@ -59,15 +59,15 @@ enum NotLock { NOT_LOCK };
 /// @deprecated Please use std::lock_guard or std::unique_lock instead.
 enum TryLock { TRY_LOCK };
 
-class Mutex;
-class RecMutex;
-class RWLock;
+class GLIBMM_API Mutex;
+class GLIBMM_API RecMutex;
+class GLIBMM_API RWLock;
 
 /** %Exception class for thread-related errors.
  *
  * @deprecated Please use std::lock_guard or std::unique_lock instead.
  */
-_WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE)
+_WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 
 /** Represents a running thread.
@@ -87,7 +87,7 @@ _WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE)
  *
  * @deprecated Please use std::thread instead.
  */
-class Thread
+class GLIBMM_API Thread
 {
 public:
 
@@ -185,7 +185,7 @@ private:
  *
  * @deprecated Please use std::thread instead.
  */
-class Thread::Exit
+class GLIBMM_API Thread::Exit
 {};
 
 /** A C++ wrapper for the C object.
@@ -210,7 +210,7 @@ Thread* wrap(GThread* gobject);
  *
  * @deprecated Please use std::mutex instead.
  */
-class Mutex
+class GLIBMM_API Mutex
 {
 public:
   class Lock;
@@ -265,7 +265,7 @@ private:
  *
  * @deprecated Please use std::lock_guard or std::unique_lock instead.
  */
-class Mutex::Lock
+class GLIBMM_API Mutex::Lock
 {
 public:
   explicit inline Lock(Mutex& mutex);
@@ -307,7 +307,7 @@ Mutex* wrap(GMutex* gobject);
  *
  * @deprecated Please use std::recursive_mutex instead.
  */
-class RecMutex
+class GLIBMM_API RecMutex
 {
 public:
   class Lock;
@@ -333,7 +333,7 @@ private:
  *
  * @deprecated Please use std::lock_guard or std::unique_lock instead.
  */
-class RecMutex::Lock
+class GLIBMM_API RecMutex::Lock
 {
 public:
   explicit inline Lock(RecMutex& mutex);
@@ -380,7 +380,7 @@ RecMutex* wrap(GRecMutex* gobject);
  *
  * @deprecated Please use std::lock_guard or std::unique_lock instead, with std::shared_timed_mutex.
  */
-class RWLock
+class GLIBMM_API RWLock
 {
 public:
   class ReaderLock;
@@ -411,7 +411,7 @@ private:
  *
  * @deprecated Please use std::lock_guard or std::unique_lock instead, with std::shared_timed_mutex.
  */
-class RWLock::ReaderLock
+class GLIBMM_API RWLock::ReaderLock
 {
 public:
   explicit inline ReaderLock(RWLock& rwlock);
@@ -437,7 +437,7 @@ private:
  *
  * @deprecated Please use std::lock_guard or std::unique_lock instead, with std::shared_timed_mutex.
  */
-class RWLock::WriterLock
+class GLIBMM_API RWLock::WriterLock
 {
 public:
   explicit inline WriterLock(RWLock& rwlock);
@@ -494,7 +494,7 @@ private:
  * }
  * @endcode
  */
-class Cond
+class GLIBMM_API Cond
 {
 public:
   Cond();
diff --git a/glib/src/timezone.hg b/glib/src/timezone.hg
index cc6105ad..35fe8586 100644
--- a/glib/src/timezone.hg
+++ b/glib/src/timezone.hg
@@ -54,9 +54,9 @@ _WRAP_ENUM(TimeType, GTimeType, NO_GTYPE)
  * changing.
  * @newin{2,30}
  */
-class TimeZone
+class GLIBMM_API TimeZone
 {
-  _CLASS_OPAQUE_COPYABLE(TimeZone, GTimeZone, NONE, g_time_zone_ref, g_time_zone_unref)
+  _CLASS_OPAQUE_COPYABLE(TimeZone, GTimeZone, NONE, g_time_zone_ref, g_time_zone_unref, GLIBMM_API)
   _IGNORE(g_time_zone_ref, g_time_zone_unref)
 
 public:
diff --git a/glib/src/uriutils.hg b/glib/src/uriutils.hg
index 05358a46..7078a7d8 100644
--- a/glib/src/uriutils.hg
+++ b/glib/src/uriutils.hg
@@ -42,6 +42,7 @@ namespace Glib
  * @ingroup UriUtils
  * @newin{2,16}
  */
+GLIBMM_API
 std::string uri_unescape_string(const std::string& escaped_string, const std::string& illegal_characters = 
std::string());
 
 //TODO: Use iterator?
@@ -61,6 +62,7 @@ std::string uri_unescape_string(const std::string& escaped_string, const std::st
  * @ingroup UriUtils
  * @newin{2,16}
  */
+GLIBMM_API
 std::string uri_parse_scheme(const std::string& uri);
 
 /** Escapes a string for use in a URI.
@@ -80,6 +82,7 @@ std::string uri_parse_scheme(const std::string& uri);
  * @ingroup UriUtils
  * @newin{2,16}
  */
+GLIBMM_API
 std::string uri_escape_string(const std::string& unescaped, const std::string& reserved_chars_allowed = 
std::string(), bool allow_utf8 = true);
 
 } // namespace Glib
diff --git a/glib/src/value_basictypes.h.m4 b/glib/src/value_basictypes.h.m4
index 5381b8bd..8cd90e77 100644
--- a/glib/src/value_basictypes.h.m4
+++ b/glib/src/value_basictypes.h.m4
@@ -29,7 +29,7 @@ LINE(]__line__[)dnl
  * @ingroup glibmmValue
  */
 template <>
-class Value<$1> : public ValueBase
+class GLIBMM_API Value<$1> : public ValueBase
 {
 public:
   using CppType = $1;
diff --git a/glib/src/valuearray.hg b/glib/src/valuearray.hg
index 1e9bed08..326079cc 100644
--- a/glib/src/valuearray.hg
+++ b/glib/src/valuearray.hg
@@ -42,9 +42,9 @@ namespace Glib
  * @deprecated Use std::vector<Glib::ValueBase*> or std::vector< Glib::Value<> >
  *             instead of Glib::ValueArray.
  */
-class ValueArray
+class GLIBMM_API ValueArray
 {
-  _CLASS_BOXEDTYPE(ValueArray, GValueArray, NONE, g_value_array_copy, g_value_array_free)
+  _CLASS_BOXEDTYPE(ValueArray, GValueArray, NONE, g_value_array_copy, g_value_array_free, GLIBMM_API)
   _IGNORE(g_value_array_copy, g_value_array_free)
   _CUSTOM_DEFAULT_CTOR
 
diff --git a/glib/src/variant.hg b/glib/src/variant.hg
index 74f080cc..807e52ef 100644
--- a/glib/src/variant.hg
+++ b/glib/src/variant.hg
@@ -72,7 +72,7 @@ class Bytes;
 // Now (2014-01-30) it's also thrown by Gio::Action::parse_detailed_name().
 /** %Exception class for Variant parse errors.
  */
-_WRAP_GERROR(VariantParseError, GVariantParseError, G_VARIANT_PARSE_ERROR, NO_GTYPE)
+_WRAP_GERROR(VariantParseError, GVariantParseError, G_VARIANT_PARSE_ERROR, NO_GTYPE, decl_prefix GLIBMM_API)
 
 //TODO: Add this documentation from the API if we are confident of it for the C++ wrapper:
 // #GVariant is completely threadsafe.  A #GVariant instance can be
@@ -90,9 +90,9 @@ _WRAP_GERROR(VariantParseError, GVariantParseError, G_VARIANT_PARSE_ERROR, NO_GT
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantBase
+class GLIBMM_API VariantBase
 {
-  _CLASS_OPAQUE_COPYABLE(VariantBase, GVariant, NONE, g_variant_ref_sink, g_variant_unref)
+  _CLASS_OPAQUE_COPYABLE(VariantBase, GVariant, NONE, g_variant_ref_sink, g_variant_unref, GLIBMM_API)
   _CUSTOM_CTOR_CAST()
   _IGNORE(g_variant_ref, g_variant_ref_sink, g_variant_take_ref, g_variant_unref,
     g_variant_get, g_variant_get_va)
@@ -293,7 +293,7 @@ V_CastTo VariantBase::cast_dynamic(const VariantBase& v)
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantStringBase : public VariantBase
+class GLIBMM_API VariantStringBase : public VariantBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(VariantStringBase, GVariant)
@@ -348,7 +348,7 @@ public:
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantContainerBase : public VariantBase
+class GLIBMM_API VariantContainerBase : public VariantBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(VariantContainerBase, GVariant)
@@ -434,7 +434,7 @@ protected:
 };
 
 template<>
-VariantContainerBase VariantBase::cast_dynamic<VariantContainerBase>(const VariantBase& v);
+GLIBMM_API VariantContainerBase VariantBase::cast_dynamic<VariantContainerBase>(const VariantBase& v);
 
 /** Template class used for the specialization of the Variant<> classes.
  * @newin{2,28}
@@ -459,7 +459,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<VariantBase> : public VariantContainerBase
+class GLIBMM_API Variant<VariantBase> : public VariantContainerBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<VariantBase>, GVariant)
@@ -558,7 +558,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<Glib::ustring> : public VariantStringBase
+class GLIBMM_API Variant<Glib::ustring> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<Glib::ustring>, GVariant)
@@ -601,7 +601,7 @@ public:
 
 //TODO: When we can break ABI, remove this template specialization.
 template<>
-Variant<Glib::ustring> VariantBase::cast_dynamic< Variant<Glib::ustring> >(const VariantBase& v);
+GLIBMM_API Variant<Glib::ustring> VariantBase::cast_dynamic< Variant<Glib::ustring> >(const VariantBase& v);
 
 /** Specialization of Variant containing a Glib::DBusObjectPathString,
  * for variants of type object path.
@@ -609,7 +609,7 @@ Variant<Glib::ustring> VariantBase::cast_dynamic< Variant<Glib::ustring> >(const
  * @ingroup Variant
  */
 template<>
-class Variant<Glib::DBusObjectPathString> : public VariantStringBase
+class GLIBMM_API Variant<Glib::DBusObjectPathString> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<Glib::DBusObjectPathString>, GVariant)
@@ -655,7 +655,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<Glib::DBusSignatureString> : public VariantStringBase
+class GLIBMM_API Variant<Glib::DBusSignatureString> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<Glib::DBusSignatureString>, GVariant)
@@ -702,7 +702,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<std::string> : public VariantStringBase
+class GLIBMM_API Variant<std::string> : public VariantStringBase
 {
   // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
   _CLASS_GENERIC(Variant<std::string>, GVariant)
@@ -741,7 +741,7 @@ public:
 
 //TODO: When we can break ABI, remove this template specialization.
 template<>
-Variant<std::string> VariantBase::cast_dynamic< Variant<std::string> >(const VariantBase& v);
+GLIBMM_API Variant<std::string> VariantBase::cast_dynamic< Variant<std::string> >(const VariantBase& v);
 
 /** Specialization of Variant containing a dictionary entry.  See also
  * Variant< std::map<K, V> >.
@@ -867,7 +867,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant< std::vector<Glib::ustring> > : public VariantContainerBase
+class GLIBMM_API Variant< std::vector<Glib::ustring> > : public VariantContainerBase
 {
 public:
   using CppType = Glib::ustring                ;
@@ -931,7 +931,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant<std::vector<Glib::DBusObjectPathString>> : public VariantContainerBase
+class GLIBMM_API Variant<std::vector<Glib::DBusObjectPathString>> : public VariantContainerBase
 {
 public:
   using CppType = Glib::DBusObjectPathString;
@@ -993,7 +993,7 @@ public:
  * @ingroup Variant
  */
 template<>
-class Variant< std::vector<std::string> > : public VariantContainerBase
+class GLIBMM_API Variant< std::vector<std::string> > : public VariantContainerBase
 {
 public:
   using CppType = std::string                  ;
@@ -1673,7 +1673,7 @@ VariantIter Variant<std::tuple<Types...>>::get_iter() const
 // This is needed so Glib::VariantBase can be used with
 // Glib::Value and _WRAP_PROPERTY in Gio::Action and elsewhere.
 template <>
-class Value<Glib::VariantBase> : public ValueBase_Variant
+class GLIBMM_API Value<Glib::VariantBase> : public ValueBase_Variant
 {
 public:
   using CppType = Glib::VariantBase;
diff --git a/glib/src/variant_basictypes.h.m4 b/glib/src/variant_basictypes.h.m4
index 54151771..199295b9 100644
--- a/glib/src/variant_basictypes.h.m4
+++ b/glib/src/variant_basictypes.h.m4
@@ -39,7 +39,7 @@ LINE(]__line__[)dnl
  * @ingroup Variant
  */
 template <>
-class Variant<$1> : public VariantBase
+class GLIBMM_API Variant<$1> : public VariantBase
 {
 public:
   using CType = $2;
diff --git a/glib/src/variantdict.hg b/glib/src/variantdict.hg
index 1f9a5a16..4b69a085 100644
--- a/glib/src/variantdict.hg
+++ b/glib/src/variantdict.hg
@@ -32,11 +32,11 @@ namespace Glib
  *
  * newin{2,40}
  */
-class VariantDict final
+class GLIBMM_API VariantDict final
 {
   //GVariantDict is registered as a boxed type, but it has ref/unref functions instead of copy/free,
   //so we use it via RefPtr.
-  _CLASS_OPAQUE_REFCOUNTED(VariantDict, GVariantDict, NONE, g_variant_dict_ref, g_variant_dict_unref)
+  _CLASS_OPAQUE_REFCOUNTED(VariantDict, GVariantDict, NONE, g_variant_dict_ref, g_variant_dict_unref, 
GLIBMM_API)
   _IGNORE(g_variant_dict_ref, g_variant_dict_unref, g_variant_dict_init)
 
 public:
diff --git a/glib/src/variantiter.hg b/glib/src/variantiter.hg
index 401bc4ad..a35c2e59 100644
--- a/glib/src/variantiter.hg
+++ b/glib/src/variantiter.hg
@@ -20,8 +20,8 @@ _DEFS(glibmm,glib)
 namespace Glib
 {
 
-class VariantBase;
-class VariantContainerBase;
+class GLIBMM_API VariantBase;
+class GLIBMM_API VariantContainerBase;
 
 //This can't be like a real iterator (like Gtk::TextIter),
 //because g_iter_value_get_next_value() both gets a value and changes the iterator.
@@ -30,9 +30,9 @@ class VariantContainerBase;
  * VariantBase containers such as arrays.
  * @newin{2,28}
  */
-class VariantIter
+class GLIBMM_API VariantIter
 {
-  _CLASS_OPAQUE_COPYABLE(VariantIter, GVariantIter, NONE, g_variant_iter_copy, g_variant_iter_free)
+  _CLASS_OPAQUE_COPYABLE(VariantIter, GVariantIter, NONE, g_variant_iter_copy, g_variant_iter_free, 
GLIBMM_API)
   _IGNORE(g_variant_iter_copy, g_variant_iter_free)
 public:
   //TODO: The variant parameter should be a VariantContainerBase.
diff --git a/glib/src/varianttype.hg b/glib/src/varianttype.hg
index a326e111..848c4f99 100644
--- a/glib/src/varianttype.hg
+++ b/glib/src/varianttype.hg
@@ -88,9 +88,9 @@ namespace Glib
  * @newin{2,28}
  * @ingroup Variant
  */
-class VariantType
+class GLIBMM_API VariantType
 {
-  _CLASS_OPAQUE_COPYABLE(VariantType, GVariantType, NONE, g_variant_type_copy, g_variant_type_free)
+  _CLASS_OPAQUE_COPYABLE(VariantType, GVariantType, NONE, g_variant_type_copy, g_variant_type_free, 
GLIBMM_API)
   _IGNORE(g_variant_type_copy, g_variant_type_free)
 public:
 
@@ -193,63 +193,63 @@ public:
   _IGNORE(g_variant_type_info_get)
 };
 
-extern const VariantType VARIANT_TYPE_BOOL;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BOOL;
 
-extern const VariantType VARIANT_TYPE_BYTE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BYTE;
 
-extern const VariantType VARIANT_TYPE_INT16;
+extern GLIBMM_API const VariantType VARIANT_TYPE_INT16;
 
-extern const VariantType VARIANT_TYPE_UINT16;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UINT16;
 
-extern const VariantType VARIANT_TYPE_INT32;
+extern GLIBMM_API const VariantType VARIANT_TYPE_INT32;
 
-extern const VariantType VARIANT_TYPE_UINT32;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UINT32;
 
-extern const VariantType VARIANT_TYPE_INT64;
+extern GLIBMM_API const VariantType VARIANT_TYPE_INT64;
 
-extern const VariantType VARIANT_TYPE_UINT64;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UINT64;
 
-extern const VariantType VARIANT_TYPE_DOUBLE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_DOUBLE;
 
-extern const VariantType VARIANT_TYPE_STRING;
+extern GLIBMM_API const VariantType VARIANT_TYPE_STRING;
 
-extern const VariantType VARIANT_TYPE_OBJECT_PATH;
+extern GLIBMM_API const VariantType VARIANT_TYPE_OBJECT_PATH;
 
-extern const VariantType VARIANT_TYPE_SIGNATURE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_SIGNATURE;
 
-extern const VariantType VARIANT_TYPE_VARIANT;
+extern GLIBMM_API const VariantType VARIANT_TYPE_VARIANT;
 
-extern const VariantType VARIANT_TYPE_HANDLE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_HANDLE;
 
-extern const VariantType VARIANT_TYPE_UNIT;
+extern GLIBMM_API const VariantType VARIANT_TYPE_UNIT;
 
-extern const VariantType VARIANT_TYPE_ANY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_ANY;
 
-extern const VariantType VARIANT_TYPE_BASIC;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BASIC;
 
-extern const VariantType VARIANT_TYPE_MAYBE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_MAYBE;
 
-extern const VariantType VARIANT_TYPE_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_ARRAY;
 
-extern const VariantType VARIANT_TYPE_TUPLE;
+extern GLIBMM_API const VariantType VARIANT_TYPE_TUPLE;
 
-extern const VariantType VARIANT_TYPE_DICT_ENTRY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_DICT_ENTRY;
 
-extern const VariantType VARIANT_TYPE_DICTIONARY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_DICTIONARY;
 
-extern const VariantType VARIANT_TYPE_STRING_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_STRING_ARRAY;
 
-extern const VariantType VARIANT_TYPE_OBJECT_PATH_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_OBJECT_PATH_ARRAY;
 
-extern const VariantType VARIANT_TYPE_BYTESTRING;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BYTESTRING;
 
-extern const VariantType VARIANT_TYPE_BYTESTRING_ARRAY;
+extern GLIBMM_API const VariantType VARIANT_TYPE_BYTESTRING_ARRAY;
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 // This is needed so Glib::VariantType can be used with
 // Glib::Value and _WRAP_PROPERTY in Gio::Action and elsewhere.
 template <>
-class Value<Glib::VariantType> : public ValueBase_Boxed
+class GLIBMM_API Value<Glib::VariantType> : public ValueBase_Boxed
 {
 public:
   using CppType = Glib::VariantType;


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