[Easysoap-developers] [PATCH] gcc34 build and correctness fixes
Status: Beta
Brought to you by:
dcrowley
From: Terrence C. <ter...@tr...> - 2006-05-20 21:44:05
|
I have identified the build problems on gcc 3.4(.5). In 00_gcc34-compat.patch: 1) gcc34 now requires the "typename" identifier to identify types declared behind a class: e.g. DispatchMap::Iterator. For some of these instances, the code was already folded in MEMBER_TYPE() to append the "typename" automatically. I have added MEMBER_TYPE to the other instances where it was not applied already. 2) gcc34 is stricter about pointer casting semantics. In XMLParser.cpp, I have added "reinterpret_cast" to the offending implicit casts. 3) gcc34 requires explicit template notification for specializations. This does not fix all the problems with gcc34. Unfortunately, the AC_CXX_TEMPLATE_KEYWORD_QUALIFIER macro (which sets MEMBER_TYPE) appears to be broken on gcc34. You can work around this with a manual override by running configure with CXXFLAGS set to "-DHAVE_TEMPLATE_KEYWORD_QUALIFIER". Someone more expert with autotools could probably solve this more elegantly. This changes will build everything not in the test directory on gcc34. In tests/interopclient.cpp, there are some quirks with the initialization and usage of SOAPHex and SOAPHexBase. Allowing the use of the automatic copy and assign constructor gets rid of the problem. I have included this as a separate patch (01_gcc34-compat.patch) because I don't think this is necessarily the right way to solve the problem. If you are using gcc34 and absolutely need tests/interopclient to build, you can apply this patch and it will "work". This patch is taken against the 0.6.1 distribution tarball. In retrospect, I should have taken it against CVS. I would be happy to recreate this patch against CVS if these do not apply correctly there. Thanks for the awesome SOAP library! -Terrence |