<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I am combining replies to both forks of this thread. I think it is interesting and important enough to reply even this late.<div class=""><br class=""></div><div class="">See below.<div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jul 8, 2020, at 12:47 AM, Phil Thompson <<a href="mailto:phil@riverbankcomputing.com" class="">phil@riverbankcomputing.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On 07/07/2020 23:09, Patrick Stinson wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">I have an app which has both python code and a sip-based Python<br class="">extension to allow to app’s python code to access C apis. The sip<br class="">extension contains classes that extend Qt classes via the .sip files<br class="">provided by PyQt.<br class="">At current anyone who is developing such a sip extension has to build<br class="">the entire Qt/Python/sip/PyQt stack from source. This has always been<br class="">and still is horribly cumbersome when developing on more than one<br class="">platform. For all the time I put into this project, I spend most of my<br class="">time trying to keep my development environment alive across platforms<br class="">because of the fragility of configuring and building the stack. It is<br class="">such a pain that I will venture to predict that almost no one is doing<br class="">this seriously on both macOS and windows, if on windows at all. If I<br class="">am right, then that is a shame.<br class="">Broadly speaking, I believe this problem is important enough to point<br class="">it out. I Am hijacking this email thread on the future of qt and<br class="">dropping qmake in favor of cmake to point out this problem and ask for<br class="">your thoughts.<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">pyqtdeploy was developed for two reasons...</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">- to produce applications implemented as a single executable (required by some platforms)</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">- to be able to produce those applications using cross-compilation</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">To achieve the above you have to build PyQt from source. If your target is a desktop platform then you will also need to build Qt from source. However if you don't want to achieve the above, ie. you are happy to build your application linked against Qt shared libraries and produce a package containing your application and those shared libraries in a form that is easily distributed. But if that's the case, why choose to use pyqtdeploy rather than one of the other tools available?</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">In other words, in normal circumstances, you choose to use pyqtdeploy because you *need* to build PyQt etc from source. If you don't *need* to, use something else.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Building from source, particularly Qt, is difficult. I certainly wouldn't update my sysroot every time I rebuilt my application. As a rule of thumb I would re-build my sysroot (with appropriate versions at the time) once a year. Assuming a typical agile timetable I would rebuild my application every couple of weeks. Even if you have to update your sysroot more often (because of a changing dependency) then stick with the same version of Qt etc.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Regarding cmake replacing qmake, I don't see that it makes things better or worse - just different. The change is primarily a cost saving exercise.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Phil</span></div></blockquote></div><div><br class=""></div><div><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">This clarification of principles is quite helpful since I have never discussed such principles with anyone.</span></div><div><br class=""></div><div>My takeaway: Yes, it’s just hard to build everything from source and I should do this less often.</div><div><br class=""></div><div>Qt releases are buggy enough (TableView is ridden with basic problems) that it is often advantageous to rebuild a sysroot when new versions come out. This could be mitigated to some degree by sticking with more mature Qt tech.</div><div><br class=""></div><div>A third reason to use pyqt is that it is the only tool that actually works - at least in my experience. That is a more significant reason than the other two, in my opinion. It also provides a single deployment pathway for windows, macOS, and iOS, the latter of which is a pain to deploy pyqt to. To me, a single executable is certainly valuable to both obscure proprietary code and simplify distribution across platforms.</div></div><div class=""><br class=""></div><div class=""><div class=""></div><blockquote type="cite" class=""><div class=""><br class=""></div><div class=""><blockquote class="gmail_quote" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><br class=""> if on windows at all. If I am right, then that is a shame.<br class=""><br class=""></blockquote><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">Are you only referring to the case where pyqtdeploy is involved? </div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">I don't use pyqtdeploy, but I build a SIP extension on windows (which wraps a Qt based c++ library) and I don't build Qt or PyQt from source. Now that I've moved to sip5 I don't have to build sip either. I install pyqt5 and sip5 from pypi and then install the libs/binaries for the Qt version used to build pyqt from the qt website.</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">If you only meant in relation to pyqtdeploy then, fair enough... </div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">- mh</div></div></blockquote><br class=""><div class=""></div></div><div class=""><br class=""></div><div class="">I hijacked & conflated topics in this thread. My apologies.</div><div class=""><br class=""></div><div class="">One topic was to point out how difficult it is to develop sip extensions on windows, let alone on both Mac and windows. I can’t see how you were able to build a sip extension without sip.h or the PyQt .sip files, which are not included in the pip extensions. Maybe you could explain how you do this?</div><div class=""><br class=""></div><div class="">Another topic has to do with pyqtdeploy generating qmake files instead of cmake files, and whether this would solve the problem of having to build from source to get the sip.h, dll stubs, and PyQt5 .sip files, not to mention qmake. <span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class="">I should not have conflated this topic with the question of making it easier to get a “dev” PyQt5 stack capable of building an pyqt app that contains a PyQt5 extension.</span></div></div><div class=""><br class=""></div><div class="">Maybe some innovation will come along where it will be easy to build a dev sysroot for the pyqtstack on macOS and windows. For example, I still can’t even get my app to build and run on windows, let alone debug the C++ code.</div><div class=""><br class=""></div><div class="">-Patrick</div><div class=""><br class=""></div></div></div></div></body></html>