The makefiles of the Tcl/Tk libraries are using MODULE_SCOPE=hidden as default. This is a very destructive idea, because it makes the integration of customized stuff like new widgets very difficult, and partly impossible. Originally Tcl/Tk was developed as an open libary, why is it now a closed libarary? Because all functions have a namespace (prefixed with Tcl, Tk) a public module scope cannot be a problem. Moreover it's the opposite of the intention of library development. A library will provide some functionality, but the hidden scope makes the use of this functionality impossible. Shortly: The hidden scope feels like a chicane.
One more problem is that some features of the GNU compiler cannot be used, for example the use of inline functions. The use of inline functions is important for speed, and the library size can be reduced, because a simple access to internal states (variables), or simply setting a state (variable) will be compiled more compact with inlined functions. The use of macros is obsolete nowadays (of course, some macros are unavoidable) - and a macro has no hidden scope. The implicit "extern" declaration of the module scope makes the use of inline functions impossible.
I strongly suggest either to use a public module scope as default, or even better to remove this completely superfluous and destructive MODULE_SCOPE, this is also in the sense of an open library concept.