On Wed, 24 Jan 2018, Dave Plater wrote:
On 24/01/2018 10:26, Richard Biener wrote:
I can't see how anything sane would prevent using a newer compiler for any of the above packages. The compilers generate ABI compatible code after all, so unless audacity and friends do sth very stupid there shouldn't be an issue with building one of them with a newer compiler.
Richard. wxWidgets is very sensitive see: http://bugzilla.suse.com/show_bug.cgi?id=1074040 https://bugzilla.opensuse.org/show_bug.cgi?id=1051717 https://bugzilla.suse.com/show_bug.cgi?id=1030196 It's a pity I didn't choose gcc7 then but audacity appears to be very popular in our distribution.
Error message from console reads thus: audacity Fatal Error: Mismatch between the program and library build versions detected. The library used 3.0 (wchar_t,compiler with C++ ABI 1002,wx containers,compatible with 2.8), and your program used 3.0 (wchar_t,compiler with C++ ABI 1009,wx containers,compatible with 2.8). this seems to be a premature check done by wxWidgets / audacity? They appear to key on __GXX_ABI_VERSION but almost _nothing_ changes when this version changes. It's really only for corner cases like fixing mangling with vectors and attributes. For packages you could also simply downgrade the ABI version via -fabi-version=N (but then you'd have to have a way to communicate the ABI version chosen to compile wxWidgets to wxWidget users). There is also the corresponding -Wabi=N so you can instead do -Wabi=N (ABI version used to compile wxWidget). Can you somehow disable this checking for wxWidgets? It seems _really_ odd they invented this. Googling reveals the current upstream version has // GCC and Intel C++ share same C++ ABI (and possibly others in the future), // check if compiler versions are compatible: #if defined(__GXX_ABI_VERSION) // The changes between ABI versions 1002 through 1010 (documented at // https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html // under -fabi-version) don't affect wxWidgets, so we allow a library // and an application to differ within that range. #if ((__GXX_ABI_VERSION >= 1002) && (__GXX_ABI_VERSION <= 1010)) #define wxGXX_EFFECTIVE_ABI_VERSION 1002 #else #define wxGXX_EFFECTIVE_ABI_VERSION __GXX_ABI_VERSION #endif so wouldn't have complained like in bnc#1074040. GCC 7 introduces version 11 which I bet also doesn't affect wxWidgets... quoting the docs: Version 11, which first appeared in G++ 7, corrects the mangling of sizeof... expressions and operator names. For multiple entities with the same name within a function, that are declared in different scopes, the mangling now changes starting with the twelfth occurrence. It also implies @option{-fnew-inheriting-ctors}. Just patch this insanity out ... Richard.
Another question, logic dictates that a package has to actually build with -fstack-clash-protection to benefit from it? Doesn't this mean that all 42.3 packages need to rebuild? BTW packman does connect to 42.3:Update, audacity fails to build there. Dave
--
Richard Biener