Hi,

I'm trying to build a SIP wrappers for a simple C++ subclass of QGLWidget.

I keep running into this error:
   sip: QFileIconProvider is undefined

I'm working from the examples in the SIP reference manual.
My build environment is atypical to the documentation examples in that
I use packages of Python, Qt, PyQt, SIP that are built on one machine and then used by developers on other machines. These are installed locally in different
directories than on the original build machine.

This leads to problems where pyqtconfig has paths that refer to the
original build system that are not valid on my development machines.

So far, I've been modifying items in pyqtconfig._pkg_config to match my
sandbox configuration, something like this:

   SANDBOX="~/qtsandbox"
   pyqtconfig._pkg_config['qt_data_dir']  = SANDBOX
   pyqtconfig._pkg_config['qt_dir']       = SANDBOX
   pyqtconfig._pkg_config['qt_inc_dir']   = SANDBOX + "/include/"
   pyqtconfig._pkg_config['qt_lib_dir']   = SANDBOX + "/lib/"
   pyqtconfig._pkg_config['pyqt_mod_dir'] = SANDBOX +
   "/lib/python/site-packages/PyQt4/"
   pyqtconfig._pkg_config['pyqt_bin_dir'] = SANDBOX+ "/bin/"


Then I find the pyqtconfig._pkg_config["pyqt_config_args"] has additional
paths from the build machine for things like qmake, share/sip, lib/python/site-packages, etc.

It becomes kinda cumbersome. Do I actually need to modify "pyqt_config_args"? Is there a better way to manage this stuff for my situation? I am new to SIP/PyQt so
I may just be flailing like a noob. ;)

Here's the output/info from my attempt to build my wrapper:

    > python configure.py
   Python 2.5.2 is being used.
   PyQt 4.7 is being used.
   Qt v4.6.1 free edition is being used.
   SIP 4.10 is being used.

   Configuration:
   pyqt_modules : QtCore QtGui QtHelp QtMultimedia QtNetwork QtOpenGL
   QtScript QtScriptTools QtSql QtSvg QtTest QtWebKit QtXml
   QtXmlPatterns QtAssistant QtDesigner
   qt_dir : ~/qtsandbox
   pyqt_version_str : 4.7
   pyqt_mod_dir : ~/qtsandbox/lib/python/site-packages/PyQt4/
   pyqt_bin_dir : ~/qtsandbox/bin/
   pyqt_config_args : --confirm-license -q
   /invalid/path/from/build/machine/bin/qmake -b
/invalid/path/from/build/machine/bin -p /invalid/path/from/build/machine/plugins -d
   /invalid/path/from/build/machine/lib/python/site-packages -v
   /invalid/path/from/build/machine/share/sip --verbose
   qt_version : 263681
   qt_data_dir : ~/qtsandbox
   qt_edition : free
   qt_threaded : 1
   qt_framework : 0
   pyqt_version : 263936
   qt_inc_dir : ~/qtsandbox/include/
   qt_lib_dir : ~/qtsandbox/lib/
   pyqt_sip_dir : ~/qtsandbox/share/sip/
   pyqt_sip_flags : -x VendorID -t WS_X11 -x PyQt_NoPrintRangeBug -t
   Qt_4_6_0 -x Py_v3 -g
   qt_winconfig : shared

   SIP Command Line: ~/qtsandbox/bin/sip -w -c . -I
   ~/qtsandbox/share/sip/ -t WS_X11 -t Qt_4_6_1 -b BasicGLWidget.sbf
   BasicGLWidget.sip

   sip: QFileIconProvider is undefined
   Error: Unable to open "./SimpleGLWidget.sbf"


Here's my .sip file:

   =============SimpleGLWidget.sip===============
   // Defines the SIP wrapper for a SimpleGLWidget

   %Import QtOpenGL/QtOpenGLmod.sip
   %Module SimpleGLWidget 0

   class SimpleGLWidget : QGLWidget
   {
   %TypeHeaderCode
   #include "SimpleGLWidget.hpp"
   #include <QGLWidget>
   %End

   public:
SimpleGLWidget(QWidget *parent = 0);

       QSize aFunction() const;
signals:
       void clicked(QPoint, QSize);

   public slots:
       void handleClick(QPoint, QSize);
};
   ================end=================


Here's the configure.py to generate the sip command & Makefile:

   =============configure.py===============
   import os
   import sipconfig
   import pyqtconfig

   moduleName = "SimpleGLWidget"

   sipFile = moduleName + ".sip"

   # The name of the SIP build file generated by SIP and used by the build
   # system.
   buildFile = moduleName + ".sbf"

   # Get the SIP configuration information.
   config = sipconfig.Configuration()

   config.sip_bin = "/sandbox/tools/bin/sip"

   sipShare = "/sandbox/tools/share/sip/"

   # Run SIP to generate the code.
   sipOptions = " ".join(["-w", "-c", ".", "-I", sipShare,
                          "-t WS_X11", -t Qt_4_6_0", -b",  buildFile,
   sipFile])

   sipCmdLine = " ".join([config.sip_bin, sipOptions])

   print "SIP Command Line:", sipCmdLine, "\r\n"

   os.system(sipCmdLine)

   # Create the Makefile.
   makefile = pyqtconfig.QtGLModuleMakefile(config, buildFile)

   print "Makefile:", makefile

   # Add the library we are wrapping.  The name doesn't include any
   platform
   # specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
   # ".dll" extension on Windows).
   makefile.extra_libs = [moduleName]

   # Generate the Makefile itself.
   makefile.generate()

   ================end================

Any pointers greatly appreciated.

Josh
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to