Source Files
Public Interface
- Tcl_SetStartupScript
- Tcl_GetStartupScript
- Tcl_SourceRCFile
- Tcl_Main
- Tcl_MainEx
- Tcl_SetMainLoop
Private Interface
- TclFullFinalizationRequested
- TclGetMainLoop
Directly Depends On Public Interface
- Threads
- Object System and Fundamental Object Types
- Variable Commands and Interfaces
- Pathname Management
- Filesystem Access
- Channel System
- list Object Type
- Preservation
- Parsing and Evaluation
- interp
- (Initi/Fin)alize
- dict Object Type
- Linked C Variables
- history
- unistd.h
Directly Depends On Private Interface of
- Initialization, Library, Autoloader
- Pathname Management
- Object System and Fundamental Object Types
- Parsing and Evaluation
- Allocation
- Environment Variables
Discussion
The routine TclGetMainLoop appears in no header file. It gets declared with MODULE_SCOPE but there doesn't appear to be any reason it could not be a static function.
The routine TclFullFinalizationRequested probably should move into (Initi/Fin)alize.
The core_zip_vfs Patch
The core_zip_vfs branch adds the ability to mount a zip archive concatenated to the current executable as a virtual file system, capable of hosting both env(TCL_LIBRARY) and kick off a bootloader (if a file called main.tcl is present).This patch:
- Adds tclZipVfs.c
- Modifies tclAppInit.c
- Modifies tclAppInit.c
To build a self-contained executable:
cp tclsh mynewkit # Build an empty zipfile and concat it to the executable touch .empty zip null.zip .empty cat null.zip >> mynewkit # echo "puts {hello world}" > main.tcl # The -A argument tells zip to offset itself from the executable zip -A mynewkit main.tcl ./mynewkit hello world (Program exit)
For convenience the tcl Makefile has a "make tclkit", which make a tclkit with an embedded TCL_LIBRARY.
The tk Makefile has a "make tkkit" which provides a similar service for wish-based kits.
If the shells are compiled with --enable-shared=no, the Tcl/Tk libraries will be statically bound with the shells, and thus truly self-contained. Otherwise they will need access to the tcl/tk shared libraries. Either in the same directory as the executable, or tucked somewhere in your operating's systems library search path.