Correct way to add third-party sip extensions to pyqtdeploy project?

Phil Thompson phil at riverbankcomputing.com
Thu Sep 24 22:17:32 BST 2020


pyqtdeploy knows nothing about moc - that's down to qmake.

The .toml file must be called pyproject.toml - that's specified in PEP 
518.

On 24/09/2020 21:39, Patrick Stinson wrote:
> I should add that moc is not being run for all of my headers listed in
> the toml file. Though as per my previous email, I’m not sure if you
> are suggesting that there is any code in pyqtdeploy that would do such
> a thing for moc files or for sip-generated sources. I debugged
> pyqtdeploy-build and didn’t see anything to that effect.
> 
> 
>> On Sep 24, 2020, at 9:55 AM, Patrick Stinson <patrickkidd at gmail.com> 
>> wrote:
>> 
>> OK, I am gathering that do this in my component plugin:
>> 
>>     def install(self):
>>         pyqt = self.get_component('PyQt')
>>         pyqt.install_pyqt_component(self)
>> 
>> Now I’m getting unresolved symbols for my extension module, though 
>> some moc files are generated so something is happening there.
>> 
>> It looks like install_pyqt_component() loads the project file for the 
>> component, though I have no idea how it finds it. Mine is in 
>> <APPROOT>/_pkdiagram/_pkdiagram.toml.
>> 
>> My sysroot is in <APPROOT>/vendor/sysroot.toml.
>> 
>> Pyqtdeploy-build doesn’t complain if I rename my pyproject.toml even 
>> though the code says it should complain, so I know it isn’t finding 
>> the file in order to figure out where the .sip file and other sources 
>> are.
>> 
>>> On Sep 24, 2020, at 12:28 AM, Phil Thompson 
>>> <phil at riverbankcomputing.com <mailto:phil at riverbankcomputing.com>> 
>>> wrote:
>>> 
>>> On 24/09/2020 06:59, Patrick Stinson wrote:
>>>> Got it.
>>>> I’ve now managed to get pyqtdeploy to use my sysroot component 
>>>> plugin
>>>> to add my app’s extension module source files to the qmake project. 
>>>> Is
>>>> there any way to tell the ExtensionModule that there is a sip file 
>>>> so
>>>> it will do what sip-build does by generating the C++ sources and
>>>> setting up C++ flags correctly? What about generating moc files for 
>>>> .h
>>>> headers?
>>>> My extension is starting to get busy with those mangled sip-build 
>>>> file
>>>> names, and it’s also complaining about sip.h, and I imagine more
>>>> things if I fix those problems with manual paths.
>>>> class VedanaComponent(Component):
>>>>    """ The vedana module component. """
>>>>    must_install_from_source = False
>>>>    preinstalls = ['Python', 'PyQt', 'Qt', 'SIP']
>>>>    provides = {
>>>>        '_pkdiagram':
>>>>            ExtensionModule(
>>>>                deps='PyQt:PyQt5.QtWidgets',
>>>>                source=[
>>>>                    "../../../_pkdiagram/unsafearea.cpp",
>>>>                    "../../../_pkdiagram/_pkdiagram.cpp",
>>>>                    "../../../_pkdiagram/_pkdiagram_mac.mm",
>>>>                    
>>>> "../../../_pkdiagram/build/_pkdiagram/moc_unsafearea.cpp",
>>>>                    
>>>> "../../../_pkdiagram/build/_pkdiagram/moc__pkdiagram.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramAppFilter.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramcmodule.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramCUtil.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramFDDocument.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramPathItemBase.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramPathItemDelegate.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramPersonDelegate.cpp",
>>>> "../../../_pkdiagram/build/_pkdiagram/sip_pkdiagramQMap0100QString0100QString.cpp",
>>>>                ],
>>>>                defines=[ "PK_DEBUG_BUILD=0" ],
>>>>                qmake_qt=[ 'gui', 'widgets' ]
>>>>            )
>>>>    }
>>>>    def get_archive_name(self):
>>>>        return ''
>>>>    def install(self):
>>>>        """ Install for the target. """
>>> 
>>> Take a look the AbstractPyQtComponent class in 
>>> abstract_pyqt_component.py (and the other abstract components in the 
>>> same directory).
>>> 
>>> This is not documented and so is not currently part of the public API 
>>> (despite what the comments say). However it may be what you are 
>>> looking for. If so I'll document them properly. In the meantime have 
>>> a look at the PyQtChart plugin (for example) to see how the methods 
>>> implemented are used.
>>> 
>>> Phil
>> 


More information about the PyQt mailing list