Version 3 of sdx extensions

Updated 2005-01-24 15:36:41 by lwv

Here are some additional sdx scripts - to automate some tasks I seem to be doing manually quite often

This will soon become part of the standard sdx distribution (stevel - Jan 24, 2005)

The first is "sdx create" - it creates the .vfs hierarchy if one doesn't exist (much like "sdx qwrap" then "sdx unwrap", except it doesn't create a .kit).

But on platforms that support symbolic linking, instead of copying the whatever.tcl script into whatever.vfs/lib/app-whatever/whatever.tcl, it creates a symbolic link. This matches the way I work on Linux - the real source file sitting next to whatever.vfs and a symbolic link to it from within the .vfs hierarchy.

This approach also means that a "package provide app-whatever" will be added to the whatever.tcl in the current directory - so "sdx create" first renames whatever.tcl to whatever.tcl.orig and then copies that back to whatever.tcl (whew!)

The second script is "sdx fill". This tries to add any dependent packages to the whatever.vfs/lib directory by looking for a corresponding starkit in the users PATH (using auto_execok).

On my system, I keep a copy of various library starkits in /usr/local/bin (e.g. oomk.kit, csv.kit, tktable.kit, etc.). If any of these are "package require"d in whatever.tcl, then "sdx fill" will find these using auto_execok and will copy the contents of their .vfs/lib directory into whatever.vfs/lib. When looking for the package name it tries lowercase and also [lindex [split $pkg :] 0] (e.g. style::as).

"sdx fill" isn't a replacement for a proper repository, but I find it a useful automation tool.

For example, ...

    $ cat blah.tcl
    package require oomk
    package require Tk
    package require Tktable
    package require busy
    package require csv
    package require style::as

    $ sdx create blah
    created blah.vfs
    renamed blah.tcl to blah.tcl.orig
    added "package provide" to blah.tcl
    blah.tcl linked to blah.vfs/lib/app-blah/blah.tcl

    $ sdx fill blah
    added oomk package
    added snit package
    added tktable package
    added busy package
    added csv package
    added style package

    $ tree blah.fs
    blah.vfs
    |-- lib
    |   |-- app-blah
    |   |   |-- blah.tcl -> /Users/steve/Work/sdx/blah.tcl
    |   |   `-- pkgIndex.tcl
    |   |-- busy
    |   |   |-- AIX-ppc
    |   |   |   |-- busy.so
    |   |   |   `-- critcl.tcl
    |   |   |-- Darwin-ppc
    |   |   |   |-- busy.dylib
    |   |   |   `-- critcl.tcl
    |   |   |-- Linux-x86
    |   |   |   |-- busy.so
    |   |   |   `-- critcl.tcl
    |   |   |-- SunOS-sparc
    |   |   |   |-- busy.so
    |   |   |   `-- critcl.tcl
    |   |   |-- Tcl
    |   |   |   `-- busy.tcl
    |   |   |-- Windows-x86
    |   |   |   |-- busy.dll
    |   |   |   `-- critcl.tcl
    |   |   |-- critcl.tcl
    |   |   `-- pkgIndex.tcl
    |   |-- csv
    |   |   |-- csv.tcl
    |   |   `-- pkgIndex.tcl
    |   |-- oomk
    |   |   |-- oomk.tcl
    |   |   `-- pkgIndex.tcl
    |   |-- snit
    |   |   |-- license.txt
    |   |   |-- pkgIndex.tcl
    |   |   `-- snit.tcl
    |   |-- style
    |   |   |-- as.tcl
    |   |   |-- lobster.tcl
    |   |   |-- pkgIndex.tcl
    |   |   `-- style.tcl
    |   `-- tktable
    |       |-- Darwin-ppc
    |       |   `-- tktable.dylib
    |       |-- Linux-x86
    |       |   `-- tktable.so
    |       |-- pkgIndex.tcl
    |       `-- tkTable.tcl
    `-- main.tcl

Category Tclkit