Mercurial > octave
diff oct-conf-post-public.in.h @ 31400:e7fc6251b698
Use more specialized API flags for template classes (bug #61711).
* oct-conf-post-public.in.h: Add more specific attributes for exporting
(specialized) template class instantiations.
* liboctave/array/Array.h (Array<T>): Also dllexport member function definitions
(on Windows).
* Array-*.cc: Move extern template class declarations to before including
"Array-base.cc" to avoid some implicit instantiations.
* all files: Use new macros for visibility attributes.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Sat, 05 Nov 2022 19:15:13 +0100 |
parents | 3e395f6fc03a |
children | fcbbb498d4af 2ec625c04947 |
line wrap: on
line diff
--- a/oct-conf-post-public.in.h Sun Nov 06 12:18:37 2022 +0100 +++ b/oct-conf-post-public.in.h Sat Nov 05 19:15:13 2022 +0100 @@ -134,39 +134,139 @@ # define OCTAVE_IMPORT #endif -/* API macro for liboctave */ +/* API macros for liboctave */ #if defined (OCTAVE_DLL) # define OCTAVE_API OCTAVE_EXPORT +# if defined (_WIN32) || defined (__CYGWIN__) +# define OCTAVE_TEMPLATE_API +# if defined(__MINGW32__) +# define OCTAVE_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTAVE_CLASS_TEMPLATE_INSTANTIATION_API +# else +# define OCTAVE_EXTERN_TEMPLATE_API +# define OCTAVE_CLASS_TEMPLATE_INSTANTIATION_API OCTAVE_EXPORT +# endif +# define OCTAVE_OVERRIDABLE_FUNC_API OCTAVE_EXPORT +# else +# define OCTAVE_TEMPLATE_API OCTAVE_EXPORT +# define OCTAVE_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTAVE_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTAVE_OVERRIDABLE_FUNC_API +# endif #else # define OCTAVE_API OCTAVE_IMPORT +# define OCTAVE_TEMPLATE_API +# define OCTAVE_EXTERN_TEMPLATE_API OCTAVE_IMPORT +# define OCTAVE_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTAVE_OVERRIDABLE_FUNC_API #endif -/* API macro for liboctinterp */ +/* API macros for liboctinterp */ #if defined (OCTINTERP_DLL) # define OCTINTERP_API OCTAVE_EXPORT +# if defined (_WIN32) || defined (__CYGWIN__) +# define OCTINTERP_TEMPLATE_API +# if defined(__MINGW32__) +# define OCTINTERP_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTINTERP_CLASS_TEMPLATE_INSTANTIATION_API +# else +# define OCTINTERP_EXTERN_TEMPLATE_API +# define OCTINTERP_CLASS_TEMPLATE_INSTANTIATION_API OCTAVE_EXPORT +# endif +# define OCTINTERP_OVERRIDABLE_FUNC_API OCTAVE_EXPORT +# else +# define OCTINTERP_TEMPLATE_API OCTAVE_EXPORT +# define OCTINTERP_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTINTERP_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTINTERP_OVERRIDABLE_FUNC_API +# endif #else # define OCTINTERP_API OCTAVE_IMPORT +# define OCTINTERP_TEMPLATE_API +# define OCTINTERP_EXTERN_TEMPLATE_API OCTAVE_IMPORT +# define OCTINTERP_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTINTERP_OVERRIDABLE_FUNC_API #endif -/* API macro for the Array class in liboctave and liboctinterp */ +/* API macros for the Array class in liboctave and liboctinterp */ #if (defined (OCTAVE_DLL) || defined (OCTINTERP_DLL)) # define OCTARRAY_API OCTAVE_EXPORT +# if defined (_WIN32) || defined (__CYGWIN__) +# define OCTARRAY_TEMPLATE_API +# if defined(__MINGW32__) +# define OCTARRAY_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTARRAY_CLASS_TEMPLATE_INSTANTIATION_API +# else +# define OCTARRAY_EXTERN_TEMPLATE_API +# define OCTARRAY_CLASS_TEMPLATE_INSTANTIATION_API OCTAVE_EXPORT +# endif +# define OCTARRAY_OVERRIDABLE_FUNC_API OCTAVE_EXPORT +# else +# define OCTARRAY_TEMPLATE_API OCTAVE_EXPORT +# define OCTARRAY_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTARRAY_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTARRAY_OVERRIDABLE_FUNC_API +# endif #else # define OCTARRAY_API OCTAVE_IMPORT +# define OCTARRAY_TEMPLATE_API +# define OCTARRAY_EXTERN_TEMPLATE_API OCTAVE_IMPORT +# define OCTARRAY_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTARRAY_OVERRIDABLE_FUNC_API #endif -/* API macro for libinterp/graphics */ +/* API macros for libinterp/graphics */ #if defined (OCTGRAPHICS_DLL) # define OCTGRAPHICS_API OCTAVE_EXPORT +# if defined (_WIN32) || defined (__CYGWIN__) +# define OCTGRAPHICS_TEMPLATE_API +# if defined(__MINGW32__) +# define OCTGRAPHICS_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTGRAPHICS_CLASS_TEMPLATE_INSTANTIATION_API +# else +# define OCTGRAPHICS_EXTERN_TEMPLATE_API +# define OCTGRAPHICS_CLASS_TEMPLATE_INSTANTIATION_API OCTAVE_EXPORT +# endif +# define OCTGRAPHICS_OVERRIDABLE_FUNC_API OCTAVE_EXPORT +# else +# define OCTGRAPHICS_TEMPLATE_API OCTAVE_EXPORT +# define OCTGRAPHICS_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTGRAPHICS_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTGRAPHICS_OVERRIDABLE_FUNC_API +# endif #else # define OCTGRAPHICS_API OCTAVE_IMPORT +# define OCTGRAPHICS_TEMPLATE_API +# define OCTGRAPHICS_EXTERN_TEMPLATE_API OCTAVE_IMPORT +# define OCTGRAPHICS_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTGRAPHICS_OVERRIDABLE_FUNC_API #endif -/* API macro for libgui */ +/* API macros for libgui */ #if defined (OCTGUI_DLL) # define OCTGUI_API OCTAVE_EXPORT +# if defined (_WIN32) || defined (__CYGWIN__) +# define OCTGUI_TEMPLATE_API +# if defined(__MINGW32__) +# define OCTGUI_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTGUI_CLASS_TEMPLATE_INSTANTIATION_API +# else +# define OCTGUI_EXTERN_TEMPLATE_API +# define OCTGUI_CLASS_TEMPLATE_INSTANTIATION_API OCTAVE_EXPORT +# endif +# define OCTGUI_OVERRIDABLE_FUNC_API OCTAVE_EXPORT +# else +# define OCTGUI_TEMPLATE_API OCTAVE_EXPORT +# define OCTGUI_EXTERN_TEMPLATE_API OCTAVE_EXPORT +# define OCTGUI_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTGUI_OVERRIDABLE_FUNC_API +# endif #else # define OCTGUI_API OCTAVE_IMPORT +# define OCTGUI_TEMPLATE_API +# define OCTGUI_EXTERN_TEMPLATE_API OCTAVE_IMPORT +# define OCTGUI_CLASS_TEMPLATE_INSTANTIATION_API +# define OCTGUI_OVERRIDABLE_FUNC_API #endif #if defined (OCTAVE_ENABLE_64)