From fbf29e98b04d712bc3e0c9709653d275fc3e7927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Medra=C3=B1o=20Calvo?= Date: Fri, 21 Jul 2017 11:41:59 +0200 Subject: Fix MSVC's C2375 "redefinition with different linkage" Apply Tcl's mechanism for reusing headers as internal and public API: presence of a particular preprocessor definition (BUILD_tkblt) switches declarations from specifying symbols "to be imported" or, alternatively, "exporting". --- configure | 2 -- generic/tkbltDecls.h | 40 ++++++++++++++--------------- generic/tkbltInt.h | 14 ----------- generic/tkbltVector.h | 69 +++++++++++++++++++++++++++++---------------------- 4 files changed, 60 insertions(+), 65 deletions(-) diff --git a/configure b/configure index 8e9f06f..4dd6f32 100755 --- a/configure +++ b/configure @@ -5770,8 +5770,6 @@ if test "windows" = "${TEA_PLATFORM}"; then fi - - vars="tkbltStubLib.C" for i in $vars; do # check for existence - allows for generic/win/unix VPATH diff --git a/generic/tkbltDecls.h b/generic/tkbltDecls.h index d50e207..4d7c679 100644 --- a/generic/tkbltDecls.h +++ b/generic/tkbltDecls.h @@ -9,64 +9,64 @@ extern "C" { */ /* 0 */ -EXTERN int Blt_CreateVector(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS int Blt_CreateVector(Tcl_Interp*interp, const char *vecName, int size, Blt_Vector**vecPtrPtr); /* 1 */ -EXTERN int Blt_CreateVector2(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS int Blt_CreateVector2(Tcl_Interp*interp, const char *vecName, const char *cmdName, const char *varName, int initialSize, Blt_Vector **vecPtrPtr); /* 2 */ -EXTERN int Blt_DeleteVectorByName(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS int Blt_DeleteVectorByName(Tcl_Interp*interp, const char *vecName); /* 3 */ -EXTERN int Blt_DeleteVector(Blt_Vector *vecPtr); +TKBLT_STORAGE_CLASS int Blt_DeleteVector(Blt_Vector *vecPtr); /* 4 */ -EXTERN int Blt_GetVector(Tcl_Interp*interp, const char *vecName, +TKBLT_STORAGE_CLASS int Blt_GetVector(Tcl_Interp*interp, const char *vecName, Blt_Vector **vecPtrPtr); /* 5 */ -EXTERN int Blt_GetVectorFromObj(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS int Blt_GetVectorFromObj(Tcl_Interp*interp, Tcl_Obj *objPtr, Blt_Vector **vecPtrPtr); /* 6 */ -EXTERN int Blt_ResetVector(Blt_Vector *vecPtr, double *dataArr, +TKBLT_STORAGE_CLASS int Blt_ResetVector(Blt_Vector *vecPtr, double *dataArr, int n, int arraySize, Tcl_FreeProc *freeProc); /* 7 */ -EXTERN int Blt_ResizeVector(Blt_Vector *vecPtr, int n); +TKBLT_STORAGE_CLASS int Blt_ResizeVector(Blt_Vector *vecPtr, int n); /* 8 */ -EXTERN int Blt_VectorExists(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS int Blt_VectorExists(Tcl_Interp*interp, const char *vecName); /* 9 */ -EXTERN int Blt_VectorExists2(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS int Blt_VectorExists2(Tcl_Interp*interp, const char *vecName); /* 10 */ -EXTERN Blt_VectorId Blt_AllocVectorId(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS Blt_VectorId Blt_AllocVectorId(Tcl_Interp*interp, const char *vecName); /* 11 */ -EXTERN int Blt_GetVectorById(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS int Blt_GetVectorById(Tcl_Interp*interp, Blt_VectorId clientId, Blt_Vector **vecPtrPtr); /* 12 */ -EXTERN void Blt_SetVectorChangedProc(Blt_VectorId clientId, +TKBLT_STORAGE_CLASS void Blt_SetVectorChangedProc(Blt_VectorId clientId, Blt_VectorChangedProc *proc, ClientData clientData); /* 13 */ -EXTERN void Blt_FreeVectorId(Blt_VectorId clientId); +TKBLT_STORAGE_CLASS void Blt_FreeVectorId(Blt_VectorId clientId); /* 14 */ -EXTERN const char * Blt_NameOfVectorId(Blt_VectorId clientId); +TKBLT_STORAGE_CLASS const char * Blt_NameOfVectorId(Blt_VectorId clientId); /* 15 */ -EXTERN const char * Blt_NameOfVector(Blt_Vector *vecPtr); +TKBLT_STORAGE_CLASS const char * Blt_NameOfVector(Blt_Vector *vecPtr); /* 16 */ -EXTERN int Blt_ExprVector(Tcl_Interp*interp, char *expr, +TKBLT_STORAGE_CLASS int Blt_ExprVector(Tcl_Interp*interp, char *expr, Blt_Vector *vecPtr); /* 17 */ -EXTERN void Blt_InstallIndexProc(Tcl_Interp*interp, +TKBLT_STORAGE_CLASS void Blt_InstallIndexProc(Tcl_Interp*interp, const char *indexName, Blt_VectorIndexProc *procPtr); /* 18 */ -EXTERN double Blt_VecMin(Blt_Vector *vPtr); +TKBLT_STORAGE_CLASS double Blt_VecMin(Blt_Vector *vPtr); /* 19 */ -EXTERN double Blt_VecMax(Blt_Vector *vPtr); +TKBLT_STORAGE_CLASS double Blt_VecMax(Blt_Vector *vPtr); typedef struct TkbltStubs { int magic; diff --git a/generic/tkbltInt.h b/generic/tkbltInt.h index f13603a..2bf96ee 100644 --- a/generic/tkbltInt.h +++ b/generic/tkbltInt.h @@ -55,18 +55,4 @@ #endif /* _MSC_VER */ -/* - * Silence warnings about unused parameters while keeping the parameter name. - */ -#ifdef UNUSED -#elif defined(__GNUC__) -# define UNUSED(x) UNUSED_ ## x __attribute__((unused)) -#elif defined(__MSC_VER__) -# define UNUSED(x) __pragma(warning(suppress:4100)) x -#elif defined(__cplusplus) -# define UNUSED(x) -#else -# define UNUSED(x) x -#endif - #endif /* __TKBLT_INT_H__ */ diff --git a/generic/tkbltVector.h b/generic/tkbltVector.h index e6ee3b3..45ddf6e 100644 --- a/generic/tkbltVector.h +++ b/generic/tkbltVector.h @@ -35,6 +35,17 @@ #include +#ifdef BUILD_tkblt +# define TKBLT_STORAGE_CLASS DLLEXPORT +#else +# ifdef USE_TCL_STUBS +# define TKBLT_STORAGE_CLASS /* */ +# else +# define TKBLT_STORAGE_CLASS DLLIMPORT +# endif +#endif + + typedef enum { BLT_VECTOR_NOTIFY_UPDATE = 1, /* The vector's values has been updated */ BLT_VECTOR_NOTIFY_DESTROY /* The vector has been destroyed and the client @@ -90,36 +101,36 @@ typedef enum { #ifdef __cplusplus extern "C" { #endif - int Blt_CreateVector(Tcl_Interp* interp, const char *vecName, - int size, Blt_Vector** vecPtrPtr); - int Blt_CreateVector2(Tcl_Interp* interp, const char *vecName, - const char *cmdName, const char *varName, - int initialSize, Blt_Vector **vecPtrPtr); - int Blt_DeleteVectorByName(Tcl_Interp* interp, const char *vecName); - int Blt_DeleteVector(Blt_Vector *vecPtr); - int Blt_GetVector(Tcl_Interp* interp, const char *vecName, - Blt_Vector **vecPtrPtr); - int Blt_GetVectorFromObj(Tcl_Interp* interp, Tcl_Obj *objPtr, + TKBLT_STORAGE_CLASS int Blt_CreateVector(Tcl_Interp* interp, const char *vecName, + int size, Blt_Vector** vecPtrPtr); + TKBLT_STORAGE_CLASS int Blt_CreateVector2(Tcl_Interp* interp, const char *vecName, + const char *cmdName, const char *varName, + int initialSize, Blt_Vector **vecPtrPtr); + TKBLT_STORAGE_CLASS int Blt_DeleteVectorByName(Tcl_Interp* interp, const char *vecName); + TKBLT_STORAGE_CLASS int Blt_DeleteVector(Blt_Vector *vecPtr); + TKBLT_STORAGE_CLASS int Blt_GetVector(Tcl_Interp* interp, const char *vecName, Blt_Vector **vecPtrPtr); - int Blt_ResetVector(Blt_Vector *vecPtr, double *dataArr, int n, - int arraySize, Tcl_FreeProc *freeProc); - int Blt_ResizeVector(Blt_Vector *vecPtr, int n); - int Blt_VectorExists(Tcl_Interp* interp, const char *vecName); - int Blt_VectorExists2(Tcl_Interp* interp, const char *vecName); - Blt_VectorId Blt_AllocVectorId(Tcl_Interp* interp, const char *vecName); - int Blt_GetVectorById(Tcl_Interp* interp, Blt_VectorId clientId, - Blt_Vector **vecPtrPtr); - void Blt_SetVectorChangedProc(Blt_VectorId clientId, - Blt_VectorChangedProc *proc, - ClientData clientData); - void Blt_FreeVectorId(Blt_VectorId clientId); - const char *Blt_NameOfVectorId(Blt_VectorId clientId); - const char *Blt_NameOfVector(Blt_Vector *vecPtr); - int Blt_ExprVector(Tcl_Interp* interp, char *expr, Blt_Vector *vecPtr); - void Blt_InstallIndexProc(Tcl_Interp* interp, const char *indexName, - Blt_VectorIndexProc * procPtr); - double Blt_VecMin(Blt_Vector *vPtr); - double Blt_VecMax(Blt_Vector *vPtr); + TKBLT_STORAGE_CLASS int Blt_GetVectorFromObj(Tcl_Interp* interp, Tcl_Obj *objPtr, + Blt_Vector **vecPtrPtr); + TKBLT_STORAGE_CLASS int Blt_ResetVector(Blt_Vector *vecPtr, double *dataArr, int n, + int arraySize, Tcl_FreeProc *freeProc); + TKBLT_STORAGE_CLASS int Blt_ResizeVector(Blt_Vector *vecPtr, int n); + TKBLT_STORAGE_CLASS int Blt_VectorExists(Tcl_Interp* interp, const char *vecName); + TKBLT_STORAGE_CLASS int Blt_VectorExists2(Tcl_Interp* interp, const char *vecName); + TKBLT_STORAGE_CLASS Blt_VectorId Blt_AllocVectorId(Tcl_Interp* interp, const char *vecName); + TKBLT_STORAGE_CLASS int Blt_GetVectorById(Tcl_Interp* interp, Blt_VectorId clientId, + Blt_Vector **vecPtrPtr); + TKBLT_STORAGE_CLASS void Blt_SetVectorChangedProc(Blt_VectorId clientId, + Blt_VectorChangedProc *proc, + ClientData clientData); + TKBLT_STORAGE_CLASS void Blt_FreeVectorId(Blt_VectorId clientId); + TKBLT_STORAGE_CLASS const char *Blt_NameOfVectorId(Blt_VectorId clientId); + TKBLT_STORAGE_CLASS const char *Blt_NameOfVector(Blt_Vector *vecPtr); + TKBLT_STORAGE_CLASS int Blt_ExprVector(Tcl_Interp* interp, char *expr, Blt_Vector *vecPtr); + TKBLT_STORAGE_CLASS void Blt_InstallIndexProc(Tcl_Interp* interp, const char *indexName, + Blt_VectorIndexProc * procPtr); + TKBLT_STORAGE_CLASS double Blt_VecMin(Blt_Vector *vPtr); + TKBLT_STORAGE_CLASS double Blt_VecMax(Blt_Vector *vPtr); #ifdef __cplusplus } #endif -- cgit v0.12