Open
Description
Since Tcl 8.0.5 (tcltk/tcl@17481a9), tcl.h has clarified that Tcl_AppInit()
is not an exported Tcl library function, and declares Tcl_AppInit()
for compatibility/convenience only:
/*
*----------------------------------------------------------------------------
* Convenience declaration of Tcl_AppInit for backwards compatibility. This
* function is not *implemented* by the tcl library, so the storage class is
* neither DLLEXPORT nor DLLIMPORT.
*/
extern Tcl_AppInitProc Tcl_AppInit;
This declaration is deprecated in Tcl 8.7 and removed in Tcl 9.0. Without it, _tkinter.c will fail to build if the compiler treats implicit function declarations as errors:
./Modules/_tkinter.c:713:9: error: call to undeclared function 'Tcl_AppInit'; ISO C99 and later do not support implicit function declarations [-Werror,-Wimplicit-function-declaration]
if (Tcl_AppInit(v->interp) != TCL_OK) {
^
./Modules/_tkinter.c:713:9: note: did you mean 'Tcl_Init'?
/Users/user/tcl90p/include/tclDecls.h:513:13: note: 'Tcl_Init' declared here
EXTERN int Tcl_Init(Tcl_Interp *interp);
^
Although it seems possible to have _tkinter.c declare Tcl_AppInit()
when tcl.h does not, I am not familiar enough with Tcl_AppInit()
usage to know whether that is a good solution. From reading the Tcl_AppInit()
documentation, it sounds like Tkinter could instead rename its Tcl_AppInit()
in tkappinit.c to something else, which it then always declares in _tkinter.c.