diff options
Diffstat (limited to 'devel')
-rw-r--r-- | devel/py-qt4/DESCR | 13 | ||||
-rw-r--r-- | devel/py-qt4/Makefile | 67 | ||||
-rw-r--r-- | devel/py-qt4/PLIST.Darwin | 2 | ||||
-rw-r--r-- | devel/py-qt4/PLIST.X11 | 3 | ||||
-rw-r--r-- | devel/py-qt4/PLIST.common | 404 | ||||
-rw-r--r-- | devel/py-qt4/PLIST.common_end | 23 | ||||
-rw-r--r-- | devel/py-qt4/configure.py | 1840 | ||||
-rw-r--r-- | devel/py-qt4/distinfo | 6 | ||||
-rw-r--r-- | devel/py-qt4/patches/patch-aa | 19 |
9 files changed, 2377 insertions, 0 deletions
diff --git a/devel/py-qt4/DESCR b/devel/py-qt4/DESCR new file mode 100644 index 00000000000..cf42f05a36b --- /dev/null +++ b/devel/py-qt4/DESCR @@ -0,0 +1,13 @@ +PyQt is a set of Python bindings for the Qt toolkit. PyQt brings +together the Qt C++ cross-platform toolkit and the cross-platform +interpreted language Python. PyQt contains 300 classes and over +5,750 functions and methods. + +PyQt also includes the pyuic and pylupdate utilities which correspond +to the Qt uic and lupdate utilities. pyuic converts the GUI designs +created with Qt Designer to executable Python code. pylupdate +scans Python code, extracts all strings that are candidates for +internationalisation, and creates an XML file for use by Qt Linguist. + +The x11/py-qt3-modules and x11/py-qt3-qscintilla packages provide +more Python modules for Qt. diff --git a/devel/py-qt4/Makefile b/devel/py-qt4/Makefile new file mode 100644 index 00000000000..5c92ebe3b3f --- /dev/null +++ b/devel/py-qt4/Makefile @@ -0,0 +1,67 @@ +# $NetBSD: Makefile,v 1.1.1.1 2008/12/13 05:17:02 epg Exp $ +# + +PKGNAME= ${PYPKGPREFIX}-qt4-${PYQT_VERSION} +PYQT_VERSION= 4.4.4 +CATEGORIES= x11 python +MASTER_SITES= http://www.riverbankcomputing.com/static/Downloads/PyQt4/ + +MAINTAINER= pkgsrc-users@NetBSD.org +COMMENT= Python binding for Qt4 +HOMEPAGE= http://www.riverbankcomputing.com/software/pyqt/intro + +USE_LIBTOOL= yes +USE_TOOLS+= gmake pkg-config +USE_LANGUAGES= c c++ + +PKG_DESTDIR_SUPPORT= user-destdir + +CONFIGURE_ARGS+= -b ${PREFIX}/bin +CONFIGURE_ARGS+= -d ${PREFIX}/${PYSITELIB} +CONFIGURE_ARGS+= -v ${PREFIX}/share/sip${PYVERSSUFFIX} +CONFIGURE_ARGS+= -q ${QTDIR}/bin/qmake +# XXX: should not be necessary, but framework thinks pkgsrc only has static +# qt4 libraries +#epg fixed? with patch-aa +#CONFIGURE_ARGS+= -k +CONFIGURE_ARGS+= --confirm-license + +PYTHON_VERSIONS_ACCEPTED= 25 24 23 +PY_PATCHPLIST= yes +PLIST_SUBST+= PYVERSSUFFIX=${PYVERSSUFFIX:Q} + +#SUBST_CLASSES+= pyversfx +#SUBST_STAGE.pyversfx= pre-configure +#SUBST_FILES.pyversfx= pyuic4/pyuic.sbf pylupdate4/pylupdate.sbf +#SUBST_SED.pyversfx= -e "s|@PYVERSSUFFIX@|${PYVERSSUFFIX}|g" + +.include "../../mk/bsd.prefs.mk" + +PLIST_SRC= ${PKGDIR}/PLIST.common +.if ${OPSYS} == "Darwin" +DISTNAME= PyQt-mac-gpl-${PYQT_VERSION} +PLIST_SRC+= ${PKGDIR}/PLIST.Darwin +.else +DISTNAME= PyQt-x11-gpl-${PYQT_VERSION} +PLIST_SRC+= ${PKGDIR}/PLIST.X11 +.endif +PLIST_SRC+= ${PKGDIR}/PLIST.common_end + +CONFIGURE_ARGS+= --verbose +do-configure: + (cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \ + ${PYTHONBIN} configure.py ${CONFIGURE_ARGS}) + +.include "../../lang/python/extension.mk" +BUILDLINK_API_DEPENDS.py-sip+= ${PYPKGPREFIX}-sip>=4.7.9 +.include "../../x11/py-sip/buildlink3.mk" +.include "../../sysutils/dbus/buildlink3.mk" +.include "../../sysutils/py-dbus/buildlink3.mk" +.include "../../x11/qt4-libs/buildlink3.mk" +BUILDLINK_API_DEPENDS.qt4-tools+= qt4-tools>=4.4.0nb1 +.include "../../x11/qt4-tools/buildlink3.mk" +# ${PYSITELIB}/qt.so depends on libqassistantclient.so +# which is part of qt4-tools, so we need a runtime dependency +# XXX split this pkg? +BUILDLINK_DEPMETHOD.qt4-tools= full +.include "../../mk/bsd.pkg.mk" diff --git a/devel/py-qt4/PLIST.Darwin b/devel/py-qt4/PLIST.Darwin new file mode 100644 index 00000000000..98c58f3f3c1 --- /dev/null +++ b/devel/py-qt4/PLIST.Darwin @@ -0,0 +1,2 @@ +@comment $NetBSD: PLIST.Darwin,v 1.1.1.1 2008/12/13 05:17:02 epg Exp $ +share/sip${PYVERSSUFFIX}/qt/qwindowdefs_mac.sip diff --git a/devel/py-qt4/PLIST.X11 b/devel/py-qt4/PLIST.X11 new file mode 100644 index 00000000000..a2b1160250a --- /dev/null +++ b/devel/py-qt4/PLIST.X11 @@ -0,0 +1,3 @@ +@comment $NetBSD: PLIST.X11,v 1.1.1.1 2008/12/13 05:17:02 epg Exp $ +share/sip${PYVERSSUFFIX}/QtGui/qx11embed_x11.sip +share/sip${PYVERSSUFFIX}/QtGui/qx11info_x11.sip diff --git a/devel/py-qt4/PLIST.common b/devel/py-qt4/PLIST.common new file mode 100644 index 00000000000..31977b2bdce --- /dev/null +++ b/devel/py-qt4/PLIST.common @@ -0,0 +1,404 @@ +@comment $NetBSD: PLIST.common,v 1.1.1.1 2008/12/13 05:17:02 epg Exp $ +bin/pylupdate4 +bin/pyrcc4 +bin/pyuic4 +${PYSITELIB}/PyQt4/Qt.so +${PYSITELIB}/PyQt4/QtAssistant.so +${PYSITELIB}/PyQt4/QtCore.so +${PYSITELIB}/PyQt4/QtDesigner.so +${PYSITELIB}/PyQt4/QtGui.so +${PYSITELIB}/PyQt4/QtHelp.so +${PYSITELIB}/PyQt4/QtNetwork.so +${PYSITELIB}/PyQt4/QtOpenGL.so +${PYSITELIB}/PyQt4/QtScript.so +${PYSITELIB}/PyQt4/QtSql.so +${PYSITELIB}/PyQt4/QtSvg.so +${PYSITELIB}/PyQt4/QtTest.so +${PYSITELIB}/PyQt4/QtWebKit.so +${PYSITELIB}/PyQt4/QtXml.so +${PYSITELIB}/PyQt4/__init__.py +${PYSITELIB}/PyQt4/pyqtconfig.py +${PYSITELIB}/PyQt4/uic/Compiler/__init__.py +${PYSITELIB}/PyQt4/uic/Compiler/compiler.py +${PYSITELIB}/PyQt4/uic/Compiler/indenter.py +${PYSITELIB}/PyQt4/uic/Compiler/qobjectcreator.py +${PYSITELIB}/PyQt4/uic/Compiler/qtproxies.py +${PYSITELIB}/PyQt4/uic/Loader/__init__.py +${PYSITELIB}/PyQt4/uic/Loader/loader.py +${PYSITELIB}/PyQt4/uic/Loader/qobjectcreator.py +${PYSITELIB}/PyQt4/uic/__init__.py +${PYSITELIB}/PyQt4/uic/exceptions.py +${PYSITELIB}/PyQt4/uic/icon_cache.py +${PYSITELIB}/PyQt4/uic/objcreator.py +${PYSITELIB}/PyQt4/uic/properties.py +${PYSITELIB}/PyQt4/uic/pyuic.py +${PYSITELIB}/PyQt4/uic/uiparser.py +${PYSITELIB}/PyQt4/uic/widget-plugins/qaxcontainer.py +${PYSITELIB}/PyQt4/uic/widget-plugins/qscintilla.py +${PYSITELIB}/PyQt4/uic/widget-plugins/qtwebkit.py +${PYSITELIB}/PyQt4/uic/widget-plugins/qwt.py +${PYSITELIB}/dbus/mainloop/qt.so +share/sip${PYVERSSUFFIX}/Qt/Qtmod.sip +share/sip${PYVERSSUFFIX}/QtAssistant/QtAssistantmod.sip +share/sip${PYVERSSUFFIX}/QtAssistant/qassistantclient.sip +share/sip${PYVERSSUFFIX}/QtCore/QtCoremod.sip +share/sip${PYVERSSUFFIX}/QtCore/qabstracteventdispatcher.sip +share/sip${PYVERSSUFFIX}/QtCore/qabstractfileengine.sip +share/sip${PYVERSSUFFIX}/QtCore/qabstractitemmodel.sip +share/sip${PYVERSSUFFIX}/QtCore/qbasictimer.sip +share/sip${PYVERSSUFFIX}/QtCore/qbitarray.sip +share/sip${PYVERSSUFFIX}/QtCore/qbuffer.sip +share/sip${PYVERSSUFFIX}/QtCore/qbytearray.sip +share/sip${PYVERSSUFFIX}/QtCore/qbytearraymatcher.sip +share/sip${PYVERSSUFFIX}/QtCore/qchar.sip +share/sip${PYVERSSUFFIX}/QtCore/qcoreapplication.sip +share/sip${PYVERSSUFFIX}/QtCore/qcoreevent.sip +share/sip${PYVERSSUFFIX}/QtCore/qcryptographichash.sip +share/sip${PYVERSSUFFIX}/QtCore/qdatastream.sip +share/sip${PYVERSSUFFIX}/QtCore/qdatetime.sip +share/sip${PYVERSSUFFIX}/QtCore/qdir.sip +share/sip${PYVERSSUFFIX}/QtCore/qdiriterator.sip +share/sip${PYVERSSUFFIX}/QtCore/qeventloop.sip +share/sip${PYVERSSUFFIX}/QtCore/qfile.sip +share/sip${PYVERSSUFFIX}/QtCore/qfileinfo.sip +share/sip${PYVERSSUFFIX}/QtCore/qfilesystemwatcher.sip +share/sip${PYVERSSUFFIX}/QtCore/qfsfileengine.sip +share/sip${PYVERSSUFFIX}/QtCore/qglobal.sip +share/sip${PYVERSSUFFIX}/QtCore/qhash.sip +share/sip${PYVERSSUFFIX}/QtCore/qiodevice.sip +share/sip${PYVERSSUFFIX}/QtCore/qlibrary.sip +share/sip${PYVERSSUFFIX}/QtCore/qlibraryinfo.sip +share/sip${PYVERSSUFFIX}/QtCore/qline.sip +share/sip${PYVERSSUFFIX}/QtCore/qlist.sip +share/sip${PYVERSSUFFIX}/QtCore/qlocale.sip +share/sip${PYVERSSUFFIX}/QtCore/qmap.sip +share/sip${PYVERSSUFFIX}/QtCore/qmetaobject.sip +share/sip${PYVERSSUFFIX}/QtCore/qmetatype.sip +share/sip${PYVERSSUFFIX}/QtCore/qmimedata.sip +share/sip${PYVERSSUFFIX}/QtCore/qmutex.sip +share/sip${PYVERSSUFFIX}/QtCore/qnamespace.sip +share/sip${PYVERSSUFFIX}/QtCore/qnumeric.sip +share/sip${PYVERSSUFFIX}/QtCore/qobject.sip +share/sip${PYVERSSUFFIX}/QtCore/qobjectcleanuphandler.sip +share/sip${PYVERSSUFFIX}/QtCore/qobjectdefs.sip +share/sip${PYVERSSUFFIX}/QtCore/qpair.sip +share/sip${PYVERSSUFFIX}/QtCore/qpluginloader.sip +share/sip${PYVERSSUFFIX}/QtCore/qpoint.sip +share/sip${PYVERSSUFFIX}/QtCore/qprocess.sip +share/sip${PYVERSSUFFIX}/QtCore/qreadwritelock.sip +share/sip${PYVERSSUFFIX}/QtCore/qrect.sip +share/sip${PYVERSSUFFIX}/QtCore/qregexp.sip +share/sip${PYVERSSUFFIX}/QtCore/qresource.sip +share/sip${PYVERSSUFFIX}/QtCore/qrunnable.sip +share/sip${PYVERSSUFFIX}/QtCore/qsemaphore.sip +share/sip${PYVERSSUFFIX}/QtCore/qsettings.sip +share/sip${PYVERSSUFFIX}/QtCore/qsharedmemory.sip +share/sip${PYVERSSUFFIX}/QtCore/qsignalmapper.sip +share/sip${PYVERSSUFFIX}/QtCore/qsize.sip +share/sip${PYVERSSUFFIX}/QtCore/qsocketnotifier.sip +share/sip${PYVERSSUFFIX}/QtCore/qstring.sip +share/sip${PYVERSSUFFIX}/QtCore/qstringlist.sip +share/sip${PYVERSSUFFIX}/QtCore/qstringmatcher.sip +share/sip${PYVERSSUFFIX}/QtCore/qsystemsemaphore.sip +share/sip${PYVERSSUFFIX}/QtCore/qtemporaryfile.sip +share/sip${PYVERSSUFFIX}/QtCore/qtextboundaryfinder.sip +share/sip${PYVERSSUFFIX}/QtCore/qtextcodec.sip +share/sip${PYVERSSUFFIX}/QtCore/qtextstream.sip +share/sip${PYVERSSUFFIX}/QtCore/qthread.sip +share/sip${PYVERSSUFFIX}/QtCore/qthreadpool.sip +share/sip${PYVERSSUFFIX}/QtCore/qtimeline.sip +share/sip${PYVERSSUFFIX}/QtCore/qtimer.sip +share/sip${PYVERSSUFFIX}/QtCore/qtranslator.sip +share/sip${PYVERSSUFFIX}/QtCore/qurl.sip +share/sip${PYVERSSUFFIX}/QtCore/quuid.sip +share/sip${PYVERSSUFFIX}/QtCore/qvariant.sip +share/sip${PYVERSSUFFIX}/QtCore/qvector.sip +share/sip${PYVERSSUFFIX}/QtCore/qwaitcondition.sip +share/sip${PYVERSSUFFIX}/QtCore/qxmlstream.sip +share/sip${PYVERSSUFFIX}/QtDesigner/QtDesignermod.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractactioneditor.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractformbuilder.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractformeditor.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractformwindow.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractformwindowcursor.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractformwindowmanager.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractobjectinspector.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractpropertyeditor.sip +share/sip${PYVERSSUFFIX}/QtDesigner/abstractwidgetbox.sip +share/sip${PYVERSSUFFIX}/QtDesigner/container.sip +share/sip${PYVERSSUFFIX}/QtDesigner/customwidget.sip +share/sip${PYVERSSUFFIX}/QtDesigner/default_extensionfactory.sip +share/sip${PYVERSSUFFIX}/QtDesigner/extension.sip +share/sip${PYVERSSUFFIX}/QtDesigner/formbuilder.sip +share/sip${PYVERSSUFFIX}/QtDesigner/membersheet.sip +share/sip${PYVERSSUFFIX}/QtDesigner/propertysheet.sip +share/sip${PYVERSSUFFIX}/QtDesigner/qextensionmanager.sip +share/sip${PYVERSSUFFIX}/QtDesigner/qpydesignercontainerextension.sip +share/sip${PYVERSSUFFIX}/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip +share/sip${PYVERSSUFFIX}/QtDesigner/qpydesignercustomwidgetplugin.sip +share/sip${PYVERSSUFFIX}/QtDesigner/qpydesignermembersheetextension.sip +share/sip${PYVERSSUFFIX}/QtDesigner/qpydesignerpropertysheetextension.sip +share/sip${PYVERSSUFFIX}/QtDesigner/qpydesignertaskmenuextension.sip +share/sip${PYVERSSUFFIX}/QtDesigner/taskmenu.sip +share/sip${PYVERSSUFFIX}/QtGui/QtGuimod.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractbutton.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractitemdelegate.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractitemview.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractprintdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractproxymodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractscrollarea.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractslider.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstractspinbox.sip +share/sip${PYVERSSUFFIX}/QtGui/qabstracttextdocumentlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qaction.sip +share/sip${PYVERSSUFFIX}/QtGui/qactiongroup.sip +share/sip${PYVERSSUFFIX}/QtGui/qapplication.sip +share/sip${PYVERSSUFFIX}/QtGui/qbitmap.sip +share/sip${PYVERSSUFFIX}/QtGui/qboxlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qbrush.sip +share/sip${PYVERSSUFFIX}/QtGui/qbuttongroup.sip +share/sip${PYVERSSUFFIX}/QtGui/qcalendarwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qcheckbox.sip +share/sip${PYVERSSUFFIX}/QtGui/qclipboard.sip +share/sip${PYVERSSUFFIX}/QtGui/qcolor.sip +share/sip${PYVERSSUFFIX}/QtGui/qcolordialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qcolumnview.sip +share/sip${PYVERSSUFFIX}/QtGui/qcombobox.sip +share/sip${PYVERSSUFFIX}/QtGui/qcommandlinkbutton.sip +share/sip${PYVERSSUFFIX}/QtGui/qcompleter.sip +share/sip${PYVERSSUFFIX}/QtGui/qcursor.sip +share/sip${PYVERSSUFFIX}/QtGui/qdatawidgetmapper.sip +share/sip${PYVERSSUFFIX}/QtGui/qdatetimeedit.sip +share/sip${PYVERSSUFFIX}/QtGui/qdesktopservices.sip +share/sip${PYVERSSUFFIX}/QtGui/qdesktopwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qdial.sip +share/sip${PYVERSSUFFIX}/QtGui/qdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qdialogbuttonbox.sip +share/sip${PYVERSSUFFIX}/QtGui/qdirmodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qdockwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qdrag.sip +share/sip${PYVERSSUFFIX}/QtGui/qdrawutil.sip +share/sip${PYVERSSUFFIX}/QtGui/qerrormessage.sip +share/sip${PYVERSSUFFIX}/QtGui/qevent.sip +share/sip${PYVERSSUFFIX}/QtGui/qfiledialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qfileiconprovider.sip +share/sip${PYVERSSUFFIX}/QtGui/qfilesystemmodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qfocusframe.sip +share/sip${PYVERSSUFFIX}/QtGui/qfont.sip +share/sip${PYVERSSUFFIX}/QtGui/qfontcombobox.sip +share/sip${PYVERSSUFFIX}/QtGui/qfontdatabase.sip +share/sip${PYVERSSUFFIX}/QtGui/qfontdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qfontinfo.sip +share/sip${PYVERSSUFFIX}/QtGui/qfontmetrics.sip +share/sip${PYVERSSUFFIX}/QtGui/qformlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qframe.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicsgridlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicsitem.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicsitemanimation.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicslayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicslayoutitem.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicslinearlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicsproxywidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicsscene.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicssceneevent.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicsview.sip +share/sip${PYVERSSUFFIX}/QtGui/qgraphicswidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qgridlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qgroupbox.sip +share/sip${PYVERSSUFFIX}/QtGui/qheaderview.sip +share/sip${PYVERSSUFFIX}/QtGui/qicon.sip +share/sip${PYVERSSUFFIX}/QtGui/qiconengine.sip +share/sip${PYVERSSUFFIX}/QtGui/qimage.sip +share/sip${PYVERSSUFFIX}/QtGui/qimageiohandler.sip +share/sip${PYVERSSUFFIX}/QtGui/qimagereader.sip +share/sip${PYVERSSUFFIX}/QtGui/qimagewriter.sip +share/sip${PYVERSSUFFIX}/QtGui/qinputcontext.sip +share/sip${PYVERSSUFFIX}/QtGui/qinputdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qitemdelegate.sip +share/sip${PYVERSSUFFIX}/QtGui/qitemeditorfactory.sip +share/sip${PYVERSSUFFIX}/QtGui/qitemselectionmodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qkeysequence.sip +share/sip${PYVERSSUFFIX}/QtGui/qlabel.sip +share/sip${PYVERSSUFFIX}/QtGui/qlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qlayoutitem.sip +share/sip${PYVERSSUFFIX}/QtGui/qlcdnumber.sip +share/sip${PYVERSSUFFIX}/QtGui/qlineedit.sip +share/sip${PYVERSSUFFIX}/QtGui/qlistview.sip +share/sip${PYVERSSUFFIX}/QtGui/qlistwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qmainwindow.sip +share/sip${PYVERSSUFFIX}/QtGui/qmatrix.sip +share/sip${PYVERSSUFFIX}/QtGui/qmdiarea.sip +share/sip${PYVERSSUFFIX}/QtGui/qmdisubwindow.sip +share/sip${PYVERSSUFFIX}/QtGui/qmenu.sip +share/sip${PYVERSSUFFIX}/QtGui/qmenubar.sip +share/sip${PYVERSSUFFIX}/QtGui/qmessagebox.sip +share/sip${PYVERSSUFFIX}/QtGui/qmime.sip +share/sip${PYVERSSUFFIX}/QtGui/qmovie.sip +share/sip${PYVERSSUFFIX}/QtGui/qpagesetupdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qpaintdevice.sip +share/sip${PYVERSSUFFIX}/QtGui/qpaintengine.sip +share/sip${PYVERSSUFFIX}/QtGui/qpainter.sip +share/sip${PYVERSSUFFIX}/QtGui/qpainterpath.sip +share/sip${PYVERSSUFFIX}/QtGui/qpalette.sip +share/sip${PYVERSSUFFIX}/QtGui/qpen.sip +share/sip${PYVERSSUFFIX}/QtGui/qpicture.sip +share/sip${PYVERSSUFFIX}/QtGui/qpixmap.sip +share/sip${PYVERSSUFFIX}/QtGui/qpixmapcache.sip +share/sip${PYVERSSUFFIX}/QtGui/qplaintextedit.sip +share/sip${PYVERSSUFFIX}/QtGui/qpolygon.sip +share/sip${PYVERSSUFFIX}/QtGui/qprintdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qprintengine.sip +share/sip${PYVERSSUFFIX}/QtGui/qprinter.sip +share/sip${PYVERSSUFFIX}/QtGui/qprinterinfo.sip +share/sip${PYVERSSUFFIX}/QtGui/qprintpreviewdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qprintpreviewwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qprogressbar.sip +share/sip${PYVERSSUFFIX}/QtGui/qprogressdialog.sip +share/sip${PYVERSSUFFIX}/QtGui/qproxymodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qpushbutton.sip +share/sip${PYVERSSUFFIX}/QtGui/qradiobutton.sip +share/sip${PYVERSSUFFIX}/QtGui/qregion.sip +share/sip${PYVERSSUFFIX}/QtGui/qrgb.sip +share/sip${PYVERSSUFFIX}/QtGui/qrubberband.sip +share/sip${PYVERSSUFFIX}/QtGui/qscrollarea.sip +share/sip${PYVERSSUFFIX}/QtGui/qscrollbar.sip +share/sip${PYVERSSUFFIX}/QtGui/qsessionmanager.sip +share/sip${PYVERSSUFFIX}/QtGui/qshortcut.sip +share/sip${PYVERSSUFFIX}/QtGui/qsizegrip.sip +share/sip${PYVERSSUFFIX}/QtGui/qsizepolicy.sip +share/sip${PYVERSSUFFIX}/QtGui/qslider.sip +share/sip${PYVERSSUFFIX}/QtGui/qsortfilterproxymodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qsound.sip +share/sip${PYVERSSUFFIX}/QtGui/qspinbox.sip +share/sip${PYVERSSUFFIX}/QtGui/qsplashscreen.sip +share/sip${PYVERSSUFFIX}/QtGui/qsplitter.sip +share/sip${PYVERSSUFFIX}/QtGui/qstackedlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qstackedwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qstandarditemmodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qstatusbar.sip +share/sip${PYVERSSUFFIX}/QtGui/qstringlistmodel.sip +share/sip${PYVERSSUFFIX}/QtGui/qstyle.sip +share/sip${PYVERSSUFFIX}/QtGui/qstyleditemdelegate.sip +share/sip${PYVERSSUFFIX}/QtGui/qstylefactory.sip +share/sip${PYVERSSUFFIX}/QtGui/qstyleoption.sip +share/sip${PYVERSSUFFIX}/QtGui/qstylepainter.sip +share/sip${PYVERSSUFFIX}/QtGui/qsyntaxhighlighter.sip +share/sip${PYVERSSUFFIX}/QtGui/qsystemtrayicon.sip +share/sip${PYVERSSUFFIX}/QtGui/qtabbar.sip +share/sip${PYVERSSUFFIX}/QtGui/qtableview.sip +share/sip${PYVERSSUFFIX}/QtGui/qtablewidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qtabwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextbrowser.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextcursor.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextdocument.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextdocumentfragment.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextedit.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextformat.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextlayout.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextlist.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextobject.sip +share/sip${PYVERSSUFFIX}/QtGui/qtextoption.sip +share/sip${PYVERSSUFFIX}/QtGui/qtexttable.sip +share/sip${PYVERSSUFFIX}/QtGui/qtoolbar.sip +share/sip${PYVERSSUFFIX}/QtGui/qtoolbox.sip +share/sip${PYVERSSUFFIX}/QtGui/qtoolbutton.sip +share/sip${PYVERSSUFFIX}/QtGui/qtooltip.sip +share/sip${PYVERSSUFFIX}/QtGui/qtransform.sip +share/sip${PYVERSSUFFIX}/QtGui/qtreeview.sip +share/sip${PYVERSSUFFIX}/QtGui/qtreewidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qtreewidgetitemiterator.sip +share/sip${PYVERSSUFFIX}/QtGui/qundogroup.sip +share/sip${PYVERSSUFFIX}/QtGui/qundostack.sip +share/sip${PYVERSSUFFIX}/QtGui/qundoview.sip +share/sip${PYVERSSUFFIX}/QtGui/qvalidator.sip +share/sip${PYVERSSUFFIX}/QtGui/qwhatsthis.sip +share/sip${PYVERSSUFFIX}/QtGui/qwidget.sip +share/sip${PYVERSSUFFIX}/QtGui/qwidgetaction.sip +share/sip${PYVERSSUFFIX}/QtGui/qwindowdefs.sip +share/sip${PYVERSSUFFIX}/QtGui/qwizard.sip +share/sip${PYVERSSUFFIX}/QtGui/qworkspace.sip +share/sip${PYVERSSUFFIX}/QtHelp/QtHelpmod.sip +share/sip${PYVERSSUFFIX}/QtHelp/qhelpcontentwidget.sip +share/sip${PYVERSSUFFIX}/QtHelp/qhelpengine.sip +share/sip${PYVERSSUFFIX}/QtHelp/qhelpenginecore.sip +share/sip${PYVERSSUFFIX}/QtHelp/qhelpindexwidget.sip +share/sip${PYVERSSUFFIX}/QtHelp/qhelpsearchengine.sip +share/sip${PYVERSSUFFIX}/QtHelp/qhelpsearchquerywidget.sip +share/sip${PYVERSSUFFIX}/QtHelp/qhelpsearchresultwidget.sip +share/sip${PYVERSSUFFIX}/QtNetwork/QtNetworkmod.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qabstractsocket.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qauthenticator.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qftp.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qhostaddress.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qhostinfo.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qhttp.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qlocalserver.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qlocalsocket.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qnetworkaccessmanager.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qnetworkcookie.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qnetworkinterface.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qnetworkproxy.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qnetworkreply.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qnetworkrequest.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qssl.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qsslcertificate.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qsslcipher.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qsslconfiguration.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qsslerror.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qsslkey.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qsslsocket.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qtcpserver.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qtcpsocket.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qudpsocket.sip +share/sip${PYVERSSUFFIX}/QtNetwork/qurlinfo.sip +share/sip${PYVERSSUFFIX}/QtOpenGL/QtOpenGLmod.sip +share/sip${PYVERSSUFFIX}/QtOpenGL/qgl.sip +share/sip${PYVERSSUFFIX}/QtOpenGL/qglcolormap.sip +share/sip${PYVERSSUFFIX}/QtOpenGL/qglframebufferobject.sip +share/sip${PYVERSSUFFIX}/QtOpenGL/qglpixelbuffer.sip +share/sip${PYVERSSUFFIX}/QtScript/QtScriptmod.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptclass.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptclasspropertyiterator.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptcontext.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptcontextinfo.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptengine.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptengineagent.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptstring.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptvalue.sip +share/sip${PYVERSSUFFIX}/QtScript/qscriptvalueiterator.sip +share/sip${PYVERSSUFFIX}/QtSql/QtSqlmod.sip +share/sip${PYVERSSUFFIX}/QtSql/qsql.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqldatabase.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqldriver.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlerror.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlfield.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlindex.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlquery.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlquerymodel.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlrecord.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlrelationaldelegate.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlrelationaltablemodel.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqlresult.sip +share/sip${PYVERSSUFFIX}/QtSql/qsqltablemodel.sip +share/sip${PYVERSSUFFIX}/QtSvg/QtSvgmod.sip +share/sip${PYVERSSUFFIX}/QtSvg/qgraphicssvgitem.sip +share/sip${PYVERSSUFFIX}/QtSvg/qsvggenerator.sip +share/sip${PYVERSSUFFIX}/QtSvg/qsvgrenderer.sip +share/sip${PYVERSSUFFIX}/QtSvg/qsvgwidget.sip +share/sip${PYVERSSUFFIX}/QtTest/QtTestmod.sip +share/sip${PYVERSSUFFIX}/QtTest/qtestcase.sip +share/sip${PYVERSSUFFIX}/QtTest/qtestkeyboard.sip +share/sip${PYVERSSUFFIX}/QtTest/qtestmouse.sip +share/sip${PYVERSSUFFIX}/QtTest/qtestsystem.sip +share/sip${PYVERSSUFFIX}/QtWebKit/QtWebKitmod.sip +share/sip${PYVERSSUFFIX}/QtWebKit/qwebframe.sip +share/sip${PYVERSSUFFIX}/QtWebKit/qwebhistory.sip +share/sip${PYVERSSUFFIX}/QtWebKit/qwebhistoryinterface.sip +share/sip${PYVERSSUFFIX}/QtWebKit/qwebpage.sip +share/sip${PYVERSSUFFIX}/QtWebKit/qwebpluginfactory.sip +share/sip${PYVERSSUFFIX}/QtWebKit/qwebsettings.sip +share/sip${PYVERSSUFFIX}/QtWebKit/qwebview.sip +share/sip${PYVERSSUFFIX}/QtXml/QtXmlmod.sip +share/sip${PYVERSSUFFIX}/QtXml/qdom.sip +share/sip${PYVERSSUFFIX}/QtXml/qxml.sip +share/sip${PYVERSSUFFIX}/QtXml/qxmlstream.sip diff --git a/devel/py-qt4/PLIST.common_end b/devel/py-qt4/PLIST.common_end new file mode 100644 index 00000000000..ef5112854bf --- /dev/null +++ b/devel/py-qt4/PLIST.common_end @@ -0,0 +1,23 @@ +@comment $NetBSD: PLIST.common_end,v 1.1.1.1 2008/12/13 05:17:02 epg Exp $ +@dirrm share/sip${PYVERSSUFFIX}/QtXml +@dirrm share/sip${PYVERSSUFFIX}/QtWebKit +@dirrm share/sip${PYVERSSUFFIX}/QtTest +@dirrm share/sip${PYVERSSUFFIX}/QtSvg +@dirrm share/sip${PYVERSSUFFIX}/QtSql +@dirrm share/sip${PYVERSSUFFIX}/QtScript +@dirrm share/sip${PYVERSSUFFIX}/QtOpenGL +@dirrm share/sip${PYVERSSUFFIX}/QtNetwork +@dirrm share/sip${PYVERSSUFFIX}/QtHelp +@dirrm share/sip${PYVERSSUFFIX}/QtGui +@dirrm share/sip${PYVERSSUFFIX}/QtDesigner +@dirrm share/sip${PYVERSSUFFIX}/QtCore +@dirrm share/sip${PYVERSSUFFIX}/QtAssistant +@dirrm share/sip${PYVERSSUFFIX}/Qt +@dirrm share/sip${PYVERSSUFFIX} +@comment in py-dbus: @dirrm ${PYSITELIB}/dbus/mainloop +@comment in py-dbus: @dirrm ${PYSITELIB}/dbus +@dirrm ${PYSITELIB}/PyQt4/uic/widget-plugins +@dirrm ${PYSITELIB}/PyQt4/uic/Loader +@dirrm ${PYSITELIB}/PyQt4/uic/Compiler +@dirrm ${PYSITELIB}/PyQt4/uic +@dirrm ${PYSITELIB}/PyQt4 diff --git a/devel/py-qt4/configure.py b/devel/py-qt4/configure.py new file mode 100644 index 00000000000..fc6b7d898d2 --- /dev/null +++ b/devel/py-qt4/configure.py @@ -0,0 +1,1840 @@ +# This script generates the PyQt configuration and generates the Makefiles. +# +# Copyright (c) 2008 Riverbank Computing Limited <info@riverbankcomputing.com> +# +# This file is part of PyQt. +# +# This file may be used under the terms of the GNU General Public +# License versions 2.0 or 3.0 as published by the Free Software +# Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3 +# included in the packaging of this file. Alternatively you may (at +# your option) use any later version of the GNU General Public +# License if such license has been publicly approved by Riverbank +# Computing Limited (or its successors, if any) and the KDE Free Qt +# Foundation. In addition, as a special exception, Riverbank gives you +# certain additional rights. These rights are described in the Riverbank +# GPL Exception version 1.1, which can be found in the file +# GPL_EXCEPTION.txt in this package. +# +# Please review the following information to ensure GNU General +# Public Licensing requirements will be met: +# http://trolltech.com/products/qt/licenses/licensing/opensource/. If +# you are unsure which license is appropriate for your use, please +# review the following information: +# http://trolltech.com/products/qt/licenses/licensing/licensingoverview +# or contact the sales department at sales@riverbankcomputing.com. +# +# This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +# INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE. Trolltech reserves all rights not expressly +# granted herein. +# +# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +import sys +import os +import string +import glob +import optparse +import shutil + +import sipconfig + + +# Initialise the globals. +pyqt_version = 0x040404 +pyqt_version_str = "4.4.4" + +sip_min_version = 0x040708 + +qt_version = 0 +qt_edition = "" +qt_dir = None +qt_incdir = None +qt_libdir = None +qt_bindir = None +qt_datadir = None +qt_pluginsdir = None +qt_xfeatures = None +qt_shared = "" +qt_framework = 0 + +qt_sip_flags = [] + +pyqt_modules = [] +pyqt_modroot = None + +# Get the SIP configuration. +sipcfg = sipconfig.Configuration() + +pydbusmoddir = None +dbusincdirs = [] +dbuslibdirs = [] +dbuslibs = [] + + +# Under Windows qmake and the Qt DLLs must be into the system PATH otherwise +# the dynamic linker won't be able to resolve the symbols. On other systems we +# assume we can just run qmake by using its full pathname. +if sys.platform == "win32": + MSG_CHECK_QMAKE = "Make sure you have a working Qt v4 qmake on your PATH." +else: + MSG_CHECK_QMAKE = "Make sure you have a working Qt v4 qmake on your PATH or use the -q argument to explicitly specify a working Qt v4 qmake." + + +def find_default_qmake(): + """Find a default qmake, ie. the first on the path. + """ + try: + path = os.environ["PATH"] + except KeyError: + path = "" + + if sys.platform == "win32": + base_qmake = "qmake.exe" + else: + base_qmake = "qmake" + + for d in path.split(os.pathsep): + qmake = os.path.join(d, base_qmake) + + if os.access(qmake, os.X_OK): + return qmake + + return "" + + +def create_optparser(): + """Create the parser for the command line. + """ + qmake = find_default_qmake() + + def store_abspath(option, opt_str, value, parser): + setattr(parser.values, option.dest, os.path.abspath(value)) + + def store_abspath_dir(option, opt_str, value, parser): + if not os.path.isdir(value): + raise optparse.OptionValueError("'%s' is not a directory" % value) + setattr(parser.values, option.dest, os.path.abspath(value)) + + def store_abspath_file(option, opt_str, value, parser): + if not os.path.isfile(value): + raise optparse.OptionValueError("'%s' is not a file" % value) + setattr(parser.values, option.dest, os.path.abspath(value)) + + p = optparse.OptionParser(usage="python %prog [opts] [macro=value] " + "[macro+=value]", version=pyqt_version_str) + + # Note: we don't use %default to be compatible with Python 2.3. + p.add_option("-k", "--static", action="store_true", default=False, + dest="static", help="build modules as static libraries") + p.add_option("-r", "--trace", action="store_true", default=False, + dest="tracing", help="build modules with tracing enabled") + p.add_option("-u", "--debug", action="store_true", default=False, + help="build modules with debugging symbols") + p.add_option("-w", "--verbose", action="count", default=0, dest="verbose", + help="verbose output during configuration") + + p.add_option("-c", "--concatenate", action="store_true", default=False, + dest="concat", help="concatenate each module's C++ source files") + p.add_option("-j", "--concatenate-split", type="int", default=1, + metavar="N", dest="split", + help="split the concatenated C++ source files into N pieces " + "[default: 1]") + p.add_option("-g", "--consolidate", action="store_true", default=False, + dest="bigqt", help="create a single module which links against " + "all the Qt libraries") + + # These are internal options used to build the mega Windows GPL package. + p.add_option("--mwg-odbc", action="store_true", default=False, + dest="mwg_odbc", help=optparse.SUPPRESS_HELP) + p.add_option("--mwg-openssl", action="callback", default=None, + dest="mwg_ssl_dir", metavar="DIR", callback=store_abspath_dir, + type="string", help=optparse.SUPPRESS_HELP) + p.add_option("--mwg-qsci", action="callback", default=None, + dest="mwg_qsci_dir", metavar="DIR", callback=store_abspath_dir, + type="string", help=optparse.SUPPRESS_HELP) + p.add_option("--mwg-qwt", action="callback", default=None, + dest="mwg_qwt_dir", metavar="DIR", callback=store_abspath_dir, + type="string", help=optparse.SUPPRESS_HELP) + + # Configuration. + g = optparse.OptionGroup(p, title="Configuration") + g.add_option("--confirm-license", action="store_true", default=False, + dest="license_confirmed", help="confirm acceptance of the license") + g.add_option("-e", "--enable", action="append", default=[], + metavar="MODULE", dest="enabled", help="enable checks for the " + "specified MODULE [default: checks for all modules will be " + "enabled]") + g.add_option("--no-designer-plugin", action="store_false", default=True, + dest="designer_plugin", help="disable the building of the " + "Python plugin for Qt Designer [default: enabled]") + g.add_option("-t", "--plugin", action="append", default=[], + metavar="PLUGIN", dest="staticplugins", help="add PLUGIN to the " + "list be linked (if Qt is built as static libraries)") + + if sys.platform != "win32": + g.add_option("-q", "--qmake", action="callback", metavar="FILE", + default=qmake, dest="qmake", callback=store_abspath_file, + type="string", + help="the pathname of qmake [default: %s]" % (qmake or "none")) + + g.add_option("-s", "--dbus", action="callback", metavar="DIR", + dest="pydbusincdir", callback=store_abspath_dir, type="string", + help="the directory containing the dbus/dbus-python.h header file " + "[default: supplied by pkg-config]") + p.add_option_group(g) + + # Installation. + g = optparse.OptionGroup(p, title="Installation") + g.add_option("-b", "--bindir", action="callback", + default=sipcfg.default_bin_dir, type="string", metavar="DIR", + dest="pyqtbindir", callback=store_abspath, help="where pyuic4, " + "pyrcc4 and pylupdate4 will be installed [default: %s]" % + sipcfg.default_bin_dir) + g.add_option("-d", "--destdir", action="callback", + default=sipcfg.default_mod_dir, type="string", metavar="DIR", + dest="pyqtmoddir", callback=store_abspath, help="where the PyQt4 " + "Python package will be installed [default: %s]" % + sipcfg.default_mod_dir) + g.add_option("-p", "--plugin-destdir", action="callback", type="string", + metavar="DIR", dest="plugindir", callback=store_abspath, + help="where any plugins will be installed [default: " + "QTDIR/plugins]") + g.add_option("--no-sip-files", action="store_false", default=True, + dest="install_sipfiles", help="disable the installation of the " + ".sip files [default: enabled]") + g.add_option("-v", "--sipdir", action="callback", + default=os.path.join(sipcfg.default_sip_dir, "PyQt4"), + metavar="DIR", dest="pyqtsipdir", callback=store_abspath, + type="string", help="where the PyQt4 .sip files will be installed " + "[default: %s]" % sipcfg.default_sip_dir) + p.add_option_group(g) + + # Vendor ID. + g = optparse.OptionGroup(p, title="VendorID support") + g.add_option("-i", "--vendorid", action="store_true", default=False, + dest="vendorcheck", help="enable checking of signed interpreters " + "using the VendorID package [default: disabled]") + g.add_option("-l", "--vendorid-incdir", action="callback", + default=sipcfg.py_inc_dir, type="string", metavar="DIR", + dest="vendincdir", callback=store_abspath_dir, help="the " + "directory containing the VendorID header file [default: %s]" % + sipcfg.py_inc_dir) + g.add_option("-m", "--vendorid-libdir", action="callback", + default=sipcfg.py_lib_dir, type="string", metavar="DIR", + dest="vendlibdir", callback=store_abspath_dir, help="the " + "directory containing the VendorID library [default: %s]" % + sipcfg.py_lib_dir) + p.add_option_group(g) + + # QScintilla. + g = optparse.OptionGroup(p, title="QScintilla support") + g.add_option("-a", "--qsci-api", action="store_true", default=None, + dest="api", help="always install the PyQt API file for QScintilla " + "[default: install only if QScintilla installed]") + g.add_option("--no-qsci-api", action="store_false", default=None, + dest="api", help="do not install the PyQt API file for QScintilla " + "[default: install only if QScintilla installed]") + g.add_option("-n", "--qsci-api-destdir", action="callback", dest="qscidir", + metavar="DIR", callback=store_abspath, type="string", help="where " + "the PyQt API file for QScintilla will be installed [default: " + "QTDIR/qsci]") + p.add_option_group(g) + + return p + + +class ConfigurePyQt4: + """This class defines the methods to configure PyQt4. + """ + def __init__(self, generator): + self.generator = generator + + def qt_version_tags(self): + """Get the versions tags for the configuration. + + Returns a dictionary of versions and corresponding tags. + """ + return { + 0x040101: None, + 0x040102: "Qt_4_1_1", + 0x040103: "Qt_4_1_2", + 0x040200: "Qt_4_1_3", + 0x040202: "Qt_4_2_0", + 0x040300: "Qt_4_2_2", + 0x040303: "Qt_4_3_0", + 0x040400: "Qt_4_3_3", + 0x040401: "Qt_4_4_0", + 0x050000: "Qt_4_4_1" + } + + def check_modules(self): + if opts.mwg_odbc: + sql_libs = ["odbc32"] + else: + sql_libs = None + + if opts.mwg_ssl_dir: + ass_lib_dirs = [os.path.join(opts.mwg_ssl_dir, "lib")] + ass_libs = ["ssleay32", "libeay32"] + else: + ass_lib_dirs = None + ass_libs = None + + # Note that the order in which we check is important for the + # consolidated module - a module's dependencies must be checked first. + pyqt_modules.append("QtCore") + + check_module("QtGui", "qwidget.h", "new QWidget()") + check_module("QtHelp", "qhelpengine.h", "new QHelpEngine(\"foo\")") + check_module("QtNetwork", "qhostaddress.h", "new QHostAddress()") + check_module("QtOpenGL", "qgl.h", "new QGLWidget()") + check_module("QtScript", "qscriptengine.h", "new QScriptEngine()") + check_module("QtSql", "qsqldatabase.h", "new QSqlDatabase()", + extra_libs=sql_libs) + check_module("QtSvg", "qsvgwidget.h", "new QSvgWidget()") + check_module("QtTest", "QtTest", "QTest::qSleep(0)") + check_module("QtWebKit", "qwebpage.h", "new QWebPage()") + check_module("QtXml", "qdom.h", "new QDomDocument()") + check_module("QtXmlPatterns", "qxmlname.h", "new QXmlName()") + check_module("phonon", "phonon", "new Phonon::VideoWidget()") + check_module("QtAssistant", "qassistantclient.h", + "new QAssistantClient(\"foo\")", extra_lib_dirs=ass_lib_dirs, + extra_libs=ass_libs) + + if not qt_shared: + sipconfig.inform("QtDesigner module disabled with static Qt libraries.") + elif sipcfg.universal: + sipconfig.inform("QtDesigner module disabled with universal binaries.") + else: + check_module("QtDesigner", "QExtensionFactory", + "new QExtensionFactory()") + + check_module("QAxContainer", "qaxobject.h", "new QAxObject()", + extra_libs=["QAxContainer"]) + + if os.path.isdir("dbus"): + check_dbus() + + def code(self): + cons_xtra_incdirs = [] + cons_xtra_libdirs = [] + cons_xtra_libs = [] + + sp_libs, sp_libdirs = self._static_plugins("QtCore") + sp_incdirs = [] + + if opts.vendorcheck: + sp_incdirs.append(opts.vendincdir) + sp_libdirs.append(opts.vendlibdir) + sp_libs.append("vendorid") + + if opts.bigqt: + cons_xtra_incdirs.extend(sp_incdirs) + cons_xtra_libdirs.extend(sp_libdirs) + cons_xtra_libs.extend(sp_libs) + + generate_code("QtCore") + else: + generate_code("QtCore", extra_include_dirs=sp_incdirs, + extra_lib_dirs=sp_libdirs, extra_libs=sp_libs) + + if "QtGui" in pyqt_modules: + sp_libs, sp_libdirs = self._static_plugins("QtGui") + + if opts.bigqt: + cons_xtra_libdirs.extend(sp_libdirs) + cons_xtra_libs.extend(sp_libs) + + generate_code("QtGui") + else: + generate_code("QtGui", extra_lib_dirs=sp_libdirs, + extra_libs=sp_libs) + + if "QtHelp" in pyqt_modules: + generate_code("QtHelp") + + if "QtNetwork" in pyqt_modules: + generate_code("QtNetwork") + + if "QtOpenGL" in pyqt_modules: + generate_code("QtOpenGL") + + if "QtScript" in pyqt_modules: + generate_code("QtScript") + + if "QtSql" in pyqt_modules: + sp_libs, sp_libdirs = self._static_plugins("QtSql") + + if opts.bigqt: + cons_xtra_libdirs.extend(sp_libdirs) + cons_xtra_libs.extend(sp_libs) + + generate_code("QtSql") + else: + generate_code("QtSql", extra_lib_dirs=sp_libdirs, + extra_libs=sp_libs) + + if "QtSvg" in pyqt_modules: + generate_code("QtSvg") + + if "QtTest" in pyqt_modules: + generate_code("QtTest") + + if "QtWebKit" in pyqt_modules: + generate_code("QtWebKit") + + if "QtXml" in pyqt_modules: + generate_code("QtXml") + + if "QtXmlPatterns" in pyqt_modules: + generate_code("QtXmlPatterns") + + if "phonon" in pyqt_modules: + generate_code("phonon") + + if "QtAssistant" in pyqt_modules: + generate_code("QtAssistant") + + if "QtDesigner" in pyqt_modules: + qpy_dir = os.path.abspath(os.path.join("qpy", "QtDesigner")) + + if sys.platform == "win32": + if opts.debug: + qpy_lib_dir = os.path.join(qpy_dir, "debug") + else: + qpy_lib_dir = os.path.join(qpy_dir, "release") + else: + qpy_lib_dir = qpy_dir + + if opts.bigqt: + cons_xtra_incdirs.append(qpy_dir) + cons_xtra_libdirs.append(qpy_lib_dir) + cons_xtra_libs.append("qpydesigner") + + generate_code("QtDesigner") + else: + generate_code("QtDesigner", extra_include_dirs=[qpy_dir], + extra_lib_dirs=[qpy_lib_dir], + extra_libs=["qpydesigner"]) + + if "QAxContainer" in pyqt_modules: + generate_code("QAxContainer") + + # Generate the composite module. + qtmod_sipdir = os.path.join("sip", "Qt") + mk_clean_dir(qtmod_sipdir) + + qtmod_sipfile = os.path.join(qtmod_sipdir, "Qtmod.sip") + f = open(qtmod_sipfile, "w") + + f.write("""%CompositeModule PyQt4.Qt + +""") + + for m in pyqt_modules: + f.write("%%Include %s/%smod.sip\n" % (m, m)) + + f.close() + + generate_code("Qt") + + # Generate the consolidated module if required. + if opts.bigqt: + xtra_sip_flags = [] + + _qtmod_sipdir = os.path.join("sip", "_qt") + mk_clean_dir(_qtmod_sipdir) + + _qtmod_sipfile = os.path.join(_qtmod_sipdir, "_qtmod.sip") + f = open(_qtmod_sipfile, "w") + + f.write("""%ConsolidatedModule PyQt4._qt + +""") + + for m in pyqt_modules: + f.write("%%Include %s/%smod.sip\n" % (m, m)) + + if opts.mwg_qsci_dir: + f.write("%Include Qsci/Qscimod.sip\n") + cons_xtra_libs.append("qscintilla2") + + # Copy in the QScintilla .sip files and fix the main one. + src_dir = os.path.join(opts.mwg_qsci_dir, "Python", "sip") + dst_dir = os.path.join("sip", "Qsci") + + try: + shutil.rmtree(dst_dir); + except: + pass + + shutil.copytree(src_dir, dst_dir) + os.rename(os.path.join(dst_dir, "qscimod4.sip"), os.path.join(dst_dir, "Qscimod.sip")) + + generate_code("Qsci") + + if opts.mwg_qwt_dir: + f.write("%Include Qwt5/Qwt5mod.sip\n") + cons_xtra_incdirs.append(os.path.join(opts.mwg_qwt_dir, "support")) + cons_xtra_libs.append("qwt") + + # Copy in the PyQwt .sip files and fix the main one. + src_dir = os.path.join(opts.mwg_qwt_dir, "sip", "qwt5qt4") + dst_dir = os.path.join("sip", "Qwt5") + + try: + shutil.rmtree(dst_dir); + except: + pass + + shutil.copytree(src_dir, dst_dir) + os.rename(os.path.join(dst_dir, "QwtModule.sip"), os.path.join(dst_dir, "Qwt5mod.sip")) + + xtra_sip_flags = ["-t", "Qwt_5_0_1", + "-x", "CXX_DYNAMIC_CAST", + "-x", "HAS_QWT4", + "-x", "HAS_NUMARRAY", + "-x", "HAS_NUMERIC", + "-x", "HAS_NUMPY"] + + generate_code("Qwt5", extra_sip_flags=xtra_sip_flags) + + f.close() + + if opts.mwg_odbc: + cons_xtra_libs.append("odbc32") + + if opts.mwg_ssl_dir: + cons_xtra_libdirs.append(os.path.join(opts.mwg_ssl_dir, "lib")) + cons_xtra_libs.extend(["ssleay32", "libeay32"]) + + generate_code("_qt", extra_include_dirs=cons_xtra_incdirs, + extra_lib_dirs=cons_xtra_libdirs, + extra_libs=cons_xtra_libs, extra_sip_flags=xtra_sip_flags) + + # Tell the user about any plugins not found. + if opts.staticplugins: + sipconfig.inform("Unable to find the following static plugins: %s" % ", ".join(opts.staticplugins)) + + # Generate the QScintilla API file. + sipconfig.inform("Creating QScintilla API file...") + f = open("PyQt4.api", "w") + + for m in pyqt_modules: + api = open(m + ".api") + + for l in api: + f.write("PyQt4." + l) + + api.close() + os.remove(m + ".api") + + f.close() + + def _static_plugins(self, mname): + """Return a tuple of the libraries (in platform neutral format) and the + directories they are contained in for all the requested static plugins + for the given module. Generate the additional .sip file needed to + ensure the plugins get linked. + + mname is the name of the module. + """ + plugin_dirs = { + "QtCore": ("codecs", ), + # Note that we put iconengines after imageformats so that qsvg is + # found in the latter rather than the former. The name clash is + # probably a Qt bug. + "QtGui": ("inputmethods", "imageformats", "iconengines"), + "QtSql": ("sqldrivers", ) + } + + libs = [] + libdirs = [] + + for plug in opts.staticplugins: + # Convert the plugin name to a platform specific filename. + if self.generator in ("MSVC", "MSVC.NET", "BMAKE"): + pfname = plug + ".lib" + else: + pfname = "lib" + plug + ".a" + + for pdir in plugin_dirs[mname]: + ppath = os.path.join(qt_pluginsdir, pdir) + + # See if the plugin exists. + if os.access(os.path.join(ppath, pfname), os.F_OK): + sipconfig.inform("Adding the %s static plugin to the %s module..." % (plug, mname)) + + libs.append(plug) + + if ppath not in libdirs: + libdirs.append(ppath) + + break + + # Remove those plugins we have handled. + opts.staticplugins = [p for p in opts.staticplugins if p not in libs] + + # If we have any plugins for this module then generate a .sip file that + # will include the code needed to ensure the plugin gets linked. + if libs: + sp_sipfile = os.path.join("sip", mname, "staticplugins.sip") + + f = open(sp_sipfile, "w") + + f.write("""%ModuleCode + +#include <QtPlugin> + +""") + + for l in libs: + f.write("Q_IMPORT_PLUGIN(%s)\n" % l) + + f.write(""" +%End +""") + + f.close() + + return libs, libdirs + + def module_installs(self): + return ["__init__.py", "pyqtconfig.py"] + + def qpylibs(self): + # See which QPy libraries to build. + qpylibs = {} + + if "QtDesigner" in pyqt_modules: + qpylibs["QtDesigner"] = "qpydesigner.pro" + + # Run qmake to generate the Makefiles. + qmake_args = fix_qmake_args() + cwd = os.getcwd() + + for qpy, pro in qpylibs.iteritems(): + sipconfig.inform("Creating QPy library for %s Makefile..." % qpy) + + os.chdir(os.path.join("qpy", qpy)) + + if sipcfg.universal: + upro = "u_" + pro + + f = open(upro, 'w+') + + f.write( +"""# Setup the normal .pro file for universal binaries. + +CONFIG += ppc i386 +QMAKE_MAC_SDK = %s + +include(%s) +""" % (sipcfg.universal, pro)) + + f.close() + + pro = upro + + run_command("%s %s %s" % (opts.qmake, qmake_args, pro)) + os.chdir(cwd) + + sipconfig.inform("Creating QPy libraries Makefile...") + + sipconfig.ParentMakefile( + configuration=sipcfg, + dir="qpy", + subdirs=qpylibs.keys() + ).generate() + + return ["qpy"] + + def tools(self): + tool = [] + + if pydbusmoddir: + sipconfig.inform("Creating dbus support module Makefile...") + + makefile = sipconfig.ModuleMakefile( + configuration=sipcfg, + build_file="dbus.sbf", + dir="dbus", + install_dir=pydbusmoddir, + qt=["QtCore"], + debug=opts.debug, + universal=sipcfg.universal + ) + + add_makefile_extras(makefile, dbusincdirs, dbuslibdirs, dbuslibs) + + makefile.generate() + tool.append("dbus") + + # Only include ElementTree for older versions of Python. + if sipcfg.py_version < 0x020500: + sipconfig.inform("Creating elementtree Makefile...") + + makefile = sipconfig.PythonModuleMakefile( + configuration=sipcfg, + dstdir=os.path.join(pyqt_modroot, "elementtree"), + dir="elementtree" + ) + + makefile.generate() + tool.append("elementtree") + + # Create the pyuic4 wrapper. Use the GUI version on MacOS (so that + # previews work properly and normal console use will work anyway), but + # not on Windows (so that normal console use will work). + sipconfig.inform("Creating pyuic4 wrapper...") + + uicdir=os.path.join(pyqt_modroot, "uic") + wrapper = sipconfig.create_wrapper(os.path.join(uicdir, "pyuic.py"), os.path.join("pyuic", "pyuic4"), (sys.platform == "darwin")) + + sipconfig.inform("Creating pyuic4 Makefile...") + + makefile = sipconfig.PythonModuleMakefile( + configuration=sipcfg, + dstdir=uicdir, + srcdir="uic", + dir="pyuic", + installs=[[os.path.basename(wrapper), opts.pyqtbindir]] + ) + + makefile.generate() + tool.append("pyuic") + + if "QtXml" in pyqt_modules: + sipconfig.inform("Creating pylupdate4 Makefile...") + + makefile = sipconfig.ProgramMakefile( + configuration=sipcfg, + build_file="pylupdate.sbf", + dir="pylupdate", + install_dir=opts.pyqtbindir, + console=1, + qt=["QtCore", "QtGui", "QtXml"], + debug=opts.debug, + warnings=1, + universal=sipcfg.universal + ) + + makefile.generate() + tool.append("pylupdate") + + sipconfig.inform("Creating pyrcc4 Makefile...") + + makefile = sipconfig.ProgramMakefile( + configuration=sipcfg, + build_file="pyrcc.sbf", + dir="pyrcc", + install_dir=opts.pyqtbindir, + console=1, + qt=["QtCore", "QtXml"], + debug=opts.debug, + warnings=1, + universal=sipcfg.universal + ) + + makefile.generate() + tool.append("pyrcc") + else: + sipconfig.inform("pylupdate4 and pyrcc4 will not be built because the Qt XML module is missing.") + + if opts.designer_plugin and "QtDesigner" in pyqt_modules: + py_major = sipcfg.py_version >> 16 + py_minor = (sipcfg.py_version >> 8) & 0x0ff + + if sys.platform == "win32": + lib_dir_flag = quote("-L%s" % sipcfg.py_lib_dir) + link = "%s -lpython%d%d" % (lib_dir_flag, py_major, py_minor) + pysh_lib = "python%d%d.dll" % (py_major, py_minor) + else: + # Use distutils to get the additional configuration. + from distutils.sysconfig import get_config_vars + ducfg = get_config_vars() + + if sys.platform == "darwin": + # We need to work out how to specify the right framework + # version. + link = "-framework Python" + elif ("--enable-shared" in ducfg.get("CONFIG_ARGS", "") and + glob.glob("%s/lib/libpython%d.%d*" % (ducfg["exec_prefix"], py_major, py_minor))): + lib_dir_flag = quote("-L%s/lib" % ducfg["exec_prefix"]) + link = "%s -lpython%d.%d" % (lib_dir_flag, py_major, py_minor) + else: + sipconfig.inform("Qt Designer plugin disabled because Python library is static") + opts.designer_plugin = False + + pysh_lib = ducfg["LDLIBRARY"] + + if opts.designer_plugin: + sipconfig.inform("Creating Qt Designer plugin Makefile...") + + # Run qmake to generate the Makefile. + qmake_args = fix_qmake_args() + cwd = os.getcwd() + os.chdir("designer") + + # Create the qmake project file. + fin = open("python.pro-in") + prj = fin.read() + fin.close() + + prj = prj.replace("@PYINCDIR@", quote(sipcfg.py_inc_dir)) + prj = prj.replace("@PYINCDIR@", " ".join((quote(sipcfg.py_conf_inc_dir), quote(sipcfg.py_inc_dir)))) + prj = prj.replace("@PYLINK@", link) + prj = prj.replace("@PYSHLIB@", pysh_lib) + prj = prj.replace("@QTPLUGINDIR@", quote(opts.plugindir + "/designer")) + + fout = open("python.pro", "w+") + + if sipcfg.universal: + fout.write("CONFIG += ppc i386\n") + fout.write("QMAKE_MAC_SDK = %s\n" % sipcfg.universal) + + fout.write(prj) + fout.close() + + run_command("%s %s" % (opts.qmake, qmake_args)) + os.chdir(cwd) + + tool.append("designer") + + return tool + + +def quote(path): + """Return a path with quotes added if it contains spaces.""" + if " " in path: + path = '"%s"' % path + + return path + + +def inform_user(): + """Tell the user the option values that are going to be used. + """ + if qt_edition: + edstr = qt_edition + " edition " + else: + edstr = "" + + if qt_shared: + lib_type = "shared" + else: + lib_type = "static" + + sipconfig.inform("Qt v%s %sis being used." % (sipconfig.version_to_string(qt_version), edstr)) + + if sys.platform == "darwin" and qt_framework: + sipconfig.inform("Qt is built as a framework.") + + sipconfig.inform("SIP %s is being used." % sipcfg.sip_version_str) + sipconfig.inform("The Qt header files are in %s." % qt_incdir) + sipconfig.inform("The %s Qt libraries are in %s." % (lib_type, qt_libdir)) + sipconfig.inform("The Qt binaries are in %s." % qt_bindir) + sipconfig.inform("The Qt mkspecs directory is in %s." % qt_datadir) + sipconfig.inform("These PyQt modules will be built: %s." % string.join(pyqt_modules)) + sipconfig.inform("The PyQt Python package will be installed in %s." % opts.pyqtmoddir) + + if opts.designer_plugin: + sipconfig.inform("The Designer plugin will be installed in %s." % os.path.join(opts.plugindir, "designer")) + + if opts.api: + sipconfig.inform("The QScintilla API file will be installed in %s." % os.path.join(opts.qscidir, "api", "python")) + + if pydbusmoddir: + sipconfig.inform("The dbus support module will be installed in %s." % pydbusmoddir) + + sipconfig.inform("The PyQt .sip files will be installed in %s." % opts.pyqtsipdir) + + sipconfig.inform("pyuic4, pyrcc4 and pylupdate4 will be installed in %s." % opts.pyqtbindir) + + if opts.vendorcheck: + sipconfig.inform("PyQt will only be usable with signed interpreters.") + + +def create_config(module, template, macros): + """Create the PyQt configuration module so that it can be imported by build + scripts. + + module is the module file name. + template is the template file name. + macros is the dictionary of platform specific build macros. + """ + sipconfig.inform("Creating %s..." % module) + + content = { + "pyqt_config_args": sys.argv[1:], + "pyqt_version": pyqt_version, + "pyqt_version_str": pyqt_version_str, + "pyqt_bin_dir": opts.pyqtbindir, + "pyqt_mod_dir": pyqt_modroot, + "pyqt_sip_dir": opts.pyqtsipdir, + "pyqt_modules": pyqt_modules, + "pyqt_sip_flags": qt_sip_flags, + "qt_version": qt_version, + "qt_edition": qt_edition, + "qt_winconfig": qt_shared, + "qt_framework": qt_framework, + "qt_threaded": 1, + "qt_dir": qt_dir, + "qt_data_dir": qt_datadir, + "qt_inc_dir": qt_incdir, + "qt_lib_dir": qt_libdir + } + + sipconfig.create_config_module(module, template, content, macros) + + +def run_command(cmd): + """Run a command and display the output if verbose mode is enabled. + + cmd is the command to run. + """ + if opts.verbose: + sys.stdout.write(cmd + "\n") + + fout = get_command_stdout(cmd, and_stderr=True) + + # Read stdout and stderr until there is no more output. + lout = fout.readline() + while lout: + if opts.verbose: + sys.stdout.write(lout) + + lout = fout.readline() + + fout.close() + + try: + os.wait() + except: + pass + + +def remove_file(fname): + """Remove a file which may or may not exist. + + fname is the name of the file. + """ + try: + os.remove(fname) + except OSError: + pass + + +def compile_qt_program(name, mname, extra_include_dirs=None, extra_lib_dirs=None, extra_libs=None): + """Compile a simple Qt application. + + name is the name of the single source file. + mname is the name of the Qt module. + extra_include_dirs is an optional list of extra include directories. + extra_lib_dirs is an optional list of extra library directories. + extra_libs is an optional list of extra libraries. + + Returns the name of the executable suitable for running or None if it + wasn't created. + """ + opengl = (mname == "QtOpenGL") + + qt = [mname] + if mname == "QtWebKit": + qt.append("QtCore") + + makefile = sipconfig.ProgramMakefile(sipcfg, console=1, qt=qt, warnings=0, opengl=opengl, debug=opts.debug) + + add_makefile_extras(makefile, extra_include_dirs, extra_lib_dirs, extra_libs) + + exe, build = makefile.build_command(name) + + # Make sure the executable file doesn't exist. + remove_file(exe) + run_command(build) + + if not os.access(exe, os.X_OK): + return None + + if sys.platform != "win32": + exe = "./" + exe + + return exe + + +def add_makefile_extras(makefile, extra_include_dirs, extra_lib_dirs, extra_libs): + """Add any extra include or library directories or libraries to a makefile. + + makefile is the makefile. + extra_include_dirs is the list of extra include directories. + extra_lib_dirs is the list of extra library directories. + extra_libs is the list of extra libraries. + """ + if extra_include_dirs: + makefile.extra_include_dirs.extend(extra_include_dirs) + + if extra_lib_dirs: + makefile.extra_lib_dirs.extend(extra_lib_dirs) + + if extra_libs: + makefile.extra_libs.extend(extra_libs) + + +def check_vendorid(): + """See if the VendorID library and include file can be found. + """ + if opts.vendorcheck: + if os.access(os.path.join(opts.vendincdir, "vendorid.h"), os.F_OK): + if glob.glob(os.path.join(opts.vendlibdir, "*vendorid*")): + sipconfig.inform("The VendorID package was found.") + else: + opts.vendorcheck = 0 + sipconfig.inform("The VendorID library could not be found in " + "%s and so signed interpreter checking will " + "be disabled. If the VendorID library is " + "installed then use the -m argument to " + "explicitly specify the correct " + "directory." % opts.vendlibdir) + else: + opts.vendorcheck = 0 + sipconfig.inform("vendorid.h could not be found in %s and so " + "signed interpreter checking will be disabled. " + "If the VendorID package is installed then use " + "the -l argument to explicitly specify the " + "correct directory." % opts.vendincdir) + + +def get_command_stdout(cmd, and_stderr=False): + """Return stdout (and optionally stderr) from the given command. + """ + try: + import subprocess + except ImportError: + if and_stderr: + _, sout = os.popen4(cmd) + else: + _, sout, _ = os.popen3(cmd) + + return sout + + if and_stderr: + stderr = subprocess.STDOUT + else: + stderr = subprocess.PIPE + + p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=stderr) + + return p.stdout + + +def check_dbus(): + """See if the DBus support module should be built. + """ + sipconfig.inform("Checking to see if the dbus support module should be built...") + + sout = get_command_stdout("pkg-config --cflags-only-I --libs dbus-1") + iflags = sout.read().strip() + + if not iflags: + sipconfig.inform("DBus v1 does not seem to be installed.") + return + + for f in iflags.split(): + if f.startswith("-I"): + dbusincdirs.append(f[2:]) + elif f.startswith("-L"): + dbuslibdirs.append(f[2:]) + elif f.startswith("-l"): + dbuslibs.append(f[2:]) + + try: + import dbus.mainloop + except: + sipconfig.inform("The Python dbus module doesn't seem to be installed.") + return + + global pydbusmoddir + pydbusmoddir = dbus.mainloop.__path__[0] + + # Try and find dbus-python.h. We don't use pkg-config because it is broken + # for dbus-python (at least for versions up to and including v0.81.0). + # Instead we look where DBus itself is installed - which in most cases will + # be where dbus-python is also installed. + if opts.pydbusincdir: + dlist = [opts.pydbusincdir] + else: + dlist = dbusincdirs + + for d in dlist: + if os.access(os.path.join(d, "dbus", "dbus-python.h"), os.F_OK): + if d not in dbusincdirs: + dbusincdirs.append(d) + + break + else: + sipconfig.inform("dbus/dbus-python.h could not be found and so the " + "DBus support module will be disabled. If " + "dbus-python v0.80 or later is installed then use " + "the -s argument to explicitly specify the directory " + "containing dbus/dbus-python.h.") + pydbusmoddir = None + + +def check_module(mname, incfile, test, extra_include_dirs=None, extra_lib_dirs=None, extra_libs=None): + """See if a module can be built and, if so, add it to the global list of + modules. + + mname is the name of the module. + incfile is the name of the include file needed for the test. + test is a C++ statement being used for the test. + extra_include_dirs is an optional list of extra include directories. + extra_lib_dirs is an optional list of extra library directories. + extra_libs is an optional list of extra libraries. + """ + # Check that the module is enabled if we are not automatically enabling all + # modules. + if len(opts.enabled) > 0 and mname not in opts.enabled: + return + + # Check the module's main .sip file exists. + if os.access(os.path.join("sip", mname, mname + "mod.sip"), os.F_OK): + sipconfig.inform("Checking to see if the %s module should be built..." % mname) + + if check_api(incfile, test, mname, extra_include_dirs=extra_include_dirs, extra_lib_dirs=extra_lib_dirs, extra_libs=extra_libs): + pyqt_modules.append(mname) + + +def check_api(incfile, test, mname, extra_include_dirs=None, extra_lib_dirs=None, extra_libs=None): + """Return non-zero if a class is available. + + incfile is the name of the include file needed for the test. + test is a C++ statement being used for the test. + mname is the name of the module. + extra_include_dirs is an optional list of extra include directories. + extra_lib_dirs is an optional list of extra library directories. + extra_libs is an optional list of extra libraries. + """ + # We use a module specific name to avoid a potential problem on Windows + # where the operating system doesn't delete previous tests quickly enough. + cfgtest = "cfgtest_%s.cpp" % mname + + f = open(cfgtest, "w") + + f.write("""#include <%s> + +int main(int, char **) +{ + %s; +} +""" % (incfile, test)) + + f.close() + + return compile_qt_program(cfgtest, mname, + extra_include_dirs=extra_include_dirs, + extra_lib_dirs=extra_lib_dirs, extra_libs=extra_libs) + + +def set_sip_flags(pyqt): + """Set the SIP platform, version and feature flags. + + pyqt is the configuration instance. + """ + # If we don't check for signed interpreters, we exclude the 'VendorID' + # feature + if not opts.vendorcheck: + qt_sip_flags.append("-x") + qt_sip_flags.append("VendorID") + + # Handle the platform tag. + if sys.platform == "win32": + plattag = "WS_WIN" + elif sys.platform == "darwin": + if "__USE_WS_X11__" in sipcfg.build_macros()["DEFINES"]: + plattag = "WS_X11" + else: + plattag = "WS_MACX" + else: + plattag = "WS_X11" + + qt_sip_flags.append("-t") + qt_sip_flags.append(plattag) + + # Handle the Qt version tag. + verstag = sipconfig.version_to_sip_tag(qt_version, pyqt.qt_version_tags(), "Qt") + + # Handle any feature flags. + for xf in qt_xfeatures: + qt_sip_flags.append("-x") + qt_sip_flags.append(xf) + + if verstag: + qt_sip_flags.append("-t") + qt_sip_flags.append(verstag) + + # Handle the version specific Python features. + if sipcfg.py_version < 0x020400: + qt_sip_flags.append("-x") + qt_sip_flags.append("Py_DateTime") + + # There is an issue creating QObjects while the GIL is held causing + # deadlocks in multi-threaded applications. We don't fully understand this + # yet so we make sure we avoid the problem by always releasing the GIL. + qt_sip_flags.append("-g") + + +def needed_qt_libs(mname, qt_libs): + """Add any additional Qt libraries needed by a module to an existing list. + + mname is the name of the module. + qt_libs is the current list of libraries. + """ + + # The dependencies between the different Qt libraries. The order within + # each list is important. Note that this affects the include directories + # as well as the libraries. + LIB_DEPS = { + "QtCore": [], + "QtGui": ["QtCore"], + "QtHelp": ["QtGui"], + "QtNetwork": ["QtCore"], + "QtOpenGL": ["QtGui"], + "QtScript": ["QtCore"], + "QtSql": ["QtGui"], + "QtSvg": ["QtGui"], + "QtTest": ["QtGui"], + "QtWebKit": ["QtNetwork", "QtGui"], + "QtXml": ["QtCore"], + "QtXmlPatterns": ["QtCore"], + "phonon": ["QtGui"], + "QtAssistant": ["QtNetwork", "QtGui"], + "QtDesigner": ["QtGui"], + "QAxContainer": ["QtGui"] + } + + # Handle the dependencies first. + for d in LIB_DEPS[mname]: + needed_qt_libs(d, qt_libs) + + if mname not in qt_libs: + qt_libs.insert(0, mname) + + +def mk_clean_dir(name): + """Create a clean (ie. empty) directory. + + name is the name of the directory. + """ + try: + shutil.rmtree(name) + except: + pass + + try: + os.mkdir(name) + except: + sipconfig.error("Unable to create the %s directory." % name) + + +def generate_code(mname, extra_include_dirs=None, extra_lib_dirs=None, extra_libs=None, extra_sip_flags=None): + """Generate the code for a module. + + mname is the name of the module to generate the code for. + extra_include_dirs is an optional list of additional directories to add to + the list of include directories. + extra_lib_dirs is an optional list of additional directories to add to the + list of library directories. + extra_libs is an optional list of additional libraries to add to the list + of libraries. + extra_sip_flags is an optional list of additional flags to pass to SIP. + """ + sipconfig.inform("Generating the C++ source for the %s module..." % mname) + + mk_clean_dir(mname) + + # Work out what Qt libraries need to be linked against and how SIP is + # supposed to handle the consolidated module and its components. + cons_args = [] + + if opts.bigqt: + if mname == "_qt": + qt_libs = [] + + for m in pyqt_modules: + needed_qt_libs(m, qt_libs) + else: + if mname != "Qt": + cons_args.append("-p") + cons_args.append("PyQt4._qt") + + qt_libs = 0 + else: + if mname == "Qt": + qt_libs = 0 + else: + qt_libs = [] + needed_qt_libs(mname, qt_libs) + + # Build the SIP command line. + argv = ['"' + sipcfg.sip_bin + '"'] + + argv.extend(qt_sip_flags) + argv.extend(cons_args) + + if extra_sip_flags: + argv.extend(extra_sip_flags) + + if opts.concat: + argv.append("-j") + argv.append(str(opts.split)) + + if opts.tracing: + argv.append("-r") + + if mname not in ("Qt", "_qt", "Qsci"): + argv.append("-a") + argv.append(mname + ".api") + + argv.append("-c") + argv.append(mname) + + buildfile = os.path.join(mname, mname + ".sbf") + argv.append("-b") + argv.append(buildfile) + + argv.append("-I") + argv.append("sip") + + # SIP assumes POSIX style path separators. + argv.append(string.join(["sip", mname, mname + "mod.sip"], "/")) + + cmd = string.join(argv) + + if opts.verbose: + sys.stdout.write(cmd + "\n") + + os.system(cmd) + + # Check the result. + if not os.access(buildfile, os.F_OK): + sipconfig.error("Unable to create the C++ code.") + + # Generate the Makefile. + sipconfig.inform("Creating the Makefile for the %s module..." % mname) + + installs = [] + + if opts.install_sipfiles: + sipfiles = [] + + for s in glob.glob("sip/" + mname + "/*.sip"): + sipfiles.append(os.path.join("..", "sip", mname, os.path.basename(s))) + + installs.append([sipfiles, os.path.join(opts.pyqtsipdir, mname)]) + + opengl = (mname == "QtOpenGL") + + makefile = sipconfig.SIPModuleMakefile( + configuration=sipcfg, + build_file=mname + ".sbf", + dir=mname, + install_dir=pyqt_modroot, + installs=installs, + qt=qt_libs, + opengl=opengl, + warnings=1, + static=opts.static, + debug=opts.debug, + universal=sipcfg.universal + ) + + add_makefile_extras(makefile, extra_include_dirs, extra_lib_dirs, extra_libs) + + makefile.generate() + + +def check_license(): + """Handle the validation of the PyQt license. + """ + try: + import license + ltype = license.LicenseType + lname = license.LicenseName + + try: + lfile = license.LicenseFile + except AttributeError: + lfile = None + except ImportError: + ltype = None + + if ltype is None: + ltype = "GPL" + lname = "GNU General Public License" + lfile = None + + sipconfig.inform("This is the %s version of PyQt %s (licensed under the %s) for Python %s on %s." % (ltype, pyqt_version_str, lname, string.split(sys.version)[0], sys.platform)) + + # Common checks. + if qt_edition and ltype != "internal": + if qt_edition != "free" and ltype == "GPL": + sipconfig.error("This version of PyQt and the %s edition of Qt have incompatible licenses." % qt_edition) + + # Confirm the license if not already done. + if not opts.license_confirmed: + print + + if ltype == "GPL": + print "Type '2' to view the GPL v2 license." + print "Type '3' to view the GPL v3 license." + else: + print "Type 'L' to view the license." + + print "Type 'yes' to accept the terms of the license." + print "Type 'no' to decline the terms of the license." + print + + while 1: + try: + resp = raw_input("Do you accept the terms of the license? ") + except KeyboardInterrupt: + raise SystemExit + except: + resp = "" + + resp = string.lower(string.strip(resp)) + + if resp == "yes": + break + + if resp == "no": + sys.exit(0) + + if ltype == "GPL": + if resp == "2": + os.system("more LICENSE.GPL2") + elif resp == "3": + os.system("more LICENSE.GPL3") + else: + if resp == "l": + os.system("more LICENSE") + + # If there should be a license file then check it is where it should be. + if lfile: + if os.access(os.path.join("sip", lfile), os.F_OK): + sipconfig.inform("Found the license file %s." % lfile) + else: + sipconfig.error("Please copy the license file %s to the sip directory." % lfile) + + +def get_build_macros(overrides): + """Return the dictionary of platform specific build macros from the Qt + installation. Return None if any of the overrides was invalid. + + overrides is a list of macros overrides from the user. + """ + # Get the name of the qmake configuration file to take the macros from. + if "QMAKESPEC" in os.environ.keys(): + fname = os.environ["QMAKESPEC"] + + if not os.path.dirname(fname): + fname = os.path.join(qt_datadir, "mkspecs", fname) + elif sys.platform == "darwin": + # The Qt Mac binary installer defaults to xcode which we don't want. + fname = os.path.join(qt_datadir, "mkspecs", "macx-g++") + else: + fname = os.path.join(qt_datadir, "mkspecs", "default") + + fname = os.path.join(fname, "qmake.conf") + + if not os.access(fname, os.F_OK): + sipconfig.error("Unable to find the qmake configuration file %s. Use the QMAKESPEC environment variable to specify the correct platform." % fname) + + # Add the Qt specific macros to the default. + names = sipcfg.build_macros().keys() + names.append("INCDIR_QT") + names.append("LIBDIR_QT") + names.append("MOC") + + properties = { + "QT_INSTALL_BINS": qt_bindir, + "QT_INSTALL_HEADERS": qt_incdir, + "QT_INSTALL_LIBS": qt_libdir + } + + return sipconfig.parse_build_macros(fname, names, overrides, properties) + + +def check_qt_installation(macros): + """Check the Qt installation and get the version number and edition and + return the configuration instance. + + macros is the dictionary of build macros. + """ + # Check the Qt version number. + if qt_version < 0x040100: + sipconfig.error("PyQt v4 requires Qt v4.1.0 or later.") + + # Work out how Qt was built on MacOS. + if sys.platform == "darwin": + if os.access(os.path.join(qt_libdir, "QtCore.framework"), os.F_OK): + global qt_framework + qt_framework = 1 + + # Get the Makefile generator. + generator = macros["MAKEFILE_GENERATOR"] + + # We haven't yet factored out sipconfig's knowledge of how to build Qt + # binaries and it is expecting to find these in the configuration when it + # generates the Makefiles. + sipcfg.qt_version = qt_version + sipcfg.qt_edition = qt_edition + sipcfg.qt_winconfig = qt_shared + sipcfg.qt_framework = qt_framework + sipcfg.qt_threaded = 1 + sipcfg.qt_dir = qt_dir + sipcfg.qt_lib_dir = qt_libdir + + return ConfigurePyQt4(generator) + + +def fix_qmake_args(args=""): + """Make any platform specific adjustments to the arguments passed to qmake. + """ + if sys.platform == "darwin": + # The Qt binary installer has macx-xcode as the default. + args = "-spec macx-g++ " + args + + return args + + +def get_qt_configuration(): + """Set the qt_dir, qt_incdir, qt_libdir, qt_bindir, qt_datadir, + qt_pluginsdir and qt_xfeatures globals for the Qt installation. + """ + sipconfig.inform("Determining the layout of your Qt installation...") + + if sys.platform == "win32": + # There is no -q flag so set the default explicitly. + opts.qmake = find_default_qmake() + + if not opts.qmake: + sipconfig.error(MSG_CHECK_QMAKE) + + # The file names we will use to get the directory information. + app = "qtdirs" + pro_file = app + ".pro" + make_file = app + ".mk" + make_target = "" + cpp_file = app + ".cpp" + out_file = app + ".out" + qmake_args = fix_qmake_args("-o " + make_file) + + if sys.platform == "win32": + exe_file = os.path.join("release", app + ".exe") + make_target = " release" + elif sys.platform == "darwin": + exe_file = os.path.join(app + ".app", "Contents", "MacOS", app) + else: + exe_file = os.path.join(".", app) + + # Generate the qmake project file. + f = open(pro_file, "w") + + f.write( +"""QT = core +# This is for certain broken Linux distros and is needed to make sure that +# QT_SHARED is properly defined. +CONFIG += link_prl +TARGET = %s +SOURCES = %s +""" % (app, cpp_file)) + + f.close() + + # Generate the source code. + f = open(cpp_file, "w") + + f.write( +"""#include <QFile> +#include <QLibraryInfo> +#include <QTextStream> + +int main(int, char **) +{ + QFile outf("%s"); + + if (!outf.open(QIODevice::WriteOnly|QIODevice::Truncate|QIODevice::Text)) + return 1; + + QTextStream out(&outf); + + out << QLibraryInfo::location(QLibraryInfo::PrefixPath) << '\\n'; + out << QLibraryInfo::location(QLibraryInfo::HeadersPath) << '\\n'; + out << QLibraryInfo::location(QLibraryInfo::LibrariesPath) << '\\n'; + out << QLibraryInfo::location(QLibraryInfo::BinariesPath) << '\\n'; + out << QLibraryInfo::location(QLibraryInfo::DataPath) << '\\n'; + out << QLibraryInfo::location(QLibraryInfo::PluginsPath) << '\\n'; + + out << QT_VERSION << '\\n'; + out << QT_EDITION << '\\n'; + + out << "shared\\n"; + + // Determine which features should be disabled. + +#if defined(QT_NO_ACCESSIBILITY) + out << "PyQt_Accessibility\\n"; +#endif + +#if defined(QT_NO_SESSIONMANAGER) + out << "PyQt_SessionManager\\n"; +#endif + +#if defined(QT_NO_STATUSTIP) + out << "PyQt_StatusTip\\n"; +#endif + +#if defined(QT_NO_TOOLTIP) + out << "PyQt_ToolTip\\n"; +#endif + +#if defined(QT_NO_WHATSTHIS) + out << "PyQt_WhatsThis\\n"; +#endif + +#if defined(QT_NO_OPENSSL) + out << "PyQt_OpenSSL\\n"; +#endif + +#if defined(QT_NO_SIZEGRIP) + out << "PyQt_SizeGrip\\n"; +#endif + +#if !defined(QT3_SUPPORT) || QT_VERSION >= 0x040200 + out << "PyQt_NoPrintRangeBug\\n"; +#endif + + if (sizeof (qreal) != sizeof (double)) + out << "PyQt_qreal_double\\n"; + + return 0; +} +""" % out_file) + + f.close() + + # Create the makefile, first making sure it doesn't already exist. + remove_file(make_file) + run_command("%s %s %s" % (opts.qmake, qmake_args, pro_file)) + + if not os.access(make_file, os.F_OK): + sipconfig.error("%s failed to create a makefile. %s" % (opts.qmake, MSG_CHECK_QMAKE)) + + # Try and work out the name of make. + if sipcfg.platform.startswith("win32-msvc"): + make = "nmake" + elif sipcfg.platform == "win32-borland": + make = "bmake" + elif sipcfg.platform == "win32-g++": + make = "mingw32-make" + else: + make = "make" + + oldfp = open(make_file) + newfp = open(make_file + '.new', 'w') + for line in oldfp: + if line.startswith('LIBS'): + newfp.write(line.rstrip() + ' -ldl\n') + continue + newfp.write(line) + oldfp.close(); newfp.close() + os.rename(make_file + '.new', make_file) + + # Create the executable, first making sure it doesn't exist. + remove_file(exe_file) + run_command("%s -f %s%s" % (make, make_file, make_target)) + + if not os.access(exe_file, os.X_OK): + sipconfig.error("Failed to determine the layout of your Qt installation. Try again using the --verbose flag to see more detail about the problem.") + + # Create the output file, first making sure it doesn't exist. + remove_file(out_file) + run_command(exe_file) + + if not os.access(out_file, os.F_OK): + sipconfig.error("%s failed to create %s. Make sure your Qt v4 installation is correct." % (exe_file, out_file)) + + #import pdb; pdb.set_trace() + # Read the directories. + f = open(out_file, "r") + lines = f.read().strip().split("\n") + f.close() + + global qt_dir, qt_incdir, qt_libdir, qt_bindir, qt_datadir, qt_pluginsdir + global qt_version, qt_edition, qt_shared, qt_xfeatures + + qt_dir = lines[0] + qt_incdir = lines[1] + qt_libdir = lines[2] + qt_bindir = lines[3] + qt_datadir = lines[4] + qt_pluginsdir = lines[5] + qt_version = lines[6] + qt_edition = lines[7] + qt_shared = lines[8] + qt_xfeatures = lines[9:] + + try: + qt_version = int(qt_version) + except ValueError: + sipconfig.error("QT_VERSION should be a number but \"%s\" was found." % qt_version) + + try: + qt_edition = int(qt_edition) + except ValueError: + sipconfig.error("QT_EDITION should be a number but \"%s\" was found." % qt_edition) + + # Now convert the edition to a descriptive string. The order of testing is + # important. + if qt_edition & 0x200: + # It has ActiveQt. + qt_edition = "Desktop" + elif qt_edition & 0x008: + # It has OpenGL. + qt_edition = "free" + elif qt_edition & 0x002: + # It has GUI. + qt_edition = "Desktop Light" + else: + qt_edition = "Console" + + if qt_shared: + if opts.staticplugins: + sipconfig.inform("Static plugins are disabled because Qt has been built as shared libraries.") + opts.staticplugins = [] + else: + if opts.static or opts.bigqt: + pass + else: + sipconfig.error("Qt has been built as static libraries so either the -g or -k argument should be used.") + + +def main(): + """Create the configuration module module. + """ + # Check SIP is new enough. + if sipcfg.sip_version < sip_min_version: + sipconfig.error("This version of PyQt requires SIP v%s or later" % sipconfig.version_to_string(sip_min_version)) + + global opts + + # Parse the command line. + p = create_optparser() + opts, args = p.parse_args() + + # Where the modules will be placed. + global pyqt_modroot + pyqt_modroot = os.path.join(opts.pyqtmoddir, "PyQt4") + + # When building static libraries, signed interpreter checking makes no + # sense. + if opts.vendorcheck and opts.static: + sipconfig.error("Using the VendorID package when building static libraries makes no sense.") + + # Get the details of the Qt installation. + get_qt_configuration() + + # Provide some defaults that are based on the Qt configuration. + if not opts.plugindir: + opts.plugindir = qt_pluginsdir + + if opts.qscidir: + # An explicit directory implies installing the API file. + opts.api = True + else: + opts.qscidir = os.path.join(qt_datadir, "qsci") + + if opts.api is None: + # Install the API file if the default directory exists. + opts.api = os.path.isdir(opts.qscidir) + + # Replace the existing build macros with the ones from the Qt installation. + macros = get_build_macros(args) + + if macros is None: + p.print_help() + sys.exit(2) + + sipcfg.set_build_macros(macros) + + # Check Qt is what we need. + pyqt = check_qt_installation(macros) + + # Check the licenses are compatible. + check_license() + + # Check which modules to build. + pyqt.check_modules() + + # Check for the VendorID package. + check_vendorid() + + # Set the SIP platform, version and feature flags. + set_sip_flags(pyqt) + + # Tell the user what's been found. + inform_user() + + # Generate the code. + pyqt.code() + + # Create the additional Makefiles. + sipconfig.inform("Creating top level Makefile...") + + installs=[(pyqt.module_installs(), pyqt_modroot)] + + if opts.api: + installs.append(("PyQt4.api", os.path.join(opts.qscidir, "api", "python"))) + + xtra_modules = ["Qt"] + + if opts.bigqt: + xtra_modules.append("_qt") + + if opts.mwg_qsci_dir: + xtra_modules.append("Qsci") + + if opts.mwg_qwt_dir: + xtra_modules.append("Qwt5") + + sipconfig.ParentMakefile( + configuration=sipcfg, + subdirs=pyqt.qpylibs() + pyqt_modules + xtra_modules + pyqt.tools(), + installs=installs + ).generate() + + # Install the configuration module. + create_config("pyqtconfig.py", "pyqtconfig.py.in", macros) + + +############################################################################### +# The script starts here. +############################################################################### + +if __name__ == "__main__": + try: + main() + except SystemExit: + raise + except: + print \ +"""An internal error occured. Please report all the output from the program, +including the following traceback, to support@riverbankcomputing.com. +""" + raise diff --git a/devel/py-qt4/distinfo b/devel/py-qt4/distinfo new file mode 100644 index 00000000000..6afd19b6ade --- /dev/null +++ b/devel/py-qt4/distinfo @@ -0,0 +1,6 @@ +$NetBSD: distinfo,v 1.1.1.1 2008/12/13 05:17:02 epg Exp $ + +SHA1 (PyQt-x11-gpl-4.4.4.tar.gz) = 6b91a8020de10e807fa0d3db6b7a92029a17cf0b +RMD160 (PyQt-x11-gpl-4.4.4.tar.gz) = 970bca082a93402b1986b4e8a14738575732e8ae +Size (PyQt-x11-gpl-4.4.4.tar.gz) = 6982063 bytes +SHA1 (patch-aa) = 9ba0e372d817bda27282da3632db71869cf2a6d6 diff --git a/devel/py-qt4/patches/patch-aa b/devel/py-qt4/patches/patch-aa new file mode 100644 index 00000000000..efb9d1c8864 --- /dev/null +++ b/devel/py-qt4/patches/patch-aa @@ -0,0 +1,19 @@ +$NetBSD: patch-aa,v 1.1.1.1 2008/12/13 05:17:02 epg Exp $ + +Force shared libraries, from +http://cvs.fedora.redhat.com/viewvc/devel/PyQt4/PyQt-x11-gpl-4.4.4-QT_SHARED.patch?revision=1.1&view=markup&pathrev=HEAD + +--- configure.py.orig 2008-11-08 03:55:49.000000000 -0800 ++++ configure.py +@@ -1584,11 +1584,7 @@ int main(int, char **) + out << QT_VERSION << '\\n'; + out << QT_EDITION << '\\n'; + +-#if defined(QT_SHARED) || defined(QT_DLL) + out << "shared\\n"; +-#else +- out << "\\n"; +-#endif + + // Determine which features should be disabled. + |