Opened 11 years ago
Last modified 11 years ago
#46606 new enhancement
qt4-mac "noexceptions" variant
| Reported by: | RJVB (René Bertin) | Owned by: | macports-tickets@… |
|---|---|---|---|
| Priority: | Normal | Milestone: | |
| Component: | ports | Version: | |
| Keywords: | haspatch | Cc: | michaelld (Michael Dickens), mkae (Marko Käning) |
| Port: | qt4-mac |
Description
This one has already been presented (because included) in my qt4-mac concurrent ticket, but a bit of independent exposure might be good.
When you build Qt4 on OS X (or Linux) using gcc or clang, configure prints a notice when done about how these compilers will by default include the infrastructure required for C++ exceptions, how that adds considerable overhead, and that it is possible to build Qt without that support, resulting in an ABI-compatible install because exceptions aren't used internally.
That latter part is not 100% true: the resulting installation is only ABI compatible for software that doesn't require QtXMLPatterns and the full QtConcurrent.
The variant presented here does result in an installation that should be 100% ABI compatible by undoing the effect of configure's -no-exceptions for QtCore (and thus QtConcurrent) and QtXMLPatterns. It would have been better if QtConcurrent (and XMLPatterns) could be built *with* exceptions and the rest without, but that requires much more invasive hacking of the build system.
I've been using the current patch on OS X and Kubuntu (via ppa:rjvbertin/qt4) for weeks no, without ill effects.
The changes to the portfile (given inline):
variant noexceptions description {build without using exceptions internally} {
# (26) don't build with exceptions, which gives a completely ABI-compatible build
patchfiles-append disable-exceptions.patch
configure.args-append -no-exceptions
}
and an additional patch in the post-destroot that removes an inappropriate section from QtCore/qconfig.h :
post-destroot {
...
if {[variant_isset noexceptions ]} {
# building with -no-exceptions will add a section to QtCore/qconfig.h that has to be removed
# given that we did NOT build QtCore WITHOUT exceptions...
exec patch -d ${destroot}${qt_frameworks_dir} -Np0 -i ${filespath}/qconfig-remove-EXCEPTIONS.diff
}
...
}
Attachments (2)
Change History (3)
Changed 11 years ago by RJVB (René Bertin)
| Attachment: | disable-exceptions.patch added |
|---|
Changed 11 years ago by RJVB (René Bertin)
| Attachment: | qconfig-remove-EXCEPTIONS.diff added |
|---|
comment:1 Changed 11 years ago by mkae (Marko Käning)
| Cc: | mk@… added |
|---|

Cc Me!