tclpkg tclGdCreateCmd: disable use of 'Tcl_GetOpenFile' on MinGW, Windows
TCL documents Tcl_GetOpenFile
as “Unix only”.¹ And indeed, attempting to build
this code on MinGW does not see the prototype of this function:
C:/GitLab-Runner/builds/smattr/graphviz/tclpkg/gdtclft/gdtclft.c: In function 'tclGdCreateCmd':
C:/GitLab-Runner/builds/smattr/graphviz/tclpkg/gdtclft/gdtclft.c:443:13: error: implicit declaration of function 'Tcl_GetOpenFile' [-Werror=implicit-function-declaration]
443 | if (Tcl_GetOpenFile(interp, arg2, 0, 1, &clientdata) == TCL_OK) {
| ^~~~~~~~~~~~~~~
The relevant section in tcl.h reads:²
#if !defined(_WIN32) && !defined(MAC_OSX_TCL) /* UNIX */
/* 167 */
EXTERN int Tcl_GetOpenFile(Tcl_Interp *interp,
const char *chanID, int forWriting,
int checkUsage, void **filePtr);
#endif /* UNIX */
#ifdef MAC_OSX_TCL /* MACOSX */
/* 167 */
EXTERN int Tcl_GetOpenFile(Tcl_Interp *interp,
const char *chanID, int forWriting,
int checkUsage, void **filePtr);
#endif /* MACOSX */
…
#if !defined(_WIN32) && !defined(MAC_OSX_TCL) /* UNIX */
int (*tcl_GetOpenFile) (Tcl_Interp *interp, const char *chanID, int forWriting, int checkUsage, void **filePtr); /* 167 */
#endif /* UNIX */
…
#if !defined(_WIN32) && !defined(MAC_OSX_TCL) /* UNIX */
#define Tcl_GetOpenFile \
(tclStubsPtr->tcl_GetOpenFile) /* 167 */
#endif /* UNIX */
#ifdef MAC_OSX_TCL /* MACOSX */
#define Tcl_GetOpenFile \
(tclStubsPtr->tcl_GetOpenFile) /* 167 */
#endif /* MACOSX */
¹ https://core.tcl-lang.org/tcl/file?name=doc/GetOpnFl.3
² https://core.tcl-lang.org/tcl/file?name=generic/tclDecls.h