First, I should declare that I don't know much about the internal
workings of Python, Tcl, or BLT.

This bug has been stopping one of my programs from working.  Waiting for
a fix to appear demonstrably didn't work :-( hence I have tackled the
problem with a brute force approach and have found a solution which
works for me.  Others can judge whether it is the correct solution.

Starting from the top, I found that in my case the sequence was like this:
Python calls Pmw.ButtonBox
Pmw.ButtonBox calls Pwm._checkForBlt, which calls Tcl (via Tk) ('package', 
'require', 'BLT')
Tcl goes through its magic and calls Blt_Init in libBLT.2.4.so.8.4
Boom!

I noticed something suspicious when I got this far into the bowels: The
current Ubuntu version of BLT installs libBLT.2.4.so.8.4 and
libBLT.2.4.so.8.5, which are presumably meant to be used with tcl8.4 and
tcl8.5 respectively.  A bit of digging showed that Pmw was using tcl8.5.
The question then was why was Blt using the wrong version?  More brute-
forcing showed that libBLT.2.4.so.8.4 was being loaded because
/usr/lib/blt2.4/pkgIndex.tcl said to.

I haven't done any coding in Tcl for some time but it didn't take much
skill to see that /usr/lib/blt2.4/pkgIndex.tcl doesn't appear to know
about tcl8.5.  It appears that whoever maintains BLT has forgotten to
update library/pkgIndex.tcl.in in the sources.  By making the following
change (and installing the updated /usr/lib/blt2.4/pkgIndex.tcl which
results) I have managed to get my Python program work again ;-)

$ diff -u blt-2.4z/library/pkgIndex.tcl.in~  blt-2.4z/library/pkgIndex.tcl.in
--- blt-2.4z/library/pkgIndex.tcl.in~   2009-09-11 18:38:35.000000000 +1000
+++ blt-2.4z/library/pkgIndex.tcl.in    2009-09-11 18:33:37.000000000 +1000
@@ -15,8 +15,10 @@
         set taillib ${version}.so.8.2
     } elseif {[package vcompare [info tclversion] 8.4] < 0} {
         set taillib ${version}.so.8.3
-    } else {
+    } elseif {[package vcompare [info tclversion] 8.5] < 0} {
         set taillib ${version}.so.8.4
+    } else {
+        set taillib ${version}.so.8.5
     }

     if { [info commands tk] == "tk" } {

-- 
blt does not work as currently packaged
https://bugs.launchpad.net/bugs/359857
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to