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)