Synchronize Tcl and binary package versions

John Peck
Published

Update on 2024-Apr-13 -- Removed Gitlab references

Github makes it easier for me to provide binary package releases along with my source code.

Update on 2024-Mar-23 -- Moving to Github

Development has moved to Github.

feather<em>over</em>box

The first thing I realized when I started to use tcladu was the need for convenience functions. For example, combinations of write_device and read_device should be combined into a query command for convenience. And it would be nice for those kind of commands to be in the same tcladu package. So I started to write some Tcl, and I realized I didn't really know how to manage the package version with this high-level addition.

The tcladu.so binary already provides the tcladu namespace and package version. I set this version in a makefile that also drives testing, so I'd really like the makefile/binary package version to be the source of truth. So I need to extract that package version in the convenience code. It turns out that there's a package command for this. These links are to Tcl 9.0 documentation, but my usage doesn't care.

Adding these lines

load ./tcladu.so
set version [package present tcladu]
package provide tcladu $version

...to the tcladu.tcl source file synchronizes the Tcl and binary source versions. I can then package this up with

pkg_mkIndex -verbose . tcladu.so tcladu.tcl

...using the pkg_mkIndex command. This produces the pkgIndex.tcl script distributed with the package source files:

package ifneeded tcladu 1.1.0 [list load [file join $dir tcladu.so]]\n[list source [file join $dir tcladu.tcl]]

...where you can see the combination of sourcing and loading done to make the package available. These convenience functions are coming in tcladu version 1.1.0.

Image by Freepik

Links