diff options
author | Adrián Medraño Calvo <adrian@medranocalvo.com> | 2017-07-21 09:41:59 (GMT) |
---|---|---|
committer | Adrián Medraño Calvo <adrian@medranocalvo.com> | 2017-07-21 11:41:04 (GMT) |
commit | fbf29e98b04d712bc3e0c9709653d275fc3e7927 (patch) | |
tree | be7416cfffe694b60d974a4d58e7abca0bdd8014 | |
parent | f10a85adccccb3efccfc84a7d4ca12cc66c7fb1c (diff) | |
download | blt-fbf29e98b04d712bc3e0c9709653d275fc3e7927.zip blt-fbf29e98b04d712bc3e0c9709653d275fc3e7927.tar.gz blt-fbf29e98b04d712bc3e0c9709653d275fc3e7927.tar.bz2 |
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".
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | generic/tkbltDecls.h | 40 | ||||
-rw-r--r-- | generic/tkbltInt.h | 14 | ||||
-rw-r--r-- | generic/tkbltVector.h | 69 |
4 files changed, 60 insertions, 65 deletions
@@ -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 <tcl.h> +#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 |