package require Tcl 8.5
package require trofs 0.4
eval [package unknown] Tcl [package provide Tcl]
foreach p [package names] {
if {[string match *::* $p]} {
# Don't handle this case yet; TM file names can't contain ::
continue
}
foreach v [package versions $p] {
set loadScript [package ifneeded $p $v]
if {[catch {llength $loadScript} l]} {continue}
if {[lindex $loadScript 0] ne "source"} {continue}
set file [lindex $loadScript 1]
if {![file readable $file]} {continue}
set dir [file dirname $file]
set tail [file tail $file]
if {[string match *.tm $tail]} {continue}
set numFiles [llength [glob -directory $dir *]]
if {($numFiles == 2)
&& ([catch {glob -directory $dir pkgIndex.tcl}] == 0)} {
# Installed package is just script + pkgIndex.
# It's very likely already in suitable TM format
file copy -force $file $p-$v.tm
continue
}
set f [open $p-$v.tm w]
puts $f {package require Tcl 8.5}
puts $f {package require trofs 0.4}
puts $f [subst -nocommands {
source [file join [trofs::mount [info script]] $tail]
}]
close $f
trofs::archive $dir $p-$v.tm
}
}See also:
- Tcl Modules
- Another Tcl module maker which can also wrap a DLL

