text: /*
   * Name:        wx/dlimpexp.h
   * Purpose:     Macros for declaring DLL-imported/exported functions
   * Author:      Vadim Zeitlin
   * Modified by:
   * Created:     16.10.2003 (extracted from wx/defs.h)
   * Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
   * Licence:     wxWindows licence
   */
  
  /*
      This is a C file, not C++ one, do not use C++ comments here!
   */
  #ifndef _WX_DLIMPEXP_H_
  #  define _WX_DLIMPEXP_H_
  #  if  defined(HAVE_VISIBILITY)
  #    define WXEXPORT
  #    define WXIMPORT
  #  elif  defined(__WINDOWS__)
      /*
         __declspec works in as VC++.
       */
  #    if  defined(__VISUALC__)
  #      define WXEXPORT	__declspec(dllexport)
  #      define WXIMPORT	__declspec(dllimport)
      /*
          While gcc also supports __declspec(dllexport), it created unusably huge
          DLL files in gcc 4.[56] (while taking horribly long amounts of time),
          see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43601. Because of this
          we rely on binutils auto export/import support which seems to work
          quite well for 4.5+. However the problem was fixed in 4.7 and later and
          not exporting everything creates smaller DLLs (~8% size difference), so
          do use the explicit attributes again for the newer versions.
       */
  #    elif  defined(__GNUC__) && \
          (!wxCHECK_GCC_VERSION(4, 5) || wxCHECK_GCC_VERSION(4, 7))
          /*
              __declspec could be used here too but let's use the native
              __attribute__ instead for clarity.
          */
  #      define WXEXPORT
  #      define WXIMPORT
  #    endif
  #  elif  defined(__CYGWIN__)
  #    define WXEXPORT	__declspec(dllexport)
  #    define WXIMPORT	__declspec(dllimport)
  #  endif
  /* for other platforms/compilers we don't anything */
  #  ifndef WXEXPORT
  #    define WXEXPORT
  #    define WXIMPORT
  #  endif
  /*
     We support building wxWidgets as a set of several libraries but we don't
     support arbitrary combinations of libs/DLLs: either we build all of them as
     DLLs (in which case WXMAKINGDLL is defined) or none (it isn't).
  
     However we have a problem because we need separate WXDLLIMPEXP versions for
     different libraries as, for example, wxString class should be dllexported
     when compiled in wxBase and dllimported otherwise, so we do define separate
     WXMAKING/USINGDLL_XYZ constants for each component XYZ.
   */
  #  ifdef WXMAKINGDLL
  #    if  wxUSE_BASE
  #      define WXMAKINGDLL_BASE
  #    endif
  #    define WXMAKINGDLL_NET
  #    define WXMAKINGDLL_CORE
  #    define WXMAKINGDLL_ADV
  #    define WXMAKINGDLL_QA
  #    define WXMAKINGDLL_HTML
  #    define WXMAKINGDLL_GL
  #    define WXMAKINGDLL_XML
  #    define WXMAKINGDLL_XRC
  #    define WXMAKINGDLL_AUI
  #    define WXMAKINGDLL_PROPGRID
  #    define WXMAKINGDLL_RIBBON
  #    define WXMAKINGDLL_RICHTEXT
  #    define WXMAKINGDLL_MEDIA
  #    define WXMAKINGDLL_STC
  #    define WXMAKINGDLL_WEBVIEW
  #  endif
  /*
     WXDLLIMPEXP_CORE maps to export declaration when building the DLL, to import
     declaration if using it or to nothing at all if we don't use wxWin as DLL
   */
  #  ifdef WXMAKINGDLL_BASE
  #    define WXDLLIMPEXP_BASE	WXEXPORT
  #    define WXDLLIMPEXP_DATA_BASE(type)	 WXEXPORT type
  #    if  defined(HAVE_VISIBILITY)
  #      define WXDLLIMPEXP_INLINE_BASE	WXEXPORT
  #    else 
  #      define WXDLLIMPEXP_INLINE_BASE
  #    endif
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_BASE	WXIMPORT
  #    define WXDLLIMPEXP_DATA_BASE(type)	 WXIMPORT type
  #    if  defined(HAVE_VISIBILITY)
  #      define WXDLLIMPEXP_INLINE_BASE	WXIMPORT
  #    else 
  #      define WXDLLIMPEXP_INLINE_BASE
  #    endif
  #  else 
  #    define WXDLLIMPEXP_BASE
  #    define WXDLLIMPEXP_DATA_BASE(type)	 type
  #    define WXDLLIMPEXP_INLINE_BASE
  #  endif
  #  ifdef WXMAKINGDLL_NET
  #    define WXDLLIMPEXP_NET	WXEXPORT
  #    define WXDLLIMPEXP_DATA_NET(type)	 WXEXPORT type
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_NET	WXIMPORT
  #    define WXDLLIMPEXP_DATA_NET(type)	 WXIMPORT type
  #  else 
  #    define WXDLLIMPEXP_NET
  #    define WXDLLIMPEXP_DATA_NET(type)	 type
  #  endif
  #  ifdef WXMAKINGDLL_CORE
  #    define WXDLLIMPEXP_CORE	WXEXPORT
  #    define WXDLLIMPEXP_DATA_CORE(type)	 WXEXPORT type
  #    if  defined(HAVE_VISIBILITY)
  #      define WXDLLIMPEXP_INLINE_CORE	WXEXPORT
  #    else 
  #      define WXDLLIMPEXP_INLINE_CORE
  #    endif
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_CORE	WXIMPORT
  #    define WXDLLIMPEXP_DATA_CORE(type)	 WXIMPORT type
  #    if  defined(HAVE_VISIBILITY)
  #      define WXDLLIMPEXP_INLINE_CORE	WXIMPORT
  #    else 
  #      define WXDLLIMPEXP_INLINE_CORE
  #    endif
  #  else 
  #    define WXDLLIMPEXP_CORE
  #    define WXDLLIMPEXP_DATA_CORE(type)	 type
  #    define WXDLLIMPEXP_INLINE_CORE
  #  endif
  /* Advanced library doesn't exist any longer, but its macros are preserved for
     compatibility. Do not use them in the new code. */
  #  define WXDLLIMPEXP_ADV	WXDLLIMPEXP_CORE
  #  define WXDLLIMPEXP_DATA_ADV(type)	 WXDLLIMPEXP_DATA_CORE(type)
  #  ifdef WXMAKINGDLL_QA
  #    define WXDLLIMPEXP_QA	WXEXPORT
  #    define WXDLLIMPEXP_DATA_QA(type)	 WXEXPORT type
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_QA	WXIMPORT
  #    define WXDLLIMPEXP_DATA_QA(type)	 WXIMPORT type
  #  else 
  #    define WXDLLIMPEXP_QA
  #    define WXDLLIMPEXP_DATA_QA(type)	 type
  #  endif
  #  ifdef WXMAKINGDLL_HTML
  #    define WXDLLIMPEXP_HTML	WXEXPORT
  #    define WXDLLIMPEXP_DATA_HTML(type)	 WXEXPORT type
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_HTML	WXIMPORT
  #    define WXDLLIMPEXP_DATA_HTML(type)	 WXIMPORT type
  #  else 
  #    define WXDLLIMPEXP_HTML
  #    define WXDLLIMPEXP_DATA_HTML(type)	 type
  #  endif
  #  ifdef WXMAKINGDLL_GL
  #    define WXDLLIMPEXP_GL	WXEXPORT
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_GL	WXIMPORT
  #  else 
  #    define WXDLLIMPEXP_GL
  #  endif
  #  ifdef WXMAKINGDLL_XML
  #    define WXDLLIMPEXP_XML	WXEXPORT
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_XML	WXIMPORT
  #  else 
  #    define WXDLLIMPEXP_XML
  #  endif
  #  ifdef WXMAKINGDLL_XRC
  #    define WXDLLIMPEXP_XRC	WXEXPORT
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_XRC	WXIMPORT
  #  else 
  #    define WXDLLIMPEXP_XRC
  #  endif
  #  ifdef WXMAKINGDLL_AUI
  #    define WXDLLIMPEXP_AUI	WXEXPORT
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_AUI	WXIMPORT
  #  else 
  #    define WXDLLIMPEXP_AUI
  #  endif
  #  ifdef WXMAKINGDLL_PROPGRID
  #    define WXDLLIMPEXP_PROPGRID	WXEXPORT
  #    define WXDLLIMPEXP_DATA_PROPGRID(type)	 WXEXPORT type
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_PROPGRID	WXIMPORT
  #    define WXDLLIMPEXP_DATA_PROPGRID(type)	 WXIMPORT type
  #  else 
  #    define WXDLLIMPEXP_PROPGRID
  #    define WXDLLIMPEXP_DATA_PROPGRID(type)	 type
  #  endif
  #  ifdef WXMAKINGDLL_RIBBON
  #    define WXDLLIMPEXP_RIBBON	WXEXPORT
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_RIBBON	WXIMPORT
  #  else 
  #    define WXDLLIMPEXP_RIBBON
  #  endif
  #  ifdef WXMAKINGDLL_RICHTEXT
  #    define WXDLLIMPEXP_RICHTEXT	WXEXPORT
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_RICHTEXT	WXIMPORT
  #  else 
  #    define WXDLLIMPEXP_RICHTEXT
  #  endif
  #  ifdef WXMAKINGDLL_MEDIA
  #    define WXDLLIMPEXP_MEDIA	WXEXPORT
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_MEDIA	WXIMPORT
  #  else 
  #    define WXDLLIMPEXP_MEDIA
  #  endif
  #  ifdef WXMAKINGDLL_STC
  #    define WXDLLIMPEXP_STC	WXEXPORT
  #    define WXDLLIMPEXP_DATA_STC(type)	 WXEXPORT type
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_STC	WXIMPORT
  #    define WXDLLIMPEXP_DATA_STC(type)	 WXIMPORT type
  #  else 
  #    define WXDLLIMPEXP_STC
  #    define WXDLLIMPEXP_DATA_STC(type)	 type
  #  endif
  #  ifdef WXMAKINGDLL_WEBVIEW
  #    define WXDLLIMPEXP_WEBVIEW	WXEXPORT
  #    define WXDLLIMPEXP_DATA_WEBVIEW(type)	 WXEXPORT type
  #  elif  defined(WXUSINGDLL)
  #    define WXDLLIMPEXP_WEBVIEW	WXIMPORT
  #    define WXDLLIMPEXP_DATA_WEBVIEW(type)	 WXIMPORT type
  #  else 
  #    define WXDLLIMPEXP_WEBVIEW
  #    define WXDLLIMPEXP_DATA_WEBVIEW(type)	 type
  #  endif
  /*
     GCC warns about using __attribute__ (and also __declspec in mingw32 case) on
     forward declarations while MSVC complains about forward declarations without
     __declspec for the classes later declared with it, so we need a separate set
     of macros for forward declarations to hide this difference:
   */
  #  if  defined(HAVE_VISIBILITY) || (defined(__WINDOWS__) && defined(__GNUC__))
  #    define WXDLLIMPEXP_FWD_BASE
  #    define WXDLLIMPEXP_FWD_NET
  #    define WXDLLIMPEXP_FWD_CORE
  #    define WXDLLIMPEXP_FWD_QA
  #    define WXDLLIMPEXP_FWD_HTML
  #    define WXDLLIMPEXP_FWD_GL
  #    define WXDLLIMPEXP_FWD_XML
  #    define WXDLLIMPEXP_FWD_XRC
  #    define WXDLLIMPEXP_FWD_AUI
  #    define WXDLLIMPEXP_FWD_PROPGRID
  #    define WXDLLIMPEXP_FWD_RIBBON
  #    define WXDLLIMPEXP_FWD_RICHTEXT
  #    define WXDLLIMPEXP_FWD_MEDIA
  #    define WXDLLIMPEXP_FWD_STC
  #    define WXDLLIMPEXP_FWD_WEBVIEW
  #  else 
  #    define WXDLLIMPEXP_FWD_BASE	WXDLLIMPEXP_BASE
  #    define WXDLLIMPEXP_FWD_NET	WXDLLIMPEXP_NET
  #    define WXDLLIMPEXP_FWD_CORE	WXDLLIMPEXP_CORE
  #    define WXDLLIMPEXP_FWD_QA	WXDLLIMPEXP_QA
  #    define WXDLLIMPEXP_FWD_HTML	WXDLLIMPEXP_HTML
  #    define WXDLLIMPEXP_FWD_GL	WXDLLIMPEXP_GL
  #    define WXDLLIMPEXP_FWD_XML	WXDLLIMPEXP_XML
  #    define WXDLLIMPEXP_FWD_XRC	WXDLLIMPEXP_XRC
  #    define WXDLLIMPEXP_FWD_AUI	WXDLLIMPEXP_AUI
  #    define WXDLLIMPEXP_FWD_PROPGRID	WXDLLIMPEXP_PROPGRID
  #    define WXDLLIMPEXP_FWD_RIBBON	WXDLLIMPEXP_RIBBON
  #    define WXDLLIMPEXP_FWD_RICHTEXT	WXDLLIMPEXP_RICHTEXT
  #    define WXDLLIMPEXP_FWD_MEDIA	WXDLLIMPEXP_MEDIA
  #    define WXDLLIMPEXP_FWD_STC	WXDLLIMPEXP_STC
  #    define WXDLLIMPEXP_FWD_WEBVIEW	WXDLLIMPEXP_WEBVIEW
  #  endif
  /* This macro continues to exist for backwards compatibility only. */
  #  define WXDLLIMPEXP_FWD_ADV	WXDLLIMPEXP_FWD_CORE
  /* for backwards compatibility, define suffix-less versions too */
  #  define WXDLLEXPORT	WXDLLIMPEXP_CORE
  #  define WXDLLEXPORT_DATA	WXDLLIMPEXP_DATA_CORE
  #endif
  