Fix broken RTTI references that cause crashes at run time
--- include/ki_exception.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/ki_exception.h	2024-06-12 18:46:56.000000000 -0600
@@ -25,6 +25,7 @@
 #ifndef KI_EXCEPTION_H_
 #define KI_EXCEPTION_H_
 
+#include <import_export.h>
 #include <wx/string.h>
 
 
@@ -41,7 +42,7 @@
  * Hold a translatable error message and may be used when throwing exceptions containing a
  * translated error message.
  */
-class KI_PARAM_ERROR // similar to std::invalid_argument for instance
+class MY_TYPE KI_PARAM_ERROR // similar to std::invalid_argument for instance
 {
 public:
     /**
@@ -72,7 +73,7 @@
  *
  * @author Dick Hollenbeck
  */
-class IO_ERROR // : std::exception
+class MY_TYPE IO_ERROR // : std::exception
 {
 public:
     /**
@@ -115,7 +116,7 @@
  *
  * @author Dick Hollenbeck
  */
-struct PARSE_ERROR : public IO_ERROR
+struct MY_TYPE PARSE_ERROR : public IO_ERROR
 {
     int         lineNumber;     ///< at which line number, 1 based index.
     int         byteIndex;      ///< at which byte offset within the line, 1 based index
@@ -171,7 +172,7 @@
  * by a file generated by a newer version of KiCad than this. This can be used to generate
  * more informative error messages.
  */
-struct FUTURE_FORMAT_ERROR : public PARSE_ERROR
+struct MY_TYPE FUTURE_FORMAT_ERROR : public PARSE_ERROR
 {
     wxString requiredVersion;   ///< version or date of KiCad required to open file
 
--- include/settings/kicad_settings.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/settings/kicad_settings.h	2024-06-12 18:52:20.000000000 -0600
@@ -21,11 +21,12 @@
 #ifndef _KICAD_SETTINGS_H
 #define _KICAD_SETTINGS_H
 
+#include <import_export.h>
 #include <settings/app_settings.h>
 #define PCM_DEFAULT_REPOSITORY_URL "https://repository.kicad.org/repository.json"
 
 
-class KICAD_SETTINGS : public APP_SETTINGS_BASE
+class MY_TYPE KICAD_SETTINGS : public APP_SETTINGS_BASE
 {
 public:
     KICAD_SETTINGS();
--- include/settings/app_settings.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/settings/app_settings.h	2024-06-12 19:06:36.000000000 -0600
@@ -21,6 +21,7 @@
 #ifndef _APP_SETTINGS_H
 #define _APP_SETTINGS_H
 
+#include <import_export.h>
 #include <gal/color4d.h>
 #include <settings/json_settings.h>
 
@@ -106,7 +107,7 @@
  *
  * COMMON_SETTINGS stores settings that are always the same across all applications.
  */
-class APP_SETTINGS_BASE : public JSON_SETTINGS
+class MY_TYPE APP_SETTINGS_BASE : public JSON_SETTINGS
 {
 public:
     struct FIND_REPLACE
--- include/settings/color_settings.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/settings/color_settings.h	2024-06-12 18:33:28.000000000 -0600
@@ -23,6 +23,7 @@
 
 #include <unordered_map>
 
+#include <import_export.h>
 #include <gal/color4d.h>
 #include <settings/json_settings.h>
 #include <settings/parameters.h>
@@ -48,7 +49,7 @@
  * Each application (eeschema, gerbview, pcbnew) can have a different active color scheme selected.
  * The "child applications" (library editors) inherit from either eeschema or pcbnew.
  */
-class COLOR_SETTINGS : public JSON_SETTINGS
+class MY_TYPE COLOR_SETTINGS : public JSON_SETTINGS
 {
 public:
     explicit COLOR_SETTINGS( const wxString& aFilename = wxT( "user" ),
@@ -113,7 +114,7 @@
     std::unordered_map<int, COLOR4D> m_defaultColors;
 };
 
-class COLOR_MAP_PARAM : public PARAM_BASE
+class MY_TYPE COLOR_MAP_PARAM : public PARAM_BASE
 {
 public:
     COLOR_MAP_PARAM( const std::string& aJsonPath, int aMapKey, COLOR4D aDefault,
--- include/settings/common_settings.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/settings/common_settings.h	2024-06-12 19:06:59.000000000 -0600
@@ -21,6 +21,7 @@
 #ifndef _COMMON_SETTINGS_H
 #define _COMMON_SETTINGS_H
 
+#include <import_export.h>
 #include <settings/environment.h>
 #include <settings/json_settings.h>
 
@@ -44,7 +45,7 @@
 };
 
 
-class COMMON_SETTINGS : public JSON_SETTINGS
+class MY_TYPE COMMON_SETTINGS : public JSON_SETTINGS
 {
 public:
     struct APPEARANCE
--- include/settings/cvpcb_settings.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/settings/cvpcb_settings.h	2024-06-11 22:32:04.000000000 -0600
@@ -24,11 +24,12 @@
 #ifndef _CVPCB_SETTINGS_H
 #define _CVPCB_SETTINGS_H
 
+#include <import_export.h>
 #include <pcb_display_options.h>
 #include <pcbnew_settings.h>
 #include <settings/app_settings.h>
 
-class CVPCB_SETTINGS : public PCB_VIEWERS_SETTINGS_BASE
+class MY_TYPE CVPCB_SETTINGS : public PCB_VIEWERS_SETTINGS_BASE
 {
 public:
     CVPCB_SETTINGS();
--- include/eda_search_data.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/eda_search_data.h	2024-06-11 04:01:56.000000000 -0600
@@ -24,6 +24,7 @@
 #ifndef EDA_ITEM_SEARCH_H
 #define EDA_ITEM_SEARCH_H
 
+#include <import_export.h>
 #include <wx/string.h>
 
 enum class EDA_SEARCH_MATCH_MODE
@@ -33,7 +34,7 @@
     WILDCARD
 };
 
-struct EDA_SEARCH_DATA
+struct MY_TYPE EDA_SEARCH_DATA
 {
     wxString findString;
     wxString replaceString;
@@ -57,7 +58,7 @@
     virtual ~EDA_SEARCH_DATA() {}
 };
 
-struct SCH_SEARCH_DATA : public EDA_SEARCH_DATA
+struct MY_TYPE SCH_SEARCH_DATA : public EDA_SEARCH_DATA
 {
     bool searchAllFields;
     bool searchAllPins;
@@ -75,4 +75,4 @@
     }
 };
 
-#endif
\ No newline at end of file
+#endif
--- include/lib_table_base.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/lib_table_base.h	2024-06-11 17:11:21.000000000 -0600
@@ -32,6 +32,7 @@
 #include <memory>
 #include <mutex>
 #include <shared_mutex>
+#include <import_export.h>
 #include <project.h>
 #include <string_utf8_map.h>
 #include <richio.h>
@@ -62,7 +63,7 @@
  * Hold a record identifying a library accessed by the appropriate plug in object in the
  * #LIB_TABLE.  This is an abstract base class from which to derive library specific rows.
  */
-class LIB_TABLE_ROW : boost::noncopyable
+class MY_TYPE LIB_TABLE_ROW : boost::noncopyable
 {
 public:
     LIB_TABLE_ROW() :
@@ -286,7 +287,7 @@
  *
  * @author Wayne Stambaugh
  */
-class LIB_TABLE : public PROJECT::_ELEM
+class MY_TYPE LIB_TABLE : public PROJECT::_ELEM
 {
 public:
     /**
--- include/dialog_shim.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/dialog_shim.h	2024-06-12 03:51:48.000000000 -0600
@@ -26,6 +26,7 @@
 #define DIALOG_SHIM_
 
 #include <wx/dialog.h>
+#include <import_export.h>
 #include <kiway_player.h>
 class wxGridEvent;
 
@@ -79,7 +80,7 @@
  * <br>
  * in the dialog window's properties.
  */
-class DIALOG_SHIM : public wxDialog, public KIWAY_HOLDER
+class MY_TYPE DIALOG_SHIM : public wxDialog, public KIWAY_HOLDER
 {
 public:
     DIALOG_SHIM( wxWindow* aParent, wxWindowID id, const wxString& title,
--- include/import_export.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/import_export.h	2024-06-11 03:47:23.000000000 -0600
@@ -54,6 +54,15 @@
 #else
  #define MY_API(rettype)    APIIMPORT   rettype
 #endif
+// For types used in multiple DSOs where the typeinfo symbols must be weak defs,
+// or bad things happen at run time.
+#if defined(_WIN32) || defined(SWIG)
+ #define MY_TYPE
+#elif defined(__has_attribute) && __has_attribute(type_visibility)
+ #define MY_TYPE           __attribute__((type_visibility("default"), weak))
+#else
+ #define MY_TYPE           APIEXPORT __attribute__((weak))
+#endif
 
 #define MY_LOCAL(rettype)   APILOCAL    rettype
 
--- include/board_printout.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/board_printout.h	2024-06-11 17:53:12.000000000 -0600
@@ -29,6 +29,7 @@
 #define BOARD_PRINTOUT_H
 
 #include <wx/print.h>
+#include <import_export.h>
 #include <layer_ids.h>
 #include <printout.h>
 #include <math/box2.h>
@@ -43,7 +44,7 @@
 };
 
 
-struct BOARD_PRINTOUT_SETTINGS : public PRINTOUT_SETTINGS
+struct MY_TYPE BOARD_PRINTOUT_SETTINGS : public PRINTOUT_SETTINGS
 {
     BOARD_PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo );
 
@@ -63,7 +64,7 @@
  * An object derived from wxPrintout to handle the necessary information to control a printer
  * when printing a board.
  */
-class BOARD_PRINTOUT : public wxPrintout
+class MY_TYPE BOARD_PRINTOUT : public wxPrintout
 {
 public:
     BOARD_PRINTOUT( const BOARD_PRINTOUT_SETTINGS& aParams, const KIGFX::VIEW* aView,
--- include/drawing_sheet/ds_draw_item.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/drawing_sheet/ds_draw_item.h	2024-06-11 17:41:12.000000000 -0600
@@ -27,6 +27,7 @@
 
 #include <core/typeinfo.h>
 #include <math/vector2d.h>
+#include <import_export.h>
 #include <eda_text.h>
 #include "widgets/msgpanel.h"
 #include <geometry/shape_poly_set.h>
@@ -55,7 +56,7 @@
  *  - bitmaps (also for logos, but they cannot be plot by SVG, GERBER or HPGL plotters
  *    where we just plot the bounding box)
  */
-class DS_DRAW_ITEM_BASE : public EDA_ITEM
+class MY_TYPE DS_DRAW_ITEM_BASE : public EDA_ITEM
 {
 public:
     virtual ~DS_DRAW_ITEM_BASE() {}
@@ -124,7 +125,7 @@
 
 
 // This class draws a thick segment
-class DS_DRAW_ITEM_LINE : public DS_DRAW_ITEM_BASE
+class MY_TYPE DS_DRAW_ITEM_LINE : public DS_DRAW_ITEM_BASE
 {
 public:
     DS_DRAW_ITEM_LINE( DS_DATA_ITEM* aPeer, int aIndex, VECTOR2I aStart, VECTOR2I aEnd,
@@ -164,7 +165,7 @@
 };
 
 
-class DS_DRAW_ITEM_POLYPOLYGONS : public DS_DRAW_ITEM_BASE
+class MY_TYPE DS_DRAW_ITEM_POLYPOLYGONS : public DS_DRAW_ITEM_BASE
 {
 public:
     DS_DRAW_ITEM_POLYPOLYGONS( DS_DATA_ITEM* aPeer, int aIndex, VECTOR2I aPos, int aPenWidth ) :
@@ -212,7 +213,7 @@
 /**
  * Non filled rectangle with thick segment.
  */
-class DS_DRAW_ITEM_RECT : public DS_DRAW_ITEM_BASE
+class MY_TYPE DS_DRAW_ITEM_RECT : public DS_DRAW_ITEM_BASE
 {
 public:
     DS_DRAW_ITEM_RECT( DS_DATA_ITEM* aPeer, int aIndex, VECTOR2I aStart, VECTOR2I aEnd,
@@ -260,7 +261,7 @@
  * This only a draw item only.  Therefore m_peer ( the parent DS_DATA_ITEM item in the
  * DS_DATA_MODEL) is always a nullptr.
  */
-class DS_DRAW_ITEM_PAGE : public DS_DRAW_ITEM_BASE
+class MY_TYPE DS_DRAW_ITEM_PAGE : public DS_DRAW_ITEM_BASE
 {
 public:
     DS_DRAW_ITEM_PAGE( int aPenWidth, double aMarkerSize ) :
@@ -307,7 +308,7 @@
  * It is derived from an #EDA_TEXT, so it handle all characteristics of this graphic text
  * (justification, rotation ... ).
  */
-class DS_DRAW_ITEM_TEXT : public DS_DRAW_ITEM_BASE, public EDA_TEXT
+class MY_TYPE DS_DRAW_ITEM_TEXT : public DS_DRAW_ITEM_BASE, public EDA_TEXT
 {
 public:
     DS_DRAW_ITEM_TEXT( DS_DATA_ITEM* aPeer, int aIndex, const wxString& aText, const VECTOR2I& aPos,
@@ -351,7 +352,7 @@
 /**
  * A bitmap.
  */
-class DS_DRAW_ITEM_BITMAP : public DS_DRAW_ITEM_BASE
+class MY_TYPE DS_DRAW_ITEM_BITMAP : public DS_DRAW_ITEM_BASE
 {
 public:
     DS_DRAW_ITEM_BITMAP( DS_DATA_ITEM* aPeer, int aIndex, VECTOR2I aPos ) :
--- include/fp_lib_table.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/fp_lib_table.h	2024-06-12 18:51:21.000000000 -0600
@@ -26,6 +26,7 @@
 #ifndef FP_LIB_TABLE_H_
 #define FP_LIB_TABLE_H_
 
+#include <import_export.h>
 #include <lib_table_base.h>
 #include <io_mgr.h>
 
@@ -37,7 +38,7 @@
  * Hold a record identifying a library accessed by the appropriate footprint library #PLUGIN
  * object in the #FP_LIB_TABLE.
  */
-class FP_LIB_TABLE_ROW : public LIB_TABLE_ROW
+class MY_TYPE FP_LIB_TABLE_ROW : public LIB_TABLE_ROW
 {
 public:
     typedef IO_MGR::PCB_FILE_T LIB_T;
@@ -93,7 +94,7 @@
 };
 
 
-class FP_LIB_TABLE : public LIB_TABLE
+class MY_TYPE FP_LIB_TABLE : public LIB_TABLE
 {
 public:
     KICAD_T Type() override { return FP_LIB_TABLE_T; }
--- include/project/project_file.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/project/project_file.h	2024-06-11 18:41:49.000000000 -0600
@@ -22,6 +22,7 @@
 #ifndef KICAD_PROJECT_FILE_H
 #define KICAD_PROJECT_FILE_H
 
+#include <import_export.h>
 #include <common.h> // needed for wxstring hash template
 #include <kiid.h>
 #include <project/board_project_settings.h>
@@ -62,7 +63,7 @@
  * There is either zero or one PROJECT_FILE for every PROJECT
  * (you can have a dummy PROJECT that has no file)
  */
-class PROJECT_FILE : public JSON_SETTINGS
+class MY_TYPE PROJECT_FILE : public JSON_SETTINGS
 {
 public:
     /**
--- include/eda_draw_frame.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/eda_draw_frame.h	2024-06-12 18:21:07.000000000 -0600
@@ -69,7 +69,7 @@
  * The Eeschema, Pcbnew and GerbView main windows are just a few examples of classes
  * derived from EDA_DRAW_FRAME.
  */
-class EDA_DRAW_FRAME : public KIWAY_PLAYER
+class MY_TYPE EDA_DRAW_FRAME : public KIWAY_PLAYER
 {
 public:
     EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType, const wxString& aTitle,
--- include/eda_shape.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/eda_shape.h	2024-06-11 17:35:31.000000000 -0600
@@ -25,6 +25,7 @@
 #ifndef EDA_SHAPE_H
 #define EDA_SHAPE_H
 
+#include <import_export.h>
 #include <trigo.h>
 #include <geometry/shape_poly_set.h>
 #include <geometry/geometry_utils.h>
@@ -68,7 +69,7 @@
     VECTOR2I center;
 };
 
-class EDA_SHAPE
+class MY_TYPE EDA_SHAPE
 {
 public:
     EDA_SHAPE( SHAPE_T aType, int aLineWidth, FILL_T aFill );
--- include/pcb_group.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/pcb_group.h	2024-06-11 18:17:28.000000000 -0600
@@ -30,6 +30,7 @@
 #ifndef CLASS_PCB_GROUP_H_
 #define CLASS_PCB_GROUP_H_
 
+#include <import_export.h>
 #include <board_commit.h>
 #include <board_item.h>
 #include <unordered_set>
@@ -47,7 +48,7 @@
  * containing a group implicitly contains its members. However other operations on sets of
  * items, like committing, updating the view, etc the set is explicit.
  */
-class PCB_GROUP : public BOARD_ITEM
+class MY_TYPE PCB_GROUP : public BOARD_ITEM
 {
 public:
     PCB_GROUP( BOARD_ITEM* aParent );
--- include/properties/pg_properties.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/properties/pg_properties.h	2024-06-12 18:30:22.000000000 -0600
@@ -25,6 +25,7 @@
 #include <wx/propgrid/property.h>
 #include <wx/propgrid/props.h>
 #include <common.h>
+#include <import_export.h>
 #include <origin_transforms.h>
 
 class PROPERTY_BASE;
@@ -33,7 +34,7 @@
 wxPGProperty* PGPropertyFactory( const PROPERTY_BASE* aProperty );
 
 ///> Customized abstract wxPGProperty class to handle coordinate/size units
-class PGPROPERTY_DISTANCE
+class MY_TYPE PGPROPERTY_DISTANCE
 {
 public:
     PGPROPERTY_DISTANCE( const wxString& aRegEx,
@@ -52,7 +53,7 @@
 };
 
 
-class PGPROPERTY_SIZE : public wxUIntProperty, public PGPROPERTY_DISTANCE
+class MY_TYPE PGPROPERTY_SIZE : public wxUIntProperty, public PGPROPERTY_DISTANCE
 {
 public:
     PGPROPERTY_SIZE( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
@@ -72,7 +73,7 @@
 };
 
 
-class PGPROPERTY_COORD : public wxIntProperty, public PGPROPERTY_DISTANCE
+class MY_TYPE PGPROPERTY_COORD : public wxIntProperty, public PGPROPERTY_DISTANCE
 {
 public:
     PGPROPERTY_COORD( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
@@ -94,7 +95,7 @@
 
 
 ///> Customized wxPGProperty class to handle angles
-class PGPROPERTY_ANGLE : public wxFloatProperty
+class MY_TYPE PGPROPERTY_ANGLE : public wxFloatProperty
 {
 public:
     PGPROPERTY_ANGLE( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
@@ -123,7 +124,7 @@
 
 
 ///> A wxEnumProperty that displays a color next to the enum value
-class PGPROPERTY_COLORENUM : public wxEnumProperty
+class MY_TYPE PGPROPERTY_COLORENUM : public wxEnumProperty
 {
 public:
     PGPROPERTY_COLORENUM( const wxString& aLabel, wxString& aName, wxPGChoices* aChoices,
@@ -153,7 +154,7 @@
 };
 
 
-class PGPROPERTY_STRING : public wxStringProperty
+class MY_TYPE PGPROPERTY_STRING : public wxStringProperty
 {
 public:
     PGPROPERTY_STRING( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
@@ -170,7 +171,7 @@
 };
 
 
-class PGPROPERTY_BOOL : public wxBoolProperty
+class MY_TYPE PGPROPERTY_BOOL : public wxBoolProperty
 {
 public:
     PGPROPERTY_BOOL( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
--- include/kiway_express.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/kiway_express.h	2024-06-12 18:36:31.000000000 -0600
@@ -26,6 +26,7 @@
 #define KIWAY_EXPRESS_H_
 
 // @see http://wiki.wxwidgets.org/Custom_Events_Tutorial
+#include <import_export.h>
 #include <frame_type.h>
 #include <mail_type.h>
 #include <wx/string.h>
@@ -35,7 +36,7 @@
 /**
  * Carry a payload from one #KIWAY_PLAYER to another within a #PROJECT.
  */
-class KIWAY_EXPRESS : public wxEvent
+class MY_TYPE KIWAY_EXPRESS : public wxEvent
 {
 public:
     /**
--- include/eda_text.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/eda_text.h	2024-06-11 03:52:26.000000000 -0600
@@ -28,6 +28,7 @@
 #include <memory>
 #include <vector>
 
+#include <import_export.h>
 #include <outline_mode.h>
 #include <eda_search_data.h>
 #include <font/glyph.h>
@@ -68,7 +69,7 @@
  * function names (accessors) that to not collide with function names likely to be seen
  * in the combined derived classes.
  */
-class EDA_TEXT
+class MY_TYPE EDA_TEXT
 {
 public:
     EDA_TEXT( const EDA_IU_SCALE& aIuScale, const wxString& aText = wxEmptyString );
--- include/gal/hidpi_gl_canvas.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/gal/hidpi_gl_canvas.h	2024-06-12 18:32:00.000000000 -0600
@@ -27,6 +27,7 @@
 #ifndef HIDPI_GL_CANVAS_H
 #define HIDPI_GL_CANVAS_H
 
+#include <import_export.h>
 #include <wx/glcanvas.h>
 
 
@@ -35,7 +36,7 @@
  *
  * This is a small wrapper class to enable HiDPI/Retina support for wxGLCanvas.
  */
-class HIDPI_GL_CANVAS : public wxGLCanvas
+class MY_TYPE HIDPI_GL_CANVAS : public wxGLCanvas
 {
 public:
     // wxGLCanvas constructor
--- include/kiway_holder.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/kiway_holder.h	2024-06-12 18:26:26.000000000 -0600
@@ -24,6 +24,8 @@
 #ifndef KIWAY_HOLDER_H_
 #define KIWAY_HOLDER_H_
 
+#include <import_export.h>
+
 class KIWAY;
 class PROJECT;
 class wxWindow;
@@ -33,7 +35,7 @@
  *
  * It allows calls to Kiway() and SetKiway().
  */
-class KIWAY_HOLDER
+class MY_TYPE KIWAY_HOLDER
 {
 public:
     enum HOLDER_TYPE { DIALOG, FRAME, PANEL };
--- include/board_item.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/board_item.h	2024-06-11 18:01:11.000000000 -0600
@@ -26,6 +26,7 @@
 #define BOARD_ITEM_STRUCT_H
 
 
+#include <import_export.h>
 #include <eda_item.h>
 #include <layer_ids.h>
 #include <geometry/geometry_utils.h>
@@ -66,7 +67,7 @@
  * therefore instances of derived classes should only be found in Pcbnew or other programs
  * that use class #BOARD and its contents.
  */
-class BOARD_ITEM : public EDA_ITEM
+class MY_TYPE BOARD_ITEM : public EDA_ITEM
 {
 public:
     BOARD_ITEM( BOARD_ITEM* aParent, KICAD_T idtype, PCB_LAYER_ID aLayer = F_Cu ) :
@@ -356,7 +357,7 @@
  *
  * Its sole purpose is to flag the item as having been deleted.
  */
-class DELETED_BOARD_ITEM : public BOARD_ITEM
+class MY_TYPE DELETED_BOARD_ITEM : public BOARD_ITEM
 {
 public:
     DELETED_BOARD_ITEM() :
--- include/units_provider.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/units_provider.h	2024-06-12 03:52:28.000000000 -0600
@@ -24,11 +24,12 @@
 #ifndef  UNITS_PROVIDER_H
 #define  UNITS_PROVIDER_H
 
+#include <import_export.h>
 #include <eda_units.h>
 #include <origin_transforms.h>
 
 
-class UNITS_PROVIDER
+class MY_TYPE UNITS_PROVIDER
 {
 public:
     UNITS_PROVIDER( const EDA_IU_SCALE& aIuScale, EDA_UNITS aUnits ) :
--- include/eda_item.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/eda_item.h	2024-06-11 15:40:05.000000000 -0600
@@ -29,6 +29,7 @@
 
 #include <deque>
 
+#include <import_export.h>
 #include <core/typeinfo.h>
 #include <eda_item_flags.h>
 #include <eda_search_data.h>
@@ -81,7 +82,7 @@
 /**
  * A base class for most all the KiCad significant classes used in schematics and boards.
  */
-class EDA_ITEM : public KIGFX::VIEW_ITEM
+class MY_TYPE EDA_ITEM : public KIGFX::VIEW_ITEM
 {
 public:
     virtual ~EDA_ITEM() { };
--- include/font/glyph.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/font/glyph.h	2024-06-11 03:58:38.000000000 -0600
@@ -26,6 +26,7 @@
 #define GLYPH_H
 
 #include <memory>
+#include <import_export.h>
 #include <math/box2.h>
 #include <geometry/shape_poly_set.h>
 #include <wx/debug.h>
@@ -55,7 +56,7 @@
 };
 
 
-class OUTLINE_GLYPH : public GLYPH, public SHAPE_POLY_SET
+class MY_TYPE OUTLINE_GLYPH : public GLYPH, public SHAPE_POLY_SET
 {
 public:
     OUTLINE_GLYPH() :
@@ -80,7 +81,7 @@
 };
 
 
-class STROKE_GLYPH : public GLYPH, public std::vector<std::vector<VECTOR2D>>
+class MY_TYPE STROKE_GLYPH : public GLYPH, public std::vector<std::vector<VECTOR2D>>
 {
 public:
     STROKE_GLYPH()
--- include/pcb_base_frame.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/pcb_base_frame.h	2024-06-11 18:31:33.000000000 -0600
@@ -27,6 +27,7 @@
 #define  PCB_BASE_FRAME_H
 
 
+#include <import_export.h>
 #include <eda_item.h>
 #include <board.h>
 #include <eda_draw_frame.h>
@@ -66,7 +67,7 @@
 /**
  * Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
  */
-class PCB_BASE_FRAME : public EDA_DRAW_FRAME
+class MY_TYPE PCB_BASE_FRAME : public EDA_DRAW_FRAME
 {
 public:
     PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
--- include/search_stack.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/search_stack.h	2024-06-11 17:37:51.000000000 -0600
@@ -28,6 +28,7 @@
 
 #include <wx/filefn.h>
 #include <wx/filename.h>
+#include <import_export.h>
 #include <project.h>
 
 
@@ -38,7 +39,7 @@
  * reminder that anything you put in here means searching work at some point in time.
  * (An alternative is to simply know where something is.)
  */
-class SEARCH_STACK : public wxPathList, public PROJECT::_ELEM
+class MY_TYPE SEARCH_STACK : public wxPathList, public PROJECT::_ELEM
 {
 public:
     KICAD_T Type() override { return SEARCH_STACK_T; }
--- include/eda_base_frame.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/eda_base_frame.h	2024-06-11 18:33:38.000000000 -0600
@@ -36,6 +36,7 @@
 #include <map>
 
 #include <wx/aui/aui.h>
+#include <import_export.h>
 #include <layer_ids.h>
 #include <frame_type.h>
 #include <hotkeys_basic.h>
@@ -101,8 +102,8 @@
  * calling it from the derived class's SaveSettings().  This class is not a #KIWAY_PLAYER
  * because #KICAD_MANAGER_FRAME is derived from it and that class is not a player.
  */
-class EDA_BASE_FRAME : public wxFrame, public TOOLS_HOLDER, public KIWAY_HOLDER,
-                       public UNITS_PROVIDER
+class MY_TYPE EDA_BASE_FRAME : public wxFrame, public TOOLS_HOLDER,
+                        		public KIWAY_HOLDER, public UNITS_PROVIDER
 {
 public:
     /**
@@ -802,7 +803,7 @@
  * then after a //==// break has additional calls to anchor toolbars in a way that matches
  * present functionality.
  */
-class EDA_PANE : public wxAuiPaneInfo
+class MY_TYPE EDA_PANE : public wxAuiPaneInfo
 {
 public:
     EDA_PANE()
--- include/widgets/color_swatch.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/widgets/color_swatch.h	2024-06-11 17:49:52.000000000 -0600
@@ -32,6 +32,7 @@
 
 #include <functional>
 
+#include <import_export.h>
 #include <gal/color4d.h>
 #include <dialogs/dialog_color_picker.h>
 
@@ -53,7 +54,7 @@
 /**
  * A simple color swatch of the kind used to set layer colors.
  */
-class COLOR_SWATCH: public wxPanel
+class MY_TYPE COLOR_SWATCH: public wxPanel
 {
 public:
 
--- include/widgets/search_pane_tab.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/widgets/search_pane_tab.h	2024-06-12 18:25:40.000000000 -0600
@@ -24,11 +24,12 @@
 #include <wx/listctrl.h>
 #include <wx/sizer.h>
 #include <wx/panel.h>
+#include <import_export.h>
 
 class SEARCH_HANDLER;
 
 
-class SEARCH_PANE_LISTVIEW : public wxListView
+class MY_TYPE SEARCH_PANE_LISTVIEW : public wxListView
 {
 public:
     SEARCH_PANE_LISTVIEW( SEARCH_HANDLER* handler,
@@ -53,7 +54,7 @@
 };
 
 
-class SEARCH_PANE_TAB : public wxPanel
+class MY_TYPE SEARCH_PANE_TAB : public wxPanel
 {
 public:
     SEARCH_PANE_TAB( SEARCH_HANDLER* handler, wxWindow* parent, wxWindowID aId = wxID_ANY,
--- include/widgets/footprint_preview_widget.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/widgets/footprint_preview_widget.h	2024-06-12 18:24:26.000000000 -0600
@@ -34,7 +34,7 @@
 class wxSizer;
 
 
-class FOOTPRINT_PREVIEW_WIDGET: public wxPanel
+class MY_TYPE FOOTPRINT_PREVIEW_WIDGET: public wxPanel
 {
 public:
 
--- include/widgets/bitmap_button.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/widgets/bitmap_button.h	2024-06-11 16:57:53.000000000 -0600
@@ -25,6 +25,7 @@
 #ifndef BITMAP_BUTTON_H_
 #define BITMAP_BUTTON_H_
 
+#include <import_export.h>
 #include <wx/bitmap.h>
 #include <wx/panel.h>
 #include <wx/colour.h>
@@ -37,7 +38,7 @@
  *     * It has a rectangle highlight when the mouse is hovering/pressed
  *     * It has the ability to be checked/toggled
  */
-class BITMAP_BUTTON : public wxPanel
+class MY_TYPE BITMAP_BUTTON : public wxPanel
 {
 public:
     BITMAP_BUTTON( wxWindow* aParent, wxWindowID aId, const wxPoint& aPos = wxDefaultPosition,
--- include/widgets/paged_dialog.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/widgets/paged_dialog.h	2024-06-12 18:28:23.000000000 -0600
@@ -21,6 +21,7 @@
 #ifndef PAGED_DIALOG_H
 #define PAGED_DIALOG_H
 
+#include <import_export.h>
 #include <dialog_shim.h>
 #include <widgets/wx_treebook.h>
 
@@ -28,7 +29,7 @@
 class WX_INFOBAR;
 class WX_TREEBOOK;
 
-class PAGED_DIALOG : public DIALOG_SHIM
+class MY_TYPE PAGED_DIALOG : public DIALOG_SHIM
 {
 public:
     PAGED_DIALOG( wxWindow* aParent, const wxString& aTitle, bool aShowReset,
--- include/widgets/wx_grid.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/widgets/wx_grid.h	2024-06-11 17:12:29.000000000 -0600
@@ -31,11 +31,12 @@
 #include <wx/event.h>
 #include <wx/grid.h>
 #include <wx/version.h>
+#include <import_export.h>
 #include <units_provider.h>
 #include <libeval/numeric_evaluator.h>
 
 
-class WX_GRID : public wxGrid
+class MY_TYPE WX_GRID : public wxGrid
 {
 public:
     // Constructor has to be wxFormBuilder-compatible
--- include/tool/action_toolbar.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/tool/action_toolbar.h	2024-06-12 18:35:51.000000000 -0600
@@ -32,6 +32,7 @@
 #include <wx/aui/framemanager.h>
 #include <wx/popupwin.h>
 #include <wx/panel.h>
+#include <import_export.h>
 #include <tool/action_manager.h>
 
 class ACTION_MENU;
@@ -99,7 +100,7 @@
 /**
  * A popup window that contains a row of toolbar-like buttons for the user to choose from.
  */
-class ACTION_TOOLBAR_PALETTE : public wxPopupTransientWindow
+class MY_TYPE ACTION_TOOLBAR_PALETTE : public wxPopupTransientWindow
 {
 public:
     /**
@@ -180,7 +181,7 @@
 /**
  * Define the structure of a toolbar with buttons that invoke ACTIONs.
  */
-class ACTION_TOOLBAR : public wxAuiToolBar
+class MY_TYPE ACTION_TOOLBAR : public wxAuiToolBar
 {
 public:
     ACTION_TOOLBAR( EDA_BASE_FRAME* parent, wxWindowID id = wxID_ANY,
--- include/tool/action_menu.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/tool/action_menu.h	2024-06-12 18:20:09.000000000 -0600
@@ -34,6 +34,7 @@
 
 #include <wx/menu.h>
 #include <wx/textentry.h>
+#include <import_export.h>
 #include <tool/tool_event.h>
 
 class KIFACE_BASE;
@@ -45,7 +46,7 @@
 /**
  * Defines the structure of a menu based on ACTIONs.
  */
-class ACTION_MENU : public wxMenu
+class MY_TYPE ACTION_MENU : public wxMenu
 {
 public:
     ///< Default constructor
--- include/tool/conditional_menu.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/tool/conditional_menu.h	2024-06-12 18:19:39.000000000 -0600
@@ -38,7 +38,7 @@
 enum class BITMAPS : unsigned int;
 
 
-class CONDITIONAL_MENU : public ACTION_MENU
+class MY_TYPE CONDITIONAL_MENU : public ACTION_MENU
 {
 public:
     ///< Constant to indicate that we do not care about an #ENTRY location in the menu.
--- include/kiway_player.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/kiway_player.h	2024-06-12 18:18:50.000000000 -0600
@@ -28,6 +28,7 @@
 #include <wx/frame.h>
 
 #include <vector>
+#include <import_export.h>
 #include <kiway_holder.h>
 #include <eda_base_frame.h>
 
@@ -61,7 +62,7 @@
 #ifdef SWIG
 class KIWAY_PLAYER : public wxFrame, public KIWAY_HOLDER
 #else
-class KIWAY_PLAYER : public EDA_BASE_FRAME
+class MY_TYPE KIWAY_PLAYER : public EDA_BASE_FRAME
 #endif
 {
 public:
--- libs/kimath/include/geometry/shape_null.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_null.h	2024-06-12 03:29:20.000000000 -0600
@@ -31,7 +31,7 @@
 
 #include <algorithm>
 
-class SHAPE_NULL : public SHAPE
+class MY_TYPE SHAPE_NULL : public SHAPE
 {
 public:
     SHAPE_NULL() :
--- libs/kimath/include/geometry/shape_compound.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_compound.h	2024-06-12 03:27:17.000000000 -0600
@@ -35,7 +35,7 @@
 
 class SHAPE_SIMPLE;
 
-class SHAPE_COMPOUND : public SHAPE
+class MY_TYPE SHAPE_COMPOUND : public SHAPE
 {
 public:
     SHAPE_COMPOUND() :
--- libs/kimath/include/geometry/shape_rect.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_rect.h	2024-06-12 03:29:43.000000000 -0600
@@ -34,7 +34,7 @@
 #include <math/vector2d.h>
 #include <trigo.h>
 
-class SHAPE_RECT : public SHAPE
+class MY_TYPE SHAPE_RECT : public SHAPE
 {
 public:
     /**
--- libs/kimath/include/geometry/shape_simple.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_simple.h	2024-06-12 03:30:09.000000000 -0600
@@ -38,7 +38,7 @@
  * there is a "virtual" line segment between the last and first vertex.
  */
 
-class SHAPE_SIMPLE : public SHAPE_LINE_CHAIN_BASE
+class MY_TYPE SHAPE_SIMPLE : public SHAPE_LINE_CHAIN_BASE
 {
 public:
     /**
--- libs/kimath/include/geometry/shape_line_chain.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_line_chain.h	2024-06-12 03:28:49.000000000 -0600
@@ -78,7 +78,7 @@
  *
  * @note The SHAPE_LINE_CHAIN class shall not be used for polygons!
  */
-class SHAPE_LINE_CHAIN : public SHAPE_LINE_CHAIN_BASE
+class MY_TYPE SHAPE_LINE_CHAIN : public SHAPE_LINE_CHAIN_BASE
 {
 private:
     typedef std::vector<VECTOR2I>::iterator point_iter;
--- libs/kimath/include/geometry/shape_circle.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_circle.h	2024-06-12 03:27:00.000000000 -0600
@@ -34,7 +34,7 @@
 
 #include <algorithm>
 
-class SHAPE_CIRCLE : public SHAPE
+class MY_TYPE SHAPE_CIRCLE : public SHAPE
 {
 public:
     SHAPE_CIRCLE() :
--- libs/kimath/include/geometry/shape_arc.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_arc.h	2024-06-12 03:26:42.000000000 -0600
@@ -33,7 +33,7 @@
 
 class SHAPE_LINE_CHAIN;
 
-class SHAPE_ARC : public SHAPE
+class MY_TYPE SHAPE_ARC : public SHAPE
 {
 public:
 
--- libs/kimath/include/geometry/shape_segment.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_segment.h	2024-06-12 03:29:56.000000000 -0600
@@ -34,7 +34,7 @@
 
 #include <algorithm>
 
-class SHAPE_SEGMENT : public SHAPE
+class MY_TYPE SHAPE_SEGMENT : public SHAPE
 {
 public:
     SHAPE_SEGMENT() :
--- libs/kimath/include/geometry/shape.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape.h	2024-06-12 02:56:43.000000000 -0600
@@ -28,6 +28,7 @@
 
 #include <sstream>
 #include <vector>
+#include <import_export.h>
 #include <geometry/seg.h>
 #include <geometry/eda_angle.h>
 #include <math/vector2d.h>
@@ -74,7 +75,7 @@
 
 class SHAPE;
 
-class SHAPE_BASE
+class MY_TYPE SHAPE_BASE
 {
 public:
     /**
@@ -119,7 +120,7 @@
 /**
  * An abstract shape on 2D plane.
  */
-class SHAPE : public SHAPE_BASE
+class MY_TYPE SHAPE : public SHAPE_BASE
 {
 public:
     /**
@@ -250,7 +251,7 @@
 };
 
 
-class SHAPE_LINE_CHAIN_BASE : public SHAPE
+class MY_TYPE SHAPE_LINE_CHAIN_BASE : public SHAPE
 {
 public:
     SHAPE_LINE_CHAIN_BASE( SHAPE_TYPE aType ) :
--- libs/sexpr/include/sexpr/sexpr.h~	2024-02-21 05:39:11.000000000 -0700
+++ libs/sexpr/include/sexpr/sexpr.h	2024-06-12 03:36:46.000000000 -0600
@@ -22,6 +22,7 @@
 #include <cstdint>
 #include <string>
 #include <vector>
+#include "import_export.h"
 #include "sexpr/isexprable.h"
 #include "sexpr/sexpr_exception.h"
 
@@ -42,7 +43,7 @@
 
     typedef std::vector< class SEXPR * > SEXPR_VECTOR;
 
-    class SEXPR
+    class MY_TYPE SEXPR
     {
     public:
         virtual ~SEXPR() {};
@@ -94,7 +95,7 @@
             SEXPR( SEXPR_TYPE::SEXPR_TYPE_ATOM_DOUBLE, aLineNumber ), m_value( aValue ) {};
     };
 
-    struct SEXPR_STRING : public SEXPR
+    struct MY_TYPE SEXPR_STRING : public SEXPR
     {
         std::string m_value;
 
@@ -105,7 +106,7 @@
             SEXPR( SEXPR_TYPE::SEXPR_TYPE_ATOM_STRING, aLineNumber ), m_value( aValue ) {};
     };
 
-    struct SEXPR_SYMBOL : public SEXPR
+    struct MY_TYPE SEXPR_SYMBOL : public SEXPR
     {
         std::string m_value;
 
--- include/properties/eda_angle_variant.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/properties/eda_angle_variant.h	2024-06-12 18:31:01.000000000 -0600
@@ -20,11 +20,12 @@
 #ifndef KICAD_EDA_ANGLE_VARIANT_H
 #define KICAD_EDA_ANGLE_VARIANT_H
 
+#include <import_export.h>
 #include <geometry/eda_angle.h>
 
 #include <wx/variant.h>
 
-class EDA_ANGLE_VARIANT_DATA : public wxVariantData
+class MY_TYPE EDA_ANGLE_VARIANT_DATA : public wxVariantData
 {
 public:
     EDA_ANGLE_VARIANT_DATA();
--- libs/kimath/include/geometry/shape_poly_set.h.orig	2024-02-21 05:39:11.000000000 -0700
+++ libs/kimath/include/geometry/shape_poly_set.h	2024-06-12 03:49:51.000000000 -0600
@@ -62,7 +62,7 @@
  *
  * TODO: add convex partitioning & spatial index
  */
-class SHAPE_POLY_SET : public SHAPE
+class MY_TYPE SHAPE_POLY_SET : public SHAPE
 {
 public:
     ///< represents a single polygon outline with holes. The first entry is the outline,
@@ -73,7 +73,7 @@
     class TRIANGULATED_POLYGON
     {
     public:
-        struct TRI : public SHAPE_LINE_CHAIN_BASE
+        struct MY_TYPE TRI : public SHAPE_LINE_CHAIN_BASE
         {
             TRI( int _a = 0, int _b = 0, int _c = 0, TRIANGULATED_POLYGON* aParent = nullptr ) :
                 SHAPE_LINE_CHAIN_BASE( SH_POLY_SET_TRIANGLE ),
--- pcbnew/CMakeLists.txt~	2024-06-13 02:09:21.000000000 -0600
+++ pcbnew/CMakeLists.txt	2024-06-13 04:40:16.000000000 -0600
@@ -435,6 +435,7 @@
     -I${CMAKE_SOURCE_DIR}/common/swig
     -I${CMAKE_SOURCE_DIR}/libs/kimath/include
     -I${CMAKE_BINARY_DIR}
+    -DMY_TYPE=
     )
 
 if( DEBUG )
--- include/settings/json_settings.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/settings/json_settings.h	2024-06-13 18:05:04.000000000 -0600
@@ -21,6 +21,7 @@
 #ifndef _JSON_SETTINGS_H
 #define _JSON_SETTINGS_H
 
+#include <import_export.h>
 #include <core/wx_stl_compat.h>
 
 #include <utility>
@@ -56,7 +57,7 @@
 /// pimpl to allow hiding json.hpp
 class JSON_SETTINGS_INTERNALS;
 
-class JSON_SETTINGS
+class MY_TYPE JSON_SETTINGS
 {
 public:
     friend class NESTED_SETTINGS;
--- include/settings/parameters.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/settings/parameters.h	2024-06-13 19:50:07.000000000 -0600
@@ -27,10 +27,11 @@
 #include <math/util.h>
 
 #include <optional>
+#include <import_export.h>
 #include <settings/json_settings.h>
 
 
-class PARAM_BASE
+class MY_TYPE PARAM_BASE
 {
 public:
     PARAM_BASE( std::string aJsonPath, bool aReadOnly ) :
@@ -160,7 +161,7 @@
 /**
  * Stores a path as a string with directory separators normalized to unix-style
  */
-class PARAM_PATH : public PARAM<wxString>
+class MY_TYPE PARAM_PATH : public PARAM<wxString>
 {
 public:
     PARAM_PATH( const std::string& aJsonPath, wxString* aPtr, const wxString& aDefault,
@@ -485,7 +486,7 @@
  * Represents a list of strings holding directory paths.
  * Normalizes paths to unix directory separator style in the file.
  */
-class PARAM_PATH_LIST : public PARAM_LIST<wxString>
+class MY_TYPE PARAM_PATH_LIST : public PARAM_LIST<wxString>
 {
 public:
     PARAM_PATH_LIST( const std::string& aJsonPath, std::vector<wxString>* aPtr,
@@ -576,7 +577,7 @@
 /**
  * A helper for <wxString, wxString> maps
  */
-class PARAM_WXSTRING_MAP : public PARAM_BASE
+class MY_TYPE PARAM_WXSTRING_MAP : public PARAM_BASE
 {
 public:
     PARAM_WXSTRING_MAP( const std::string& aJsonPath, std::map<wxString, wxString>* aPtr,
--- pcbnew/pcbnew_settings.h~	2024-02-21 05:39:11.000000000 -0700
+++ pcbnew/pcbnew_settings.h	2024-06-13 19:52:04.000000000 -0600
@@ -101,7 +101,7 @@
 
 
 // base class to handle Pcbnew SETTINGS also used in Cvpcb
-class PCB_VIEWERS_SETTINGS_BASE : public APP_SETTINGS_BASE
+class MY_TYPE PCB_VIEWERS_SETTINGS_BASE : public APP_SETTINGS_BASE
 {
 public:
     struct VIEWERS_DISPLAY_OPTIONS
--- include/printout.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/printout.h	2024-06-13 19:54:57.000000000 -0600
@@ -28,7 +28,7 @@
 /**
  * Handle the parameters used to print a board drawing.
  */
-struct PRINTOUT_SETTINGS
+struct MY_TYPE PRINTOUT_SETTINGS
 {
     PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo )
         : m_pageInfo( aPageInfo )
--- include/project.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/project.h	2024-06-13 19:59:21.000000000 -0600
@@ -29,6 +29,7 @@
  */
 #include <map>
 #include <vector>
+#include <import_export.h>
 #include <kiid.h>
 #include <wx_filename.h>
 #include <wx/string.h>
@@ -71,7 +72,7 @@
      * include derived class headers in this file, you are doing incompatible with the goal
      * of this class.  Keep knowledge of derived classes opaque to class PROJECT please.
     */
-    class _ELEM
+    class MY_TYPE _ELEM
     {
     public:
         virtual ~_ELEM() {}
--- include/view/view_item.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/view/view_item.h	2024-06-13 20:04:17.000000000 -0600
@@ -29,6 +29,7 @@
 
 #include <vector>
 #include <bitset>
+#include <import_export.h>
 #include <math/box2.h>
 #include <inspectable.h>
 
@@ -73,7 +74,7 @@
  * VIEW_ITEM objects are never owned by a #VIEW. A single VIEW_ITEM can belong to any number of
  * static VIEWs, but only one dynamic VIEW due to storage of only one VIEW reference.
  */
-class VIEW_ITEM : public INSPECTABLE
+class MY_TYPE VIEW_ITEM : public INSPECTABLE
 {
 public:
     VIEW_ITEM() :
--- include/tool/tools_holder.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/tool/tools_holder.h	2024-06-13 20:06:12.000000000 -0600
@@ -25,6 +25,7 @@
 #define  TOOL_HOLDER_H
 
 #include <vector>
+#include <import_export.h>
 #include <view/view_controls.h>
 #include <tool/selection.h>
 #include <tool/tool_action.h>
@@ -41,7 +42,7 @@
  * This is just the framework; the owner is responsible for registering individual tools,
  * creating the dispatcher, etc.
  */
-class TOOLS_HOLDER
+class MY_TYPE TOOLS_HOLDER
 {
 public:
     TOOLS_HOLDER();
--- include/inspectable.h~	2024-02-21 05:39:11.000000000 -0700
+++ include/inspectable.h	2024-06-13 20:09:59.000000000 -0600
@@ -22,6 +22,8 @@
 #ifndef INSPECTABLE_H
 #define INSPECTABLE_H
 
+#include <import_export.h>
+
 #include <core/wx_stl_compat.h>
 
 #include <properties/property_mgr.h>
@@ -32,7 +34,7 @@
 /**
  * Class that other classes need to inherit from, in order to be inspectable.
  */
-class INSPECTABLE
+class MY_TYPE INSPECTABLE
 {
 public:
     virtual ~INSPECTABLE()
