The automatic builds here on launchpad fail because of the 'override' introduced in r6838.
From the buildlog [1]:
[ 70%] Building CXX object src/CMakeFiles/widelands_all.dir/io/dedicated_log.cc.o
cd /build/buildd/widelands-17-ppa0-bzr6842/build-debian/src && /usr/bin/c++ -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -std=c++0x -g -O3 -DNDEBUG -Wall -Wextra -Wformat -Wformat-nonliteral -Wformat-security -Wformat-y2k -Winit-self -Winvalid-pch -Wmissing-include-dirs -Woverlength-strings -Wpacked -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-promo -Wswitch-default -Wundef -Wunused -Wunused-macros -Wlogical-op -Wsync-nand -Wtrampolines -I/build/buildd/widelands-17-ppa0-bzr6842/src -I/build/buildd/widelands-17-ppa0-bzr6842/build-debian/src -I/usr/include/SDL -o CMakeFiles/widelands_all.dir/io/dedicated_log.cc.o -c /build/buildd/widelands-17-ppa0-bzr6842/src/io/dedicated_log.cc
In file included from /build/buildd/widelands-17-ppa0-bzr6842/src/io/dedicated_log.h:24:0,
from /build/buildd/widelands-17-ppa0-bzr6842/src/io/dedicated_log.cc:20:
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:37:33: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:37:35: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:39:28: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:39:34: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:41:51: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:41:53: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:42:51: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:42:53: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:43:64: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:43:66: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:44:64: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:44:66: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:46:64: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:46:66: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:48:59: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:48:61: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:52:81: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:52:83: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:55:65: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:55:67: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:56:65: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:56:67: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:58:68: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:58:70: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:59:76: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:59:78: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:60:46: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:60:48: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:61:80: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:61:82: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:63:34: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:63:36: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:64:39: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/disk_filesystem.h:64:41: error: 'override' does not name a type
In file included from /build/buildd/widelands-17-ppa0-bzr6842/src/io/dedicated_log.cc:25:0:
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:58:33: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:58:35: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:60:28: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:60:34: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:61:61: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:61:63: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:62:61: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:62:63: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:63:64: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:63:66: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:64:64: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:64:66: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:66:64: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:66:66: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:68:59: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:68:61: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:70:64: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:70:66: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:72:65: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:72:67: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:73:65: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:73:67: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:75:68: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:75:70: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:76:76: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:76:78: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:77:46: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:77:48: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:78:62: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:78:64: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:80:34: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:80:36: error: 'override' does not name a type
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:87:39: error: expected ';' at end of member declaration
/build/buildd/widelands-17-ppa0-bzr6842/src/io/filesystem/layered_filesystem.h:87:41: error: 'override' does not name a type
make[4]: *** [src/CMakeFiles/widelands_all.dir/io/dedicated_log.cc.o] Error 1
The problem is that the c++0x standard is used instead of c++11. Additionally override requires GCC 4.7. Currently GCC 4.6 is used to build Widelands on launchpad. Can we change this?
[1] https://launchpadlibrarian.net/167523351/buildlog_ubuntu-precise-i386.widelands_1%3A17-ppa0-bzr6842-201402250610~ubuntu12.04.1_FAILEDTOBUILD.txt.gz
Fwiw, this is only affecting builds on 12.04, not newer releases.
We've discussed this a bit on irc, and tried a few various workarounds. We tried to force the PPA to depend on a
newer version of gcc, but since 4.6 is the latest available that didn't get us very far.
We *could* potentially set our PPA to depend on another PPA which offers backported build toolchains. That would probably fix the problem, though some of use are hesitant to add another PPA as a dependency. 1.) It's not from the offical repository, and it's an additional dependency which might break/be unstable. 2.) To me (personally) it defeats the purpose a bit; because the goal should be to see whether it is buildable/runnable on these systems out of the box. Once we start importing software from other sources we can no longer say whether this is true or not.
I guess what we are really discussing here is the end-goal. For a quite a long time wl could build and run on nearly anything. Which is really nice because it means anyone can pick it up and play it. We started moving towards stricter c++11 syntax though (which probably is a good thing in the long run, but cause a problem for older compilers).
So, we have another obvious alternative, which I have to admit I didn't like at first, which is to stop building for 12.04 (gcc4.6). I have the impression users wishing to run the latest/development versions will already have upgraded to a newer release while most LTS users prefer stable, tested software. Build18 is just out and I will push that to our PPA as soon as I have synced/verified the latest packaging changes, so 12.04 users will have the latest stable release available.
When it comes to build19, the good news is that a new LTS is just around the corner (due to be released in April). It is reasonable to assume this will have been out for a while once we release build19, so most people running 12.04 today will have upgraded and be able to run the new release. I therefore wonder if spending time and effort to keep the development release running on 12.04 might be wasted effort if the majority of users will anyways have upgraded to a newer system when the official release is published.
That's some thoughts from me at least, and I'd like to hear others input on this too.