Re: tcllib1.21 and tcl9.0b3

Liste des GroupesRevenir à cl tcl 
Sujet : Re: tcllib1.21 and tcl9.0b3
De : nospam.nurdglaw (at) *nospam* gmail.com (Alan Grunwald)
Groupes : comp.lang.tcl
Date : 14. Sep 2024, 16:37:34
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vc4alh$1hk3o$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 14/09/2024 00:13, Alan Grunwald wrote:
How compatible is tcllib 1.21 with tcl9.0b3?
 I've built tcl-9.0b3 and want to see how it plays with my scripts. (OK, more properly that should be "how my scripts play with tcl 9.0b3.)
 I'm testing with a script that includes [package require uri].
 This fails, saying it can't find the package.
 I've dug around a bit and I see that the pkgIndex.tcl in tcllib-1.21 starts with a fast return if
 [package vsatisfies [package provide Tcl] 8]
 returns 0.
 I've changed that to
 [package vsatisfies [package provide Tcl] 8 9]
 and it now gets a couple of lines further down the script where it encounters
 if {(0 == [catch {
     package vcompare [info patchlevel] [info patchlevel]
}]) && (
     [package vcompare [info patchlevel] 8.3.1] >= 0
)} {return}
 and returns.
 I don't understand this line well enough to change it. As far as I can make out,
      package vcompare [info patchlevel] [info patchlevel]
 will always return 0 and won't throw an exception, so this should always result in a premature return, before all the
 package ifneeded
 commands for the packages withing tcllib are executed.
 However, that argument applies equally to tcl8.6.14, but the same pkgIndex.tcl works just fine on my home-built copy of that.
 It's getting late and I'll have another look tomorrow and see if I can work out what's happening. In the mean time, I'd very much appreciate any help you can provide.
OK. I've had another look.
Between the line
     if {[package vsatisfies [package provide Tcl] 8]} {return}
which I have changed to ...vstaisfies... 8 9, and the multi-line command that I quoted above, are the lines
     # For Tcl 8.3.1 and later, that's all we need
     if {[package vsatisfies [package provide Tcl] 8.4]} {return}
I have confirmed that on Tcl 8.6.14, the return is executed, so I have changed the second line to
     if {[package vsatisfies [package provide Tcl] 8.4 9]} {return}
and the return is now executed on Tcl9.0b3. However,
     package require uri
still fails with "can't find package uri"
As far as I can make out, this means that the package should be fund using the [package unknown] mechanism.
In both version of Tcl, [package unknown] returns
     {::tcl::tm::UnknownHandler ::tclPkgUnknown}
I assume that since uri should be provided as a good old-fashioned package rather than a module, I can ignore ::tcl::tm::UnknownHandler.
::tclPkgUnknown appears to be unchanged between 8.6.14 and 9.0b3, apart from a change in 9.0b3 to use the (undocumented) flag -nopkg when executing [source] in a safe interpreter. Since my interpreter isn't safe, I think that's irrelevant.
I'm going to try to get my head around ::tclPkgUnknown to try to track down what has changed.
As before, any assistance would be very welcome.

Date Sujet#  Auteur
14 Sep 24 * tcllib1.21 and tcl9.0b36Alan Grunwald
14 Sep 24 +* Re: tcllib1.21 and tcl9.0b32Alan Grunwald
14 Sep 24 i`- Re: tcllib1.21 and tcl9.0b31Alan Grunwald
14 Sep 24 `* Re: tcllib1.21 and tcl9.0b33Paul Obermeier
14 Sep 24  `* Re: tcllib1.21 and tcl9.0b32Alan Grunwald
14 Sep 24   `- Re: tcllib1.21 and tcl9.0b31Paul Obermeier

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal