diff --git a/cl_dll/GameStudioModelRenderer.cpp b/cl_dll/GameStudioModelRenderer.cpp index 7d60d6ea..9cfca965 100644 --- a/cl_dll/GameStudioModelRenderer.cpp +++ b/cl_dll/GameStudioModelRenderer.cpp @@ -99,11 +99,6 @@ HUD_GetStudioModelInterface Export this function for the engine to use the studio renderer class to render objects. ==================== */ -#ifdef _WIN32 -#define DLLEXPORT __declspec( dllexport ) -#else -#define DLLEXPORT -#endif extern "C" int DLLEXPORT HUD_GetStudioModelInterface( int version, struct r_studio_interface_s **ppinterface, struct engine_studio_api_s *pstudio ) { if ( version != STUDIO_INTERFACE_VERSION ) diff --git a/cl_dll/GameStudioModelRenderer_Sample.cpp b/cl_dll/GameStudioModelRenderer_Sample.cpp index 5ea50b51..ec31e479 100644 --- a/cl_dll/GameStudioModelRenderer_Sample.cpp +++ b/cl_dll/GameStudioModelRenderer_Sample.cpp @@ -972,7 +972,7 @@ HUD_GetStudioModelInterface Export this function for the engine to use the studio renderer class to render objects. ==================== */ -#define DLLEXPORT __declspec( dllexport ) + extern "C" int DLLEXPORT HUD_GetStudioModelInterface( int version, struct r_studio_interface_s **ppinterface, struct engine_studio_api_s *pstudio ) { if ( version != STUDIO_INTERFACE_VERSION ) diff --git a/cl_dll/cdll_int.cpp b/cl_dll/cdll_int.cpp index 1ad81773..ea512306 100644 --- a/cl_dll/cdll_int.cpp +++ b/cl_dll/cdll_int.cpp @@ -29,13 +29,6 @@ extern "C" #include -#ifdef _WIN32 -#define DLLEXPORT __declspec( dllexport ) -#else -#define DLLEXPORT -#endif - - cl_enginefunc_t gEngfuncs; CHud gHUD; mobile_engfuncs_t *gMobileEngfuncs = NULL; diff --git a/cl_dll/cl_dll.h b/cl_dll/cl_dll.h index aeacb8be..4b28b3a6 100644 --- a/cl_dll/cl_dll.h +++ b/cl_dll/cl_dll.h @@ -31,13 +31,14 @@ typedef float vec_t; typedef int (*pfnUserMsgHook)(const char *pszName, int iSize, void *pbuf); #include "util_vector.h" -#define EXPORT _declspec( dllexport ) #include "../engine/cdll_int.h" #include "../dlls/cdll_dll.h" - +#ifndef __MSC_VER #define _cdecl +#endif +#include "exportdef.h" #include extern cl_enginefunc_t gEngfuncs; diff --git a/cl_dll/cl_util.h b/cl_dll/cl_util.h index 17e22ee6..4876ca27 100644 --- a/cl_dll/cl_util.h +++ b/cl_dll/cl_util.h @@ -15,7 +15,7 @@ // // cl_util.h // - +#include "exportdef.h" #include "cvardef.h" #ifndef TRUE diff --git a/cl_dll/demo.cpp b/cl_dll/demo.cpp index 88e7f66f..a62b239f 100644 --- a/cl_dll/demo.cpp +++ b/cl_dll/demo.cpp @@ -18,12 +18,6 @@ #include "demo_api.h" #include -#ifdef _WIN32 -#define DLLEXPORT __declspec( dllexport ) -#else -#define DLLEXPORT -#endif - int g_demosniper = 0; int g_demosniperdamage = 0; float g_demosniperorg[3]; @@ -104,4 +98,4 @@ void DLLEXPORT Demo_ReadBuffer( int size, unsigned char *buffer ) gEngfuncs.Con_DPrintf( "Unknown demo buffer type, skipping.\n" ); break; } -} \ No newline at end of file +} diff --git a/cl_dll/entity.cpp b/cl_dll/entity.cpp index ad4a8411..d8d8f015 100644 --- a/cl_dll/entity.cpp +++ b/cl_dll/entity.cpp @@ -20,12 +20,6 @@ #include "pmtrace.h" #include "pm_shared.h" -#ifdef _WIN32 -#define DLLEXPORT __declspec( dllexport ) -#else -#define DLLEXPORT -#endif - void Game_AddObjects( void ); diff --git a/cl_dll/hud_iface.h b/cl_dll/hud_iface.h index 8427d77f..3f6dd599 100644 --- a/cl_dll/hud_iface.h +++ b/cl_dll/hud_iface.h @@ -9,17 +9,11 @@ #define HUD_IFACEH #pragma once -#ifdef _WIN32 -#define EXPORT _declspec( dllexport ) -#define _DLLEXPORT __declspec( dllexport ) -#else -#define EXPORT -#define _DLLEXPORT -#endif +#include "exportdef.h" typedef int (*pfnUserMsgHook)(const char *pszName, int iSize, void *pbuf); #include "wrect.h" #include "../engine/cdll_int.h" extern cl_enginefunc_t gEngfuncs; -#endif \ No newline at end of file +#endif diff --git a/cl_dll/in_defs.h b/cl_dll/in_defs.h index b78ffa9e..9ab880e9 100644 --- a/cl_dll/in_defs.h +++ b/cl_dll/in_defs.h @@ -17,9 +17,7 @@ #define ROLL 2 #ifdef _WIN32 -#define DLLEXPORT __declspec( dllexport ) #else -#define DLLEXPORT typedef struct point_s{ int x; int y; diff --git a/cl_dll/tri.cpp b/cl_dll/tri.cpp index 02be4ef4..ef37c7a4 100644 --- a/cl_dll/tri.cpp +++ b/cl_dll/tri.cpp @@ -17,12 +17,6 @@ #include "cl_entity.h" #include "triangleapi.h" -#ifdef _WIN32 -#define DLLEXPORT __declspec( dllexport ) -#else -#define DLLEXPORT -#endif - extern "C" { void DLLEXPORT HUD_DrawNormalTriangles( void ); @@ -125,4 +119,4 @@ void DLLEXPORT HUD_DrawTransparentTriangles( void ) #if defined( TEST_IT ) // Draw_Triangles(); #endif -} \ No newline at end of file +} diff --git a/dlls/cbase.h b/dlls/cbase.h index 1aa64bb3..1aefe687 100644 --- a/dlls/cbase.h +++ b/dlls/cbase.h @@ -51,11 +51,7 @@ CBaseEntity // C functions for external declarations that call the appropriate C++ methods -#ifdef _WIN32 -#define EXPORT _declspec( dllexport ) -#else -#define EXPORT /* */ -#endif +#include "exportdef.h" extern "C" EXPORT int GetEntityAPI( DLL_FUNCTIONS *pFunctionTable, int interfaceVersion ); extern "C" EXPORT int GetEntityAPI2( DLL_FUNCTIONS *pFunctionTable, int *interfaceVersion ); @@ -373,15 +369,15 @@ public: #else -#define SetThink( a ) m_pfnThink = static_cast (a) -#define SetTouch( a ) m_pfnTouch = static_cast (a) -#define SetUse( a ) m_pfnUse = static_cast (a) -#define SetBlocked( a ) m_pfnBlocked = static_cast (a) -#define ResetThink( ) m_pfnThink = static_cast (NULL) -#define ResetTouch( ) m_pfnTouch = static_cast (NULL) -#define ResetUse( ) m_pfnUse = static_cast (NULL) -#define ResetBlocked( ) m_pfnBlocked = static_cast (NULL) - +#define SetThink( a ) m_pfnThink = static_cast (a) +#define SetTouch( a ) m_pfnTouch = static_cast (a) +#define SetUse( a ) m_pfnUse = static_cast (a) +#define SetBlocked( a ) m_pfnBlocked = static_cast (a) +#define ResetThink( ) m_pfnThink = static_cast (NULL) +#define ResetTouch( ) m_pfnTouch = static_cast (NULL) +#define ResetUse( ) m_pfnUse = static_cast (NULL) +#define ResetBlocked( ) m_pfnBlocked = static_cast (NULL) + #endif @@ -557,8 +553,8 @@ public: // the button will be allowed to operate. Otherwise, it will be // deactivated. }; -#define SetMoveDone( a ) m_pfnCallWhenMoveDone = static_cast (a) - +#define SetMoveDone( a ) m_pfnCallWhenMoveDone = static_cast (a) + // people gib if their health is <= this at the time of death diff --git a/dlls/exportdef.h b/dlls/exportdef.h new file mode 100644 index 00000000..77a46734 --- /dev/null +++ b/dlls/exportdef.h @@ -0,0 +1,18 @@ +#ifndef EXPORTDEF_H +#define EXPORTDEF_H +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define EXPORT __attribute__ ((dllexport)) + #else + #define EXPORT __declspec(dllexport) // Note: actually gcc seems to also supports this syntax. + #endif +#else + #if __GNUC__ >= 4 + #define EXPORT __attribute__ ((visibility ("default"))) + #else + #define EXPORT + #endif +#endif +#define DLLEXPORT EXPORT +#define _DLLEXPORT EXPORT +#endif // EXPORTDEF_H diff --git a/dlls/h_export.cpp b/dlls/h_export.cpp index 0d56d045..bdbad2c6 100644 --- a/dlls/h_export.cpp +++ b/dlls/h_export.cpp @@ -47,7 +47,10 @@ BOOL WINAPI DllMain( return TRUE; } -void DLLEXPORT GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) +extern "C" void DLLEXPORT GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) __attribute__((__stdcall__)) ; + + +extern "C" void DLLEXPORT GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) { memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t)); gpGlobals = pGlobals; diff --git a/dlls/util.h b/dlls/util.h index ab3dfd5c..1edc0411 100644 --- a/dlls/util.h +++ b/dlls/util.h @@ -27,9 +27,9 @@ #include "physcallback.h" #endif - -#include -#include + +#include +#include inline void MESSAGE_BEGIN( int msg_dest, int msg_type, const float *pOrigin, entvars_t *ent ); // implementation later in this file extern globalvars_t *gpGlobals; @@ -92,13 +92,8 @@ typedef int BOOL; // This is the glue that hooks .MAP entity class names to our CPP classes // The _declspec forces them to be exported by name so we can do a lookup with GetProcAddress() // The function is used to intialize / allocate the object for the entity -#ifdef _WIN32 -#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \ - extern "C" _declspec( dllexport ) void mapClassName( entvars_t *pev ); \ - void mapClassName( entvars_t *pev ) { GetClassPtr( (DLLClassName *)pev ); } -#else -#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) extern "C" void mapClassName( entvars_t *pev ); void mapClassName( entvars_t *pev ) { GetClassPtr( (DLLClassName *)pev ); } -#endif + +#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) extern "C" EXPORT void mapClassName( entvars_t *pev ); void mapClassName( entvars_t *pev ) { GetClassPtr( (DLLClassName *)pev ); } //