Problem: package ifneeded has set semantics
Only 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 ifneeded
For 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 variant
See 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.