Problem: package ifneeded has
set semanticsOnly the last
package ifneeded $package $version $script is stored.
Thus, order of execution of index scripts matters. However, order of execution is not under package-author control, and it's not (***) under application-programmer control either.
Why multiple installs of same $version of $package? Variants.
Thread-enabled vs. not. Debug vs. not. etc.
Variants introduce nasty complexity -- avoid if possible.
New version number for every released change -- we are not running out of integers.
When not avoidable, use testing in index scripts to filter a single active
package ifneededFor example, for threaded variant, use this index script:
if {![info exists tcl_platform(threaded)]} return
if {!$tcl_platform(threaded)} {return}
package ifneeded foo 1.1 {load libfoo1.1t.so}
And, for non-threaded variant, use this index script
if {[info exists tcl_platform(threaded)] && $tcl_platform(threaded)} return
package ifneeded foo 1.1 {load libfoo1.1t.so}
How to identify the variantSee TIP 59
See
package BoF: PACKAGE ABOUT - metadata
*** Well, an app programmer can define a
package unknown hook to do exactly what they want, but that implies knowledge of installation environment. This is the wrapped application approach, where you're not
really using packages because you're not pulling them from the local environment.