To start, merging qttable into qt was fairly easy. I modified qtmod.sip, adding %Include qtable.sip. Then rebuilding PyQt resulted in the qtable code being included and accessable from python. Instead of:If everything works in the development environment, than Gordon McMillan's installer is the problem, not SIP/PyQt. I have tried your sample code on a Linux system. My SIP/PyQt installation in site-packages looks like this:
from qttable import QTable
the python code now reads:
from qt import QTable
As to why I want to do this, it has to do with deployment issues on Solaris. (See my posting from yesterday titled "qttable and installer confusion on windows and solaris" for details.) We're using Gordon McMillan's Installer (which is a great tool) to create executables for distribution. All is well when running in the development environment (Windows and Solaris) and in the Windows distribution. But on Solaris we have runtime issues. I've been able to trace the problem back to the fact that qt and qtable are two seperate shared libraries. Why that matters, I don't know yet and it's very frustrating. However by building qtable into the qt shared library, I'm able to create a distribution package on Solaris that works.
- Peter
libqtcanvascmodule.so -> libqtcanvascmodule.so.1.0.0 libqtcanvascmodule.so.1 -> libqtcanvascmodule.so.1.0.0 libqtcanvascmodule.so.1.0 -> libqtcanvascmodule.so.1.0.0 libqtcanvascmodule.so.1.0.0 libqtcmodule.so -> libqtcmodule.so.1.0.0 libqtcmodule.so.1 -> libqtcmodule.so.1.0.0 libqtcmodule.so.1.0 -> libqtcmodule.so.1.0.0 libqtcmodule.so.1.0.0 libqtextcmodule.so -> libqtextcmodule.so.1.0.0 libqtextcmodule.so.1 -> libqtextcmodule.so.1.0.0 libqtextcmodule.so.1.0 -> libqtextcmodule.so.1.0.0 libqtextcmodule.so.1.0.0 libqtglcmodule.so -> libqtglcmodule.so.1.0.0 libqtglcmodule.so.1 -> libqtglcmodule.so.1.0.0 libqtglcmodule.so.1.0 -> libqtglcmodule.so.1.0.0 libqtglcmodule.so.1.0.0 libqtnetworkcmodule.so -> libqtnetworkcmodule.so.1.0.0 libqtnetworkcmodule.so.1 -> libqtnetworkcmodule.so.1.0.0 libqtnetworkcmodule.so.1.0 -> libqtnetworkcmodule.so.1.0.0 libqtnetworkcmodule.so.1.0.0 libqtsqlcmodule.so -> libqtsqlcmodule.so.1.0.0 libqtsqlcmodule.so.1 -> libqtsqlcmodule.so.1.0.0 libqtsqlcmodule.so.1.0 -> libqtsqlcmodule.so.1.0.0 libqtsqlcmodule.so.1.0.0 libqttablecmodule.so -> libqttablecmodule.so.1.0.0 libqttablecmodule.so.1 -> libqttablecmodule.so.1.0.0 libqttablecmodule.so.1.0 -> libqttablecmodule.so.1.0.0 libqttablecmodule.so.1.0.0 libqtuicmodule.so -> libqtuicmodule.so.1.0.0 libqtuicmodule.so.1 -> libqtuicmodule.so.1.0.0 libqtuicmodule.so.1.0 -> libqtuicmodule.so.1.0.0 libqtuicmodule.so.1.0.0 libqtxmlcmodule.so -> libqtxmlcmodule.so.1.0.0 libqtxmlcmodule.so.1 -> libqtxmlcmodule.so.1.0.0 libqtxmlcmodule.so.1.0 -> libqtxmlcmodule.so.1.0.0 libqtxmlcmodule.so.1.0.0 libsip.so -> libsip.so.11.0.0 libsip.so.11 -> libsip.so.11.0.0 libsip.so.11.0 -> libsip.so.11.0.0 libsip.so.11.0.0 qt.py qt.pyc qtcanvas.py qtcanvas.pyc qtext.py qtext.pyc qtgl.py qtgl.pyc qtnetwork.py qtnetwork.pyc qtsql.py qtsql.pyc qttable.py qttable.pyc qtui.py qtui.pyc qtxml.py qtxml.pyc
As you can see, there are a lot of symbolic links. If I do a 'ldd libqttablecmodule.so' it shows me that it references libqtcmodule.so.1 and not libqtcmodule.so. But all this works because there are symbolic links.
After running the installer with your spec file, the distmytable directory looks like this:
array.so libICE.so.6 libSM.so.6 libX11.so.6 libXcursor.so.1 libXext.so.6 libXmu.so.6 libXrandr.so.2 libXrender.so.1 libXt.so.6 libqt-mt.so.3 libqtc.so libqtcmodule.so.1 libqttablec.so libsip.so libsip.so.11 mytable pwd.so strop.so struct.so zlib.so
As you can see, there are no symbolic links any longer. The installer has duplicated the code of libqtcmodule.so in libqtc.so and libqtcmodule.so.1, because the installer resolves the inter-module dependencies, but it does not recognize that there are symbolic links. This is the reason why you have problems, because the code of libqtcmodule.so is loaded twice.
To make it work, you have a number of options:
1.) Change Gordon McMillan's installer, so that it creates symbolic links instead of duplicating the code.
2.) Use SIP V4, because there are no longer inter-module dependencies.
3.) After creating a distribution, remove the duplicated code and create symbolic links instead.
If your distmytable directory looks like this, everything should work:
array.so libICE.so.6 libSM.so.6 libX11.so.6 libXcursor.so.1 libXext.so.6 libXmu.so.6 libXrandr.so.2 libXrender.so.1 libXt.so.6 libqt-mt.so.3 libqtc.so -> libqtcmodule.so.1 libqttablec.so libsip.so -> libsip.so.11 mytable pwd.so strop.so struct.so zlib.so
I hope, I could help you Ulli
_______________________________________________ PyKDE mailing list [EMAIL PROTECTED] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
